face-api/dist/tfjs.esm.js

4888 lines
1.1 MiB

/*
Face-API
homepage: <https://github.com/vladmandic/face-api>
author: <https://github.com/vladmandic>'
*/
var wU=Object.create;var jv=Object.defineProperty;var CU=Object.getOwnPropertyDescriptor;var IU=Object.getOwnPropertyNames;var vU=Object.getPrototypeOf,SU=Object.prototype.hasOwnProperty;var $g=(r=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(r,{get:(t,e)=>(typeof require!="undefined"?require:t)[e]}):r)(function(r){if(typeof require!="undefined")return require.apply(this,arguments);throw new Error('Dynamic require of "'+r+'" is not supported')});var dr=(r,t)=>()=>(t||r((t={exports:{}}).exports,t),t.exports),Gt=(r,t)=>{for(var e in t)jv(r,e,{get:t[e],enumerable:!0})},NU=(r,t,e,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of IU(t))!SU.call(r,o)&&o!==e&&jv(r,o,{get:()=>t[o],enumerable:!(n=CU(t,o))||n.enumerable});return r};var Sl=(r,t,e)=>(e=r!=null?wU(vU(r)):{},NU(t||!r||!r.__esModule?jv(e,"default",{value:r,enumerable:!0}):e,r));var C1=dr((flt,w1)=>{w1.exports=We;var co=null;try{co=new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0,97,115,109,1,0,0,0,1,13,2,96,0,1,127,96,4,127,127,127,127,1,127,3,7,6,0,1,1,1,1,1,6,6,1,127,1,65,0,11,7,50,6,3,109,117,108,0,1,5,100,105,118,95,115,0,2,5,100,105,118,95,117,0,3,5,114,101,109,95,115,0,4,5,114,101,109,95,117,0,5,8,103,101,116,95,104,105,103,104,0,0,10,191,1,6,4,0,35,0,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,126,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,127,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,128,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,129,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,130,34,4,66,32,135,167,36,0,32,4,167,11])),{}).exports}catch(r){}function We(r,t,e){this.low=r|0,this.high=t|0,this.unsigned=!!e}We.prototype.__isLong__;Object.defineProperty(We.prototype,"__isLong__",{value:!0});function Dn(r){return(r&&r.__isLong__)===!0}We.isLong=Dn;var p1={},m1={};function Mu(r,t){var e,n,o;return t?(r>>>=0,(o=0<=r&&r<256)&&(n=m1[r],n)?n:(e=Ue(r,(r|0)<0?-1:0,!0),o&&(m1[r]=e),e)):(r|=0,(o=-128<=r&&r<128)&&(n=p1[r],n)?n:(e=Ue(r,r<0?-1:0,!1),o&&(p1[r]=e),e))}We.fromInt=Mu;function po(r,t){if(isNaN(r))return t?Lu:mo;if(t){if(r<0)return Lu;if(r>=g1)return b1}else{if(r<=-d1)return $n;if(r+1>=d1)return y1}return r<0?po(-r,t).neg():Ue(r%Bp|0,r/Bp|0,t)}We.fromNumber=po;function Ue(r,t,e){return new We(r,t,e)}We.fromBits=Ue;var Og=Math.pow;function aS(r,t,e){if(r.length===0)throw Error("empty string");if(r==="NaN"||r==="Infinity"||r==="+Infinity"||r==="-Infinity")return mo;if(typeof t=="number"?(e=t,t=!1):t=!!t,e=e||10,e<2||36<e)throw RangeError("radix");var n;if((n=r.indexOf("-"))>0)throw Error("interior hyphen");if(n===0)return aS(r.substring(1),t,e).neg();for(var o=po(Og(e,8)),s=mo,i=0;i<r.length;i+=8){var a=Math.min(8,r.length-i),u=parseInt(r.substring(i,i+a),e);if(a<8){var l=po(Og(e,a));s=s.mul(l).add(po(u))}else s=s.mul(o),s=s.add(po(u))}return s.unsigned=t,s}We.fromString=aS;function Ps(r,t){return typeof r=="number"?po(r,t):typeof r=="string"?aS(r,t):Ue(r.low,r.high,typeof t=="boolean"?t:r.unsigned)}We.fromValue=Ps;var f1=1<<16,KU=1<<24,Bp=f1*f1,g1=Bp*Bp,d1=g1/2,h1=Mu(KU),mo=Mu(0);We.ZERO=mo;var Lu=Mu(0,!0);We.UZERO=Lu;var zp=Mu(1);We.ONE=zp;var x1=Mu(1,!0);We.UONE=x1;var iS=Mu(-1);We.NEG_ONE=iS;var y1=Ue(-1,2147483647,!1);We.MAX_VALUE=y1;var b1=Ue(-1,-1,!0);We.MAX_UNSIGNED_VALUE=b1;var $n=Ue(0,-2147483648,!1);We.MIN_VALUE=$n;var gt=We.prototype;gt.toInt=function(){return this.unsigned?this.low>>>0:this.low};gt.toNumber=function(){return this.unsigned?(this.high>>>0)*Bp+(this.low>>>0):this.high*Bp+(this.low>>>0)};gt.toString=function(t){if(t=t||10,t<2||36<t)throw RangeError("radix");if(this.isZero())return"0";if(this.isNegative())if(this.eq($n)){var e=po(t),n=this.div(e),o=n.mul(e).sub(this);return n.toString(t)+o.toInt().toString(t)}else return"-"+this.neg().toString(t);for(var s=po(Og(t,6),this.unsigned),i=this,a="";;){var u=i.div(s),l=i.sub(u.mul(s)).toInt()>>>0,c=l.toString(t);if(i=u,i.isZero())return c+a;for(;c.length<6;)c="0"+c;a=""+c+a}};gt.getHighBits=function(){return this.high};gt.getHighBitsUnsigned=function(){return this.high>>>0};gt.getLowBits=function(){return this.low};gt.getLowBitsUnsigned=function(){return this.low>>>0};gt.getNumBitsAbs=function(){if(this.isNegative())return this.eq($n)?64:this.neg().getNumBitsAbs();for(var t=this.high!=0?this.high:this.low,e=31;e>0&&(t&1<<e)==0;e--);return this.high!=0?e+33:e+1};gt.isZero=function(){return this.high===0&&this.low===0};gt.eqz=gt.isZero;gt.isNegative=function(){return!this.unsigned&&this.high<0};gt.isPositive=function(){return this.unsigned||this.high>=0};gt.isOdd=function(){return(this.low&1)===1};gt.isEven=function(){return(this.low&1)===0};gt.equals=function(t){return Dn(t)||(t=Ps(t)),this.unsigned!==t.unsigned&&this.high>>>31===1&&t.high>>>31===1?!1:this.high===t.high&&this.low===t.low};gt.eq=gt.equals;gt.notEquals=function(t){return!this.eq(t)};gt.neq=gt.notEquals;gt.ne=gt.notEquals;gt.lessThan=function(t){return this.comp(t)<0};gt.lt=gt.lessThan;gt.lessThanOrEqual=function(t){return this.comp(t)<=0};gt.lte=gt.lessThanOrEqual;gt.le=gt.lessThanOrEqual;gt.greaterThan=function(t){return this.comp(t)>0};gt.gt=gt.greaterThan;gt.greaterThanOrEqual=function(t){return this.comp(t)>=0};gt.gte=gt.greaterThanOrEqual;gt.ge=gt.greaterThanOrEqual;gt.compare=function(t){if(Dn(t)||(t=Ps(t)),this.eq(t))return 0;var e=this.isNegative(),n=t.isNegative();return e&&!n?-1:!e&&n?1:this.unsigned?t.high>>>0>this.high>>>0||t.high===this.high&&t.low>>>0>this.low>>>0?-1:1:this.sub(t).isNegative()?-1:1};gt.comp=gt.compare;gt.negate=function(){return!this.unsigned&&this.eq($n)?$n:this.not().add(zp)};gt.neg=gt.negate;gt.add=function(t){Dn(t)||(t=Ps(t));var e=this.high>>>16,n=this.high&65535,o=this.low>>>16,s=this.low&65535,i=t.high>>>16,a=t.high&65535,u=t.low>>>16,l=t.low&65535,c=0,p=0,m=0,f=0;return f+=s+l,m+=f>>>16,f&=65535,m+=o+u,p+=m>>>16,m&=65535,p+=n+a,c+=p>>>16,p&=65535,c+=e+i,c&=65535,Ue(m<<16|f,c<<16|p,this.unsigned)};gt.subtract=function(t){return Dn(t)||(t=Ps(t)),this.add(t.neg())};gt.sub=gt.subtract;gt.multiply=function(t){if(this.isZero())return mo;if(Dn(t)||(t=Ps(t)),co){var e=co.mul(this.low,this.high,t.low,t.high);return Ue(e,co.get_high(),this.unsigned)}if(t.isZero())return mo;if(this.eq($n))return t.isOdd()?$n:mo;if(t.eq($n))return this.isOdd()?$n:mo;if(this.isNegative())return t.isNegative()?this.neg().mul(t.neg()):this.neg().mul(t).neg();if(t.isNegative())return this.mul(t.neg()).neg();if(this.lt(h1)&&t.lt(h1))return po(this.toNumber()*t.toNumber(),this.unsigned);var n=this.high>>>16,o=this.high&65535,s=this.low>>>16,i=this.low&65535,a=t.high>>>16,u=t.high&65535,l=t.low>>>16,c=t.low&65535,p=0,m=0,f=0,d=0;return d+=i*c,f+=d>>>16,d&=65535,f+=s*c,m+=f>>>16,f&=65535,f+=i*l,m+=f>>>16,f&=65535,m+=o*c,p+=m>>>16,m&=65535,m+=s*l,p+=m>>>16,m&=65535,m+=i*u,p+=m>>>16,m&=65535,p+=n*c+o*l+s*u+i*a,p&=65535,Ue(f<<16|d,p<<16|m,this.unsigned)};gt.mul=gt.multiply;gt.divide=function(t){if(Dn(t)||(t=Ps(t)),t.isZero())throw Error("division by zero");if(co){if(!this.unsigned&&this.high===-2147483648&&t.low===-1&&t.high===-1)return this;var e=(this.unsigned?co.div_u:co.div_s)(this.low,this.high,t.low,t.high);return Ue(e,co.get_high(),this.unsigned)}if(this.isZero())return this.unsigned?Lu:mo;var n,o,s;if(this.unsigned){if(t.unsigned||(t=t.toUnsigned()),t.gt(this))return Lu;if(t.gt(this.shru(1)))return x1;s=Lu}else{if(this.eq($n)){if(t.eq(zp)||t.eq(iS))return $n;if(t.eq($n))return zp;var i=this.shr(1);return n=i.div(t).shl(1),n.eq(mo)?t.isNegative()?zp:iS:(o=this.sub(t.mul(n)),s=n.add(o.div(t)),s)}else if(t.eq($n))return this.unsigned?Lu:mo;if(this.isNegative())return t.isNegative()?this.neg().div(t.neg()):this.neg().div(t).neg();if(t.isNegative())return this.div(t.neg()).neg();s=mo}for(o=this;o.gte(t);){n=Math.max(1,Math.floor(o.toNumber()/t.toNumber()));for(var a=Math.ceil(Math.log(n)/Math.LN2),u=a<=48?1:Og(2,a-48),l=po(n),c=l.mul(t);c.isNegative()||c.gt(o);)n-=u,l=po(n,this.unsigned),c=l.mul(t);l.isZero()&&(l=zp),s=s.add(l),o=o.sub(c)}return s};gt.div=gt.divide;gt.modulo=function(t){if(Dn(t)||(t=Ps(t)),co){var e=(this.unsigned?co.rem_u:co.rem_s)(this.low,this.high,t.low,t.high);return Ue(e,co.get_high(),this.unsigned)}return this.sub(this.div(t).mul(t))};gt.mod=gt.modulo;gt.rem=gt.modulo;gt.not=function(){return Ue(~this.low,~this.high,this.unsigned)};gt.and=function(t){return Dn(t)||(t=Ps(t)),Ue(this.low&t.low,this.high&t.high,this.unsigned)};gt.or=function(t){return Dn(t)||(t=Ps(t)),Ue(this.low|t.low,this.high|t.high,this.unsigned)};gt.xor=function(t){return Dn(t)||(t=Ps(t)),Ue(this.low^t.low,this.high^t.high,this.unsigned)};gt.shiftLeft=function(t){return Dn(t)&&(t=t.toInt()),(t&=63)===0?this:t<32?Ue(this.low<<t,this.high<<t|this.low>>>32-t,this.unsigned):Ue(0,this.low<<t-32,this.unsigned)};gt.shl=gt.shiftLeft;gt.shiftRight=function(t){return Dn(t)&&(t=t.toInt()),(t&=63)===0?this:t<32?Ue(this.low>>>t|this.high<<32-t,this.high>>t,this.unsigned):Ue(this.high>>t-32,this.high>=0?0:-1,this.unsigned)};gt.shr=gt.shiftRight;gt.shiftRightUnsigned=function(t){if(Dn(t)&&(t=t.toInt()),t&=63,t===0)return this;var e=this.high;if(t<32){var n=this.low;return Ue(n>>>t|e<<32-t,e>>>t,this.unsigned)}else return t===32?Ue(e,0,this.unsigned):Ue(e>>>t-32,0,this.unsigned)};gt.shru=gt.shiftRightUnsigned;gt.shr_u=gt.shiftRightUnsigned;gt.toSigned=function(){return this.unsigned?Ue(this.low,this.high,!1):this};gt.toUnsigned=function(){return this.unsigned?this:Ue(this.low,this.high,!0)};gt.toBytes=function(t){return t?this.toBytesLE():this.toBytesBE()};gt.toBytesLE=function(){var t=this.high,e=this.low;return[e&255,e>>>8&255,e>>>16&255,e>>>24,t&255,t>>>8&255,t>>>16&255,t>>>24]};gt.toBytesBE=function(){var t=this.high,e=this.low;return[t>>>24,t>>>16&255,t>>>8&255,t&255,e>>>24,e>>>16&255,e>>>8&255,e&255]};We.fromBytes=function(t,e,n){return n?We.fromBytesLE(t,e):We.fromBytesBE(t,e)};We.fromBytesLE=function(t,e){return new We(t[0]|t[1]<<8|t[2]<<16|t[3]<<24,t[4]|t[5]<<8|t[6]<<16|t[7]<<24,e)};We.fromBytesBE=function(t,e){return new We(t[4]<<24|t[5]<<16|t[6]<<8|t[7],t[0]<<24|t[1]<<16|t[2]<<8|t[3],e)}});var eE=dr(()=>{});var rE=dr(()=>{});var o_=dr((n_,ZS)=>{(function(r,t,e){function n(a){var u=this,l=i();u.next=function(){var c=2091639*u.s0+u.c*23283064365386963e-26;return u.s0=u.s1,u.s1=u.s2,u.s2=c-(u.c=c|0)},u.c=1,u.s0=l(" "),u.s1=l(" "),u.s2=l(" "),u.s0-=l(a),u.s0<0&&(u.s0+=1),u.s1-=l(a),u.s1<0&&(u.s1+=1),u.s2-=l(a),u.s2<0&&(u.s2+=1),l=null}function o(a,u){return u.c=a.c,u.s0=a.s0,u.s1=a.s1,u.s2=a.s2,u}function s(a,u){var l=new n(a),c=u&&u.state,p=l.next;return p.int32=function(){return l.next()*4294967296|0},p.double=function(){return p()+(p()*2097152|0)*11102230246251565e-32},p.quick=p,c&&(typeof c=="object"&&o(c,l),p.state=function(){return o(l,{})}),p}function i(){var a=4022871197,u=function(l){l=String(l);for(var c=0;c<l.length;c++){a+=l.charCodeAt(c);var p=.02519603282416938*a;a=p>>>0,p-=a,p*=a,a=p>>>0,p-=a,a+=p*4294967296}return(a>>>0)*23283064365386963e-26};return u}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.alea=s})(n_,typeof ZS=="object"&&ZS,typeof define=="function"&&define)});var i_=dr((s_,JS)=>{(function(r,t,e){function n(i){var a=this,u="";a.x=0,a.y=0,a.z=0,a.w=0,a.next=function(){var c=a.x^a.x<<11;return a.x=a.y,a.y=a.z,a.z=a.w,a.w^=a.w>>>19^c^c>>>8},i===(i|0)?a.x=i:u+=i;for(var l=0;l<u.length+64;l++)a.x^=u.charCodeAt(l)|0,a.next()}function o(i,a){return a.x=i.x,a.y=i.y,a.z=i.z,a.w=i.w,a}function s(i,a){var u=new n(i),l=a&&a.state,c=function(){return(u.next()>>>0)/4294967296};return c.double=function(){do var p=u.next()>>>11,m=(u.next()>>>0)/4294967296,f=(p+m)/(1<<21);while(f===0);return f},c.int32=u.next,c.quick=c,l&&(typeof l=="object"&&o(l,u),c.state=function(){return o(u,{})}),c}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.xor128=s})(s_,typeof JS=="object"&&JS,typeof define=="function"&&define)});var l_=dr((a_,QS)=>{(function(r,t,e){function n(i){var a=this,u="";a.next=function(){var c=a.x^a.x>>>2;return a.x=a.y,a.y=a.z,a.z=a.w,a.w=a.v,(a.d=a.d+362437|0)+(a.v=a.v^a.v<<4^(c^c<<1))|0},a.x=0,a.y=0,a.z=0,a.w=0,a.v=0,i===(i|0)?a.x=i:u+=i;for(var l=0;l<u.length+64;l++)a.x^=u.charCodeAt(l)|0,l==u.length&&(a.d=a.x<<10^a.x>>>4),a.next()}function o(i,a){return a.x=i.x,a.y=i.y,a.z=i.z,a.w=i.w,a.v=i.v,a.d=i.d,a}function s(i,a){var u=new n(i),l=a&&a.state,c=function(){return(u.next()>>>0)/4294967296};return c.double=function(){do var p=u.next()>>>11,m=(u.next()>>>0)/4294967296,f=(p+m)/(1<<21);while(f===0);return f},c.int32=u.next,c.quick=c,l&&(typeof l=="object"&&o(l,u),c.state=function(){return o(u,{})}),c}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.xorwow=s})(a_,typeof QS=="object"&&QS,typeof define=="function"&&define)});var c_=dr((u_,t0)=>{(function(r,t,e){function n(i){var a=this;a.next=function(){var l=a.x,c=a.i,p,m,f;return p=l[c],p^=p>>>7,m=p^p<<24,p=l[c+1&7],m^=p^p>>>10,p=l[c+3&7],m^=p^p>>>3,p=l[c+4&7],m^=p^p<<7,p=l[c+7&7],p=p^p<<13,m^=p^p<<9,l[c]=m,a.i=c+1&7,m};function u(l,c){var p,m,f=[];if(c===(c|0))m=f[0]=c;else for(c=""+c,p=0;p<c.length;++p)f[p&7]=f[p&7]<<15^c.charCodeAt(p)+f[p+1&7]<<13;for(;f.length<8;)f.push(0);for(p=0;p<8&&f[p]===0;++p);for(p==8?m=f[7]=-1:m=f[p],l.x=f,l.i=0,p=256;p>0;--p)l.next()}u(a,i)}function o(i,a){return a.x=i.x.slice(),a.i=i.i,a}function s(i,a){i==null&&(i=+new Date);var u=new n(i),l=a&&a.state,c=function(){return(u.next()>>>0)/4294967296};return c.double=function(){do var p=u.next()>>>11,m=(u.next()>>>0)/4294967296,f=(p+m)/(1<<21);while(f===0);return f},c.int32=u.next,c.quick=c,l&&(l.x&&o(l,u),c.state=function(){return o(u,{})}),c}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.xorshift7=s})(u_,typeof t0=="object"&&t0,typeof define=="function"&&define)});var m_=dr((p_,e0)=>{(function(r,t,e){function n(i){var a=this;a.next=function(){var l=a.w,c=a.X,p=a.i,m,f;return a.w=l=l+1640531527|0,f=c[p+34&127],m=c[p=p+1&127],f^=f<<13,m^=m<<17,f^=f>>>15,m^=m>>>12,f=c[p]=f^m,a.i=p,f+(l^l>>>16)|0};function u(l,c){var p,m,f,d,h,g=[],x=128;for(c===(c|0)?(m=c,c=null):(c=c+"\0",m=0,x=Math.max(x,c.length)),f=0,d=-32;d<x;++d)c&&(m^=c.charCodeAt((d+32)%c.length)),d===0&&(h=m),m^=m<<10,m^=m>>>15,m^=m<<4,m^=m>>>13,d>=0&&(h=h+1640531527|0,p=g[d&127]^=m+h,f=p==0?f+1:0);for(f>=128&&(g[(c&&c.length||0)&127]=-1),f=127,d=4*128;d>0;--d)m=g[f+34&127],p=g[f=f+1&127],m^=m<<13,p^=p<<17,m^=m>>>15,p^=p>>>12,g[f]=m^p;l.w=h,l.X=g,l.i=f}u(a,i)}function o(i,a){return a.i=i.i,a.w=i.w,a.X=i.X.slice(),a}function s(i,a){i==null&&(i=+new Date);var u=new n(i),l=a&&a.state,c=function(){return(u.next()>>>0)/4294967296};return c.double=function(){do var p=u.next()>>>11,m=(u.next()>>>0)/4294967296,f=(p+m)/(1<<21);while(f===0);return f},c.int32=u.next,c.quick=c,l&&(l.X&&o(l,u),c.state=function(){return o(u,{})}),c}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.xor4096=s})(p_,typeof e0=="object"&&e0,typeof define=="function"&&define)});var d_=dr((f_,r0)=>{(function(r,t,e){function n(i){var a=this,u="";a.next=function(){var c=a.b,p=a.c,m=a.d,f=a.a;return c=c<<25^c>>>7^p,p=p-m|0,m=m<<24^m>>>8^f,f=f-c|0,a.b=c=c<<20^c>>>12^p,a.c=p=p-m|0,a.d=m<<16^p>>>16^f,a.a=f-c|0},a.a=0,a.b=0,a.c=-1640531527,a.d=1367130551,i===Math.floor(i)?(a.a=i/4294967296|0,a.b=i|0):u+=i;for(var l=0;l<u.length+20;l++)a.b^=u.charCodeAt(l)|0,a.next()}function o(i,a){return a.a=i.a,a.b=i.b,a.c=i.c,a.d=i.d,a}function s(i,a){var u=new n(i),l=a&&a.state,c=function(){return(u.next()>>>0)/4294967296};return c.double=function(){do var p=u.next()>>>11,m=(u.next()>>>0)/4294967296,f=(p+m)/(1<<21);while(f===0);return f},c.int32=u.next,c.quick=c,l&&(typeof l=="object"&&o(l,u),c.state=function(){return o(u,{})}),c}t&&t.exports?t.exports=s:e&&e.amd?e(function(){return s}):this.tychei=s})(f_,typeof r0=="object"&&r0,typeof define=="function"&&define)});var h_=dr(()=>{});var x_=dr((g_,Hx)=>{(function(r,t,e){var n=256,o=6,s=52,i="random",a=e.pow(n,o),u=e.pow(2,s),l=u*2,c=n-1,p;function m(w,C,N){var _=[];C=C==!0?{entropy:!0}:C||{};var A=g(h(C.entropy?[w,b(t)]:w==null?x():w,3),_),$=new f(_),F=function(){for(var P=$.g(o),V=a,G=0;P<u;)P=(P+G)*n,V*=n,G=$.g(1);for(;P>=l;)P/=2,V/=2,G>>>=1;return(P+G)/V};return F.int32=function(){return $.g(4)|0},F.quick=function(){return $.g(4)/4294967296},F.double=F,g(b($.S),t),(C.pass||N||function(P,V,G,W){return W&&(W.S&&d(W,$),P.state=function(){return d($,{})}),G?(e[i]=P,V):P})(F,A,"global"in C?C.global:this==e,C.state)}function f(w){var C,N=w.length,_=this,A=0,$=_.i=_.j=0,F=_.S=[];for(N||(w=[N++]);A<n;)F[A]=A++;for(A=0;A<n;A++)F[A]=F[$=c&$+w[A%N]+(C=F[A])],F[$]=C;(_.g=function(P){for(var V,G=0,W=_.i,q=_.j,H=_.S;P--;)V=H[W=c&W+1],G=G*n+H[c&(H[W]=H[q=c&q+V])+(H[q]=V)];return _.i=W,_.j=q,G})(n)}function d(w,C){return C.i=w.i,C.j=w.j,C.S=w.S.slice(),C}function h(w,C){var N=[],_=typeof w,A;if(C&&_=="object")for(A in w)try{N.push(h(w[A],C-1))}catch($){}return N.length?N:_=="string"?w:w+"\0"}function g(w,C){for(var N=w+"",_,A=0;A<N.length;)C[c&A]=c&(_^=C[c&A]*19)+N.charCodeAt(A++);return b(C)}function x(){try{var w;return p&&(w=p.randomBytes)?w=w(n):(w=new Uint8Array(n),(r.crypto||r.msCrypto).getRandomValues(w)),b(w)}catch(_){var C=r.navigator,N=C&&C.plugins;return[+new Date,r,N,r.screen,b(t)]}}function b(w){return String.fromCharCode.apply(0,w)}if(g(e.random(),t),typeof Hx=="object"&&Hx.exports){Hx.exports=m;try{p=h_()}catch(w){}}else typeof define=="function"&&define.amd?define(function(){return m}):e["seed"+i]=m})(typeof self!="undefined"?self:g_,[],Math)});var lh=dr((K0t,y_)=>{var XK=o_(),YK=i_(),ZK=l_(),JK=c_(),QK=m_(),tj=d_(),Ju=x_();Ju.alea=XK;Ju.xor128=YK;Ju.xorwow=ZK;Ju.xorshift7=JK;Ju.xor4096=QK;Ju.tychei=tj;y_.exports=Ju});var pN=dr(()=>{});var qb=dr(()=>{});var eg=dr(()=>{});var _W=dr(()=>{});var AW=dr(()=>{});var $W=dr(()=>{});var DW=dr((lI,AT)=>{var _T=(()=>{var r=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!="undefined"&&(r=r||__filename),function(t){t=t||{};function e(){return it.buffer!=Kt&&qe(it.buffer),Te}function n(){return it.buffer!=Kt&&qe(it.buffer),fe}function o(){return it.buffer!=Kt&&qe(it.buffer),Ae}function s(){return it.buffer!=Kt&&qe(it.buffer),En}function i(){return it.buffer!=Kt&&qe(it.buffer),nr}function a(){return it.buffer!=Kt&&qe(it.buffer),Wn}function u(){return it.buffer!=Kt&&qe(it.buffer),Or}var l=typeof t!="undefined"?t:{},c,p;l.ready=new Promise(function(L,U){c=L,p=U});var m;typeof process!="undefined"&&process.listeners&&(m={uncaughtException:process.listeners("uncaughtException"),unhandledRejection:process.listeners("unhandledRejection")});var f=Object.assign({},l),d=[],h="./this.program",g=(L,U)=>{throw U},x=typeof window=="object",b=typeof importScripts=="function",w=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",C=l.ENVIRONMENT_IS_PTHREAD||!1,N="";function _(L){return l.locateFile?l.locateFile(L,N):N+L}var A,$,F,P;function V(L){if(L instanceof Du)return;Y("exiting due to exception: "+L)}if(w){b?N=eg().dirname(N)+"/":N=__dirname+"/";var G,W;typeof $g=="function"&&(G=qb(),W=eg()),A=(U,ut)=>(U=W.normalize(U),G.readFileSync(U,ut?void 0:"utf8")),F=U=>{var ut=A(U,!0);return ut.buffer||(ut=new Uint8Array(ut)),ut},$=(U,ut,xt)=>{U=W.normalize(U),G.readFile(U,function($t,ie){$t?xt($t):ut(ie.buffer)})},process.argv.length>1&&(h=process.argv[1].replace(/\\/g,"/")),d=process.argv.slice(2),process.on("uncaughtException",function(U){if(!(U instanceof Du))throw U}),process.on("unhandledRejection",function(U){throw U}),g=(U,ut)=>{if(Lo())throw process.exitCode=U,ut;V(ut),process.exit(U)},l.inspect=function(){return"[Emscripten Module object]"};let L;try{L=_W()}catch(U){throw console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?'),U}global.Worker=L.Worker}else(x||b)&&(b?N=self.location.href:typeof document!="undefined"&&document.currentScript&&(N=document.currentScript.src),typeof r!="undefined"&&r&&(N=r),N.indexOf("blob:")!==0?N=N.substr(0,N.replace(/[?#].*/,"").lastIndexOf("/")+1):N="",w||(A=L=>{var U=new XMLHttpRequest;return U.open("GET",L,!1),U.send(null),U.responseText},b&&(F=L=>{var U=new XMLHttpRequest;return U.open("GET",L,!1),U.responseType="arraybuffer",U.send(null),new Uint8Array(U.response)}),$=(L,U,ut)=>{var xt=new XMLHttpRequest;xt.open("GET",L,!0),xt.responseType="arraybuffer",xt.onload=()=>{if(xt.status==200||xt.status==0&&xt.response){U(xt.response);return}ut()},xt.onerror=ut,xt.send(null)}),P=L=>document.title=L);w&&typeof performance=="undefined"&&(global.performance=AW().performance);var q=console.log.bind(console),H=console.warn.bind(console);w&&(q=L=>G.writeSync(1,L+`
`),H=L=>G.writeSync(2,L+`
`));var j=l.print||q,Y=l.printErr||H;Object.assign(l,f),f=null,l.arguments&&(d=l.arguments),l.thisProgram&&(h=l.thisProgram),l.quit&&(g=l.quit);var Z=4,et=Atomics.load,rt=Atomics.store,ot=Atomics.compareExchange,at;l.wasmBinary&&(at=l.wasmBinary);var nt=l.noExitRuntime||!0;typeof WebAssembly!="object"&&Yc("no native wasm support detected");var it,dt,ht=!1,bt;function Tt(L,U){L||Yc(U)}var _t=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function Bt(L,U,ut){for(var xt=U+ut,$t=U;L[$t]&&!($t>=xt);)++$t;if($t-U>16&&L.buffer&&_t)return _t.decode(L.buffer instanceof SharedArrayBuffer?L.slice(U,$t):L.subarray(U,$t));for(var ie="";U<$t;){var Vt=L[U++];if(!(Vt&128)){ie+=String.fromCharCode(Vt);continue}var jt=L[U++]&63;if((Vt&224)==192){ie+=String.fromCharCode((Vt&31)<<6|jt);continue}var fr=L[U++]&63;if((Vt&240)==224?Vt=(Vt&15)<<12|jt<<6|fr:Vt=(Vt&7)<<18|jt<<12|fr<<6|L[U++]&63,Vt<65536)ie+=String.fromCharCode(Vt);else{var Kn=Vt-65536;ie+=String.fromCharCode(55296|Kn>>10,56320|Kn&1023)}}return ie}function Yt(L,U){return L?Bt(n(),L,U):""}function ce(L,U,ut,xt){if(!(xt>0))return 0;for(var $t=ut,ie=ut+xt-1,Vt=0;Vt<L.length;++Vt){var jt=L.charCodeAt(Vt);if(jt>=55296&&jt<=57343){var fr=L.charCodeAt(++Vt);jt=65536+((jt&1023)<<10)|fr&1023}if(jt<=127){if(ut>=ie)break;U[ut++]=jt}else if(jt<=2047){if(ut+1>=ie)break;U[ut++]=192|jt>>6,U[ut++]=128|jt&63}else if(jt<=65535){if(ut+2>=ie)break;U[ut++]=224|jt>>12,U[ut++]=128|jt>>6&63,U[ut++]=128|jt&63}else{if(ut+3>=ie)break;U[ut++]=240|jt>>18,U[ut++]=128|jt>>12&63,U[ut++]=128|jt>>6&63,U[ut++]=128|jt&63}}return U[ut]=0,ut-$t}function he(L,U,ut){return ce(L,n(),U,ut)}var Kt,Te,fe,Ae,Ge,En,nr,Wn,Or;C&&(Kt=l.buffer);function qe(L){Kt=L,l.HEAP8=Te=new Int8Array(L),l.HEAP16=Ae=new Int16Array(L),l.HEAP32=En=new Int32Array(L),l.HEAPU8=fe=new Uint8Array(L),l.HEAPU16=Ge=new Uint16Array(L),l.HEAPU32=nr=new Uint32Array(L),l.HEAPF32=Wn=new Float32Array(L),l.HEAPF64=Or=new Float64Array(L)}var Pr=l.INITIAL_MEMORY||16777216;if(C)it=l.wasmMemory,Kt=l.buffer;else if(l.wasmMemory)it=l.wasmMemory;else if(it=new WebAssembly.Memory({initial:Pr/65536,maximum:32768,shared:!0}),!(it.buffer instanceof SharedArrayBuffer))throw Y("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag"),w&&console.log("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and also use a recent version)"),Error("bad memory");it&&(Kt=it.buffer),Pr=Kt.byteLength,qe(Kt);var Lr,Un=[],Hn=[],jr=[],Xi=!1;function Lo(){return nt}function wl(){if(l.preRun)for(typeof l.preRun=="function"&&(l.preRun=[l.preRun]);l.preRun.length;)_d(l.preRun.shift());Fd(Un)}function Nr(){Xi=!0,!C&&Fd(Hn)}function Yi(){if(!C){if(l.postRun)for(typeof l.postRun=="function"&&(l.postRun=[l.postRun]);l.postRun.length;)LT(l.postRun.shift());Fd(jr)}}function _d(L){Un.unshift(L)}function Ad(L){Hn.unshift(L)}function LT(L){jr.unshift(L)}var Cl=0,Xc=null,Zi=null;function MT(L){Cl++,l.monitorRunDependencies&&l.monitorRunDependencies(Cl)}function zT(L){if(Cl--,l.monitorRunDependencies&&l.monitorRunDependencies(Cl),Cl==0&&(Xc!==null&&(clearInterval(Xc),Xc=null),Zi)){var U=Zi;Zi=null,U()}}function Yc(L){C?postMessage({cmd:"onAbort",arg:L}):l.onAbort&&l.onAbort(L),L="Aborted("+L+")",Y(L),ht=!0,bt=1,L+=". Build with -sASSERTIONS for more info.";var U=new WebAssembly.RuntimeError(L);throw p(U),U}var pI="data:application/octet-stream;base64,";function ig(L){return L.startsWith(pI)}function $d(L){return L.startsWith("file://")}var en;en="tfjs-backend-wasm-threaded-simd.wasm",ig(en)||(en=_(en));function ag(L){try{if(L==en&&at)return new Uint8Array(at);if(F)return F(L);throw"both async and sync fetching of the wasm failed"}catch(U){Yc(U)}}function mI(){if(!at&&(x||b)){if(typeof fetch=="function"&&!$d(en))return fetch(en,{credentials:"same-origin"}).then(function(L){if(!L.ok)throw"failed to load wasm binary file at '"+en+"'";return L.arrayBuffer()}).catch(function(){return ag(en)});if($)return new Promise(function(L,U){$(en,function(ut){L(new Uint8Array(ut))},U)})}return Promise.resolve().then(function(){return ag(en)})}function fI(){var L={env:bg,wasi_snapshot_preview1:bg};function U(Vt,jt){var fr=Vt.exports;if(l.asm=fr,vI(l.asm._emscripten_tls_init),Lr=l.asm.__indirect_function_table,Ad(l.asm.__wasm_call_ctors),dt=jt,!C){var Kn=qt.unusedWorkers.length;qt.unusedWorkers.forEach(function(Qi){qt.loadWasmModuleToWorker(Qi,function(){--Kn||zT("wasm-instantiate")})})}}C||MT("wasm-instantiate");function ut(Vt){U(Vt.instance,Vt.module)}function xt(Vt){return mI().then(function(jt){return WebAssembly.instantiate(jt,L)}).then(function(jt){return jt}).then(Vt,function(jt){Y("failed to asynchronously prepare wasm: "+jt),Yc(jt)})}function $t(){return!at&&typeof WebAssembly.instantiateStreaming=="function"&&!ig(en)&&!$d(en)&&!w&&typeof fetch=="function"?fetch(en,{credentials:"same-origin"}).then(function(Vt){var jt=WebAssembly.instantiateStreaming(Vt,L);return jt.then(ut,function(fr){return Y("wasm streaming compile failed: "+fr),Y("falling back to ArrayBuffer instantiation"),xt(ut)})}):xt(ut)}if(l.instantiateWasm)try{var ie=l.instantiateWasm(L,U);return ie}catch(Vt){Y("Module.instantiateWasm callback failed with error: "+Vt),p(Vt)}return $t().catch(p),{}}var dI,BT,hI={};function Du(L){this.name="ExitStatus",this.message="Program terminated with exit("+L+")",this.status=L}function gI(L){var U=qt.pthreads[L];delete qt.pthreads[L],U.terminate(),Hv(L),qt.runningWorkers.splice(qt.runningWorkers.indexOf(U),1),U.pthread_ptr=0}function xI(L){var U=qt.pthreads[L];U.postMessage({cmd:"cancel"})}function Dd(L){var U=qt.pthreads[L];Tt(U),qt.returnWorkerToPool(U)}function lg(L){var U=qt.getNewWorker();if(!U)return 6;qt.runningWorkers.push(U),qt.pthreads[L.pthread_ptr]=U,U.pthread_ptr=L.pthread_ptr;var ut={cmd:"run",start_routine:L.startRoutine,arg:L.arg,pthread_ptr:L.pthread_ptr};return U.runPthread=()=>{ut.time=performance.now(),U.postMessage(ut,L.transferList)},U.loaded&&(U.runPthread(),delete U.runPthread),0}var ug={varargs:void 0,get:function(){ug.varargs+=4;var L=s()[ug.varargs-4>>2];return L},getStr:function(L){var U=Yt(L);return U}};function Rd(L){if(C)return Il(1,1,L);bt=L,Lo()||(qt.terminateAllThreads(),l.onExit&&l.onExit(L),ht=!0),g(L,new Du(L))}function VT(L,U){if(bt=L,!U&&C)throw pg(L),"unwind";Rd(L)}var cg=VT;function yI(L){if(L instanceof Du||L=="unwind")return bt;g(1,L)}var qt={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],pthreads:{},init:function(){C?qt.initWorker():qt.initMainThread()},initMainThread:function(){for(var L=8;L--;)qt.allocateUnusedWorker()},initWorker:function(){nt=!1},setExitStatus:function(L){bt=L},terminateAllThreads:function(){for(var L of Object.values(qt.pthreads))qt.returnWorkerToPool(L);for(var L of qt.unusedWorkers)L.terminate();qt.unusedWorkers=[]},returnWorkerToPool:function(L){var U=L.pthread_ptr;delete qt.pthreads[U],qt.unusedWorkers.push(L),qt.runningWorkers.splice(qt.runningWorkers.indexOf(L),1),L.pthread_ptr=0,Hv(U)},receiveObjectTransfer:function(L){},threadInitTLS:function(){qt.tlsInitFunctions.forEach(L=>L())},loadWasmModuleToWorker:function(L,U){L.onmessage=ut=>{var xt=ut.data,$t=xt.cmd;if(L.pthread_ptr&&(qt.currentProxiedOperationCallerThread=L.pthread_ptr),xt.targetThread&&xt.targetThread!=Ng()){var ie=qt.pthreads[xt.targetThread];ie?ie.postMessage(xt,xt.transferList):Y('Internal error! Worker sent a message "'+$t+'" to target pthread '+xt.targetThread+", but that thread no longer exists!"),qt.currentProxiedOperationCallerThread=void 0;return}$t==="processProxyingQueue"?Od(xt.queue):$t==="spawnThread"?lg(xt):$t==="cleanupThread"?Dd(xt.thread):$t==="killThread"?gI(xt.thread):$t==="cancelThread"?xI(xt.thread):$t==="loaded"?(L.loaded=!0,U&&U(L),L.runPthread&&(L.runPthread(),delete L.runPthread)):$t==="print"?j("Thread "+xt.threadId+": "+xt.text):$t==="printErr"?Y("Thread "+xt.threadId+": "+xt.text):$t==="alert"?alert("Thread "+xt.threadId+": "+xt.text):xt.target==="setimmediate"?L.postMessage(xt):$t==="onAbort"?l.onAbort&&l.onAbort(xt.arg):$t&&Y("worker sent an unknown command "+$t),qt.currentProxiedOperationCallerThread=void 0},L.onerror=ut=>{var xt="worker sent an error!";throw Y(xt+" "+ut.filename+":"+ut.lineno+": "+ut.message),ut},w&&(L.on("message",function(ut){L.onmessage({data:ut})}),L.on("error",function(ut){L.onerror(ut)}),L.on("detachedExit",function(){})),L.postMessage({cmd:"load",urlOrBlob:l.mainScriptUrlOrBlob||r,wasmMemory:it,wasmModule:dt})},allocateUnusedWorker:function(){var L=_("tfjs-backend-wasm-threaded-simd.worker.js");qt.unusedWorkers.push(new Worker(L))},getNewWorker:function(){return qt.unusedWorkers.length==0&&(qt.allocateUnusedWorker(),qt.loadWasmModuleToWorker(qt.unusedWorkers[0])),qt.unusedWorkers.pop()}};l.PThread=qt;function Fd(L){for(;L.length>0;)L.shift()(l)}function bI(L){var U=qv(),ut=L();return kg(U),ut}function GT(L){return L}function WT(L){var U=/\b_Z[\w\d_]+/g;return L.replace(U,function(ut){var xt=ut;return ut===xt?ut:xt+" ["+ut+"]"})}function wI(){var L=Ng(),U=s()[L+44>>2],ut=s()[L+48>>2],xt=U-ut;YT(U,xt),kg(U)}l.establishStackSpace=wI;function pg(L){if(C)return Il(2,0,L);try{cg(L)}catch(U){yI(U)}}var Zc=[];function CI(L){var U=Zc[L];return U||(L>=Zc.length&&(Zc.length=L+1),Zc[L]=U=Lr.get(L)),U}function II(L,U){var ut=CI(L)(U);Lo()?qt.setExitStatus(ut):XT(ut)}l.invokeEntryPoint=II;function UT(){var L=new Error;if(!L.stack){try{throw new Error}catch(U){L=U}if(!L.stack)return"(no stack trace available)"}return L.stack.toString()}function vI(L){qt.tlsInitFunctions.push(L)}function SI(L,U){e().set(L,U)}function NI(L){qT(L,!b,1,!x),qt.threadInitTLS()}function kI(L){C?postMessage({cmd:"cleanupThread",thread:L}):Dd(L)}function mg(L,U,ut,xt){return C?Il(3,1,L,U,ut,xt):fg(L,U,ut,xt)}function fg(L,U,ut,xt){if(typeof SharedArrayBuffer=="undefined")return Y("Current environment does not support SharedArrayBuffer, pthreads are not available!"),6;var $t=[],ie=0;if(C&&($t.length===0||ie))return mg(L,U,ut,xt);if(ie)return ie;var Vt={startRoutine:ut,pthread_ptr:L,arg:xt,transferList:$t};return C?(Vt.cmd="spawnThread",postMessage(Vt,$t),0):lg(Vt)}function TI(){return 2097152}var EI=!0;function _I(){return EI}function Od(L){Atomics.store(s(),L>>2,1),Ng()&&jT(L),Atomics.compareExchange(s(),L>>2,1,0)}l.executeNotifiedProxyingQueue=Od;function AI(L,U,ut,xt){if(L==U)setTimeout(()=>Od(xt));else if(C)postMessage({targetThread:L,cmd:"processProxyingQueue",queue:xt});else{var $t=qt.pthreads[L];if(!$t)return;$t.postMessage({cmd:"processProxyingQueue",queue:xt})}return 1}function $I(L,U,ut){return-1}function DI(){Yc("")}function Ru(L){Ru.shown||(Ru.shown={}),Ru.shown[L]||(Ru.shown[L]=1,w&&(L="warning: "+L),Y(L))}function RI(){w||b||Ru("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread")}function FI(){return Date.now()}function dg(){return 2147483648}function OI(){return dg()}var Jc;w?Jc=()=>{var L=process.hrtime();return L[0]*1e3+L[1]/1e6}:C?Jc=()=>performance.now()-l.__performance_now_clock_drift:Jc=()=>performance.now();function PI(L,U,ut){n().copyWithin(L,U,U+ut)}function LI(){return w?$W().cpus().length:navigator.hardwareConcurrency}function Il(L,U){var ut=arguments.length-2,xt=arguments;return bI(()=>{for(var $t=ut,ie=Tg($t*8),Vt=ie>>3,jt=0;jt<ut;jt++){var fr=xt[2+jt];u()[Vt+jt]=fr}return KT(L,$t,ie,U)})}var Pd=[];function MI(L,U,ut){Pd.length=U;for(var xt=ut>>3,$t=0;$t<U;$t++)Pd[$t]=u()[xt+$t];var ie=L<0,Vt=ie?hI[-L-1]:qI[L];return Vt.apply(null,Pd)}function zI(L){try{return it.grow(L-Kt.byteLength+65535>>>16),qe(it.buffer),1}catch(U){}}function BI(L){var U=n().length;if(L=L>>>0,L<=U)return!1;var ut=dg();if(L>ut)return!1;let xt=(fr,Kn)=>fr+(Kn-fr%Kn)%Kn;for(var $t=1;$t<=4;$t*=2){var ie=U*(1+.2/$t);ie=Math.min(ie,L+100663296);var Vt=Math.min(ut,xt(Math.max(L,ie),65536)),jt=zI(Vt);if(jt)return!0}return!1}function VI(){throw"unwind"}function hg(L){return C?Il(4,1,L):52}function gg(L,U,ut,xt,$t){return C?Il(5,1,L,U,ut,xt,$t):70}var GI=[null,[],[]];function WI(L,U){var ut=GI[L];U===0||U===10?((L===1?j:Y)(Bt(ut,0)),ut.length=0):ut.push(U)}function xg(L,U,ut,xt){if(C)return Il(6,1,L,U,ut,xt);for(var $t=0,ie=0;ie<ut;ie++){var Vt=i()[U>>2],jt=i()[U+4>>2];U+=8;for(var fr=0;fr<jt;fr++)WI(L,n()[Vt+fr]);$t+=jt}return i()[xt>>2]=$t,0}function yg(L){var U=l["_"+L];return U}function UI(L,U,ut,xt,$t){var ie={string:_n=>{var rp=0;if(_n!=null&&_n!==0){var QT=(_n.length<<2)+1;rp=Tg(QT),he(_n,rp,QT)}return rp},array:_n=>{var rp=Tg(_n.length);return SI(_n,rp),rp}};function Vt(_n){return U==="string"?Yt(_n):U==="boolean"?Boolean(_n):_n}var jt=yg(L),fr=[],Kn=0;if(xt)for(var Qi=0;Qi<xt.length;Qi++){var JT=ie[ut[Qi]];JT?(Kn===0&&(Kn=qv()),fr[Qi]=JT(xt[Qi])):fr[Qi]=xt[Qi]}var Kv=jt.apply(null,fr);function bU(_n){return Kn!==0&&kg(Kn),Vt(_n)}return Kv=bU(Kv),Kv}function HI(L,U,ut,xt){ut=ut||[];var $t=ut.every(Vt=>Vt==="number"||Vt==="boolean"),ie=U!=="string";return ie&&$t&&!xt?yg(L):function(){return UI(L,U,ut,arguments,xt)}}qt.init();var qI=[null,Rd,pg,mg,hg,gg,xg],bg={__emscripten_init_main_thread_js:NI,__emscripten_thread_cleanup:kI,__pthread_create_js:fg,_emscripten_default_pthread_stack_size:TI,_emscripten_get_now_is_monotonic:_I,_emscripten_notify_task_queue:AI,_emscripten_set_offscreencanvas_size:$I,abort:DI,emscripten_check_blocking_allowed:RI,emscripten_date_now:FI,emscripten_get_heap_max:OI,emscripten_get_now:Jc,emscripten_memcpy_big:PI,emscripten_num_logical_cores:LI,emscripten_receive_on_main_thread_js:MI,emscripten_resize_heap:BI,emscripten_unwind_to_js_event_loop:VI,exit:cg,fd_close:hg,fd_seek:gg,fd_write:xg,memory:it||l.wasmMemory},HT=fI(),KI=l.___wasm_call_ctors=function(){return(KI=l.___wasm_call_ctors=l.asm.__wasm_call_ctors).apply(null,arguments)},jI=l._init=function(){return(jI=l._init=l.asm.init).apply(null,arguments)},XI=l._init_with_threads_count=function(){return(XI=l._init_with_threads_count=l.asm.init_with_threads_count).apply(null,arguments)},YI=l._get_threads_count=function(){return(YI=l._get_threads_count=l.asm.get_threads_count).apply(null,arguments)},ZI=l._register_tensor=function(){return(ZI=l._register_tensor=l.asm.register_tensor).apply(null,arguments)},JI=l._dispose_data=function(){return(JI=l._dispose_data=l.asm.dispose_data).apply(null,arguments)},QI=l._dispose=function(){return(QI=l._dispose=l.asm.dispose).apply(null,arguments)},tv=l._Abs=function(){return(tv=l._Abs=l.asm.Abs).apply(null,arguments)},ev=l._Add=function(){return(ev=l._Add=l.asm.Add).apply(null,arguments)},rv=l._AddN=function(){return(rv=l._AddN=l.asm.AddN).apply(null,arguments)},nv=l._All=function(){return(nv=l._All=l.asm.All).apply(null,arguments)},ov=l._Any=function(){return(ov=l._Any=l.asm.Any).apply(null,arguments)},sv=l._ArgMax=function(){return(sv=l._ArgMax=l.asm.ArgMax).apply(null,arguments)},iv=l._AvgPool=function(){return(iv=l._AvgPool=l.asm.AvgPool).apply(null,arguments)},av=l._BatchMatMul=function(){return(av=l._BatchMatMul=l.asm.BatchMatMul).apply(null,arguments)},lv=l._Ceil=function(){return(lv=l._Ceil=l.asm.Ceil).apply(null,arguments)},uv=l._ClipByValue=function(){return(uv=l._ClipByValue=l.asm.ClipByValue).apply(null,arguments)},cv=l._Conv2D=function(){return(cv=l._Conv2D=l.asm.Conv2D).apply(null,arguments)},pv=l._Conv2DBackpropInput=function(){return(pv=l._Conv2DBackpropInput=l.asm.Conv2DBackpropInput).apply(null,arguments)},mv=l._Cos=function(){return(mv=l._Cos=l.asm.Cos).apply(null,arguments)},fv=l._Cosh=function(){return(fv=l._Cosh=l.asm.Cosh).apply(null,arguments)},dv=l._CropAndResize=function(){return(dv=l._CropAndResize=l.asm.CropAndResize).apply(null,arguments)},hv=l._Cumprod=function(){return(hv=l._Cumprod=l.asm.Cumprod).apply(null,arguments)},gv=l._Cumsum=function(){return(gv=l._Cumsum=l.asm.Cumsum).apply(null,arguments)},xv=l._DepthToSpace=function(){return(xv=l._DepthToSpace=l.asm.DepthToSpace).apply(null,arguments)},yv=l._DepthwiseConv2dNative=function(){return(yv=l._DepthwiseConv2dNative=l.asm.DepthwiseConv2dNative).apply(null,arguments)},bv=l._Elu=function(){return(bv=l._Elu=l.asm.Elu).apply(null,arguments)},wv=l._Equal=function(){return(wv=l._Equal=l.asm.Equal).apply(null,arguments)},Cv=l._Exp=function(){return(Cv=l._Exp=l.asm.Exp).apply(null,arguments)},Iv=l._FlipLeftRight=function(){return(Iv=l._FlipLeftRight=l.asm.FlipLeftRight).apply(null,arguments)},vv=l._Floor=function(){return(vv=l._Floor=l.asm.Floor).apply(null,arguments)},Sv=l._FloorDiv=function(){return(Sv=l._FloorDiv=l.asm.FloorDiv).apply(null,arguments)},Nv=l._FusedBatchNorm=function(){return(Nv=l._FusedBatchNorm=l.asm.FusedBatchNorm).apply(null,arguments)},kv=l._FusedConv2D=function(){return(kv=l._FusedConv2D=l.asm.FusedConv2D).apply(null,arguments)},Tv=l._FusedDepthwiseConv2D=function(){return(Tv=l._FusedDepthwiseConv2D=l.asm.FusedDepthwiseConv2D).apply(null,arguments)},Ev=l._Gather=function(){return(Ev=l._Gather=l.asm.Gather).apply(null,arguments)},_v=l._GatherNd=function(){return(_v=l._GatherNd=l.asm.GatherNd).apply(null,arguments)},Av=l._Greater=function(){return(Av=l._Greater=l.asm.Greater).apply(null,arguments)},$v=l._GreaterEqual=function(){return($v=l._GreaterEqual=l.asm.GreaterEqual).apply(null,arguments)},Dv=l._LeakyRelu=function(){return(Dv=l._LeakyRelu=l.asm.LeakyRelu).apply(null,arguments)},Rv=l._Less=function(){return(Rv=l._Less=l.asm.Less).apply(null,arguments)},Fv=l._LessEqual=function(){return(Fv=l._LessEqual=l.asm.LessEqual).apply(null,arguments)},Ov=l._Log=function(){return(Ov=l._Log=l.asm.Log).apply(null,arguments)},Pv=l._LogicalAnd=function(){return(Pv=l._LogicalAnd=l.asm.LogicalAnd).apply(null,arguments)},Lv=l._LogicalNot=function(){return(Lv=l._LogicalNot=l.asm.LogicalNot).apply(null,arguments)},Mv=l._LogicalOr=function(){return(Mv=l._LogicalOr=l.asm.LogicalOr).apply(null,arguments)},zv=l._LogicalXor=function(){return(zv=l._LogicalXor=l.asm.LogicalXor).apply(null,arguments)},Bv=l._Max=function(){return(Bv=l._Max=l.asm.Max).apply(null,arguments)},wg=l._MaxPool=function(){return(wg=l._MaxPool=l.asm.MaxPool).apply(null,arguments)},Cg=l._Maximum=function(){return(Cg=l._Maximum=l.asm.Maximum).apply(null,arguments)},Ld=l._Mean=function(){return(Ld=l._Mean=l.asm.Mean).apply(null,arguments)},Vv=l._Min=function(){return(Vv=l._Min=l.asm.Min).apply(null,arguments)},Gv=l._Minimum=function(){return(Gv=l._Minimum=l.asm.Minimum).apply(null,arguments)},Qc=l._MirrorPad=function(){return(Qc=l._MirrorPad=l.asm.MirrorPad).apply(null,arguments)},Ig=l._Multiply=function(){return(Ig=l._Multiply=l.asm.Multiply).apply(null,arguments)},tp=l._Neg=function(){return(tp=l._Neg=l.asm.Neg).apply(null,arguments)},ep=l._NonMaxSuppressionV3=function(){return(ep=l._NonMaxSuppressionV3=l.asm.NonMaxSuppressionV3).apply(null,arguments)},Wv=l._NonMaxSuppressionV4=function(){return(Wv=l._NonMaxSuppressionV4=l.asm.NonMaxSuppressionV4).apply(null,arguments)},K=l._NonMaxSuppressionV5=function(){return(K=l._NonMaxSuppressionV5=l.asm.NonMaxSuppressionV5).apply(null,arguments)},lt=l._NotEqual=function(){return(lt=l._NotEqual=l.asm.NotEqual).apply(null,arguments)},Et=l._OneHot=function(){return(Et=l._OneHot=l.asm.OneHot).apply(null,arguments)},re=l._PadV2=function(){return(re=l._PadV2=l.asm.PadV2).apply(null,arguments)},Ke=l._Pow=function(){return(Ke=l._Pow=l.asm.Pow).apply(null,arguments)},je=l._Prelu=function(){return(je=l._Prelu=l.asm.Prelu).apply(null,arguments)},ee=l._Prod=function(){return(ee=l._Prod=l.asm.Prod).apply(null,arguments)},te=l._RealDiv=function(){return(te=l._RealDiv=l.asm.RealDiv).apply(null,arguments)},mr=l._Relu=function(){return(mr=l._Relu=l.asm.Relu).apply(null,arguments)},qn=l._Relu6=function(){return(qn=l._Relu6=l.asm.Relu6).apply(null,arguments)},Ji=l._ResizeBilinear=function(){return(Ji=l._ResizeBilinear=l.asm.ResizeBilinear).apply(null,arguments)},vg=l._ResizeNearestNeighbor=function(){return(vg=l._ResizeNearestNeighbor=l.asm.ResizeNearestNeighbor).apply(null,arguments)},Md=l._Reverse=function(){return(Md=l._Reverse=l.asm.Reverse).apply(null,arguments)},Uv=l._RotateWithOffset=function(){return(Uv=l._RotateWithOffset=l.asm.RotateWithOffset).apply(null,arguments)},rn=l._Round=function(){return(rn=l._Round=l.asm.Round).apply(null,arguments)},vl=l._Rsqrt=function(){return(vl=l._Rsqrt=l.asm.Rsqrt).apply(null,arguments)},Sg=l._ScatterNd=function(){return(Sg=l._ScatterNd=l.asm.ScatterNd).apply(null,arguments)},VW=l._SelectV2=function(){return(VW=l._SelectV2=l.asm.SelectV2).apply(null,arguments)},GW=l._Sigmoid=function(){return(GW=l._Sigmoid=l.asm.Sigmoid).apply(null,arguments)},WW=l._Sin=function(){return(WW=l._Sin=l.asm.Sin).apply(null,arguments)},UW=l._Softmax=function(){return(UW=l._Softmax=l.asm.Softmax).apply(null,arguments)},HW=l._SparseFillEmptyRows=function(){return(HW=l._SparseFillEmptyRows=l.asm.SparseFillEmptyRows).apply(null,arguments)},qW=l._SparseReshape=function(){return(qW=l._SparseReshape=l.asm.SparseReshape).apply(null,arguments)},KW=l._SparseSegmentReduction=function(){return(KW=l._SparseSegmentReduction=l.asm.SparseSegmentReduction).apply(null,arguments)},jW=l._Sqrt=function(){return(jW=l._Sqrt=l.asm.Sqrt).apply(null,arguments)},XW=l._Square=function(){return(XW=l._Square=l.asm.Square).apply(null,arguments)},YW=l._SquaredDifference=function(){return(YW=l._SquaredDifference=l.asm.SquaredDifference).apply(null,arguments)},ZW=l._Step=function(){return(ZW=l._Step=l.asm.Step).apply(null,arguments)},JW=l._StridedSlice=function(){return(JW=l._StridedSlice=l.asm.StridedSlice).apply(null,arguments)},QW=l._Sub=function(){return(QW=l._Sub=l.asm.Sub).apply(null,arguments)},tU=l._Sum=function(){return(tU=l._Sum=l.asm.Sum).apply(null,arguments)},eU=l._Tan=function(){return(eU=l._Tan=l.asm.Tan).apply(null,arguments)},rU=l._Tanh=function(){return(rU=l._Tanh=l.asm.Tanh).apply(null,arguments)},nU=l._Tile=function(){return(nU=l._Tile=l.asm.Tile).apply(null,arguments)},oU=l._TopK=function(){return(oU=l._TopK=l.asm.TopK).apply(null,arguments)},sU=l._Transform=function(){return(sU=l._Transform=l.asm.Transform).apply(null,arguments)},iU=l._Transpose=function(){return(iU=l._Transpose=l.asm.Transpose).apply(null,arguments)},aU=l.__FusedMatMul=function(){return(aU=l.__FusedMatMul=l.asm._FusedMatMul).apply(null,arguments)},lU=l._malloc=function(){return(lU=l._malloc=l.asm.malloc).apply(null,arguments)},uU=l._free=function(){return(uU=l._free=l.asm.free).apply(null,arguments)},cU=l.__emscripten_tls_init=function(){return(cU=l.__emscripten_tls_init=l.asm._emscripten_tls_init).apply(null,arguments)},Ng=l._pthread_self=function(){return(Ng=l._pthread_self=l.asm.pthread_self).apply(null,arguments)},pU=l.___errno_location=function(){return(pU=l.___errno_location=l.asm.__errno_location).apply(null,arguments)},qT=l.__emscripten_thread_init=function(){return(qT=l.__emscripten_thread_init=l.asm._emscripten_thread_init).apply(null,arguments)},mU=l.__emscripten_thread_crashed=function(){return(mU=l.__emscripten_thread_crashed=l.asm._emscripten_thread_crashed).apply(null,arguments)},fU=l._emscripten_main_thread_process_queued_calls=function(){return(fU=l._emscripten_main_thread_process_queued_calls=l.asm.emscripten_main_thread_process_queued_calls).apply(null,arguments)},dU=l._emscripten_main_browser_thread_id=function(){return(dU=l._emscripten_main_browser_thread_id=l.asm.emscripten_main_browser_thread_id).apply(null,arguments)},KT=l._emscripten_run_in_main_runtime_thread_js=function(){return(KT=l._emscripten_run_in_main_runtime_thread_js=l.asm.emscripten_run_in_main_runtime_thread_js).apply(null,arguments)},hU=l._emscripten_dispatch_to_thread_=function(){return(hU=l._emscripten_dispatch_to_thread_=l.asm.emscripten_dispatch_to_thread_).apply(null,arguments)},jT=l.__emscripten_proxy_execute_task_queue=function(){return(jT=l.__emscripten_proxy_execute_task_queue=l.asm._emscripten_proxy_execute_task_queue).apply(null,arguments)},Hv=l.__emscripten_thread_free_data=function(){return(Hv=l.__emscripten_thread_free_data=l.asm._emscripten_thread_free_data).apply(null,arguments)},XT=l.__emscripten_thread_exit=function(){return(XT=l.__emscripten_thread_exit=l.asm._emscripten_thread_exit).apply(null,arguments)},YT=l._emscripten_stack_set_limits=function(){return(YT=l._emscripten_stack_set_limits=l.asm.emscripten_stack_set_limits).apply(null,arguments)},qv=l.stackSave=function(){return(qv=l.stackSave=l.asm.stackSave).apply(null,arguments)},kg=l.stackRestore=function(){return(kg=l.stackRestore=l.asm.stackRestore).apply(null,arguments)},Tg=l.stackAlloc=function(){return(Tg=l.stackAlloc=l.asm.stackAlloc).apply(null,arguments)},gU=l.dynCall_iijjiiii=function(){return(gU=l.dynCall_iijjiiii=l.asm.dynCall_iijjiiii).apply(null,arguments)},xU=l.dynCall_jiji=function(){return(xU=l.dynCall_jiji=l.asm.dynCall_jiji).apply(null,arguments)};l.keepRuntimeAlive=Lo,l.wasmMemory=it,l.cwrap=HI,l.ExitStatus=Du,l.PThread=qt;var Eg;Zi=function L(){Eg||ZT(),Eg||(Zi=L)};function ZT(L){if(L=L||d,Cl>0)return;if(C){c(l),Nr(),postMessage({cmd:"loaded"});return}if(wl(),Cl>0)return;function U(){Eg||(Eg=!0,l.calledRun=!0,!ht&&(Nr(),c(l),l.onRuntimeInitialized&&l.onRuntimeInitialized(),Yi()))}l.setStatus?(l.setStatus("Running..."),setTimeout(function(){setTimeout(function(){l.setStatus("")},1),U()},1)):U()}if(l.preInit)for(typeof l.preInit=="function"&&(l.preInit=[l.preInit]);l.preInit.length>0;)l.preInit.pop()();ZT();var _g;m&&(_g={uncaughtException:process.listeners("uncaughtException").filter(function(L){return!m.uncaughtException.indexOf(L)>-1}),unhandledRejection:process.listeners("unhandledRejection").filter(function(L){return!m.unhandledRejection.indexOf(L)>-1})});var Ag;if(typeof WasmBackendModule!="undefined")Ag=WasmBackendModule;else if(typeof t!="undefined")Ag=t;else throw new Error("Could not find wasm module in post.js");if(_g){var yU=Ag._dispose;Ag._dispose=function(){yU(),_g.uncaughtException.forEach(function(L){process.removeListener("uncaughtException",L)}),_g.unhandledRejection.forEach(function(L){process.removeListener("unhandledRejection",L)})}}return t.ready}})();typeof lI=="object"&&typeof AT=="object"?AT.exports=_T:typeof define=="function"&&define.amd?define([],function(){return _T}):typeof lI=="object"&&(lI.WasmBackendModuleThreadedSimd=_T)});var FW=dr((HXe,RW)=>{RW.exports.wasmWorkerContents=`"use strict";var Module={};var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";if(ENVIRONMENT_IS_NODE){var nodeWorkerThreads=require("worker_threads");var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",data=>onmessage({data:data}));var fs=require("fs");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:function(f){(0,eval)(fs.readFileSync(f,"utf8"))},postMessage:function(msg){parentPort.postMessage(msg)},performance:global.performance||{now:function(){return Date.now()}}})}var initializedJS=false;var pendingNotifiedProxyingQueues=[];function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");if(ENVIRONMENT_IS_NODE){fs.writeSync(2,text+"
");return}console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=(info,receiveInstance)=>{var instance=new WebAssembly.Instance(Module["wasmModule"],info);receiveInstance(instance);Module["wasmModule"]=null;return instance.exports};self.onunhandledrejection=e=>{throw e.reason??e};self.onmessage=e=>{try{if(e.data.cmd==="load"){Module["wasmModule"]=e.data.wasmModule;Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob=="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}WasmBackendModuleThreadedSimd(Module).then(function(instance){Module=instance})}else if(e.data.cmd==="run"){Module["__performance_now_clock_drift"]=performance.now()-e.data.time;Module["__emscripten_thread_init"](e.data.pthread_ptr,0,0,1);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInitTLS();if(!initializedJS){pendingNotifiedProxyingQueues.forEach(queue=>{Module["executeNotifiedProxyingQueue"](queue)});pendingNotifiedProxyingQueues=[];initializedJS=true}try{Module["invokeEntryPoint"](e.data.start_routine,e.data.arg)}catch(ex){if(ex!="unwind"){if(ex instanceof Module["ExitStatus"]){if(Module["keepRuntimeAlive"]()){}else{Module["__emscripten_thread_exit"](ex.status)}}else{throw ex}}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["__emscripten_thread_exit"](-1)}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="processProxyingQueue"){if(initializedJS){Module["executeNotifiedProxyingQueue"](e.data.queue)}else{pendingNotifiedProxyingQueues.push(e.data.queue)}}else if(e.data.cmd){err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){if(Module["__emscripten_thread_crashed"]){Module["__emscripten_thread_crashed"]()}throw ex}};`});var OW=dr((uI,DT)=>{var $T=(()=>{var r=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!="undefined"&&(r=r||__filename),function(t){t=t||{};var e=typeof t!="undefined"?t:{},n,o;e.ready=new Promise(function(K,lt){n=K,o=lt});var s;typeof process!="undefined"&&process.listeners&&(s={uncaughtException:process.listeners("uncaughtException"),unhandledRejection:process.listeners("unhandledRejection")});var i=Object.assign({},e),a=[],u="./this.program",l=(K,lt)=>{throw lt},c=typeof window=="object",p=typeof importScripts=="function",m=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",f="";function d(K){return e.locateFile?e.locateFile(K,f):f+K}var h,g,x,b;function w(K){if(K instanceof Xc)return;A("exiting due to exception: "+K)}if(m){p?f=eg().dirname(f)+"/":f=__dirname+"/";var C,N;typeof $g=="function"&&(C=qb(),N=eg()),h=(K,lt)=>(K=N.normalize(K),C.readFileSync(K,lt?void 0:"utf8")),x=K=>{var lt=h(K,!0);return lt.buffer||(lt=new Uint8Array(lt)),lt},g=(K,lt,Et)=>{K=N.normalize(K),C.readFile(K,function(re,Ke){re?Et(re):lt(Ke.buffer)})},process.argv.length>1&&(u=process.argv[1].replace(/\\/g,"/")),a=process.argv.slice(2),process.on("uncaughtException",function(K){if(!(K instanceof Xc))throw K}),process.on("unhandledRejection",function(K){throw K}),l=(K,lt)=>{if(fe())throw process.exitCode=K,lt;w(lt),process.exit(K)},e.inspect=function(){return"[Emscripten Module object]"}}else(c||p)&&(p?f=self.location.href:typeof document!="undefined"&&document.currentScript&&(f=document.currentScript.src),r&&(f=r),f.indexOf("blob:")!==0?f=f.substr(0,f.replace(/[?#].*/,"").lastIndexOf("/")+1):f="",h=K=>{var lt=new XMLHttpRequest;return lt.open("GET",K,!1),lt.send(null),lt.responseText},p&&(x=K=>{var lt=new XMLHttpRequest;return lt.open("GET",K,!1),lt.responseType="arraybuffer",lt.send(null),new Uint8Array(lt.response)}),g=(K,lt,Et)=>{var re=new XMLHttpRequest;re.open("GET",K,!0),re.responseType="arraybuffer",re.onload=()=>{if(re.status==200||re.status==0&&re.response){lt(re.response);return}Et()},re.onerror=Et,re.send(null)},b=K=>document.title=K);var _=e.print||console.log.bind(console),A=e.printErr||console.warn.bind(console);Object.assign(e,i),i=null,e.arguments&&(a=e.arguments),e.thisProgram&&(u=e.thisProgram),e.quit&&(l=e.quit);var $=4,F;e.wasmBinary&&(F=e.wasmBinary);var P=e.noExitRuntime||!0;typeof WebAssembly!="object"&&jr("no native wasm support detected");var V,G=!1,W;function q(K,lt){K||jr(lt)}var H=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function j(K,lt,Et){for(var re=lt+Et,Ke=lt;K[Ke]&&!(Ke>=re);)++Ke;if(Ke-lt>16&&K.buffer&&H)return H.decode(K.subarray(lt,Ke));for(var je="";lt<Ke;){var ee=K[lt++];if(!(ee&128)){je+=String.fromCharCode(ee);continue}var te=K[lt++]&63;if((ee&224)==192){je+=String.fromCharCode((ee&31)<<6|te);continue}var mr=K[lt++]&63;if((ee&240)==224?ee=(ee&15)<<12|te<<6|mr:ee=(ee&7)<<18|te<<12|mr<<6|K[lt++]&63,ee<65536)je+=String.fromCharCode(ee);else{var qn=ee-65536;je+=String.fromCharCode(55296|qn>>10,56320|qn&1023)}}return je}function Y(K,lt){return K?j(at,K,lt):""}function Z(K,lt,Et,re){if(!(re>0))return 0;for(var Ke=Et,je=Et+re-1,ee=0;ee<K.length;++ee){var te=K.charCodeAt(ee);if(te>=55296&&te<=57343){var mr=K.charCodeAt(++ee);te=65536+((te&1023)<<10)|mr&1023}if(te<=127){if(Et>=je)break;lt[Et++]=te}else if(te<=2047){if(Et+1>=je)break;lt[Et++]=192|te>>6,lt[Et++]=128|te&63}else if(te<=65535){if(Et+2>=je)break;lt[Et++]=224|te>>12,lt[Et++]=128|te>>6&63,lt[Et++]=128|te&63}else{if(Et+3>=je)break;lt[Et++]=240|te>>18,lt[Et++]=128|te>>12&63,lt[Et++]=128|te>>6&63,lt[Et++]=128|te&63}}return lt[Et]=0,Et-Ke}function et(K,lt,Et){return Z(K,at,lt,Et)}var rt,ot,at,nt,it,dt,ht,bt,Tt;function _t(K){rt=K,e.HEAP8=ot=new Int8Array(K),e.HEAP16=nt=new Int16Array(K),e.HEAP32=dt=new Int32Array(K),e.HEAPU8=at=new Uint8Array(K),e.HEAPU16=it=new Uint16Array(K),e.HEAPU32=ht=new Uint32Array(K),e.HEAPF32=bt=new Float32Array(K),e.HEAPF64=Tt=new Float64Array(K)}var Bt=e.INITIAL_MEMORY||16777216,Yt,ce=[],he=[],Kt=[],Te=!1;function fe(){return P}function Ae(){if(e.preRun)for(typeof e.preRun=="function"&&(e.preRun=[e.preRun]);e.preRun.length;)nr(e.preRun.shift());Zi(ce)}function Ge(){Te=!0,Zi(he)}function En(){if(e.postRun)for(typeof e.postRun=="function"&&(e.postRun=[e.postRun]);e.postRun.length;)Or(e.postRun.shift());Zi(Kt)}function nr(K){ce.unshift(K)}function Wn(K){he.unshift(K)}function Or(K){Kt.unshift(K)}var qe=0,Pr=null,Lr=null;function Un(K){qe++,e.monitorRunDependencies&&e.monitorRunDependencies(qe)}function Hn(K){if(qe--,e.monitorRunDependencies&&e.monitorRunDependencies(qe),qe==0&&(Pr!==null&&(clearInterval(Pr),Pr=null),Lr)){var lt=Lr;Lr=null,lt()}}function jr(K){e.onAbort&&e.onAbort(K),K="Aborted("+K+")",A(K),G=!0,W=1,K+=". Build with -sASSERTIONS for more info.";var lt=new WebAssembly.RuntimeError(K);throw o(lt),lt}var Xi="data:application/octet-stream;base64,";function Lo(K){return K.startsWith(Xi)}function wl(K){return K.startsWith("file://")}var Nr;Nr="tfjs-backend-wasm.wasm",Lo(Nr)||(Nr=d(Nr));function Yi(K){try{if(K==Nr&&F)return new Uint8Array(F);if(x)return x(K);throw"both async and sync fetching of the wasm failed"}catch(lt){jr(lt)}}function _d(){if(!F&&(c||p)){if(typeof fetch=="function"&&!wl(Nr))return fetch(Nr,{credentials:"same-origin"}).then(function(K){if(!K.ok)throw"failed to load wasm binary file at '"+Nr+"'";return K.arrayBuffer()}).catch(function(){return Yi(Nr)});if(g)return new Promise(function(K,lt){g(Nr,function(Et){K(new Uint8Array(Et))},lt)})}return Promise.resolve().then(function(){return Yi(Nr)})}function Ad(){var K={env:Rd,wasi_snapshot_preview1:Rd};function lt(ee,te){var mr=ee.exports;e.asm=mr,V=e.asm.memory,_t(V.buffer),Yt=e.asm.__indirect_function_table,Wn(e.asm.__wasm_call_ctors),Hn("wasm-instantiate")}Un("wasm-instantiate");function Et(ee){lt(ee.instance)}function re(ee){return _d().then(function(te){return WebAssembly.instantiate(te,K)}).then(function(te){return te}).then(ee,function(te){A("failed to asynchronously prepare wasm: "+te),jr(te)})}function Ke(){return!F&&typeof WebAssembly.instantiateStreaming=="function"&&!Lo(Nr)&&!wl(Nr)&&!m&&typeof fetch=="function"?fetch(Nr,{credentials:"same-origin"}).then(function(ee){var te=WebAssembly.instantiateStreaming(ee,K);return te.then(Et,function(mr){return A("wasm streaming compile failed: "+mr),A("falling back to ArrayBuffer instantiation"),re(Et)})}):re(Et)}if(e.instantiateWasm)try{var je=e.instantiateWasm(K,lt);return je}catch(ee){A("Module.instantiateWasm callback failed with error: "+ee),o(ee)}return Ke().catch(o),{}}var LT,Cl;function Xc(K){this.name="ExitStatus",this.message="Program terminated with exit("+K+")",this.status=K}function Zi(K){for(;K.length>0;)K.shift()(e)}function MT(K){return K}function zT(K){var lt=/\b_Z[\w\d_]+/g;return K.replace(lt,function(Et){var re=Et;return Et===re?Et:re+" ["+Et+"]"})}function Yc(){var K=new Error;if(!K.stack){try{throw new Error}catch(lt){K=lt}if(!K.stack)return"(no stack trace available)"}return K.stack.toString()}function pI(K,lt){ot.set(K,lt)}function ig(){jr("")}function $d(){return 2147483648}function en(){return $d()}function ag(K,lt,Et){at.copyWithin(K,lt,lt+Et)}function mI(K){try{return V.grow(K-rt.byteLength+65535>>>16),_t(V.buffer),1}catch(lt){}}function fI(K){var lt=at.length;K=K>>>0;var Et=$d();if(K>Et)return!1;let re=(mr,qn)=>mr+(qn-mr%qn)%qn;for(var Ke=1;Ke<=4;Ke*=2){var je=lt*(1+.2/Ke);je=Math.min(je,K+100663296);var ee=Math.min(Et,re(Math.max(K,je),65536)),te=mI(ee);if(te)return!0}return!1}var dI={varargs:void 0,get:function(){dI.varargs+=4;var K=dt[dI.varargs-4>>2];return K},getStr:function(K){var lt=Y(K);return lt}};function BT(K){return 52}function hI(K,lt,Et,re,Ke){return 70}var Du=[null,[],[]];function gI(K,lt){var Et=Du[K];lt===0||lt===10?((K===1?_:A)(j(Et,0)),Et.length=0):Et.push(lt)}function xI(K,lt,Et,re){for(var Ke=0,je=0;je<Et;je++){var ee=ht[lt>>2],te=ht[lt+4>>2];lt+=8;for(var mr=0;mr<te;mr++)gI(K,at[ee+mr]);Ke+=te}return ht[re>>2]=Ke,0}function Dd(K){var lt=e["_"+K];return lt}function lg(K,lt,Et,re,Ke){var je={string:rn=>{var vl=0;if(rn!=null&&rn!==0){var Sg=(rn.length<<2)+1;vl=Ld(Sg),et(rn,vl,Sg)}return vl},array:rn=>{var vl=Ld(rn.length);return pI(rn,vl),vl}};function ee(rn){return lt==="string"?Y(rn):lt==="boolean"?Boolean(rn):rn}var te=Dd(K),mr=[],qn=0;if(re)for(var Ji=0;Ji<re.length;Ji++){var vg=je[Et[Ji]];vg?(qn===0&&(qn=wg()),mr[Ji]=vg(re[Ji])):mr[Ji]=re[Ji]}var Md=te.apply(null,mr);function Uv(rn){return qn!==0&&Cg(qn),ee(rn)}return Md=Uv(Md),Md}function ug(K,lt,Et,re){Et=Et||[];var Ke=Et.every(ee=>ee==="number"||ee==="boolean"),je=lt!=="string";return je&&Ke&&!re?Dd(K):function(){return lg(K,lt,Et,arguments,re)}}var Rd={abort:ig,emscripten_get_heap_max:en,emscripten_memcpy_big:ag,emscripten_resize_heap:fI,fd_close:BT,fd_seek:hI,fd_write:xI},VT=Ad(),cg=e.___wasm_call_ctors=function(){return(cg=e.___wasm_call_ctors=e.asm.__wasm_call_ctors).apply(null,arguments)},yI=e._init=function(){return(yI=e._init=e.asm.init).apply(null,arguments)},qt=e._init_with_threads_count=function(){return(qt=e._init_with_threads_count=e.asm.init_with_threads_count).apply(null,arguments)},Fd=e._get_threads_count=function(){return(Fd=e._get_threads_count=e.asm.get_threads_count).apply(null,arguments)},bI=e._register_tensor=function(){return(bI=e._register_tensor=e.asm.register_tensor).apply(null,arguments)},GT=e._dispose_data=function(){return(GT=e._dispose_data=e.asm.dispose_data).apply(null,arguments)},WT=e._dispose=function(){return(WT=e._dispose=e.asm.dispose).apply(null,arguments)},wI=e._Abs=function(){return(wI=e._Abs=e.asm.Abs).apply(null,arguments)},pg=e._Add=function(){return(pg=e._Add=e.asm.Add).apply(null,arguments)},Zc=e._AddN=function(){return(Zc=e._AddN=e.asm.AddN).apply(null,arguments)},CI=e._All=function(){return(CI=e._All=e.asm.All).apply(null,arguments)},II=e._Any=function(){return(II=e._Any=e.asm.Any).apply(null,arguments)},UT=e._ArgMax=function(){return(UT=e._ArgMax=e.asm.ArgMax).apply(null,arguments)},vI=e._AvgPool=function(){return(vI=e._AvgPool=e.asm.AvgPool).apply(null,arguments)},SI=e._BatchMatMul=function(){return(SI=e._BatchMatMul=e.asm.BatchMatMul).apply(null,arguments)},NI=e._Ceil=function(){return(NI=e._Ceil=e.asm.Ceil).apply(null,arguments)},kI=e._ClipByValue=function(){return(kI=e._ClipByValue=e.asm.ClipByValue).apply(null,arguments)},mg=e._Conv2D=function(){return(mg=e._Conv2D=e.asm.Conv2D).apply(null,arguments)},fg=e._Conv2DBackpropInput=function(){return(fg=e._Conv2DBackpropInput=e.asm.Conv2DBackpropInput).apply(null,arguments)},TI=e._Cos=function(){return(TI=e._Cos=e.asm.Cos).apply(null,arguments)},EI=e._Cosh=function(){return(EI=e._Cosh=e.asm.Cosh).apply(null,arguments)},_I=e._CropAndResize=function(){return(_I=e._CropAndResize=e.asm.CropAndResize).apply(null,arguments)},Od=e._Cumprod=function(){return(Od=e._Cumprod=e.asm.Cumprod).apply(null,arguments)},AI=e._Cumsum=function(){return(AI=e._Cumsum=e.asm.Cumsum).apply(null,arguments)},$I=e._DepthToSpace=function(){return($I=e._DepthToSpace=e.asm.DepthToSpace).apply(null,arguments)},DI=e._DepthwiseConv2dNative=function(){return(DI=e._DepthwiseConv2dNative=e.asm.DepthwiseConv2dNative).apply(null,arguments)},Ru=e._Elu=function(){return(Ru=e._Elu=e.asm.Elu).apply(null,arguments)},RI=e._Equal=function(){return(RI=e._Equal=e.asm.Equal).apply(null,arguments)},FI=e._Exp=function(){return(FI=e._Exp=e.asm.Exp).apply(null,arguments)},dg=e._FlipLeftRight=function(){return(dg=e._FlipLeftRight=e.asm.FlipLeftRight).apply(null,arguments)},OI=e._Floor=function(){return(OI=e._Floor=e.asm.Floor).apply(null,arguments)},Jc=e._FloorDiv=function(){return(Jc=e._FloorDiv=e.asm.FloorDiv).apply(null,arguments)},PI=e._FusedBatchNorm=function(){return(PI=e._FusedBatchNorm=e.asm.FusedBatchNorm).apply(null,arguments)},LI=e._FusedConv2D=function(){return(LI=e._FusedConv2D=e.asm.FusedConv2D).apply(null,arguments)},Il=e._FusedDepthwiseConv2D=function(){return(Il=e._FusedDepthwiseConv2D=e.asm.FusedDepthwiseConv2D).apply(null,arguments)},Pd=e._Gather=function(){return(Pd=e._Gather=e.asm.Gather).apply(null,arguments)},MI=e._GatherNd=function(){return(MI=e._GatherNd=e.asm.GatherNd).apply(null,arguments)},zI=e._Greater=function(){return(zI=e._Greater=e.asm.Greater).apply(null,arguments)},BI=e._GreaterEqual=function(){return(BI=e._GreaterEqual=e.asm.GreaterEqual).apply(null,arguments)},VI=e._LeakyRelu=function(){return(VI=e._LeakyRelu=e.asm.LeakyRelu).apply(null,arguments)},hg=e._Less=function(){return(hg=e._Less=e.asm.Less).apply(null,arguments)},gg=e._LessEqual=function(){return(gg=e._LessEqual=e.asm.LessEqual).apply(null,arguments)},GI=e._Log=function(){return(GI=e._Log=e.asm.Log).apply(null,arguments)},WI=e._LogicalAnd=function(){return(WI=e._LogicalAnd=e.asm.LogicalAnd).apply(null,arguments)},xg=e._LogicalNot=function(){return(xg=e._LogicalNot=e.asm.LogicalNot).apply(null,arguments)},yg=e._LogicalOr=function(){return(yg=e._LogicalOr=e.asm.LogicalOr).apply(null,arguments)},UI=e._LogicalXor=function(){return(UI=e._LogicalXor=e.asm.LogicalXor).apply(null,arguments)},HI=e._Max=function(){return(HI=e._Max=e.asm.Max).apply(null,arguments)},qI=e._MaxPool=function(){return(qI=e._MaxPool=e.asm.MaxPool).apply(null,arguments)},bg=e._Maximum=function(){return(bg=e._Maximum=e.asm.Maximum).apply(null,arguments)},HT=e._Mean=function(){return(HT=e._Mean=e.asm.Mean).apply(null,arguments)},KI=e._Min=function(){return(KI=e._Min=e.asm.Min).apply(null,arguments)},jI=e._Minimum=function(){return(jI=e._Minimum=e.asm.Minimum).apply(null,arguments)},XI=e._MirrorPad=function(){return(XI=e._MirrorPad=e.asm.MirrorPad).apply(null,arguments)},YI=e._Multiply=function(){return(YI=e._Multiply=e.asm.Multiply).apply(null,arguments)},ZI=e._Neg=function(){return(ZI=e._Neg=e.asm.Neg).apply(null,arguments)},JI=e._NonMaxSuppressionV3=function(){return(JI=e._NonMaxSuppressionV3=e.asm.NonMaxSuppressionV3).apply(null,arguments)},QI=e._NonMaxSuppressionV4=function(){return(QI=e._NonMaxSuppressionV4=e.asm.NonMaxSuppressionV4).apply(null,arguments)},tv=e._NonMaxSuppressionV5=function(){return(tv=e._NonMaxSuppressionV5=e.asm.NonMaxSuppressionV5).apply(null,arguments)},ev=e._NotEqual=function(){return(ev=e._NotEqual=e.asm.NotEqual).apply(null,arguments)},rv=e._OneHot=function(){return(rv=e._OneHot=e.asm.OneHot).apply(null,arguments)},nv=e._PadV2=function(){return(nv=e._PadV2=e.asm.PadV2).apply(null,arguments)},ov=e._Pow=function(){return(ov=e._Pow=e.asm.Pow).apply(null,arguments)},sv=e._Prelu=function(){return(sv=e._Prelu=e.asm.Prelu).apply(null,arguments)},iv=e._Prod=function(){return(iv=e._Prod=e.asm.Prod).apply(null,arguments)},av=e._RealDiv=function(){return(av=e._RealDiv=e.asm.RealDiv).apply(null,arguments)},lv=e._Relu=function(){return(lv=e._Relu=e.asm.Relu).apply(null,arguments)},uv=e._Relu6=function(){return(uv=e._Relu6=e.asm.Relu6).apply(null,arguments)},cv=e._ResizeBilinear=function(){return(cv=e._ResizeBilinear=e.asm.ResizeBilinear).apply(null,arguments)},pv=e._ResizeNearestNeighbor=function(){return(pv=e._ResizeNearestNeighbor=e.asm.ResizeNearestNeighbor).apply(null,arguments)},mv=e._Reverse=function(){return(mv=e._Reverse=e.asm.Reverse).apply(null,arguments)},fv=e._RotateWithOffset=function(){return(fv=e._RotateWithOffset=e.asm.RotateWithOffset).apply(null,arguments)},dv=e._Round=function(){return(dv=e._Round=e.asm.Round).apply(null,arguments)},hv=e._Rsqrt=function(){return(hv=e._Rsqrt=e.asm.Rsqrt).apply(null,arguments)},gv=e._ScatterNd=function(){return(gv=e._ScatterNd=e.asm.ScatterNd).apply(null,arguments)},xv=e._SelectV2=function(){return(xv=e._SelectV2=e.asm.SelectV2).apply(null,arguments)},yv=e._Sigmoid=function(){return(yv=e._Sigmoid=e.asm.Sigmoid).apply(null,arguments)},bv=e._Sin=function(){return(bv=e._Sin=e.asm.Sin).apply(null,arguments)},wv=e._Softmax=function(){return(wv=e._Softmax=e.asm.Softmax).apply(null,arguments)},Cv=e._SparseFillEmptyRows=function(){return(Cv=e._SparseFillEmptyRows=e.asm.SparseFillEmptyRows).apply(null,arguments)},Iv=e._SparseReshape=function(){return(Iv=e._SparseReshape=e.asm.SparseReshape).apply(null,arguments)},vv=e._SparseSegmentReduction=function(){return(vv=e._SparseSegmentReduction=e.asm.SparseSegmentReduction).apply(null,arguments)},Sv=e._Sqrt=function(){return(Sv=e._Sqrt=e.asm.Sqrt).apply(null,arguments)},Nv=e._Square=function(){return(Nv=e._Square=e.asm.Square).apply(null,arguments)},kv=e._SquaredDifference=function(){return(kv=e._SquaredDifference=e.asm.SquaredDifference).apply(null,arguments)},Tv=e._Step=function(){return(Tv=e._Step=e.asm.Step).apply(null,arguments)},Ev=e._StridedSlice=function(){return(Ev=e._StridedSlice=e.asm.StridedSlice).apply(null,arguments)},_v=e._Sub=function(){return(_v=e._Sub=e.asm.Sub).apply(null,arguments)},Av=e._Sum=function(){return(Av=e._Sum=e.asm.Sum).apply(null,arguments)},$v=e._Tan=function(){return($v=e._Tan=e.asm.Tan).apply(null,arguments)},Dv=e._Tanh=function(){return(Dv=e._Tanh=e.asm.Tanh).apply(null,arguments)},Rv=e._Tile=function(){return(Rv=e._Tile=e.asm.Tile).apply(null,arguments)},Fv=e._TopK=function(){return(Fv=e._TopK=e.asm.TopK).apply(null,arguments)},Ov=e._Transform=function(){return(Ov=e._Transform=e.asm.Transform).apply(null,arguments)},Pv=e._Transpose=function(){return(Pv=e._Transpose=e.asm.Transpose).apply(null,arguments)},Lv=e.__FusedMatMul=function(){return(Lv=e.__FusedMatMul=e.asm._FusedMatMul).apply(null,arguments)},Mv=e._malloc=function(){return(Mv=e._malloc=e.asm.malloc).apply(null,arguments)},zv=e._free=function(){return(zv=e._free=e.asm.free).apply(null,arguments)},Bv=e.___errno_location=function(){return(Bv=e.___errno_location=e.asm.__errno_location).apply(null,arguments)},wg=e.stackSave=function(){return(wg=e.stackSave=e.asm.stackSave).apply(null,arguments)},Cg=e.stackRestore=function(){return(Cg=e.stackRestore=e.asm.stackRestore).apply(null,arguments)},Ld=e.stackAlloc=function(){return(Ld=e.stackAlloc=e.asm.stackAlloc).apply(null,arguments)},Vv=e.dynCall_iijjiiii=function(){return(Vv=e.dynCall_iijjiiii=e.asm.dynCall_iijjiiii).apply(null,arguments)},Gv=e.dynCall_jiji=function(){return(Gv=e.dynCall_jiji=e.asm.dynCall_jiji).apply(null,arguments)};e.cwrap=ug;var Qc;Lr=function K(){Qc||Ig(),Qc||(Lr=K)};function Ig(K){if(K=K||a,qe>0||(Ae(),qe>0))return;function lt(){Qc||(Qc=!0,e.calledRun=!0,!G&&(Ge(),n(e),e.onRuntimeInitialized&&e.onRuntimeInitialized(),En()))}e.setStatus?(e.setStatus("Running..."),setTimeout(function(){setTimeout(function(){e.setStatus("")},1),lt()},1)):lt()}if(e.preInit)for(typeof e.preInit=="function"&&(e.preInit=[e.preInit]);e.preInit.length>0;)e.preInit.pop()();Ig();var tp;s&&(tp={uncaughtException:process.listeners("uncaughtException").filter(function(K){return!s.uncaughtException.indexOf(K)>-1}),unhandledRejection:process.listeners("unhandledRejection").filter(function(K){return!s.unhandledRejection.indexOf(K)>-1})});var ep;if(typeof t!="undefined")ep=t;else if(typeof WasmBackendModuleThreadedSimd!="undefined")ep=WasmBackendModuleThreadedSimd;else throw new Error("Could not find wasm module in post.js");if(tp){var Wv=ep._dispose;ep._dispose=function(){Wv(),tp.uncaughtException.forEach(function(K){process.removeListener("uncaughtException",K)}),tp.unhandledRejection.forEach(function(K){process.removeListener("unhandledRejection",K)})}}return t.ready}})();typeof uI=="object"&&typeof DT=="object"?DT.exports=$T:typeof define=="function"&&define.amd?define([],function(){return $T}):typeof uI=="object"&&(uI.WasmBackendModule=$T)});var ta=class{constructor(t,e){this.backend=t,this.dataMover=e,this.data=new WeakMap,this.dataIdsCount=0}get(t){return this.data.has(t)||this.dataMover.moveData(this.backend,t),this.data.get(t)}set(t,e){this.dataIdsCount++,this.data.set(t,e)}has(t){return this.data.has(t)}delete(t){return this.dataIdsCount--,this.data.delete(t)}numDataIds(){return this.dataIdsCount}},Mo=class{refCount(t){return jn("refCount")}incRef(t){return jn("incRef")}timerAvailable(){return!0}time(t){return jn("time")}read(t){return jn("read")}readSync(t){return jn("readSync")}readToGPU(t,e){return jn("readToGPU")}numDataIds(){return jn("numDataIds")}disposeData(t,e){return jn("disposeData")}write(t,e,n){return jn("write")}move(t,e,n,o,s){return jn("move")}memory(){return jn("memory")}floatPrecision(){return jn("floatPrecision")}epsilon(){return this.floatPrecision()===32?1e-7:1e-4}dispose(){return jn("dispose")}};function jn(r){throw new Error(`'${r}' not yet implemented or not found in the registry. This kernel may not be supported by the tfjs backend you have chosen`)}function t1(r){let t=r.length,e=0;for(;t>0;)e=Math.random()*t|0,t--,Dg(r,t,e)}function kU(r,t){if(r.length!==t.length)throw new Error(`Array sizes must match to be shuffled together First array length was ${r.length}Second array length was ${t.length}`);let e=r.length,n=0;for(;e>0;)n=Math.random()*e|0,e--,Dg(r,e,n),Dg(t,e,n)}function np(r,t,e){return Math.max(r,Math.min(t,e))}function TU(r){return r%2===0?r:r+1}function Dg(r,t,e){let n=r[t];r[t]=r[e],r[e]=n}function EU(r){let t=0;for(let e=0;e<r.length;e++)t+=r[e];return t}function _U(r,t){let e=Math.random();return t*e+(1-e)*r}function AU(r,t){let e=0;for(let n=0;n<r.length;n++){let o=Number(r[n])-Number(t[n]);e+=o*o}return e}function E(r,t){if(!r)throw new Error(typeof t=="string"?t:t())}function $e(r,t,e=""){E(An(r,t),()=>e+` Shapes ${r} and ${t} must match`)}function Xn(r){E(r!=null,()=>"The input to the tensor constructor must be a non-null value.")}function zo(r,t=[],e=!1){if(t==null&&(t=[]),Array.isArray(r)||hr(r)&&!e)for(let n=0;n<r.length;++n)zo(r[n],t,e);else t.push(r);return t}function Zt(r){if(r.length===0)return 1;let t=r[0];for(let e=1;e<r.length;e++)t*=r[e];return t}function $U(r){return r.length===0}function An(r,t){if(r===t)return!0;if(r==null||t==null||r.length!==t.length)return!1;for(let e=0;e<r.length;e++)if(r[e]!==t[e])return!1;return!0}function ea(r){return r%1===0}function DU(r){if(Math.tanh!=null)return Math.tanh(r);if(r===1/0)return 1;if(r===-1/0)return-1;{let t=Math.exp(2*r);return(t-1)/(t+1)}}function RU(r){let t=Math.ceil(Math.sqrt(r));return[t,Math.ceil(r/t)]}function FU(r){let t=new Uint32Array(r);for(let e=0;e<r;++e)t[e]=e;return t1(t),t}function Ou(r,t){return t<=r.length?r:r+" ".repeat(t-r.length)}function OU(r,t=o=>0,e,n=setTimeout){return new Promise((o,s)=>{let i=0,a=()=>{if(r()){o();return}i++;let u=t(i);if(e!=null&&i>=e){s();return}n(a,u)};a()})}function PU(r,t){let e=1,n=-1;for(let s=0;s<r.length;++s)if(r[s]>=0)e*=r[s];else if(r[s]===-1){if(n!==-1)throw Error(`Shapes can only have 1 implicit size. Found -1 at dim ${n} and dim ${s}`);n=s}else if(r[s]<0)throw Error(`Shapes can not be < 0. Found ${r[s]} at dim ${s}`);if(n===-1){if(t>0&&t!==e)throw Error(`Size(${t}) must match the product of shape ${r}`);return r}if(e===0)throw Error(`Cannot infer the missing size in [${r}] when there are 0 elements`);if(t%e!==0)throw Error(`The implicit shape can't be a fractional number. Got ${t} / ${e}`);let o=r.slice();return o[n]=t/e,o}function ar(r,t){let e=t.length;return r=r==null?t.map((n,o)=>o):[].concat(r),E(r.every(n=>n>=-e&&n<e),()=>`All values in axis param must be in range [-${e}, ${e}) but got axis ${r}`),E(r.every(n=>ea(n)),()=>`All values in axis param must be integers but got axis ${r}`),r.map(n=>n<0?e+n:n)}function Xv(r,t){let e=[],n=[],o=t!=null&&Array.isArray(t)&&t.length===0,s=t==null||o?null:ar(t,r).sort(),i=0;for(let a=0;a<r.length;++a){if(s!=null){if(s[i]===a&&r[a]!==1)throw new Error(`Can't squeeze axis ${a} since its dim '${r[a]}' is not 1`);(s[i]==null||s[i]>a)&&r[a]===1&&(e.push(r[a]),n.push(a)),s[i]<=a&&i++}r[a]!==1&&(e.push(r[a]),n.push(a))}return{newShape:e,keptDims:n}}function Yv(r,t){let e=null;if(r==null||r==="float32")e=new Float32Array(t);else if(r==="int32")e=new Int32Array(t);else if(r==="bool")e=new Uint8Array(t);else throw new Error(`Unknown data type ${r}`);return e}function Zv(r,t){let e=null;if(r==null||r==="float32")e=new Float32Array(t);else if(r==="int32")e=new Int32Array(t);else if(r==="bool")e=new Uint8Array(t);else if(r==="string")e=new Array(t);else throw new Error(`Unknown data type ${r}`);return e}function Jv(r,t){for(let e=0;e<r.length;e++){let n=r[e];if(isNaN(n)||!isFinite(n))throw Error(`A tensor of type ${t} being uploaded contains ${n}.`)}}function Qv(r){return r==="bool"||r==="complex64"||r==="float32"||r==="int32"||r==="string"}function LU(r,t){return!(t==="complex64"||t==="float32"&&r!=="complex64"||t==="int32"&&r!=="float32"&&r!=="complex64"||t==="bool"&&r==="bool")}function hr(r){return r instanceof Float32Array||r instanceof Int32Array||r instanceof Uint8Array||r instanceof Uint8ClampedArray}function Rg(r){if(r==="float32"||r==="int32")return 4;if(r==="complex64")return 8;if(r==="bool")return 1;throw new Error(`Unknown dtype ${r}`)}function tS(r){if(r==null)return 0;let t=0;return r.forEach(e=>t+=e.length),t}function Bo(r){return typeof r=="string"||r instanceof String}function e1(r){return typeof r=="boolean"}function r1(r){return typeof r=="number"}function op(r){return Array.isArray(r)?op(r[0]):r instanceof Float32Array?"float32":r instanceof Int32Array||r instanceof Uint8Array||r instanceof Uint8ClampedArray?"int32":r1(r)?"float32":Bo(r)?"string":e1(r)?"bool":"float32"}function ri(r){return!!(r&&r.constructor&&r.call&&r.apply)}function sp(r,t){for(let e=t;e<r;++e)if(r%e===0)return e;return r}function ni(r){let t=r.length;if(t<2)return[];let e=new Array(t-1);e[t-2]=r[t-1];for(let n=t-3;n>=0;--n)e[n]=e[n+1]*r[n+1];return e}function n1(r,t,e,n=!1){let o=new Array;if(t.length===1){let s=t[0]*(n?2:1);for(let i=0;i<s;i++)o[i]=e[r+i]}else{let s=t[0],i=t.slice(1),a=i.reduce((u,l)=>u*l)*(n?2:1);for(let u=0;u<s;u++)o[u]=n1(r+u*a,i,e,n)}return o}function Fu(r,t,e=!1){if(r.length===0)return t[0];let n=r.reduce((o,s)=>o*s)*(e?2:1);if(n===0)return[];if(n!==t.length)throw new Error(`[${r}] does not match the input size ${t.length}${e?" for a complex tensor":""}.`);return n1(0,r,t,e)}function zd(r,t){let e=ip(r,t);for(let n=0;n<e.length;n++)e[n]=1;return e}function ip(r,t){if(t==null||t==="float32"||t==="complex64")return new Float32Array(r);if(t==="int32")return new Int32Array(r);if(t==="bool")return new Uint8Array(r);throw new Error(`Unknown data type ${t}`)}function MU(r,t){let e=r.reduce((n,o)=>n*o,1);if(t==null||t==="float32")return Fu(r,new Float32Array(e));if(t==="int32")return Fu(r,new Int32Array(e));if(t==="bool")return Fu(r,new Uint8Array(e));throw new Error(`Unknown data type ${t}`)}function Bd(r){r.forEach(t=>{E(Number.isInteger(t)&&t>=0,()=>`Tensor must have a shape comprised of positive integers but got shape [${r}].`)})}function zU(r,t,e){if(t===0)return 0;if(t===1)return r[0];let n=r[r.length-1];for(let o=0;o<r.length-1;++o)n+=e[o]*r[o];return n}function BU(r,t,e){if(t===0)return[];if(t===1)return[r];let n=new Array(t);for(let o=0;o<n.length-1;++o)n[o]=Math.floor(r/e[o]),r-=n[o]*e[o];return n[n.length-1]=r,n}function Vd(r){return r&&r.then&&typeof r.then=="function"}var o1="tfjsflags",Gd=class{constructor(t){this.global=t,this.flags={},this.flagRegistry={},this.urlFlags={},this.getQueryParams=GU,this.populateURLFlags()}setPlatform(t,e){this.platform!=null&&(M().getBool("IS_TEST")||M().getBool("PROD")||console.warn(`Platform ${this.platformName} has already been set. Overwriting the platform with ${t}.`)),this.platformName=t,this.platform=e}registerFlag(t,e,n){if(this.flagRegistry[t]={evaluationFn:e,setHook:n},this.urlFlags[t]!=null){let o=this.urlFlags[t];M().getBool("IS_TEST")||M().getBool("PROD")||console.warn(`Setting feature override from URL ${t}: ${o}.`),this.set(t,o)}}async getAsync(t){return t in this.flags?this.flags[t]:(this.flags[t]=await this.evaluateFlag(t),this.flags[t])}get(t){if(t in this.flags)return this.flags[t];let e=this.evaluateFlag(t);if(Vd(e))throw new Error(`Flag ${t} cannot be synchronously evaluated. Please use getAsync() instead.`);return this.flags[t]=e,this.flags[t]}getNumber(t){return this.get(t)}getBool(t){return this.get(t)}getFlags(){return this.flags}get features(){return this.flags}set(t,e){if(this.flagRegistry[t]==null)throw new Error(`Cannot set flag ${t} as it has not been registered.`);this.flags[t]=e,this.flagRegistry[t].setHook!=null&&this.flagRegistry[t].setHook(e)}evaluateFlag(t){if(this.flagRegistry[t]==null)throw new Error(`Cannot evaluate flag '${t}': no evaluation function found.`);return this.flagRegistry[t].evaluationFn()}setFlags(t){this.flags=Object.assign({},t)}reset(){this.flags={},this.urlFlags={},this.populateURLFlags()}populateURLFlags(){if(typeof this.global=="undefined"||typeof this.global.location=="undefined"||typeof this.global.location.search=="undefined")return;let t=this.getQueryParams(this.global.location.search);o1 in t&&t[o1].split(",").forEach(n=>{let[o,s]=n.split(":");this.urlFlags[o]=UU(o,s)})}};function GU(r){let t={};return r.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,(e,...n)=>(WU(t,n[0],n[1]),n.join("="))),t}function WU(r,t,e){r[decodeURIComponent(t)]=decodeURIComponent(e||"")}function UU(r,t){if(t=t.toLowerCase(),t==="true"||t==="false")return t==="true";if(`${+t}`===t)return+t;throw new Error(`Could not parse value flag value ${t} for flag ${r}.`)}function M(){return eS}var eS=null;function s1(r){eS=r}var rS;function nS(){if(rS==null){let r;if(typeof window!="undefined")r=window;else if(typeof global!="undefined")r=global;else if(typeof process!="undefined")r=process;else if(typeof self!="undefined")r=self;else throw new Error("Could not find a global object");rS=r}return rS}function HU(){let r=nS();return r._tfGlobals==null&&(r._tfGlobals=new Map),r._tfGlobals}function Wd(r,t){let e=HU();if(e.has(r))return e.get(r);{let n=t();return e.set(r,n),e.get(r)}}var oi="Abs",ra="Acos",na="Acosh",Yn="Add",Vo="AddN",oa="All",sa="Any",Go="ArgMax",Nl="ArgMin",ia="Asin",aa="Asinh",la="Atan",ua="Atanh",ca="Atan2",Wo="AvgPool",ap="AvgPoolGrad",kl="AvgPool3D",lp="AvgPool3DGrad",Uo="BatchMatMul",si="BatchToSpaceND",up="Bincount",i1="BroadcastTo",cp="BroadcastArgs",io="Cast",Ho="Ceil",ao="ClipByValue",pp="Complex",Tl="ComplexAbs",ii="Concat",qo="Conv2D",mp="Conv2DBackpropFilter",Ko="Conv2DBackpropInput",El="Conv3D",fp="Conv3DBackpropFilterV2",dp="Conv3DBackpropInputV2",jo="Cos",Xo="Cosh",pa="Cumprod",Yo="Cumsum",ma="CropAndResize",hp="DenseBincount",fa="DepthToSpace",Zo="DepthwiseConv2dNative",gp="DepthwiseConv2dNativeBackpropFilter",xp="DepthwiseConv2dNativeBackpropInput",yp="Diag",_l="Dilation2D",Ud="Dilation2DBackpropInput",Hd="Dilation2DBackpropFilter",Jo="RealDiv",bp="Einsum",Qo="Elu",wp="EluGrad",da="Erf",ha="Equal",ts="Exp",ai="ExpandDims",ga="Expm1",Cp="FFT",Al="Fill",xa="FlipLeftRight",es="Floor",rs="FloorDiv",ns="FusedBatchNorm",li="GatherV2",ya="GatherNd",ba="Greater",os="GreaterEqual",lo="Identity",Ip="IFFT",vp="Imag",wa="IsFinite",Ca="IsInf",Ia="IsNan",ss="LeakyRelu",va="Less",Sa="LessEqual",Sp="LinSpace",is="Log",Na="Log1p",ka="LogicalAnd",Ta="LogicalNot",Ea="LogicalOr",a1="LogicalXor",l1="LogSoftmax",rlt="LowerBound",$l="LRN",Np="LRNGrad",as="Max",ls="Maximum",us="MaxPool",kp="MaxPoolGrad",Dl="MaxPool3D",Tp="MaxPool3DGrad",Ep="MaxPoolWithArgmax",cs="Mean",ps="Min",ms="Minimum",fs="MirrorPad",_a="Mod",_p="Multinomial",ds="Multiply",ui="Neg",Aa="NotEqual",$a="NonMaxSuppressionV3",Da="NonMaxSuppressionV4",Ra="NonMaxSuppressionV5",ci="OnesLike",hs="OneHot",pi="Pack",gs="PadV2",nlt="Pool",xs="Pow",ys="Prelu",bs="Prod",Ap="RaggedGather",$p="RaggedTensorToTensor",Rl="Range",Dp="Real",Fa="Reciprocal",ws="Relu",mi="Reshape",Cs="ResizeNearestNeighbor",Rp="ResizeNearestNeighborGrad",Is="ResizeBilinear",Fp="ResizeBilinearGrad",vs="Relu6",Ss="Reverse",Ns="Round",ks="Rsqrt",Oa="ScatterNd",Op="SearchSorted",fi="Select",Pa="Selu",di="Slice",Ts="Sin",La="Sinh",Ma="Sign",Es="Sigmoid",za="Softplus",_s="Sqrt",As="Sum",hi="SpaceToBatchND",gi="SplitV",$s="Softmax",Fl="SparseFillEmptyRows",Ba="SparseReshape",Ol="SparseSegmentMean",Pl="SparseSegmentSum",Pp="SparseToDense",Ds="SquaredDifference",Ll="Square",Va="StridedSlice",Ml="StringNGrams",zl="StringSplit",Bl="StringToHashBucketFast",Rs="Sub",Fs="Tan",Os="Tanh",Zn="Tile",Ga="TopK",Wa="Transform",Jn="Transpose",Lp="Unique",xi="Unpack",Vl="UnsortedSegmentSum",olt="UpperBound",yi="ZerosLike",uo="Step",qd="FromPixels",Ua="RotateWithOffset",bi="_FusedMatMul",wi="FusedConv2D",Ci="FusedDepthwiseConv2D";function Ii(...r){M().getBool("IS_TEST")||M().getBool("PROD")||console.warn(...r)}function qU(...r){M().getBool("IS_TEST")||M().getBool("PROD")||console.log(...r)}var Mp=Wd("kernelRegistry",()=>new Map),Kd=Wd("gradRegistry",()=>new Map);function jd(r,t){let e=sS(r,t);return Mp.get(e)}function oS(r){return Kd.get(r)}function Fg(r){let t=Mp.entries(),e=[];for(;;){let{done:n,value:o}=t.next();if(n)break;let[s,i]=o,[a]=s.split("_");a===r&&e.push(i)}return e}function Pu(r){let{kernelName:t,backendName:e}=r,n=sS(t,e);Mp.has(n)&&Ii(`The kernel '${t}' for backend '${e}' is already registered`),Mp.set(n,r)}function c1(r){let{kernelName:t}=r;Kd.has(t)&&M().getBool("DEBUG")&&Ii(`Overriding the gradient for '${t}'`),Kd.set(t,r)}function ult(r,t){let e=sS(r,t);if(!Mp.has(e))throw new Error(`The kernel '${r}' for backend '${t}' is not registered`);Mp.delete(e)}function clt(r){if(!Kd.has(r))throw new Error(`The gradient '${r}' for backend is not registered`);Kd.delete(r)}function plt(r,t){Fg(r).forEach(n=>{let o=Object.assign({},n,{backendName:t});Pu(o)})}function sS(r,t){return`${t}_${r}`}var y={};Gt(y,{arraysEqual:()=>An,assert:()=>E,assertNonNegativeIntegerDimensions:()=>Bd,assertNonNull:()=>Xn,assertShapesMatch:()=>$e,bytesFromStringArray:()=>tS,bytesPerElement:()=>Rg,checkConversionForErrors:()=>Jv,clamp:()=>np,computeStrides:()=>ni,createScalarValue:()=>QU,createShuffledIndices:()=>FU,decodeString:()=>Gp,distSquared:()=>AU,encodeString:()=>Wl,fetch:()=>e4,fingerPrint64:()=>JU,flatten:()=>zo,getArrayFromDType:()=>Zv,getTypedArrayFromDType:()=>Yv,hasEncodingLoss:()=>LU,hexToLong:()=>Xd,indexToLoc:()=>BU,inferDtype:()=>op,inferFromImplicitShape:()=>PU,isBoolean:()=>e1,isFunction:()=>ri,isInt:()=>ea,isNumber:()=>r1,isPromise:()=>Vd,isScalarShape:()=>$U,isString:()=>Bo,isTypedArray:()=>hr,isValidDtype:()=>Qv,locToIndex:()=>zU,makeOnesTypedArray:()=>zd,makeZerosNestedTypedArray:()=>MU,makeZerosTypedArray:()=>ip,nearestDivisor:()=>sp,nearestLargerEven:()=>TU,now:()=>Vu,parseAxisParam:()=>ar,randUniform:()=>_U,repeatedTry:()=>OU,rightPad:()=>Ou,shuffle:()=>t1,shuffleCombo:()=>kU,sizeFromShape:()=>Zt,sizeToSquarishShape:()=>RU,squeezeShape:()=>Xv,sum:()=>EU,swap:()=>Dg,tanh:()=>DU,toNestedArray:()=>Fu,toTypedArray:()=>Vp});var uS=Sl(C1());var Bu=uS.default||uS;function Xd(r){return Bu.fromString(r,!0,16)}var v1=Xd("c3a5c85c97cb3127"),zu=Xd("b492b66fbe98f273"),nn=Xd("9ae16a3b2f90404f");function lS(r){return r.xor(r.shru(47))}function S1(r,t,e){let n=r.slice(t,t+e);return Bu.fromBytes(Array.from(n),!0,!0)}function Oe(r,t){return S1(r,t,8)}function I1(r,t){return S1(r,t,4)}function kr(r,t){return t===0?r:r.shru(t).or(r.shl(64-t))}function Gl(r,t,e=Xd("9ddfea08eb382d69")){let n=r.xor(t).mul(e);n=n.xor(n.shru(47));let o=t.xor(n).mul(e);return o=o.xor(o.shru(47)),o=o.mul(e),o}function jU(r,t,e,n,o,s){o=o.add(r),s=kr(s.add(o).add(n),21);let i=o;return o=o.add(t),o=o.add(e),s=s.add(kr(o,44)),[o.add(n),s.add(i)]}function Pg(r,t,e,n){return jU(Oe(r,t),Oe(r,t+8),Oe(r,t+16),Oe(r,t+24),e,n)}function XU(r,t=r.length){if(t>=8){let e=nn.add(t*2),n=Oe(r,0).add(nn),o=Oe(r,t-8),s=kr(o,37).mul(e).add(n),i=kr(n,25).add(o).mul(e);return Gl(s,i,e)}if(t>=4){let e=nn.add(t*2),n=I1(r,0);return Gl(n.shl(3).add(t),I1(r,t-4),e)}if(t>0){let e=r[0],n=r[t>>1],o=r[t-1],s=e+(n<<8),i=t+(o<<2);return lS(nn.mul(s).xor(v1.mul(i))).mul(nn)}return nn}function YU(r,t=r.length){let e=nn.add(t*2),n=Oe(r,0).mul(zu),o=Oe(r,8),s=Oe(r,t-8).mul(e),i=Oe(r,t-16).mul(nn);return Gl(kr(n.add(o),43).add(kr(s,30)).add(i),n.add(kr(o.add(nn),18)).add(s),e)}function ZU(r,t=r.length){let e=nn.add(t*2),n=Oe(r,0).mul(nn),o=Oe(r,8),s=Oe(r,t-8).mul(e),i=Oe(r,t-16).mul(nn),a=kr(n.add(o),43).add(kr(s,30)).add(i),u=Gl(a,n.add(kr(o.add(nn),18)).add(s),e),l=Oe(r,16).mul(e),c=Oe(r,24),p=a.add(Oe(r,t-32)).mul(e),m=u.add(Oe(r,t-24)).mul(e);return Gl(kr(l.add(c),43).add(kr(p,30)).add(m),l.add(kr(c.add(n),18)).add(p),e)}function JU(r,t=r.length){let e=Bu.fromNumber(81,!0);if(t<=32)return t<=16?XU(r,t):YU(r,t);if(t<=64)return ZU(r,t);let n=e,o=e.mul(zu).add(113),s=lS(o.mul(nn).add(113)).mul(nn),i=[Bu.UZERO,Bu.UZERO],a=[Bu.UZERO,Bu.UZERO];n=n.mul(nn).add(Oe(r,0));let u=0,l=(t-1>>6)*64,c=l+(t-1&63)-63;do n=kr(n.add(o).add(i[0]).add(Oe(r,u+8)),37).mul(zu),o=kr(o.add(i[1]).add(Oe(r,u+48)),42).mul(zu),n=n.xor(a[1]),o=o.add(i[0]).add(Oe(r,u+40)),s=kr(s.add(a[0]),33).mul(zu),i=Pg(r,u,i[1].mul(zu),n.add(a[0])),a=Pg(r,u+32,s.add(a[1]),o.add(Oe(r,u+16))),[s,n]=[n,s],u+=64;while(u!==l);let p=zu.add(s.and(255).shl(1));return u=c,a[0]=a[0].add(t-1&63),i[0]=i[0].add(a[0]),a[0]=a[0].add(i[0]),n=kr(n.add(o).add(i[0]).add(Oe(r,u+8)),37).mul(p),o=kr(o.add(i[1]).add(Oe(r,u+48)),42).mul(p),n=n.xor(a[1].mul(9)),o=o.add(i[0].mul(9).add(Oe(r,u+40))),s=kr(s.add(a[0]),33).mul(p),i=Pg(r,u,i[1].mul(p),n.add(a[0])),a=Pg(r,u+32,s.add(a[1]),o.add(Oe(r,u+16))),[s,n]=[n,s],Gl(Gl(i[0],a[0],p).add(lS(o).mul(v1)).add(s),Gl(i[1],a[1],p).add(n),p)}function QU(r,t){return t==="string"?Wl(r):Vp([r],t)}function t4(r,t){return r instanceof Float32Array&&t==="float32"||r instanceof Int32Array&&t==="int32"||r instanceof Uint8Array&&t==="bool"}function Vp(r,t){if(t==="string")throw new Error("Cannot convert a string[] to a TypedArray");if(Array.isArray(r)&&(r=zo(r)),M().getBool("DEBUG")&&Jv(r,t),t4(r,t))return r;if(t==null||t==="float32"||t==="complex64")return new Float32Array(r);if(t==="int32")return new Int32Array(r);if(t==="bool"){let e=new Uint8Array(r.length);for(let n=0;n<e.length;++n)Math.round(r[n])!==0&&(e[n]=1);return e}else throw new Error(`Unknown data type ${t}`)}function Vu(){return M().platform.now()}function e4(r,t){return M().platform.fetch(r,t)}function Wl(r,t="utf-8"){return t=t||"utf-8",M().platform.encode(r,t)}function Gp(r,t="utf-8"){return t=t||"utf-8",M().platform.decode(r,t)}var Lg=class{constructor(t,e){this.backendTimer=t,this.logger=e,e==null&&(this.logger=new cS)}profileKernel(t,e,n){let o,s=()=>{o=n()},i,a=Vu();if(this.backendTimer.timerAvailable())i=this.backendTimer.time(s);else{s();for(let l of o)l.dataSync();i=Promise.resolve({kernelMs:Vu()-a})}if(M().getBool("CHECK_COMPUTATION_FOR_ERRORS"))for(let l=0;l<o.length;l++){let c=o[l];c.data().then(p=>{r4(p,c.dtype,t)})}return{kernelName:t,outputs:o,inputs:e,timeMs:i.then(l=>l.kernelMs),extraInfo:i.then(l=>l.getExtraProfileInfo!=null?l.getExtraProfileInfo():"")}}logKernelProfile(t){let{kernelName:e,outputs:n,timeMs:o,inputs:s,extraInfo:i}=t;n.forEach(a=>{Promise.all([a.data(),o,i]).then(u=>{this.logger.logKernelProfile(e,a,u[0],u[1],s,u[2])})})}};function r4(r,t,e){if(t!=="float32")return!1;for(let n=0;n<r.length;n++){let o=r[n];if(isNaN(o)||!isFinite(o))return console.warn(`Found ${o} in the result of '${e}'`),!0}return!1}var cS=class{logKernelProfile(t,e,n,o,s,i){let a=typeof o=="number"?Ou(`${o}ms`,9):o.error,u=Ou(t,25),l=e.rank,c=e.size,p=Ou(e.shape.toString(),14),m="";for(let f in s){let d=s[f];if(d!=null){let h=d.shape||e.shape,g=h.length;m+=`${f}: ${g}D ${g>0?h:""} `}}console.log(`%c${u} %c${a} %c${l}D ${p} %c${c} %c${m} %c${i}`,"font-weight:bold","color:red","color:blue","color: orange","color: green","color: steelblue")}};function N1(r,t,e){let n={},o={};for(let u=0;u<t.length;u++)n[t[u].id]=!0;for(let u=0;u<r.length;u++){let l=r[u],c=l.inputs;for(let p in c){let m=c[p],f=!1;for(let d=0;d<t.length;d++)if(n[m.id]){l.outputs.forEach(h=>n[h.id]=!0),f=!0,o[l.id]=!0;break}if(f)break}}let s={};s[e.id]=!0;let i={};for(let u=r.length-1;u>=0;u--){let l=r[u],c=l.inputs;for(let p=0;p<l.outputs.length;p++)if(s[l.outputs[p].id]){for(let m in c)s[c[m].id]=!0,i[l.id]=!0;break}}let a=[];for(let u=0;u<r.length;u++){let l=r[u];if(o[l.id]&&i[l.id]){let c={};for(let m in l.inputs){let f=l.inputs[m];n[f.id]&&(c[m]=f)}let p=Object.assign({},l);p.inputs=c,p.outputs=l.outputs,a.push(p)}}return a}function k1(r,t,e,n){for(let o=t.length-1;o>=0;o--){let s=t[o],i=[];if(s.outputs.forEach(u=>{let l=r[u.id];l!=null?i.push(l):i.push(null)}),s.gradient==null)throw new Error(`Cannot compute gradient: gradient function not found for ${s.kernelName}.`);let a=s.gradient(i);for(let u in s.inputs){if(!(u in a))throw new Error(`Cannot backprop through input ${u}. Available gradients found: ${Object.keys(a)}.`);let l=e(()=>a[u]());if(l.dtype!=="float32")throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input ${u} must have 'float32' dtype, but has '${l.dtype}'`);let c=s.inputs[u];if(!An(l.shape,c.shape))throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input '${u}' has shape '${l.shape}', which does not match the shape of the input '${c.shape}'`);if(r[c.id]==null)r[c.id]=l;else{let p=r[c.id];r[c.id]=n(p,l),p.dispose()}}}}var T1=20,Yd=3,pS=7;function E1(r,t,e,n){let o=ni(t),s=n4(r,t,e,o),i=t.length,a=Mg(r,t,e,o,s),u=["Tensor"];return n&&(u.push(` dtype: ${e}`),u.push(` rank: ${i}`),u.push(` shape: [${t}]`),u.push(" values:")),u.push(a.map(l=>" "+l).join(`
`)),u.join(`
`)}function n4(r,t,e,n){let o=Zt(t),s=n[n.length-1],i=new Array(s).fill(0),a=t.length,u=e==="complex64"?Jd(r):r;if(a>1)for(let l=0;l<o/s;l++){let c=l*s;for(let p=0;p<s;p++)i[p]=Math.max(i[p],Zd(u[c+p],0,e).length)}return i}function Zd(r,t,e){let n;return Array.isArray(r)?n=`${parseFloat(r[0].toFixed(pS))} + ${parseFloat(r[1].toFixed(pS))}j`:Bo(r)?n=`'${r}'`:e==="bool"?n=_1(r):n=parseFloat(r.toFixed(pS)).toString(),Ou(n,t)}function _1(r){return r===0?"false":"true"}function Mg(r,t,e,n,o,s=!0){let i=e==="complex64"?2:1,a=t[0],u=t.length;if(u===0){if(e==="complex64"){let h=Jd(r);return[Zd(h[0],0,e)]}return e==="bool"?[_1(r[0])]:[r[0].toString()]}if(u===1){if(a>T1){let g=Yd*i,x=Array.from(r.slice(0,g)),b=Array.from(r.slice((a-Yd)*i,a*i));return e==="complex64"&&(x=Jd(x),b=Jd(b)),["["+x.map((w,C)=>Zd(w,o[C],e)).join(", ")+", ..., "+b.map((w,C)=>Zd(w,o[a-Yd+C],e)).join(", ")+"]"]}let h=e==="complex64"?Jd(r):Array.from(r);return["["+h.map((g,x)=>Zd(g,o[x],e)).join(", ")+"]"]}let l=t.slice(1),c=n.slice(1),p=n[0]*i,m=[];if(a>T1){for(let h=0;h<Yd;h++){let g=h*p,x=g+p;m.push(...Mg(r.slice(g,x),l,e,c,o,!1))}m.push("...");for(let h=a-Yd;h<a;h++){let g=h*p,x=g+p;m.push(...Mg(r.slice(g,x),l,e,c,o,h===a-1))}}else for(let h=0;h<a;h++){let g=h*p,x=g+p;m.push(...Mg(r.slice(g,x),l,e,c,o,h===a-1))}let f=u===2?",":"";m[0]="["+m[0]+f;for(let h=1;h<m.length-1;h++)m[h]=" "+m[h]+f;let d=`,
`;for(let h=2;h<u;h++)d+=`
`;return m[m.length-1]=" "+m[m.length-1]+"]"+(s?"":d),m}function Jd(r){let t=[];for(let e=0;e<r.length;e+=2)t.push([r[e],r[e+1]]);return t}var pe=class{constructor(t,e,n){if(this.dtype=e,this.shape=t.slice(),this.size=Zt(t),n!=null){let o=n.length;E(o===this.size,()=>`Length of values '${o}' does not match the size inferred by the shape '${this.size}'.`)}if(e==="complex64")throw new Error("complex64 dtype TensorBuffers are not supported. Please create a TensorBuffer for the real and imaginary parts separately and call tf.complex(real, imag).");this.values=n||Zv(e,this.size),this.strides=ni(t)}set(t,...e){e.length===0&&(e=[0]),E(e.length===this.rank,()=>`The number of provided coordinates (${e.length}) must match the rank (${this.rank})`);let n=this.locToIndex(e);this.values[n]=t}get(...t){t.length===0&&(t=[0]);let e=0;for(let o of t){if(o<0||o>=this.shape[e]){let s=`Requested out of range element at ${t}. Buffer shape=${this.shape}`;throw new Error(s)}e++}let n=t[t.length-1];for(let o=0;o<t.length-1;++o)n+=this.strides[o]*t[o];return this.values[n]}locToIndex(t){if(this.rank===0)return 0;if(this.rank===1)return t[0];let e=t[t.length-1];for(let n=0;n<t.length-1;++n)e+=this.strides[n]*t[n];return e}indexToLoc(t){if(this.rank===0)return[];if(this.rank===1)return[t];let e=new Array(this.shape.length);for(let n=0;n<e.length-1;++n)e[n]=Math.floor(t/this.strides[n]),t-=e[n]*this.strides[n];return e[e.length-1]=t,e}get rank(){return this.shape.length}toTensor(){return Ls().makeTensor(this.values,this.shape,this.dtype)}},Ls=null,Wp=null,o4=null;function A1(r){Ls=r}function $1(r){Wp=r}function D1(r){o4=r}var Ft=class{constructor(t,e,n,o){this.kept=!1,this.isDisposedInternal=!1,this.shape=t.slice(),this.dtype=e||"float32",this.size=Zt(t),this.strides=ni(t),this.dataId=n,this.id=o,this.rankType=this.rank<5?this.rank.toString():"higher"}get rank(){return this.shape.length}async buffer(){let t=await this.data();return Wp.buffer(this.shape,this.dtype,t)}bufferSync(){return Wp.buffer(this.shape,this.dtype,this.dataSync())}async array(){let t=await this.data();return Fu(this.shape,t,this.dtype==="complex64")}arraySync(){return Fu(this.shape,this.dataSync(),this.dtype==="complex64")}async data(){this.throwIfDisposed();let t=Ls().read(this.dataId);if(this.dtype==="string"){let e=await t;try{return e.map(n=>Gp(n))}catch(n){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}}return t}dataToGPU(t){return this.throwIfDisposed(),Ls().readToGPU(this.dataId,t)}dataSync(){this.throwIfDisposed();let t=Ls().readSync(this.dataId);if(this.dtype==="string")try{return t.map(e=>Gp(e))}catch(e){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}return t}async bytes(){this.throwIfDisposed();let t=await Ls().read(this.dataId);return this.dtype==="string"?t:new Uint8Array(t.buffer)}dispose(){this.isDisposed||(Ls().disposeTensor(this),this.isDisposedInternal=!0)}get isDisposed(){return this.isDisposedInternal}throwIfDisposed(){if(this.isDisposed)throw new Error("Tensor is disposed.")}print(t=!1){return Wp.print(this,t)}clone(){return this.throwIfDisposed(),Wp.clone(this)}toString(t=!1){let e=this.dataSync();return E1(e,this.shape,this.dtype,t)}cast(t){return this.throwIfDisposed(),Wp.cast(this,t)}variable(t=!0,e,n){return this.throwIfDisposed(),Ls().makeVariable(this,t,e,n)}};Object.defineProperty(Ft,Symbol.hasInstance,{value:r=>!!r&&r.data!=null&&r.dataSync!=null&&r.throwIfDisposed!=null});function O(){return Wd("Tensor",()=>Ft)}O();var Ha=class extends Ft{constructor(t,e,n,o){super(t.shape,t.dtype,t.dataId,o),this.trainable=e,this.name=n}assign(t){if(t.dtype!==this.dtype)throw new Error(`dtype of the new value (${t.dtype}) and previous value (${this.dtype}) must match`);if(!An(t.shape,this.shape))throw new Error(`shape of the new value (${t.shape}) and previous value (${this.shape}) must match`);Ls().disposeTensor(this),this.dataId=t.dataId,Ls().incRef(this,null)}dispose(){Ls().disposeVariable(this),this.isDisposedInternal=!0}};Object.defineProperty(Ha,Symbol.hasInstance,{value:r=>r instanceof Ft&&r.assign!=null&&r.assign instanceof Function});var fo={};Gt(fo,{assertTypesMatch:()=>xS,getTensorsInContainer:()=>Qd,isTensorInList:()=>i4,makeTypesMatch:()=>Wt});var mS;(function(r){r.R0="R0",r.R1="R1",r.R2="R2",r.R3="R3",r.R4="R4",r.R5="R5",r.R6="R6"})(mS||(mS={}));var fS;(function(r){r.float32="float32",r.int32="int32",r.bool="int32",r.complex64="complex64"})(fS||(fS={}));var dS;(function(r){r.float32="float32",r.int32="int32",r.bool="bool",r.complex64="complex64"})(dS||(dS={}));var hS;(function(r){r.float32="float32",r.int32="float32",r.bool="float32",r.complex64="complex64"})(hS||(hS={}));var gS;(function(r){r.float32="complex64",r.int32="complex64",r.bool="complex64",r.complex64="complex64"})(gS||(gS={}));var s4={float32:hS,int32:fS,bool:dS,complex64:gS};function or(r,t){if(r==="string"||t==="string"){if(r==="string"&&t==="string")return"string";throw new Error(`Can not upcast ${r} with ${t}`)}return s4[r][t]}function Gu(r){return or(r,"int32")}function Wt(r,t){if(r.dtype===t.dtype)return[r,t];let e=or(r.dtype,t.dtype);return[r.cast(e),t.cast(e)]}function xS(r,t){E(r.dtype===t.dtype,()=>`The dtypes of the first(${r.dtype}) and second(${t.dtype}) input must match`)}function i4(r,t){return t.some(e=>e.id===r.id)}function Qd(r){let t=[];return R1(r,t,new Set),t}function R1(r,t,e){if(r==null)return;if(r instanceof Ft){t.push(r);return}if(!a4(r))return;let n=r;for(let o in n){let s=n[o];e.has(s)||(e.add(s),R1(s,t,e))}}function a4(r){return Array.isArray(r)||typeof r=="object"}function yS(r){return r.kernelName!=null}var zg=class{constructor(){this.registeredVariables={},this.nextTapeNodeId=0,this.numBytes=0,this.numTensors=0,this.numStringTensors=0,this.numDataBuffers=0,this.gradientDepth=0,this.kernelDepth=0,this.scopeStack=[],this.numDataMovesStack=[],this.nextScopeId=0,this.tensorInfo=new WeakMap,this.profiling=!1,this.activeProfile={newBytes:0,newTensors:0,peakBytes:0,kernels:[],result:null,get kernelNames(){return Array.from(new Set(this.kernels.map(t=>t.name)))}}}dispose(){for(let t in this.registeredVariables)this.registeredVariables[t].dispose()}},Ul=class{constructor(t){this.ENV=t,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new zg}async ready(){if(this.pendingBackendInit!=null)return this.pendingBackendInit.then(()=>{});if(this.backendInstance!=null)return;let t=this.getSortedBackends();for(let e=0;e<t.length;e++){let n=t[e];if(await this.initializeBackend(n).success){await this.setBackend(n);return}}throw new Error("Could not initialize any backends, all backend initializations failed.")}get backend(){if(this.pendingBackendInit!=null)throw new Error(`Backend '${this.backendName}' has not yet been initialized. Make sure to await tf.ready() or await tf.setBackend() before calling other methods`);if(this.backendInstance==null){let{name:t,asyncInit:e}=this.initializeBackendsAndReturnBest();if(e)throw new Error(`The highest priority backend '${t}' has not yet been initialized. Make sure to await tf.ready() or await tf.setBackend() before calling other methods`);this.setBackend(t)}return this.backendInstance}backendNames(){return Object.keys(this.registryFactory)}findBackend(t){if(!(t in this.registry))if(t in this.registryFactory){let{asyncInit:e}=this.initializeBackend(t);if(e)return null}else return null;return this.registry[t]}findBackendFactory(t){return t in this.registryFactory?this.registryFactory[t].factory:null}registerBackend(t,e,n=1){return t in this.registryFactory?(Ii(`${t} backend was already registered. Reusing existing backend factory.`),!1):(this.registryFactory[t]={factory:e,priority:n},!0)}async setBackend(t){if(this.registryFactory[t]==null)throw new Error(`Backend name '${t}' not found in registry`);if(this.backendName=t,this.registry[t]==null){this.backendInstance=null;let{success:e,asyncInit:n}=this.initializeBackend(t);if(!(n?await e:e))return!1}return this.backendInstance=this.registry[t],this.setupRegisteredKernels(),this.profiler=new Lg(this.backendInstance),!0}setupRegisteredKernels(){Fg(this.backendName).forEach(e=>{e.setupFunc!=null&&e.setupFunc(this.backendInstance)})}disposeRegisteredKernels(t){Fg(t).forEach(n=>{n.disposeFunc!=null&&n.disposeFunc(this.registry[t])})}initializeBackend(t){let e=this.registryFactory[t];if(e==null)throw new Error(`Cannot initialize backend ${t}, no registration found.`);try{let n=e.factory();if(n&&!(n instanceof Mo)&&typeof n.then=="function"){let o=++this.pendingBackendInitId,s=n.then(i=>o<this.pendingBackendInitId?!1:(this.registry[t]=i,this.pendingBackendInit=null,!0)).catch(i=>(o<this.pendingBackendInitId||(this.pendingBackendInit=null,Ii(`Initialization of backend ${t} failed`),Ii(i.stack||i.message)),!1));return this.pendingBackendInit=s,{success:s,asyncInit:!0}}else return this.registry[t]=n,{success:!0,asyncInit:!1}}catch(n){return Ii(`Initialization of backend ${t} failed`),Ii(n.stack||n.message),{success:!1,asyncInit:!1}}}removeBackend(t){if(!(t in this.registryFactory))throw new Error(`${t} backend not found in registry`);this.backendName===t&&this.pendingBackendInit!=null&&this.pendingBackendInitId++,t in this.registry&&(this.disposeRegisteredKernels(t),this.registry[t].dispose(),delete this.registry[t]),delete this.registryFactory[t],this.backendName===t&&(this.pendingBackendInit=null,this.backendName=null,this.backendInstance=null)}getSortedBackends(){if(Object.keys(this.registryFactory).length===0)throw new Error("No backend found in registry.");return Object.keys(this.registryFactory).sort((t,e)=>this.registryFactory[e].priority-this.registryFactory[t].priority)}initializeBackendsAndReturnBest(){let t=this.getSortedBackends();for(let e=0;e<t.length;e++){let n=t[e],{success:o,asyncInit:s}=this.initializeBackend(n);if(s||o)return{name:n,asyncInit:s}}throw new Error("Could not initialize any backends, all backend initializations failed.")}moveData(t,e){let n=this.state.tensorInfo.get(e),o=n.backend,s=this.readSync(e),i=o.refCount(e);o.disposeData(e,!0),n.backend=t,t.move(e,s,n.shape,n.dtype,i),this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack[this.state.numDataMovesStack.length-1]++}tidy(t,e){let n=null;if(e==null){if(typeof t!="function")throw new Error("Please provide a function to tidy()");e=t}else{if(typeof t!="string"&&!(t instanceof String))throw new Error("When calling with two arguments, the first argument to tidy() must be a string");if(typeof e!="function")throw new Error("When calling with two arguments, the 2nd argument to tidy() must be a function");n=t}let o;return this.scopedRun(()=>this.startScope(n),()=>this.endScope(o),()=>(o=e(),o instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),o))}scopedRun(t,e,n){t();try{let o=n();return e(),o}catch(o){throw e(),o}}nextTensorId(){return Ul.nextTensorId++}nextVariableId(){return Ul.nextVariableId++}clone(t){let e=T.runKernel(lo,{x:t}),n={x:t},o=i=>({x:()=>{let a="float32",u={x:i},l={dtype:a};return T.runKernel(io,u,l)}}),s=[];return this.addTapeNode(this.state.activeScope.name,n,[e],o,s,{}),e}runKernel(t,e,n){if(this.backendName==null&&this.backend,!(jd(t,this.backendName)!=null))throw new Error(`Kernel '${t}' not registered for backend '${this.backendName}'`);return this.runKernelFunc({kernelName:t,inputs:e,attrs:n})}shouldCheckForMemLeaks(){return this.ENV.getBool("IS_TEST")}checkKernelForMemLeak(t,e,n){let o=this.backend.numDataIds(),s=0;n.forEach(u=>{s+=u.dtype==="complex64"?3:1});let i=this.state.numDataMovesStack[this.state.numDataMovesStack.length-1],a=o-e-s-i;if(a>0)throw new Error(`Backend '${this.backendName}' has an internal memory leak (${a} data ids) after running '${t}'`)}runKernelFunc(t){let e,n=[],o=this.isTapeOn(),s=this.state.numBytes,i=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);let a;this.backendName==null&&this.backend;let u,l=yS(t)?t.kernelName:this.state.activeScope!=null?this.state.activeScope.name:"";if(yS(t)){let{kernelName:d,inputs:h,attrs:g}=t;this.backendName==null&&this.backend;let x=jd(d,this.backendName);E(x!=null,()=>`Cannot find registered kernel '${d}' for backend '${this.backendName}'`),a=()=>{let b=this.backend.numDataIds();u=x.kernelFunc({inputs:h,attrs:g,backend:this.backend});let w=Array.isArray(u)?u:[u];this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(d,b,w);let C=w.map(N=>N.rank!=null?N:this.makeTensorFromTensorInfo(N));if(o){let N=this.getTensorsForGradient(d,h,C);n=this.saveTensorsForBackwardMode(N)}return C}}else{let{forwardFunc:d}=t,h=g=>{!o||(n=g.map(x=>this.keep(this.clone(x))))};a=()=>{let g=this.backend.numDataIds();u=this.tidy(()=>d(this.backend,h));let x=Array.isArray(u)?u:[u];return this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(l,g,x),x}}let{inputs:c,attrs:p}=t,m=yS(t)?null:t.backwardsFunc,f;return this.scopedRun(()=>this.state.kernelDepth++,()=>this.state.kernelDepth--,()=>{!this.ENV.getBool("DEBUG")&&!this.state.profiling?e=a():(f=this.profiler.profileKernel(l,c,()=>a()),this.ENV.getBool("DEBUG")&&this.profiler.logKernelProfile(f),e=f.outputs)}),o&&this.addTapeNode(l,c,e,m,n,p),this.state.profiling&&this.state.activeProfile.kernels.push({name:l,bytesAdded:this.state.numBytes-s,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-i,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(c).map(d=>c[d]!=null?c[d].shape:null),outputShapes:e.map(d=>d.shape),kernelTimeMs:f.timeMs,extraInfo:f.extraInfo}),Array.isArray(u)?e:e[0]}saveTensorsForBackwardMode(t){return t.map(n=>this.keep(this.clone(n)))}getTensorsForGradient(t,e,n){let o=oS(t);if(o!=null){let s=o.inputsToSave||[],i=o.outputsToSave||[],a;o.saveAllInputs?(E(Array.isArray(e),()=>"saveAllInputs is true, expected inputs to be an array."),a=Object.keys(e).map(l=>e[l])):a=s.map(l=>e[l]);let u=n.filter((l,c)=>i[c]);return a.concat(u)}return[]}makeTensor(t,e,n,o){if(t==null)throw new Error("Values passed to engine.makeTensor() are null");n=n||"float32",o=o||this.backend;let s=t;n==="string"&&Bo(t[0])&&(s=t.map(u=>Wl(u)));let i=o.write(s,e,n),a=new Ft(e,n,i,this.nextTensorId());if(this.trackTensor(a,o),n==="string"){let u=this.state.tensorInfo.get(i),l=tS(s);this.state.numBytes+=l-u.bytes,u.bytes=l}return a}makeTensorFromDataId(t,e,n,o){n=n||"float32";let s={dataId:t,shape:e,dtype:n};return this.makeTensorFromTensorInfo(s,o)}makeTensorFromTensorInfo(t,e){let{dataId:n,shape:o,dtype:s}=t,i=new Ft(o,s,n,this.nextTensorId());return this.trackTensor(i,e),i}makeVariable(t,e=!0,n,o){n=n||this.nextVariableId().toString(),o!=null&&o!==t.dtype&&(t=t.cast(o));let s=new Ha(t,e,n,this.nextTensorId());if(this.state.registeredVariables[s.name]!=null)throw new Error(`Variable with name ${s.name} was already registered`);return this.state.registeredVariables[s.name]=s,this.incRef(s,this.backend),s}trackTensor(t,e){this.state.numTensors++,t.dtype==="string"&&this.state.numStringTensors++;let n=0;t.dtype!=="complex64"&&t.dtype!=="string"&&(n=t.size*Rg(t.dtype)),this.state.numBytes+=n,this.state.tensorInfo.has(t.dataId)||(this.state.numDataBuffers++,this.state.tensorInfo.set(t.dataId,{backend:e||this.backend,dtype:t.dtype,shape:t.shape,bytes:n})),t instanceof Ha||this.track(t)}incRef(t,e){this.trackTensor(t,e),this.backend.incRef(t.dataId)}removeDataId(t,e){this.state.tensorInfo.has(t)&&this.state.tensorInfo.get(t).backend===e&&(this.state.tensorInfo.delete(t),this.state.numDataBuffers--)}disposeTensor(t){if(!this.state.tensorInfo.has(t.dataId))return;let e=this.state.tensorInfo.get(t.dataId);if(this.state.numTensors--,t.dtype==="string"&&(this.state.numStringTensors--,this.state.numBytes-=e.bytes),t.dtype!=="complex64"&&t.dtype!=="string"){let n=t.size*Rg(t.dtype);this.state.numBytes-=n}e.backend.disposeData(t.dataId)&&this.removeDataId(t.dataId,e.backend)}disposeVariables(){for(let t in this.state.registeredVariables){let e=this.state.registeredVariables[t];this.disposeVariable(e)}}disposeVariable(t){this.disposeTensor(t),this.state.registeredVariables[t.name]!=null&&delete this.state.registeredVariables[t.name]}memory(){let t=this.backend.memory();return t.numTensors=this.state.numTensors,t.numDataBuffers=this.state.numDataBuffers,t.numBytes=this.state.numBytes,this.state.numStringTensors>0&&(t.unreliable=!0,t.reasons==null&&(t.reasons=[]),t.reasons.push("Memory usage by string tensors is approximate (2 bytes per character)")),t}async profile(t){this.state.profiling=!0;let e=this.state.numBytes,n=this.state.numTensors;this.state.activeProfile.kernels=[],this.state.activeProfile.result=await t(),this.state.profiling=!1,this.state.activeProfile.peakBytes=Math.max(...this.state.activeProfile.kernels.map(o=>o.totalBytesSnapshot)),this.state.activeProfile.newBytes=this.state.numBytes-e,this.state.activeProfile.newTensors=this.state.numTensors-n;for(let o of this.state.activeProfile.kernels)o.kernelTimeMs=await o.kernelTimeMs,o.extraInfo=await o.extraInfo;return this.state.activeProfile}isTapeOn(){return this.state.gradientDepth>0&&this.state.kernelDepth===0}addTapeNode(t,e,n,o,s,i){let a={id:this.state.nextTapeNodeId++,kernelName:t,inputs:e,outputs:n,saved:s},u=oS(t);u!=null&&(o=u.gradFunc),o!=null&&(a.gradient=l=>(l=l.map((c,p)=>{if(c==null){let m=n[p],f=ip(m.size,m.dtype);return this.makeTensor(f,m.shape,m.dtype)}return c}),o(l.length>1?l:l[0],s,i))),this.state.activeTape.push(a)}keep(t){return t.kept=!0,t}startTape(){this.state.gradientDepth===0&&(this.state.activeTape=[]),this.state.gradientDepth++}endTape(){this.state.gradientDepth--}startScope(t){let e={track:[],name:"unnamed scope",id:this.state.nextScopeId++};t&&(e.name=t),this.state.scopeStack.push(e),this.state.activeScope=e}endScope(t){let e=Qd(t),n=new Set(e.map(s=>s.id));for(let s=0;s<this.state.activeScope.track.length;s++){let i=this.state.activeScope.track[s];!i.kept&&!n.has(i.id)&&i.dispose()}let o=this.state.scopeStack.pop();this.state.activeScope=this.state.scopeStack.length===0?null:this.state.scopeStack[this.state.scopeStack.length-1],e.forEach(s=>{!s.kept&&s.scopeId===o.id&&this.track(s)})}gradients(t,e,n,o=!1){if(E(e.length>0,()=>"gradients() received an empty list of xs."),n!=null&&n.dtype!=="float32")throw new Error(`dy must have 'float32' dtype, but has '${n.dtype}'`);let s=this.scopedRun(()=>this.startTape(),()=>this.endTape(),()=>this.tidy("forward",t));E(s instanceof Ft,()=>"The result y returned by f() must be a tensor.");let i=N1(this.state.activeTape,e,s);if(!o&&i.length===0&&e.length>0)throw new Error("Cannot compute gradient of y=f(x) with respect to x. Make sure that the f you passed encloses all operations that lead from x to y.");return this.tidy("backward",()=>{let a={};a[s.id]=n==null?l4(s.shape):n,k1(a,i,l=>this.tidy(l),u4);let u=e.map(l=>a[l.id]);return this.state.gradientDepth===0&&(this.state.activeTape.forEach(l=>{for(let c of l.saved)c.dispose()}),this.state.activeTape=null),{value:s,grads:u}})}customGrad(t){return E(ri(t),()=>"The f passed in customGrad(f) must be a function."),(...e)=>{E(e.every(a=>a instanceof Ft),()=>"The args passed in customGrad(f)(x1, x2,...) must all be tensors");let n,o={};e.forEach((a,u)=>{o[u]=a});let s=(a,u)=>(n=t(...e,u),E(n.value instanceof Ft,()=>"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"),E(ri(n.gradFunc),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function."),n.value),i=(a,u)=>{let l=n.gradFunc(a,u),c=Array.isArray(l)?l:[l];E(c.length===e.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(...)."),E(c.every(m=>m instanceof Ft),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns a list of only tensors.");let p={};return c.forEach((m,f)=>{p[f]=()=>m}),p};return this.runKernelFunc({forwardFunc:s,backwardsFunc:i,inputs:o})}}readSync(t){return this.state.tensorInfo.get(t).backend.readSync(t)}read(t){return this.state.tensorInfo.get(t).backend.read(t)}readToGPU(t,e){return this.state.tensorInfo.get(t).backend.readToGPU(t,e)}async time(t){let e=Vu(),n=await this.backend.time(t);return n.wallMs=Vu()-e,n}track(t){return this.state.activeScope!=null&&(t.scopeId=this.state.activeScope.id,this.state.activeScope.track.push(t)),t}get registeredVariables(){return this.state.registeredVariables}reset(){this.pendingBackendInitId++,this.state.dispose(),this.ENV.reset(),this.state=new zg;for(let t in this.registry)this.disposeRegisteredKernels(t),this.registry[t].dispose(),delete this.registry[t];this.backendName=null,this.backendInstance=null,this.pendingBackendInit=null}};Ul.nextTensorId=0;Ul.nextVariableId=0;function l4(r){let t=zd(Zt(r),"float32");return T.makeTensor(t,r,"float32")}function bS(){let r=nS();if(r._tfengine==null){let t=new Gd(r);r._tfengine=new Ul(t)}return s1(r._tfengine.ENV),A1(()=>r._tfengine),r._tfengine}var T=bS();function u4(r,t){let e={a:r,b:t};return T.runKernel(Yn,e)}var Hl={};Gt(Hl,{isBrowser:()=>CS,isMobile:()=>m4,mockIsMobile:()=>p4});function c4(){return typeof navigator!="undefined"&&navigator!=null}var wS;function p4(r){wS=r}function m4(r){if(wS!==void 0)return wS;if(r||c4()){if(r||(r=navigator),r.product==="ReactNative")return!0;let t=r.userAgent||r.vendor||(typeof window!="undefined"?window.opera:"");if(!t){let e=r;return e.userAgentData&&e.userAgentData.mobile}return/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(t)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(t.substr(0,4))}return!1}function CS(){return typeof window!="undefined"&&window.document!=null||typeof WorkerGlobalScope!="undefined"}var Rn=M();Rn.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.")});Rn.registerFlag("IS_BROWSER",()=>CS());Rn.registerFlag("IS_NODE",()=>typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined");Rn.registerFlag("IS_CHROME",()=>typeof navigator!="undefined"&&navigator!=null&&navigator.userAgent!=null&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor));Rn.registerFlag("PROD",()=>!1);Rn.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY",()=>Rn.getBool("DEBUG"));Rn.registerFlag("DEPRECATION_WARNINGS_ENABLED",()=>!0);Rn.registerFlag("IS_TEST",()=>!1);Rn.registerFlag("CHECK_COMPUTATION_FOR_ERRORS",()=>!0);Rn.registerFlag("WRAP_TO_IMAGEBITMAP",()=>!1);Rn.registerFlag("ENGINE_COMPILE_ONLY",()=>!1);Rn.registerFlag("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU",()=>!1);Rn.registerFlag("USE_SETTIMEOUTCUSTOM",()=>!1);function Mr(r,t){let e=r;if(hr(r))return t==="string"?[]:[r.length];if(!Array.isArray(r))return[];let n=[];for(;Array.isArray(e)||hr(e)&&t!=="string";)n.push(e.length),e=e[0];return Array.isArray(r)&&M().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")&&O1(r,n,[]),n}function O1(r,t,e){if(e=e||[],!Array.isArray(r)&&!hr(r)){E(t.length===0,()=>`Element arr[${e.join("][")}] is a primitive, but should be an array/TypedArray of ${t[0]} elements`);return}E(t.length>0,()=>`Element arr[${e.join("][")}] should be a primitive, but is an array of ${r.length} elements`),E(r.length===t[0],()=>`Element arr[${e.join("][")}] should have ${t[0]} elements, but has ${r.length} elements`);let n=t.slice(1);for(let o=0;o<r.length;++o)O1(r[o],n,e.concat(o))}function F1(r,t,e,n){if(r!=="string_or_numeric"){if(r==null)throw new Error("Expected dtype cannot be null.");if(r!=="numeric"&&r!==t||r==="numeric"&&t==="string")throw new Error(`Argument '${e}' passed to '${n}' must be ${r} tensor, but got ${t} tensor`)}}function I(r,t,e,n="numeric"){if(r instanceof Ft)return F1(n,r.dtype,t,e),r;let o=op(r);if(o!=="string"&&["bool","int32","float32"].indexOf(n)>=0&&(o=n),F1(n,o,t,e),r==null||!hr(r)&&!Array.isArray(r)&&typeof r!="number"&&typeof r!="boolean"&&typeof r!="string"){let u=r==null?"null":r.constructor.name;throw new Error(`Argument '${t}' passed to '${e}' must be a Tensor or TensorLike, but got '${u}'`)}let s=Mr(r,o);!hr(r)&&!Array.isArray(r)&&(r=[r]);let a=o!=="string"?Vp(r,o):zo(r,[],!0);return T.makeTensor(a,s,o)}function qa(r,t,e,n="numeric"){if(!Array.isArray(r))throw new Error(`Argument ${t} passed to ${e} must be a \`Tensor[]\` or \`TensorLike[]\``);return r.map((s,i)=>I(s,`${t}[${i}]`,e,n))}var IS="__op";function k(r){let t=Object.keys(r);if(t.length!==1)throw new Error(`Please provide an object with a single key (operation name) mapping to a function. Got an object with ${t.length} keys.`);let e=t[0],n=r[e];e.endsWith("_")&&(e=e.substring(0,e.length-1)),e=e+IS;let o=(...s)=>{T.startScope(e);try{let i=n(...s);return Vd(i)&&console.error("Cannot return a Promise inside of tidy."),T.endScope(i),i}catch(i){throw T.endScope(null),i}};return Object.defineProperty(o,"name",{value:e,configurable:!0}),o}function f4(r,t){let e=I(r,"real","complex"),n=I(t,"imag","complex");$e(e.shape,n.shape,`real and imag shapes, ${e.shape} and ${n.shape}, must match in call to tf.complex().`);let o={real:e,imag:n};return T.runKernel(pp,o)}var bn=k({complex_:f4});function on(r,t,e,n){if(n==null&&(n=op(r)),n==="complex64")throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).");if(!hr(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(t!=null){Bd(t);let o=Zt(t),s=Zt(e);E(o===s,()=>`Based on the provided shape, [${t}], the tensor should have ${o} values but has ${s}`);for(let i=0;i<e.length;++i){let a=e[i],u=i===e.length-1?a!==Zt(t.slice(i)):!0;E(e[i]===t[i]||!u,()=>`Error creating a new Tensor. Inferred shape (${e}) does not match the provided shape (${t}). `)}}return!hr(r)&&!Array.isArray(r)&&(r=[r]),t=t||e,r=n!=="string"?Vp(r,n):zo(r,[],!0),T.makeTensor(r,t,n)}function wr(r,t,e){let n=Mr(r,e);return on(r,t,n,e)}var th={float32:4,float16:2,int32:4,uint16:2,uint8:1,bool:1,complex64:8};var Bg=4;async function L1(r,t){let e=[],n=[],o=Array.isArray(r)?r.map(i=>i.name):Object.keys(r);for(let i=0;i<o.length;++i){let a=o[i],u=Array.isArray(r)?r[i].tensor:r[a];if(u.dtype!=="float32"&&u.dtype!=="int32"&&u.dtype!=="bool"&&u.dtype!=="string"&&u.dtype!=="complex64")throw new Error(`Unsupported dtype in weight '${a}': ${u.dtype}`);let l={name:a,shape:u.shape,dtype:u.dtype};if(u.dtype==="string"){let c=new Promise(async p=>{let m=await u.bytes(),f=m.reduce((g,x)=>g+x.length,0)+Bg*m.length,d=new Uint8Array(f),h=0;for(let g=0;g<m.length;g++){let x=m[g],b=new Uint8Array(new Uint32Array([x.length]).buffer);d.set(b,h),h+=Bg,d.set(x,h),h+=x.length}p(d)});n.push(c)}else n.push(u.data());t!=null&&(l.group=t),e.push(l)}let s=await Promise.all(n);return{data:d4(s),specs:e}}function Vg(r,t){let e={},n,o=0;for(let s of t){let i=s.name,a=s.dtype,u=s.shape,l=Zt(u),c;if("quantization"in s){let p=s.quantization;if(p.dtype==="uint8"||p.dtype==="uint16"){if(!("min"in p&&"scale"in p))throw new Error(`Weight ${s.name} with quantization ${p.dtype} doesn't have corresponding metadata min and scale.`)}else if(p.dtype==="float16"){if(a!=="float32")throw new Error(`Weight ${s.name} is quantized with ${p.dtype} which only supports weights of type float32 not ${a}.`)}else throw new Error(`Weight ${s.name} has unknown quantization dtype ${p.dtype}. Supported quantization dtypes are: 'uint8', 'uint16', and 'float16'.`);let m=th[p.dtype],f=r.slice(o,o+l*m),d=p.dtype==="uint8"?new Uint8Array(f):new Uint16Array(f);if(a==="float32")if(p.dtype==="uint8"||p.dtype==="uint16"){c=new Float32Array(d.length);for(let h=0;h<d.length;h++){let g=d[h];c[h]=g*p.scale+p.min}}else if(p.dtype==="float16")n===void 0&&(n=y4()),c=n(d);else throw new Error(`Unsupported quantization type ${p.dtype} for weight type float32.`);else if(a==="int32"){if(p.dtype!=="uint8"&&p.dtype!=="uint16")throw new Error(`Unsupported quantization type ${p.dtype} for weight type int32.`);c=new Int32Array(d.length);for(let h=0;h<d.length;h++){let g=d[h];c[h]=Math.round(g*p.scale+p.min)}}else throw new Error(`Unsupported dtype in weight '${i}': ${a}`);o+=l*m}else if(a==="string"){let p=Zt(s.shape);c=[];for(let m=0;m<p;m++){let f=new Uint32Array(r.slice(o,o+Bg))[0];o+=Bg;let d=new Uint8Array(r.slice(o,o+f));c.push(d),o+=f}}else{let p=th[a],m=r.slice(o,o+l*p);if(a==="float32")c=new Float32Array(m);else if(a==="int32")c=new Int32Array(m);else if(a==="bool")c=new Uint8Array(m);else if(a==="complex64"){c=new Float32Array(m);let f=new Float32Array(c.length/2),d=new Float32Array(c.length/2);for(let x=0;x<f.length;x++)f[x]=c[x*2],d[x]=c[x*2+1];let h=wr(f,u,"float32"),g=wr(d,u,"float32");e[i]=bn(h,g),h.dispose(),g.dispose()}else throw new Error(`Unsupported dtype in weight '${i}': ${a}`);o+=l*p}a!=="complex64"&&(e[i]=wr(c,u,a))}return e}function d4(r){if(r===null)throw new Error(`Invalid input value: ${JSON.stringify(r)}`);let t=0,e=[];r.forEach(s=>{if(t+=s.byteLength,e.push(s.byteLength===s.buffer.byteLength?s:new s.constructor(s)),!(s instanceof Float32Array||s instanceof Int32Array||s instanceof Uint8Array))throw new Error(`Unsupported TypedArray subtype: ${s.constructor.name}`)});let n=new Uint8Array(t),o=0;return e.forEach(s=>{n.set(new Uint8Array(s.buffer),o),o+=s.byteLength}),n.buffer}var vS=typeof Buffer!="undefined"&&(typeof Blob=="undefined"||typeof atob=="undefined"||typeof btoa=="undefined");function P1(r){return vS?Buffer.byteLength(r):new Blob([r]).size}function M1(r){if(vS)return Buffer.from(r).toString("base64");let t=new Uint8Array(r),e="";for(let n=0,o=t.length;n<o;n++)e+=String.fromCharCode(t[n]);return btoa(e)}function z1(r){if(vS){let n=Buffer.from(r,"base64");return n.buffer.slice(n.byteOffset,n.byteOffset+n.byteLength)}let t=atob(r),e=new Uint8Array(t.length);for(let n=0;n<t.length;++n)e.set([t.charCodeAt(n)],n);return e.buffer}function Up(r){if(r.length===1)return r[0];let t=0;r.forEach(o=>{t+=o.byteLength});let e=new Uint8Array(t),n=0;return r.forEach(o=>{e.set(new Uint8Array(o),n),n+=o.byteLength}),e.buffer}function SS(r){let t="/";for(r=r.trim();r.endsWith(t);)r=r.slice(0,r.length-1);let e=r.split(t);return e[e.length-1]}function Gg(r,t){let e={modelTopology:r.modelTopology,format:r.format,generatedBy:r.generatedBy,convertedBy:r.convertedBy,weightsManifest:t};return r.signature!=null&&(e.signature=r.signature),r.userDefinedMetadata!=null&&(e.userDefinedMetadata=r.userDefinedMetadata),r.modelInitializer!=null&&(e.modelInitializer=r.modelInitializer),r.trainingConfig!=null&&(e.trainingConfig=r.trainingConfig),e}function NS(r,t,e){let n={modelTopology:r.modelTopology,format:r.format,generatedBy:r.generatedBy,convertedBy:r.convertedBy};if(r.trainingConfig!=null&&(n.trainingConfig=r.trainingConfig),r.weightsManifest!=null){if(!t)throw new Error("modelJSON has weightsManifest but weightSpecs is null");if(!e)throw new Error("modelJSON has weightsManifest but weightData is null");n.weightSpecs=t,n.weightData=e}return r.signature!=null&&(n.signature=r.signature),r.userDefinedMetadata!=null&&(n.userDefinedMetadata=r.userDefinedMetadata),r.modelInitializer!=null&&(n.modelInitializer=r.modelInitializer),n}async function Hp(r,t){let e,n;return r.weightsManifest!=null&&([e,n]=await t(r.weightsManifest)),NS(r,e,n)}function vi(r){if(r.modelTopology instanceof ArrayBuffer)throw new Error("Expected JSON model topology, received ArrayBuffer.");return{dateSaved:new Date,modelTopologyType:"JSON",modelTopologyBytes:r.modelTopology==null?0:P1(JSON.stringify(r.modelTopology)),weightSpecsBytes:r.weightSpecs==null?0:P1(JSON.stringify(r.weightSpecs)),weightDataBytes:r.weightData==null?0:r.weightData.byteLength}}function Wg(r){let t=[];for(let e of r)t.push(...e.weights);return t}function h4(){let r=e=>{let n=e<<13,o=0;for(;(n&8388608)===0;)o-=8388608,n<<=1;return n&=-8388609,o+=947912704,n|o},t=new Uint32Array(2048);t[0]=0;for(let e=1;e<1024;e++)t[e]=r(e);for(let e=1024;e<2048;e++)t[e]=939524096+(e-1024<<13);return t}function g4(){let r=new Uint32Array(64);r[0]=0,r[31]=1199570944,r[32]=2147483648,r[63]=3347054592;for(let t=1;t<31;t++)r[t]=t<<23;for(let t=33;t<63;t++)r[t]=2147483648+(t-32<<23);return r}function x4(){let r=new Uint32Array(64);for(let t=0;t<64;t++)r[t]=1024;return r[0]=r[32]=0,r}function y4(){let r=h4(),t=g4(),e=x4();return n=>{let o=new ArrayBuffer(4*n.length),s=new Uint32Array(o);for(let i=0;i<n.length;i++){let a=n[i],u=r[e[a>>10]+(a&1023)]+t[a>>10];s[i]=u}return new Float32Array(o)}}var Ce=class{constructor(){this.saveRouters=[],this.loadRouters=[]}static getInstance(){return Ce.instance==null&&(Ce.instance=new Ce),Ce.instance}static registerSaveRouter(t){Ce.getInstance().saveRouters.push(t)}static registerLoadRouter(t){Ce.getInstance().loadRouters.push(t)}static getSaveHandlers(t){return Ce.getHandlers(t,"save")}static getLoadHandlers(t,e){return Ce.getHandlers(t,"load",e)}static getHandlers(t,e,n){let o=[];return(e==="load"?Ce.getInstance().loadRouters:Ce.getInstance().saveRouters).forEach(i=>{let a=i(t,n);a!==null&&o.push(a)}),o}},B1=r=>Ce.registerSaveRouter(r),V1=r=>Ce.registerLoadRouter(r),G1=r=>Ce.getSaveHandlers(r),W1=(r,t)=>Ce.getLoadHandlers(r,t);var kS="tensorflowjs",TS=1,Wu="models_store",ql="model_info_store";function U1(){if(!M().getBool("IS_BROWSER"))throw new Error("Failed to obtain IndexedDB factory because the current environmentis not a web browser.");let r=typeof window=="undefined"?self:window,t=r.indexedDB||r.mozIndexedDB||r.webkitIndexedDB||r.msIndexedDB||r.shimIndexedDB;if(t==null)throw new Error("The current browser does not appear to support IndexedDB.");return t}function ES(r){let t=r.result;t.createObjectStore(Wu,{keyPath:"modelPath"}),t.createObjectStore(ql,{keyPath:"modelPath"})}var Si=class{constructor(t){if(this.indexedDB=U1(),t==null||!t)throw new Error("For IndexedDB, modelPath must not be null, undefined or empty.");this.modelPath=t}async save(t){if(t.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");return this.databaseAction(this.modelPath,t)}async load(){return this.databaseAction(this.modelPath)}databaseAction(t,e){return new Promise((n,o)=>{let s=this.indexedDB.open(kS,TS);s.onupgradeneeded=()=>ES(s),s.onsuccess=()=>{let i=s.result;if(e==null){let a=i.transaction(Wu,"readonly"),l=a.objectStore(Wu).get(this.modelPath);l.onsuccess=()=>{if(l.result==null)return i.close(),o(new Error(`Cannot find model with path '${this.modelPath}' in IndexedDB.`));n(l.result.modelArtifacts)},l.onerror=c=>(i.close(),o(l.error)),a.oncomplete=()=>i.close()}else{let a=vi(e),u=i.transaction(ql,"readwrite"),l=u.objectStore(ql),c=l.put({modelPath:this.modelPath,modelArtifactsInfo:a}),p;c.onsuccess=()=>{p=i.transaction(Wu,"readwrite");let f=p.objectStore(Wu).put({modelPath:this.modelPath,modelArtifacts:e,modelArtifactsInfo:a});f.onsuccess=()=>n({modelArtifactsInfo:a}),f.onerror=d=>{l=u.objectStore(ql);let h=l.delete(this.modelPath);h.onsuccess=()=>(i.close(),o(f.error)),h.onerror=g=>(i.close(),o(f.error))}},c.onerror=m=>(i.close(),o(c.error)),u.oncomplete=()=>{p==null?i.close():p.oncomplete=()=>i.close()}}},s.onerror=i=>o(s.error)})}};Si.URL_SCHEME="indexeddb://";var H1=r=>M().getBool("IS_BROWSER")&&!Array.isArray(r)&&r.startsWith(Si.URL_SCHEME)?b4(r.slice(Si.URL_SCHEME.length)):null;Ce.registerSaveRouter(H1);Ce.registerLoadRouter(H1);function b4(r){return new Si(r)}function w4(r){return r.startsWith(Si.URL_SCHEME)?r.slice(Si.URL_SCHEME.length):r}var Ug=class{constructor(){this.indexedDB=U1()}async listModels(){return new Promise((t,e)=>{let n=this.indexedDB.open(kS,TS);n.onupgradeneeded=()=>ES(n),n.onsuccess=()=>{let o=n.result,s=o.transaction(ql,"readonly"),a=s.objectStore(ql).getAll();a.onsuccess=()=>{let u={};for(let l of a.result)u[l.modelPath]=l.modelArtifactsInfo;t(u)},a.onerror=u=>(o.close(),e(a.error)),s.oncomplete=()=>o.close()},n.onerror=o=>e(n.error)})}async removeModel(t){return t=w4(t),new Promise((e,n)=>{let o=this.indexedDB.open(kS,TS);o.onupgradeneeded=()=>ES(o),o.onsuccess=()=>{let s=o.result,i=s.transaction(ql,"readwrite"),a=i.objectStore(ql),u=a.get(t),l;u.onsuccess=()=>{if(u.result==null)return s.close(),n(new Error(`Cannot find model with path '${t}' in IndexedDB.`));{let c=a.delete(t),p=()=>{l=s.transaction(Wu,"readwrite");let f=l.objectStore(Wu).delete(t);f.onsuccess=()=>e(u.result.modelArtifactsInfo),f.onerror=d=>n(u.error)};c.onsuccess=p,c.onerror=m=>(p(),s.close(),n(u.error))}},u.onerror=c=>(s.close(),n(u.error)),i.oncomplete=()=>{l==null?s.close():l.oncomplete=()=>s.close()}},o.onerror=s=>n(o.error)})}};var Ka="/",qp="tensorflowjs_models",q1="info",C4="model_topology",I4="weight_specs",v4="weight_data",S4="model_metadata";function K1(r){return{info:[qp,r,q1].join(Ka),topology:[qp,r,C4].join(Ka),weightSpecs:[qp,r,I4].join(Ka),weightData:[qp,r,v4].join(Ka),modelMetadata:[qp,r,S4].join(Ka)}}function j1(r){for(let t of Object.values(r))window.localStorage.removeItem(t)}function N4(r){let t=r.split(Ka);if(t.length<3)throw new Error(`Invalid key format: ${r}`);return t.slice(1,t.length-1).join(Ka)}function k4(r){return r.startsWith(Ni.URL_SCHEME)?r.slice(Ni.URL_SCHEME.length):r}var Ni=class{constructor(t){if(!M().getBool("IS_BROWSER")||typeof window=="undefined"||typeof window.localStorage=="undefined")throw new Error("The current environment does not support local storage.");if(this.LS=window.localStorage,t==null||!t)throw new Error("For local storage, modelPath must not be null, undefined or empty.");this.modelPath=t,this.keys=K1(this.modelPath)}async save(t){if(t.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");{let e=JSON.stringify(t.modelTopology),n=JSON.stringify(t.weightSpecs),o=vi(t);try{this.LS.setItem(this.keys.info,JSON.stringify(o)),this.LS.setItem(this.keys.topology,e),this.LS.setItem(this.keys.weightSpecs,n),this.LS.setItem(this.keys.weightData,M1(t.weightData));let s={format:t.format,generatedBy:t.generatedBy,convertedBy:t.convertedBy,signature:t.signature!=null?t.signature:void 0,userDefinedMetadata:t.userDefinedMetadata!=null?t.userDefinedMetadata:void 0,modelInitializer:t.modelInitializer!=null?t.modelInitializer:void 0,trainingConfig:t.trainingConfig!=null?t.trainingConfig:void 0};return this.LS.setItem(this.keys.modelMetadata,JSON.stringify(s)),{modelArtifactsInfo:o}}catch(s){throw j1(this.keys),new Error(`Failed to save model '${this.modelPath}' to local storage: size quota being exceeded is a possible cause of this failure: modelTopologyBytes=${o.modelTopologyBytes}, weightSpecsBytes=${o.weightSpecsBytes}, weightDataBytes=${o.weightDataBytes}.`)}}}async load(){let t=JSON.parse(this.LS.getItem(this.keys.info));if(t==null)throw new Error(`In local storage, there is no model with name '${this.modelPath}'`);if(t.modelTopologyType!=="JSON")throw new Error("BrowserLocalStorage does not support loading non-JSON model topology yet.");let e={},n=JSON.parse(this.LS.getItem(this.keys.topology));if(n==null)throw new Error(`In local storage, the topology of model '${this.modelPath}' is missing.`);e.modelTopology=n;let o=JSON.parse(this.LS.getItem(this.keys.weightSpecs));if(o==null)throw new Error(`In local storage, the weight specs of model '${this.modelPath}' are missing.`);e.weightSpecs=o;let s=this.LS.getItem(this.keys.modelMetadata);if(s!=null){let a=JSON.parse(s);e.format=a.format,e.generatedBy=a.generatedBy,e.convertedBy=a.convertedBy,a.signature!=null&&(e.signature=a.signature),a.userDefinedMetadata!=null&&(e.userDefinedMetadata=a.userDefinedMetadata),a.modelInitializer!=null&&(e.modelInitializer=a.modelInitializer),a.trainingConfig!=null&&(e.trainingConfig=a.trainingConfig)}let i=this.LS.getItem(this.keys.weightData);if(i==null)throw new Error(`In local storage, the binary weight values of model '${this.modelPath}' are missing.`);return e.weightData=z1(i),e}};Ni.URL_SCHEME="localstorage://";var X1=r=>M().getBool("IS_BROWSER")&&!Array.isArray(r)&&r.startsWith(Ni.URL_SCHEME)?T4(r.slice(Ni.URL_SCHEME.length)):null;Ce.registerSaveRouter(X1);Ce.registerLoadRouter(X1);function T4(r){return new Ni(r)}var Hg=class{constructor(){E(M().getBool("IS_BROWSER"),()=>"Current environment is not a web browser"),E(typeof window=="undefined"||typeof window.localStorage!="undefined",()=>"Current browser does not appear to support localStorage"),this.LS=window.localStorage}async listModels(){let t={},e=qp+Ka,n=Ka+q1;for(let o=0;o<this.LS.length;++o){let s=this.LS.key(o);if(s.startsWith(e)&&s.endsWith(n)){let i=N4(s);t[i]=JSON.parse(this.LS.getItem(s))}}return t}async removeModel(t){t=k4(t);let e=K1(t);if(this.LS.getItem(e.info)==null)throw new Error(`Cannot find model at path '${t}'`);let n=JSON.parse(this.LS.getItem(e.info));return j1(e),n}};var Kp="://",Tr=class{constructor(){this.managers={}}static getInstance(){return Tr.instance==null&&(Tr.instance=new Tr),Tr.instance}static registerManager(t,e){E(t!=null,()=>"scheme must not be undefined or null."),t.endsWith(Kp)&&(t=t.slice(0,t.indexOf(Kp))),E(t.length>0,()=>"scheme must not be an empty string.");let n=Tr.getInstance();E(n.managers[t]==null,()=>`A model store manager is already registered for scheme '${t}'.`),n.managers[t]=e}static getManager(t){let e=Tr.getInstance().managers[t];if(e==null)throw new Error(`Cannot find model manager for scheme '${t}'`);return e}static getSchemes(){return Object.keys(Tr.getInstance().managers)}};function qg(r){if(r.indexOf(Kp)===-1)throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${Tr.getSchemes().join(",")}`);return{scheme:r.split(Kp)[0],path:r.split(Kp)[1]}}async function Y1(r,t,e=!1){E(r!==t,()=>`Old path and new path are the same: '${r}'`);let n=Ce.getLoadHandlers(r);E(n.length>0,()=>`Copying failed because no load handler is found for source URL ${r}.`),E(n.length<2,()=>`Copying failed because more than one (${n.length}) load handlers for source URL ${r}.`);let o=n[0],s=Ce.getSaveHandlers(t);E(s.length>0,()=>`Copying failed because no save handler is found for destination URL ${t}.`),E(s.length<2,()=>`Copying failed because more than one (${n.length}) save handlers for destination URL ${t}.`);let i=s[0],a=qg(r).scheme,u=qg(r).path,l=a===qg(r).scheme,c=await o.load();e&&l&&await Tr.getManager(a).removeModel(u);let p=await i.save(c);return e&&!l&&await Tr.getManager(a).removeModel(u),p.modelArtifactsInfo}async function Z1(){let r=Tr.getSchemes(),t={};for(let e of r){let n=await Tr.getManager(e).listModels();for(let o in n){let s=e+Kp+o;t[s]=n[o]}}return t}async function J1(r){let t=qg(r);return Tr.getManager(t.scheme).removeModel(t.path)}async function Q1(r,t){return Y1(r,t,!1)}async function tE(r,t){return Y1(r,t,!0)}var _S=class{constructor(){this.messageName="setTimeoutCustom",this.functionRefs=[],this.handledMessageCount=0,this.hasEventListener=!1}fetch(t,e){return fetch(t,e)}now(){return performance.now()}encode(t,e){if(e!=="utf-8"&&e!=="utf8")throw new Error(`Browser's encoder only supports utf-8, but got ${e}`);return this.textEncoder==null&&(this.textEncoder=new TextEncoder),this.textEncoder.encode(t)}decode(t,e){return new TextDecoder(e).decode(t)}setTimeoutCustom(t,e){if(!window||!M().getBool("USE_SETTIMEOUTCUSTOM")){setTimeout(t,e);return}this.functionRefs.push(t),setTimeout(()=>{window.postMessage({name:this.messageName,index:this.functionRefs.length-1},"*")},e),this.hasEventListener||(this.hasEventListener=!0,window.addEventListener("message",n=>{if(n.source===window&&n.data.name===this.messageName){n.stopPropagation();let o=this.functionRefs[n.data.index];o(),this.handledMessageCount++,this.handledMessageCount===this.functionRefs.length&&(this.functionRefs=[],this.handledMessageCount=0)}},!0))}};if(M().get("IS_BROWSER")){M().setPlatform("browser",new _S);try{Tr.registerManager(Ni.URL_SCHEME,new Hg)}catch(r){}try{Tr.registerManager(Si.URL_SCHEME,new Ug)}catch(r){}}var E4={importFetch:()=>eE()},AS;var $S=class{constructor(){this.util=rE(),this.textEncoder=new this.util.TextEncoder}fetch(t,e){return M().global.fetch!=null?M().global.fetch(t,e):(AS==null&&(AS=E4.importFetch()),AS(t,e))}now(){let t=process.hrtime();return t[0]*1e3+t[1]/1e6}encode(t,e){if(e!=="utf-8"&&e!=="utf8")throw new Error(`Node built-in encoder only supports utf-8, but got ${e}`);return this.textEncoder.encode(t)}decode(t,e){return t.length===0?"":new this.util.TextDecoder(e).decode(t)}};M().get("IS_NODE")&&!M().get("IS_BROWSER")&&M().setPlatform("node",new $S);function wt(r,t="float32",e){return t=t||"float32",Bd(r),new pe(r,t,e)}function _4(r,t){let e=I(r,"x","cast");if(!Qv(t))throw new Error(`Failed to cast to unknown dtype ${t}`);if(t==="string"&&e.dtype!=="string"||t!=="string"&&e.dtype==="string")throw new Error("Only strings can be casted to strings");let n={x:e},o={dtype:t};return T.runKernel(io,n,o)}var J=k({cast_:_4});function A4(r){let e={x:I(r,"x","clone","string_or_numeric")};return T.runKernel(lo,e)}var sn=k({clone_:A4});function Kg(r,t=!1){console.log(r.toString(t))}bS();var $4={buffer:wt,cast:J,clone:sn,print:Kg};$1($4);var Er={};Gt(Er,{browserFiles:()=>oE,browserHTTPRequest:()=>aE,concatenateArrayBuffers:()=>Up,copyModel:()=>Q1,decodeWeights:()=>Vg,encodeWeights:()=>L1,fromMemory:()=>lE,fromMemorySync:()=>LS,getLoadHandlers:()=>W1,getModelArtifactsForJSON:()=>Hp,getModelArtifactsForJSONSync:()=>NS,getModelArtifactsInfoForJSON:()=>vi,getSaveHandlers:()=>G1,getWeightSpecs:()=>Wg,http:()=>Xg,isHTTPScheme:()=>jg,listModels:()=>Z1,loadWeights:()=>sE,moveModel:()=>tE,registerLoadRouter:()=>V1,registerSaveRouter:()=>B1,removeModel:()=>J1,weightsLoaderFactory:()=>OS,withSaveHandler:()=>uE,withSaveHandlerSync:()=>cE});var D4="model",R4=".json",F4=".weights.bin";function nE(r){return new Promise(t=>setTimeout(t)).then(r)}var ja=class{constructor(t){if(!M().getBool("IS_BROWSER"))throw new Error("browserDownloads() cannot proceed because the current environment is not a browser.");t.startsWith(ja.URL_SCHEME)&&(t=t.slice(ja.URL_SCHEME.length)),(t==null||t.length===0)&&(t=D4),this.modelJsonFileName=t+R4,this.weightDataFileName=t+F4}async save(t){if(typeof document=="undefined")throw new Error("Browser downloads are not supported in this environment since `document` is not present");let e=window.URL.createObjectURL(new Blob([t.weightData],{type:"application/octet-stream"}));if(t.modelTopology instanceof ArrayBuffer)throw new Error("BrowserDownloads.save() does not support saving model topology in binary formats yet.");{let n=[{paths:["./"+this.weightDataFileName],weights:t.weightSpecs}],o=Gg(t,n),s=window.URL.createObjectURL(new Blob([JSON.stringify(o)],{type:"application/json"})),i=this.modelJsonAnchor==null?document.createElement("a"):this.modelJsonAnchor;if(i.download=this.modelJsonFileName,i.href=s,await nE(()=>i.dispatchEvent(new MouseEvent("click"))),t.weightData!=null){let a=this.weightDataAnchor==null?document.createElement("a"):this.weightDataAnchor;a.download=this.weightDataFileName,a.href=e,await nE(()=>a.dispatchEvent(new MouseEvent("click")))}return{modelArtifactsInfo:vi(t)}}}};ja.URL_SCHEME="downloads://";var DS=class{constructor(t){if(t==null||t.length<1)throw new Error(`When calling browserFiles, at least 1 file is required, but received ${t}`);this.jsonFile=t[0],this.weightsFiles=t.slice(1)}async load(){return new Promise((t,e)=>{let n=new FileReader;n.onload=o=>{let s=JSON.parse(o.target.result),i=s.modelTopology;if(i==null){e(new Error(`modelTopology field is missing from file ${this.jsonFile.name}`));return}if(s.weightsManifest==null){e(new Error(`weightManifest field is missing from file ${this.jsonFile.name}`));return}if(this.weightsFiles.length===0){t({modelTopology:i});return}let u=Hp(s,l=>this.loadWeights(l));t(u)},n.onerror=o=>e(`Failed to read model topology and weights manifest JSON from file '${this.jsonFile.name}'. BrowserFiles supports loading Keras-style tf.Model artifacts only.`),n.readAsText(this.jsonFile)})}loadWeights(t){let e=[],n=[];for(let i of t)e.push(...i.weights),n.push(...i.paths);let o=this.checkManifestAndWeightFiles(t),s=n.map(i=>this.loadWeightsFile(i,o[i]));return Promise.all(s).then(i=>[e,Up(i)])}loadWeightsFile(t,e){return new Promise((n,o)=>{let s=new FileReader;s.onload=i=>{let a=i.target.result;n(a)},s.onerror=i=>o(`Failed to weights data from file of path '${t}'.`),s.readAsArrayBuffer(e)})}checkManifestAndWeightFiles(t){let e=[],n=this.weightsFiles.map(s=>SS(s.name)),o={};for(let s of t)s.paths.forEach(i=>{let a=SS(i);if(e.indexOf(a)!==-1)throw new Error(`Duplicate file basename found in weights manifest: '${a}'`);if(e.push(a),n.indexOf(a)===-1)throw new Error(`Weight file with basename '${a}' is not provided.`);o[i]=this.weightsFiles[n.indexOf(a)]});if(e.length!==this.weightsFiles.length)throw new Error(`Mismatch in the number of files in weights manifest (${e.length}) and the number of weight files provided (${this.weightsFiles.length}).`);return o}},O4=r=>M().getBool("IS_BROWSER")&&!Array.isArray(r)&&r.startsWith(ja.URL_SCHEME)?P4(r.slice(ja.URL_SCHEME.length)):null;Ce.registerSaveRouter(O4);function P4(r="model"){return new ja(r)}function oE(r){return new DS(r)}function RS(r,t,e,n){i(r),e=e==null?0:e,n=n==null?1:n,a(e,n);let o=0,s=u=>(u.then(l=>{let c=e+ ++o/r.length*(n-e);return t(c),l}),u);function i(u){E(u!=null&&Array.isArray(u)&&u.length>0,()=>"promises must be a none empty array")}function a(u,l){E(u>=0&&u<=1,()=>`Progress fraction must be in range [0, 1], but got startFraction ${u}`),E(l>=0&&l<=1,()=>`Progress fraction must be in range [0, 1], but got endFraction ${l}`),E(l>=u,()=>`startFraction must be no more than endFraction, but got startFraction ${u} and endFraction ${l}`)}return Promise.all(r.map(s))}async function FS(r,t){t==null&&(t={});let e=t.fetchFunc==null?M().platform.fetch:t.fetchFunc,n=r.map(p=>e(p,t.requestInit,{isBinary:!0})),o=0,s=.5,a=(t.onProgress==null?await Promise.all(n):await RS(n,t.onProgress,o,s)).map(p=>p.arrayBuffer()),u=.5,l=1;return t.onProgress==null?await Promise.all(a):await RS(a,t.onProgress,u,l)}async function sE(r,t="",e,n){return OS(i=>FS(i,{requestInit:n}))(r,t,e)}function OS(r){return async(t,e="",n)=>{let o=t.map(()=>!1),s={},i=n!=null?n.map(()=>!1):[],a=[];if(t.forEach((f,d)=>{let h=0;f.weights.forEach(g=>{let x="quantization"in g?g.quantization.dtype:g.dtype,b=th[x]*Zt(g.shape),w=()=>{o[d]=!0,s[d]==null&&(s[d]=[]),s[d].push({manifestEntry:g,groupOffset:h,sizeBytes:b})};n!=null?n.forEach((C,N)=>{C===g.name&&(w(),i[N]=!0)}):w(),a.push(g.name),h+=b})}),!i.every(f=>f)){let f=n.filter((d,h)=>!i[h]);throw new Error(`Could not find weights in manifest with names: ${f.join(", ")}.
Manifest JSON has weights with names: ${a.join(", ")}.`)}let u=o.reduce((f,d,h)=>(d&&f.push(h),f),[]),l=[];u.forEach(f=>{t[f].paths.forEach(d=>{let h=e+(e.endsWith("/")?"":"/")+d;l.push(h)})});let c=await r(l),p={},m=0;return u.forEach(f=>{let d=t[f].paths.length,h=0;for(let C=0;C<d;C++)h+=c[m+C].byteLength;let g=new ArrayBuffer(h),x=new Uint8Array(g),b=0;for(let C=0;C<d;C++){let N=new Uint8Array(c[m+C]);x.set(N,b),b+=N.byteLength}s[f].forEach(C=>{let N=g.slice(C.groupOffset,C.groupOffset+C.sizeBytes),_=Vg(N,[C.manifestEntry]);for(let A in _)p[A]=_[A]}),m+=d}),p}}var L4="application/octet-stream",M4="application/json",eh=class{constructor(t,e){if(this.DEFAULT_METHOD="POST",e==null&&(e={}),this.weightPathPrefix=e.weightPathPrefix,this.onProgress=e.onProgress,this.weightUrlConverter=e.weightUrlConverter,e.fetchFunc!=null?(E(typeof e.fetchFunc=="function",()=>"Must pass a function that matches the signature of `fetch` (see https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)"),this.fetch=e.fetchFunc):this.fetch=M().platform.fetch,E(t!=null&&t.length>0,()=>"URL path for http must not be null, undefined or empty."),Array.isArray(t)&&E(t.length===2,()=>`URL paths for http must have a length of 2, (actual length is ${t.length}).`),this.path=t,e.requestInit!=null&&e.requestInit.body!=null)throw new Error("requestInit is expected to have no pre-existing body, but has one.");this.requestInit=e.requestInit||{}}async save(t){if(t.modelTopology instanceof ArrayBuffer)throw new Error("BrowserHTTPRequest.save() does not support saving model topology in binary formats yet.");let e=Object.assign({method:this.DEFAULT_METHOD},this.requestInit);e.body=new FormData;let n=[{paths:["./model.weights.bin"],weights:t.weightSpecs}],o=Gg(t,n);e.body.append("model.json",new Blob([JSON.stringify(o)],{type:M4}),"model.json"),t.weightData!=null&&e.body.append("model.weights.bin",new Blob([t.weightData],{type:L4}),"model.weights.bin");let s=await this.fetch(this.path,e);if(s.ok)return{modelArtifactsInfo:vi(t),responses:[s]};throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${s.status}.`)}async load(){let t=await this.fetch(this.path,this.requestInit);if(!t.ok)throw new Error(`Request to ${this.path} failed with status code ${t.status}. Please verify this URL points to the model JSON of the model to load.`);let e;try{e=await t.json()}catch(s){let i=`Failed to parse model JSON of response from ${this.path}.`;throw this.path.endsWith(".pb")?i+=" Your path contains a .pb file extension. Support for .pb models have been removed in TensorFlow.js 1.0 in favor of .json models. You can re-convert your Python TensorFlow model using the TensorFlow.js 1.0 conversion scripts or you can convert your.pb models with the 'pb2json'NPM script in the tensorflow/tfjs-converter repository.":i+=" Please make sure the server is serving valid JSON for this request.",new Error(i)}let n=e.modelTopology,o=e.weightsManifest;if(n==null&&o==null)throw new Error(`The JSON from HTTP path ${this.path} contains neither model topology or manifest for weights.`);return Hp(e,s=>this.loadWeights(s))}async loadWeights(t){let e=Array.isArray(this.path)?this.path[1]:this.path,[n,o]=z4(e),s=this.weightPathPrefix||n,i=Wg(t),a=[],u=[];for(let c of t)for(let p of c.paths)this.weightUrlConverter!=null?u.push(this.weightUrlConverter(p)):a.push(s+p+o);this.weightUrlConverter&&a.push(...await Promise.all(u));let l=await FS(a,{requestInit:this.requestInit,fetchFunc:this.fetch,onProgress:this.onProgress});return[i,Up(l)]}};eh.URL_SCHEME_REGEX=/^https?:\/\//;function z4(r){let t=r.lastIndexOf("/"),e=r.lastIndexOf("?"),n=r.substring(0,t),o=e>t?r.substring(e):"";return[n+"/",o]}function jg(r){return r.match(eh.URL_SCHEME_REGEX)!=null}var iE=(r,t)=>{if(typeof fetch=="undefined"&&(t==null||t.fetchFunc==null))return null;{let e=!0;if(Array.isArray(r)?e=r.every(n=>jg(n)):e=jg(r),e)return Xg(r,t)}return null};Ce.registerSaveRouter(iE);Ce.registerLoadRouter(iE);function Xg(r,t){return new eh(r,t)}function aE(r,t){return Xg(r,t)}var rh=class{constructor(t){this.modelArtifacts=t}load(){return this.modelArtifacts}},Yg=class{constructor(t){this.saveHandler=t}save(t){return this.saveHandler(t)}},PS=class{constructor(t){t.load&&(this.load=()=>Promise.resolve(t.load())),t.save&&(this.save=e=>Promise.resolve(t.save(e)))}};function lE(r,t,e,n){let o=arguments;return new PS(LS(...o))}function LS(r,t,e,n){return arguments.length===1?r.modelTopology!=null||r.weightSpecs!=null?new rh(r):(console.warn("Please call tf.io.fromMemory() with only one argument. The argument should be of type ModelArtifacts. The multi-argument signature of tf.io.fromMemory() has been deprecated and will be removed in a future release."),new rh({modelTopology:r})):(console.warn("Please call tf.io.fromMemory() with only one argument. The argument should be of type ModelArtifacts. The multi-argument signature of tf.io.fromMemory() has been deprecated and will be removed in a future release."),new rh({modelTopology:r,weightSpecs:t,weightData:e,trainingConfig:n}))}function uE(r){return new Yg(r)}function cE(r){return new Yg(r)}var fE={};Gt(fE,{confusionMatrix:()=>mE});function B4(r,t,e=!1,n=!1){let o=I(r,"a","matMul"),s=I(t,"b","matMul");[o,s]=Wt(o,s);let i={a:o,b:s},a={transposeA:e,transposeB:n};return T.runKernel(Uo,i,a)}var Lt=k({matMul_:B4});function V4(r,t,e=1,n=0,o="int32"){if(t<2)throw new Error(`Error in oneHot: depth must be >=2, but it is ${t}`);let i={indices:I(r,"indices","oneHot","int32")},a={dtype:o,depth:t,onValue:e,offValue:n};return T.runKernel(hs,i,a)}var ki=k({oneHot_:V4});function Qct(){M().set("PROD",!0)}function tpt(){M().set("DEBUG",!0)}function ept(){M().set("DEPRECATION_WARNINGS_ENABLED",!1),console.warn("TensorFlow.js deprecation warnings have been disabled.")}function MS(r){M().getBool("DEPRECATION_WARNINGS_ENABLED")&&console.warn(r+" You can disable deprecation warnings with tf.disableDeprecationWarnings().")}D1(MS);function rpt(){T.disposeVariables()}function ho(){return T}function nh(){return T.memory()}function npt(r){return T.profile(r)}function B(r,t){return T.tidy(r,t)}function St(r){Qd(r).forEach(e=>e.dispose())}function De(r){return T.keep(r)}function opt(r){return T.time(r)}function G4(r){return T.setBackend(r)}function spt(){return T.ready()}function ipt(){return T.backendName}function apt(r){T.removeBackend(r)}function lpt(r){return T.findBackend(r)}function upt(r){return T.findBackendFactory(r)}function jp(r,t,e=1){return T.registerBackend(r,t,e)}function pE(){return T.backend}function cpt(r,t){M().setPlatform(r,t)}function W4(r){let e={input:I(r,"input","imag")};return T.runKernel(vp,e)}var Kl=k({imag_:W4});function U4(r){let e={x:I(r,"x","neg")};return T.runKernel(ui,e)}var Ut=k({neg_:U4});function H4(r){let e={input:I(r,"input","real")};return T.runKernel(Dp,e)}var Xa=k({real_:H4});function q4(r,t,e){let n=I(r,"x","transpose");if(t==null&&(t=n.shape.map((i,a)=>a).reverse()),E(n.rank===t.length,()=>`Error in transpose: rank of input ${n.rank} must match length of perm ${t}.`),t.forEach(i=>{E(i>=0&&i<n.rank,()=>`All entries in 'perm' must be between 0 and ${n.rank-1} but got ${t}`)}),n.rank<=1)return n.clone();let o={x:n},s={perm:t};return n.dtype==="complex64"?B(()=>{let i=Xa(n),a=Kl(n);return i=T.runKernel(Jn,{x:i},s),a=T.runKernel(Jn,{x:a},s),e&&(a=Ut(a)),bn(i,a)}):T.runKernel(Jn,o,s)}var Ot=k({transpose_:q4});function K4(r,t,e){let n=I(r,"labels","confusionMatrix"),o=I(t,"predictions","confusionMatrix");E(e==null||e>0&&Number.isInteger(e),()=>`If provided, numClasses must be a positive integer, but got ${e}`),E(n.rank===1,()=>`Expected the rank of labels to be 1, but got ${n.rank}`),E(o.rank===1,()=>`Expected the rank of predictions to be 1, but got ${o.rank}`),E(n.shape[0]===o.shape[0],()=>`Mismatch in the number of examples: ${n.shape[0]} vs. ${o.shape[0]}. Labels and predictions should have the same number of elements.`),E(e>0&&Number.isInteger(e),()=>`numClasses is required to be a positive integer, but got ${e}`);let s=ki(J(n,"int32"),e),i=ki(J(o,"int32"),e),a=Ot(s),u=Lt(a,i);return J(u,"int32")}var mE=k({confusionMatrix_:K4});var zr={};Gt(zr,{assertAndGetBroadcastShape:()=>Pt,getBroadcastDims:()=>dE,getReductionAxes:()=>ge});function dE(r,t){let e=r.length,n=[];for(let o=0;o<e;o++){let s=e-1-o,i=r[s]||1;(t[t.length-1-o]||1)>1&&i===1&&n.unshift(s)}return n}function ge(r,t){let e=[];for(let n=0;n<t.length;n++){let o=r[r.length-n-1],s=t.length-n-1,i=t[s];(o==null||o===1&&i>1)&&e.unshift(s)}return e}function Pt(r,t){let e=[],n=Math.max(r.length,t.length);for(let o=0;o<n;o++){let s=r[r.length-o-1];s==null&&(s=1);let i=t[t.length-o-1];if(i==null&&(i=1),s===1)e.unshift(i);else if(i===1)e.unshift(s);else if(s!==i){let a=`Operands could not be broadcast together with shapes ${r} and ${t}.`;throw Error(a)}else e.unshift(s)}return e}var Jg={};Gt(Jg,{fromPixels:()=>tH,fromPixelsAsync:()=>J4,toPixels:()=>Q4});function Zg(r,t,e){if(Xn(r),t!=null&&t.length!==3)throw new Error("tensor3d() requires shape to have three numbers");let n=Mr(r,e);if(n.length!==3&&n.length!==1)throw new Error("tensor3d() requires values to be number[][][] or flat/TypedArray");if(n.length===1&&t==null)throw new Error("tensor3d() requires shape to be provided when `values` are a flat array");return on(r,t,n,e)}var Uu;function hE(r,t=3){if(t>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 e=!1,n=!1,o=!1,s=!1,i=!1,a=!1;if(r.data instanceof Uint8Array)e=!0;else if(typeof ImageData!="undefined"&&r instanceof ImageData)n=!0;else if(typeof HTMLVideoElement!="undefined"&&r instanceof HTMLVideoElement)o=!0;else if(typeof HTMLImageElement!="undefined"&&r instanceof HTMLImageElement)s=!0;else if(r.getContext!=null)i=!0;else if(typeof ImageBitmap!="undefined"&&r instanceof ImageBitmap)a=!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(jd(qd,T.backendName)!=null){let d={pixels:r},h={numChannels:t};return T.runKernel(qd,d,h)}let[l,c]=o?[r.videoWidth,r.videoHeight]:[r.width,r.height],p;if(i)p=r.getContext("2d").getImageData(0,0,l,c).data;else if(n||e)p=r.data;else if(s||o||a){if(Uu==null)if(typeof document=="undefined")if(typeof OffscreenCanvas!="undefined"&&typeof OffscreenCanvasRenderingContext2D!="undefined")Uu=new OffscreenCanvas(1,1).getContext("2d");else throw new Error("Cannot parse input in current context. Reason: OffscreenCanvas Context2D rendering is not supported.");else Uu=document.createElement("canvas").getContext("2d",{willReadFrequently:!0});Uu.canvas.width=l,Uu.canvas.height=c,Uu.drawImage(r,0,0,l,c),p=Uu.getImageData(0,0,l,c).data}let m;if(t===4)m=new Int32Array(p);else{let d=l*c;m=new Int32Array(d*t);for(let h=0;h<d;h++)for(let g=0;g<t;++g)m[h*t+g]=p[h*4+g]}return Zg(m,[c,l,t],"int32")}function j4(r){return r!=null&&r.data instanceof Uint8Array}function X4(){return typeof window!="undefined"&&typeof ImageBitmap!="undefined"&&window.hasOwnProperty("createImageBitmap")}function Y4(r){return r!=null&&r.width!==0&&r.height!==0}function Z4(r){return X4()&&!(r instanceof ImageBitmap)&&Y4(r)&&!j4(r)}async function J4(r,t=3){let e=null;if(M().getBool("WRAP_TO_IMAGEBITMAP")&&Z4(r)){let n;try{n=await createImageBitmap(r,{premultiplyAlpha:"none"})}catch(o){n=null}n!=null&&n.width===r.width&&n.height===r.height?e=n:e=r}else e=r;return hE(e,t)}async function Q4(r,t){let e=I(r,"img","toPixels");if(!(r instanceof Ft)){let l=e;e=J(l,"int32"),l.dispose()}if(e.rank!==2&&e.rank!==3)throw new Error(`toPixels only supports rank 2 or 3 tensors, got rank ${e.rank}.`);let[n,o]=e.shape.slice(0,2),s=e.rank===2?1:e.shape[2];if(s>4||s===2)throw new Error(`toPixels only supports depth of size 1, 3 or 4 but got ${s}`);if(e.dtype!=="float32"&&e.dtype!=="int32")throw new Error(`Unsupported type for toPixels: ${e.dtype}. Please use float32 or int32 tensors.`);let i=await e.data(),a=e.dtype==="float32"?255:1,u=new Uint8ClampedArray(o*n*4);for(let l=0;l<n*o;++l){let c=[0,0,0,255];for(let m=0;m<s;m++){let f=i[l*s+m];if(e.dtype==="float32"){if(f<0||f>1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${f}.`)}else if(e.dtype==="int32"&&(f<0||f>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${f}.`);s===1?(c[0]=f*a,c[1]=f*a,c[2]=f*a):c[m]=f*a}let p=l*4;u[p+0]=Math.round(c[0]),u[p+1]=Math.round(c[1]),u[p+2]=Math.round(c[2]),u[p+3]=Math.round(c[3])}if(t!=null){t.width=o,t.height=n;let l=t.getContext("2d"),c=new ImageData(u,o,n);l.putImageData(c,0,0)}return e!==r&&e.dispose(),u}var tH=k({fromPixels_:hE});var Qg={};Gt(Qg,{prepareAndValidate:()=>gE});function gE(r,t){let e=r.shape.length,n=t.shape.length;if(e<1)throw new Error(`tf.gatherND() expects the input to be rank 1 or higher, but the rank was ${e}.`);if(n<1)throw new Error(`tf.gatherND() expects the indices to be rank 1 or higher, but the rank was ${n}.`);if(t.dtype!=="int32")throw new Error(`tf.gatherND() expects the indices to be int32 type, but the dtype was ${t.dtype}.`);if(t.shape[n-1]>e)throw new Error(`index innermost dimension length must be <= tensor rank; saw: ${t.shape[n-1]} vs. ${e}`);if(Zt(r.shape)===0)throw new Error(`Requested more than 0 entries, but input is empty. Input shape: ${r.shape}.`);let o=t.shape,s=o[o.length-1],i=1;for(let p=0;p<o.length-1;++p)i*=o[p];let a=r.shape,u=o.slice();u.pop();let l=1;for(let p=s;p<e;++p)l*=a[p],u.push(a[p]);let c=[...ni(r.shape).map(p=>p/l),1].slice(0,s);return[u,i,l,c]}var oh={};Gt(oh,{calculateShapes:()=>xE,validateInput:()=>tx,validateUpdateShape:()=>zS});function zS(r,t,e){let n=t.rank>1?t.shape[t.rank-1]:1,o=t.rank>1?t.rank-1:1,s=`Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: ${e.shape}, indices.shape: ${t.shape}, shape: ${r}, sliceDim: ${n}, and batchDim: ${o}.`;if(e.rank<o)throw new Error(s+` update.rank < ${o}. `);if(r.length<n+(e.rank-o))throw new Error(s+` Output shape length < ${n+(e.rank-o)}`);if(e.rank!==o+r.length-n)throw new Error(s+` update.rank != ${o+r.length-n}`);for(let i=0;i<o;++i)if(e.shape[i]!==t.shape[i])throw new Error(s+` updates.shape[${i}] (${e.shape[i]}) != indices.shape[${i}] (${t.shape[i]}).`);for(let i=0;i<e.rank-o;++i)if(e.shape[i+o]!==r[i+n])throw new Error(s+` updates.shape[${i+o}] (${e.shape[i+o]}) != shape[${i+o}] (${r[i+o]})`)}function tx(r,t,e){if(t.rank<1)throw new Error(`tf.scatterND() expects the indices to be rank 1 or higher, but the rank was ${t.rank}.`);if(r.rank<1)throw new Error(`tf.scatterND() expects the updates to be rank 1 or higher, but the rank was ${r.rank}.`);if(t.dtype!=="int32")throw new Error(`The dtype of 'indices' should be int32, but got dtype: ${t.dtype}`);if(e.length<1)throw new Error(`Output rank must be greater or equal to 1, but got shape: ${e}`);if(e.length===0){if(t.size===0)throw new Error(`Indices specified for empty output. indices shape: ${t.shape}`);if(r.size===0)throw new Error(`Updates specified for empty output. updates shape: ${r.shape}`)}zS(e,t,r)}function xE(r,t,e){let n=t.shape.length,o=n>1?t.shape[n-1]:1,s=e.length,i=1;for(let p=o;p<s;++p)i*=e[p];let a=o<1?1:o,u=Zt(t.shape)/a,l=[...ni(e.slice(0,o)),1],c=Zt(e);return{sliceRank:o,numUpdates:u,sliceSize:i,strides:l,outputSize:c}}var Pe={};Gt(Pe,{assertParamsValid:()=>rH,computeFlatOffset:()=>aH,computeOutShape:()=>oH,getNormalizedAxes:()=>sH,isSliceContinous:()=>iH,maskToAxes:()=>nH,parseSliceParams:()=>VS,sliceInfo:()=>lH,startForAxis:()=>NE,startIndicesWithElidedDims:()=>IE,stopForAxis:()=>kE,stopIndicesWithElidedDims:()=>vE,stridesForAxis:()=>SE,stridesWithElidedDims:()=>bE});var BS=-2,eH=-1;function rH(r,t,e){let n=r.shape.length;E(n===t.length,()=>`Error in slice${n}D: Length of begin ${t} must match the rank of the array (${n}).`),E(n===e.length,()=>`Error in slice${n}D: Length of size ${e} must match the rank of the array (${n}).`);for(let o=0;o<n;++o)E(t[o]+e[o]<=r.shape[o],()=>`Error in slice${n}D: begin[${o}] + size[${o}] (${t[o]+e[o]}) would overflow input.shape[${o}] (${r.shape[o]})`)}function nH(r){let t=[],e=0;for(;r>0;)r&1&&t.push(e),r/=2,e++;return t}function oH(r,t,e){let n=[];for(let o=0;o<r.length;o++)n[o]=Math.ceil((t[o]-r[o])/e[o]);return n}function bE(r,t,e,n){let o=[...r];for(let s=o.length;s<n.length;s++)o.push(1);for(let s=0;s<e;s++)s===0?o[t]=1:(o.splice(t,0,1),o.pop());return o}function wE(r,t,e){return e<=r?e:e-(t-1)}function CE(r,t){let e=[];for(let n=0;n<r;n++)e.push(t+n);return e}function sH(r,t,e,n,o,s,i,a,u){let l=r.length,c=new Array(l),p=new Array(l),m=new Array(l);if(t.length&&e>0){let f=t[0],d=e+1;c=IE(i,f,d,n,r),p=vE(a,f,d,o,r),m=bE(s,f,d,r)}else for(let f=0;f<l;f++)c[f]=NE(i,n,s,r,f,u),p[f]=kE(a,o,s,r,f,u),m[f]=SE(s,f,u);return{begin:c,end:p,strides:m}}function IE(r,t,e,n,o){let s=[...o],i=CE(e,t);for(let a=0;a<s.length;a++)if(i.indexOf(a)>-1)s[a]=0;else{let u=wE(t,e,a),l=n[u];r&1<<u&&(l=0),s[a]=l}return s}function vE(r,t,e,n,o){let s=[...o],i=CE(e,t);for(let a=0;a<s.length;a++)if(i.indexOf(a)>-1)s[a]=Number.MAX_SAFE_INTEGER;else{let u=wE(t,e,a),l=n[u];r&1<<u&&(l=Number.MAX_SAFE_INTEGER),s[a]=l}for(let a=0;a<s.length;a++){let u=o[a];s[a]<0&&(s[a]+=u),s[a]=np(0,s[a],o[a])}return s}function SE(r,t,e){let n=r[t];return(e&1<<t||n==null)&&(n=1),n}function NE(r,t,e,n,o,s){let i=t[o],a=e[o]||1;(r&1<<o||s&1<<o||i==null)&&(a>0?i=Number.MIN_SAFE_INTEGER:i=Number.MAX_SAFE_INTEGER);let u=n[o];return i<0&&(i+=u),i=np(0,i,u-1),i}function kE(r,t,e,n,o,s){let i=t[o],a=e[o]||1;(r&1<<o||s&1<<o||i==null)&&(a>0?i=Number.MAX_SAFE_INTEGER:i=Number.MIN_SAFE_INTEGER);let u=n[o];return i<0&&(i+=u),a>0?i=np(0,i,u):i=np(-1,i,u-1),i}function iH(r,t,e){let n=e.length;for(let o=0;o<e.length;o++)if(e[o]>1){n=o;break}for(let o=n+1;o<e.length;o++)if(t[o]>0||e[o]!==r[o])return!1;return!0}function aH(r,t){let e=r.length>0?r[r.length-1]:1;for(let n=0;n<r.length-1;n++)e+=r[n]*t[n];return e}function VS(r,t,e){let n,o=r.shape.length;typeof t=="number"?n=[t,...new Array(o-1).fill(0)]:t.length<o?n=t.concat(new Array(o-t.length).fill(0)):n=t.slice(),n.forEach(i=>{E(i!==-1,()=>"slice() does not support negative begin indexing.")});let s;return e==null?s=new Array(o).fill(-1):typeof e=="number"?s=[e,...new Array(o-1).fill(-1)]:e.length<o?s=e.concat(new Array(o-e.length).fill(-1)):s=e,s=s.map((i,a)=>i>=0?i:(E(i===-1,()=>`Negative size values should be exactly -1 but got ${i} for the slice() size at index ${a}.`),r.shape[a]-n[a])),[n,s]}function lH(r,t,e,n,o,s,i,a,u){let l;if(n==null?(l=new Array(t.length),l.fill(1)):l=n,i!=null&&(i&i-1)!==0)throw new Error("Multiple ellipses in slice is not allowed.");let c=!1,p={dims:l.length,numAddAxisAfterEllipsis:0,begin:t.slice(),end:e.slice(),strides:l.slice(),beginMask:o,endMask:s,ellipsisMask:i,newAxisMask:a,shrinkAxisMask:u};for(let w=0;w<p.dims;w++)c&&(1<<w&a)!==0&&p.numAddAxisAfterEllipsis++,1<<w&i&&(c=!0);c||(p.ellipsisMask|=1<<p.dims,p.dims++);let m={dims:r.length,beginMask:0,endMask:0,beginValid:!1,endValid:!1};uH(p,m);let f=!0,d=!0,h=!0,g=[],x=[];for(let w=0;w<r.length;++w){if(m.strides[w]===0)throw Error(`strides[${w}] must be non-zero`);let C=!!(m.shrinkAxisMask&1<<w),N=r[w];if(N===-1){g.push(C?1:-1);continue}let _=[m.beginMask&1<<w,m.endMask&1<<w],A=[m.strides[w]>0?0:-1,m.strides[w]>0?N:N-1];if(C&&m.strides[w]<=0)throw Error("only stride 1 allowed on non-range indexing.");h=h&&m.strides[w]===1;let $=!!(m.beginMask&1<<w&&m.endMask&1<<w);if(m.beginValid&&m.endValid){if(C){let G=m.begin[w]<0?N+m.begin[w]:m.begin[w];if(m.begin[w]=G,m.end[w]=m.begin[w]+1,G<0||G>=N)throw Error(`slice index ${m.begin[w]} of dimension ${w} out of bounds.`)}else m.begin[w]=yE(m.begin[w],0,m.strides[w],N,_,A),m.end[w]=yE(m.end[w],1,m.strides[w],N,_,A);let V=m.strides[w]===1&&m.begin[w]===0&&m.end[w]===N;f=f&&V,d=d&&(w===0&&m.strides[w]===1||V)}else f=f&&m.strides[w]===1&&$,d=d&&(w===0&&m.strides[w]===1||$);let F,P=!1;if(m.beginValid&&m.endValid?(F=m.end[w]-m.begin[w],P=!0):C?(F=1,P=!0):$&&N>=0&&(m.strides[w]<0?F=-N:F=N,P=!0),P){let V;F===0||F<0!=m.strides[w]<0?V=0:V=Math.trunc(F/m.strides[w])+(F%m.strides[w]!==0?1:0),g.push(V)}else g.push(-1)}for(let w=0;w<m.finalShapeGatherIndices.length;++w){let C=m.finalShapeGatherIndices[w];C>=0?x.push(g[C]):C===BS&&x.push(1)}return{finalShapeSparse:x.filter((w,C)=>m.finalShapeGatherIndices[C]!==BS),finalShape:x,isIdentity:f,sliceDim0:d,isSimpleSlice:h,begin:m.begin,end:m.end,strides:m.strides}}function uH(r,t){t.beginMask=0,t.endMask=0,t.shrinkAxisMask=0;let e=0;t.beginValid=r.begin!=null,t.endValid=r.end!=null,t.begin=new Array(t.dims),t.end=new Array(t.dims),t.strides=new Array(t.dims),t.finalShapeGatherIndices=[],t.finalShapeGatherIndicesSparse=[],t.inputShapeGatherIndicesSparse=new Array(t.dims);for(let n=0;n<r.dims;n++)if(1<<n&r.ellipsisMask){let o=Math.min(t.dims-(r.dims-n)+1+r.numAddAxisAfterEllipsis,t.dims);for(;e<o;e++)t.begin[e]=0,t.end[e]=0,t.strides[e]=1,t.beginMask|=1<<e,t.endMask|=1<<e,t.finalShapeGatherIndices.push(e),t.finalShapeGatherIndicesSparse.push(-1),t.inputShapeGatherIndicesSparse[e]=n}else if(1<<n&r.newAxisMask)t.finalShapeGatherIndices.push(BS),t.finalShapeGatherIndicesSparse.push(-1);else{if(e===t.begin.length)throw Error(`Index out of range using input dim ${e}; input has only ${t.dims} dims, ${t.begin.length}.`);r.begin!=null&&(t.begin[e]=r.begin[n]),r.end!=null&&(t.end[e]=r.end[n]),t.strides[e]=r.strides[n],r.beginMask&1<<n&&(t.beginMask|=1<<e),r.endMask&1<<n&&(t.endMask|=1<<e),r.shrinkAxisMask&1<<n?(t.finalShapeGatherIndices.push(eH),t.finalShapeGatherIndicesSparse.push(-1),t.shrinkAxisMask|=1<<e):(t.finalShapeGatherIndices.push(e),t.finalShapeGatherIndicesSparse.push(n)),t.inputShapeGatherIndicesSparse[e]=n,e++}}function yE(r,t,e,n,o,s){if(o[t])return e>0?s[t]:s[t+1&1];{let i=r<0?n+r:r;return i<s[0]?s[0]:i>s[1]?s[1]:i}}var Q={};Gt(Q,{Serializable:()=>sh,SerializationMap:()=>Ti,registerClass:()=>wn});var sh=class{getClassName(){return this.constructor.className}static fromConfig(t,e){return new t(e)}},Ti=class{constructor(){this.classNameMap={}}static getMap(){return Ti.instance==null&&(Ti.instance=new Ti),Ti.instance}static register(t){Ti.getMap().classNameMap[t.className]=[t,t.fromConfig]}};function wn(r){E(r.className!=null,()=>"Class being registered does not have the static className property defined."),E(typeof r.className=="string",()=>"className is required to be a string, but got type "+typeof r.className),E(r.className.length>0,()=>"Class being registered has an empty-string as its className, which is disallowed."),Ti.register(r)}var AE={};Gt(AE,{TEST_EPSILON_FLOAT16:()=>TE,createVideoElement:()=>gH,encodeStrings:()=>_E,expectArrayBuffersEqual:()=>hH,expectArraysClose:()=>pH,expectArraysEqual:()=>fH,expectNumbersClose:()=>EE,expectPromiseToFail:()=>mH,expectValuesInRange:()=>dH,play:()=>xH,testEpsilon:()=>ex});var cH=.001,TE=.1;function pH(r,t,e){return e==null&&(e=ex()),GS(r,t,(n,o)=>WS(n,o,e))}function ex(){return T.backend.floatPrecision()===32?cH:TE}function GS(r,t,e){let n=!0;if((hr(r)||hr(t))&&(n=!1),hr(r)&&hr(t)&&(n=!0),n){let i=r.constructor.name,a=t.constructor.name;if(i!==a)throw new Error(`Arrays are of different type. Actual: ${i}. Expected: ${a}`)}if(Array.isArray(r)&&Array.isArray(t)){let i=Mr(r),a=Mr(t);if(!An(i,a))throw new Error(`Arrays have different shapes. Actual: [${i}]. Expected: [${a}]`)}let o=hr(r)?r:zo(r),s=hr(t)?t:zo(t);if(o.length!==s.length)throw new Error(`Arrays have different lengths actual: ${o.length} vs expected: ${s.length}.
Actual: ${o}.
Expected: ${s}.`);for(let i=0;i<s.length;++i){let a=o[i],u=s[i];if(!e(a,u))throw new Error(`Arrays differ: actual[${i}] = ${a}, expected[${i}] = ${u}.
Actual: ${o}.
Expected: ${s}.`)}typeof expect!="undefined"&&expect().nothing()}function mH(r,t){r().then(()=>t.fail(),()=>t()),typeof expect!="undefined"&&expect().nothing()}function fH(r,t){let e=typeof t=="string"||typeof t=="number"||typeof t=="boolean"?[t]:t;return Bo(r)||Bo(r[0])||Bo(t)||Bo(t[0])?GS(r,e,(n,o)=>n==o):GS(r,t,(n,o)=>WS(n,o,0))}function EE(r,t,e){if(e==null&&(e=ex()),!WS(r,t,e))throw new Error(`Numbers differ: actual === ${r}, expected === ${t}`);typeof expect!="undefined"&&expect().nothing()}function WS(r,t,e){return!isFinite(r)&&!isFinite(t)?!0:!(isNaN(r)||isNaN(t)||Math.abs(r-t)>e)}function dH(r,t,e){for(let n=0;n<r.length;n++)if(r[n]<t||r[n]>e)throw new Error(`Value out of range:${r[n]} low: ${t}, high: ${e}`)}function hH(r,t){let e=new Float32Array(r),n=new Float32Array(t);if(e.length!==n.length)throw new Error(`Expected ArrayBuffer to be of length ${n.length}, but it was ${e.length}`);for(let o=0;o<n.length;o++)if(e[o]!==n[o])throw new Error(`Expected ArrayBuffer value at ${o} to be ${n[o]} but got ${e[o]} instead`)}function _E(r){for(let t=0;t<r.length;t++){let e=r[t];Array.isArray(e)?_E(e):r[t]=Wl(e)}return r}function gH(r){let t=document.createElement("video");return"playsInline"in t&&(t.playsInline=!0),t.muted=!0,t.loop=!0,t.style.position="fixed",t.style.left="0px",t.style.top="0px",t.preload="auto",t.appendChild(r),new Promise(e=>{t.addEventListener("loadeddata",n=>e(t)),t.load()})}async function xH(r){await r.play(),"requestVideoFrameCallback"in r&&await new Promise(t=>{r.requestVideoFrameCallback(t)})}var $E="3.21.0";function yH(r,t){let e=I(r,"a","add"),n=I(t,"b","add");[e,n]=Wt(e,n);let o={a:e,b:n};return T.runKernel(Yn,o)}var X=k({add_:yH});function bH(r,t){let e=I(r,"a","floorDiv"),n=I(t,"b","floorDiv");[e,n]=Wt(e,n);let o={a:e,b:n};return T.runKernel(rs,o)}var Xp=k({floorDiv_:bH});function wH(r,t){let e=I(r,"a","div"),n=I(t,"b","div");if([e,n]=Wt(e,n),e.dtype==="int32"&&n.dtype==="int32")return Xp(e,n);let o={a:e,b:n},s={};return T.runKernel(Jo,o,s)}var pt=k({div_:wH});function CH(r,t){let e=I(r,"a","mul"),n=I(t,"b","mul");[e,n]=Wt(e,n);let o={a:e,b:n};return T.runKernel(ds,o)}var R=k({mul_:CH});function IH(r){let t=I(r,"x","abs");if(t.dtype==="complex64"){let e={x:t};return T.runKernel(Tl,e)}else{let e={x:t};return T.runKernel(oi,e)}}var Ee=k({abs_:IH});function vH(r){let e={x:I(r,"x","acos")};return T.runKernel(ra,e)}var rx=k({acos_:vH});function SH(r){let e={x:I(r,"x","acosh")};return T.runKernel(na,e)}var nx=k({acosh_:SH});function NH(r){E(Array.isArray(r),()=>"The argument passed to tf.addN() must be a list of tensors"),E(r.length>=1,()=>`Must pass at least one tensor to tf.addN(), but got ${r.length}`);let t=r.map((o,s)=>I(o,`tensors${s}`,"addN")),e=t[0];t.forEach(o=>{if(o.dtype!==e.dtype)throw new Error("All tensors passed to tf.addN() must have the same dtype")}),t.forEach(o=>{if(!An(o.shape,e.shape))throw new Error("All tensors passed to tf.addN() must have the same shape")});let n=t;return T.runKernel(Vo,n)}var DE=k({addN_:NH});function kH(r,t=null,e=!1){let o={x:I(r,"x","all","bool")},s={axis:t,keepDims:e};return T.runKernel(oa,o,s)}var Yp=k({all_:kH});function TH(r,t=null,e=!1){let o={x:I(r,"x","any","bool")},s={axis:t,keepDims:e};return T.runKernel(sa,o,s)}var Hu=k({any_:TH});function EH(r,t=0){let n={x:I(r,"x","argMax")},o={axis:t};return T.runKernel(Go,n,o)}var Ei=k({argMax_:EH});function _H(r,t=0){let n={x:I(r,"x","argMin")},o={axis:t};return T.runKernel(Nl,n,o)}var ox=k({argMin_:_H});function AH(r){let e={x:I(r,"x","asin")};return T.runKernel(ia,e)}var sx=k({asin_:AH});function $H(r){let e={x:I(r,"x","asinh")};return T.runKernel(aa,e)}var ix=k({asinh_:$H});function DH(r){let e={x:I(r,"x","atan")};return T.runKernel(la,e)}var ax=k({atan_:DH});function RH(r,t){let e=I(r,"a","atan2"),n=I(t,"b","atan2");[e,n]=Wt(e,n);let o={a:e,b:n};return T.runKernel(ca,o)}var lx=k({atan2_:RH});function FH(r){let e={x:I(r,"x","atanh")};return T.runKernel(ua,e)}var ux=k({atanh_:FH});function OH(r,t,e,n,o="NHWC",s){let i=r[3],a=[...t,i],u=FE(o);return Ku(r,a,e,s,n,null,null,u)}function HS(r,t,e,n,o,s,i="channelsLast"){let[a,u]=cx(t),l;if(i==="channelsLast")l=[a,u,r[3],r[3]];else if(i==="channelsFirst")l=[a,u,r[1],r[1]];else throw new Error(`Unknown dataFormat ${i}`);return Ku(r,l,e,n,o,s,!1,i)}function PH(r,t,e,n,o,s,i="NDHWC"){let[a,u,l]=US(t),c,p;if(i==="NDHWC")p="channelsLast",c=[a,u,l,r[4],r[4]];else if(i==="NCDHW")p="channelsFirst",c=[a,u,l,r[1],r[1]];else throw new Error(`Unknown dataFormat ${i}`);return RE(r,c,e,n,o,!1,p,s)}function Ku(r,t,e,n,o,s,i=!1,a="channelsLast"){let[u,l,c,p]=[-1,-1,-1,-1];if(a==="channelsLast")[u,l,c,p]=r;else if(a==="channelsFirst")[u,p,l,c]=r;else throw new Error(`Unknown dataFormat ${a}`);let[m,f,,d]=t,[h,g]=cx(e),[x,b]=cx(n),w=Zp(m,x),C=Zp(f,b),{padInfo:N,outHeight:_,outWidth:A}=zH(o,l,c,h,g,w,C,s,a),$=i?d*p:d,F;return a==="channelsFirst"?F=[u,$,_,A]:a==="channelsLast"&&(F=[u,_,A,$]),{batchSize:u,dataFormat:a,inHeight:l,inWidth:c,inChannels:p,outHeight:_,outWidth:A,outChannels:$,padInfo:N,strideHeight:h,strideWidth:g,filterHeight:m,filterWidth:f,effectiveFilterHeight:w,effectiveFilterWidth:C,dilationHeight:x,dilationWidth:b,inShape:r,outShape:F,filterShape:t}}function RE(r,t,e,n,o,s=!1,i="channelsLast",a){let[u,l,c,p,m]=[-1,-1,-1,-1,-1];if(i==="channelsLast")[u,l,c,p,m]=r;else if(i==="channelsFirst")[u,m,l,c,p]=r;else throw new Error(`Unknown dataFormat ${i}`);let[f,d,h,,g]=t,[x,b,w]=US(e),[C,N,_]=US(n),A=Zp(f,C),$=Zp(d,N),F=Zp(h,_),{padInfo:P,outDepth:V,outHeight:G,outWidth:W}=BH(o,l,c,p,x,b,w,A,$,F,a),q=s?g*m:g,H;return i==="channelsFirst"?H=[u,q,V,G,W]:i==="channelsLast"&&(H=[u,V,G,W,q]),{batchSize:u,dataFormat:i,inDepth:l,inHeight:c,inWidth:p,inChannels:m,outDepth:V,outHeight:G,outWidth:W,outChannels:q,padInfo:P,strideDepth:x,strideHeight:b,strideWidth:w,filterDepth:f,filterHeight:d,filterWidth:h,effectiveFilterDepth:A,effectiveFilterHeight:$,effectiveFilterWidth:F,dilationDepth:C,dilationHeight:N,dilationWidth:_,inShape:r,outShape:H,filterShape:t}}function LH(r,t,e,n,o){n==null&&(n=qS(r,t,e));let s=r[0],i=r[1],a=qu((s-t+2*n)/e+1,o),u=qu((i-t+2*n)/e+1,o);return[a,u]}function MH(r,t,e,n,o,s){o==null&&(o=qS(r,t,n));let i=r[0],a=r[1],u=r[2],l=qu((i-t+2*o)/n+1,s),c=qu((a-t+2*o)/n+1,s),p=qu((u-t+2*o)/n+1,s);return[l,c,p,e]}function qS(r,t,e,n=1){let o=Zp(t,n);return Math.floor((r[0]*(e-1)-e+o)/2)}function cx(r){return typeof r=="number"?[r,r,r]:r.length===2?[r[0],r[1],1]:r}function US(r){return typeof r=="number"?[r,r,r]:r}function Zp(r,t){return t<=1?r:r+(r-1)*(t-1)}function zH(r,t,e,n,o,s,i,a,u){let l,c,p;if(typeof r=="number"){l={top:r,bottom:r,left:r,right:r,type:r===0?"VALID":"NUMBER"};let f=LH([t,e],s,n,r,a);c=f[0],p=f[1]}else if(r==="same"){c=Math.ceil(t/n),p=Math.ceil(e/o);let m=Math.max(0,(c-1)*n+s-t),f=Math.max(0,(p-1)*o+i-e),d=Math.floor(m/2),h=m-d,g=Math.floor(f/2),x=f-g;l={top:d,bottom:h,left:g,right:x,type:"SAME"}}else if(r==="valid")l={top:0,bottom:0,left:0,right:0,type:"VALID"},c=Math.ceil((t-s+1)/n),p=Math.ceil((e-i+1)/o);else if(typeof r=="object"){let m=u==="channelsLast"?r[1][0]:r[2][0],f=u==="channelsLast"?r[1][1]:r[2][1],d=u==="channelsLast"?r[2][0]:r[3][0],h=u==="channelsLast"?r[2][1]:r[3][1];l={top:m,bottom:f,left:d,right:h,type:m===0&&f===0&&d===0&&h===0?"VALID":"EXPLICIT"},c=qu((t-s+m+f)/n+1,a),p=qu((e-i+d+h)/o+1,a)}else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:l,outHeight:c,outWidth:p}}function BH(r,t,e,n,o,s,i,a,u,l,c){let p,m,f,d;if(typeof r=="number"){p={top:r,bottom:r,left:r,right:r,front:r,back:r,type:r===0?"VALID":"NUMBER"};let g=MH([t,e,n,1],a,1,o,r,c);m=g[0],f=g[1],d=g[2]}else if(r==="same"){m=Math.ceil(t/o),f=Math.ceil(e/s),d=Math.ceil(n/i);let h=(m-1)*o+a-t,g=(f-1)*s+u-e,x=(d-1)*i+l-n,b=Math.floor(h/2),w=h-b,C=Math.floor(g/2),N=g-C,_=Math.floor(x/2),A=x-_;p={top:C,bottom:N,left:_,right:A,front:b,back:w,type:"SAME"}}else if(r==="valid")p={top:0,bottom:0,left:0,right:0,front:0,back:0,type:"VALID"},m=Math.ceil((t-a+1)/o),f=Math.ceil((e-u+1)/s),d=Math.ceil((n-l+1)/i);else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:p,outDepth:m,outHeight:f,outWidth:d}}function qu(r,t){if(!t)return Math.trunc(r);switch(t){case"round":return Math.round(r);case"ceil":return Math.ceil(r);case"floor":return Math.floor(r);default:throw new Error(`Unknown roundingMode ${t}`)}}function Qn(r){let[t,e,n]=cx(r);return t===1&&e===1&&n===1}function _r(r,t){return Qn(r)||Qn(t)}function FE(r){if(r==="NHWC")return"channelsLast";if(r==="NCHW")return"channelsFirst";throw new Error(`Unknown dataFormat ${r}`)}function Ie(r,t,e){if(e!=null){if(typeof t=="string")throw Error(`Error in ${r}: pad must be an integer when using dimRoundingMode ${e} but got pad ${t}.`);if(typeof t=="number")E(ea(t),()=>`Error in ${r}: pad must be an integer when using dimRoundingMode ${e} but got pad ${t}.`);else if(typeof t=="object")t.forEach(n=>{n.forEach(o=>{E(ea(o),()=>`Error in ${r}: pad must be an integer when using dimRoundingMode ${e} but got pad ${o}.`)})});else throw Error(`Error in ${r}: Unknown padding parameter: ${t}`)}}function VH(r,t){let n={x:I(r,"x","reshape","string_or_numeric")},o={shape:t};return T.runKernel(mi,n,o)}var D=k({reshape_:VH});function GH(r,t,e,n,o){let s=I(r,"x","avgPool","float32"),i=1;E(_r(e,i),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${e} and dilations '${i}'`);let a=s,u=!1;s.rank===3&&(u=!0,a=D(s,[1,s.shape[0],s.shape[1],s.shape[2]])),E(a.rank===4,()=>`Error in avgPool: x must be rank 4 but got rank ${a.rank}.`),Ie("avgPool",n,o);let l={x:a},c={filterSize:t,strides:e,pad:n,dimRoundingMode:o},p=T.runKernel(Wo,l,c);return p=J(p,s.dtype),u?D(p,[p.shape[1],p.shape[2],p.shape[3]]):p}var jl=k({avgPool_:GH});function WH(r,t,e,n,o,s="NDHWC"){let i=I(r,"x","avgPool3d","float32"),a=i,u=!1;i.rank===4&&(u=!0,a=D(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]])),E(a.rank===5,()=>`Error in avgPool3d: x must be rank 5 but got rank ${a.rank}.`),E(s==="NDHWC",()=>`Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),Ie("avgPool3d",n,o);let l={x:a},c={filterSize:t,strides:e,pad:n,dimRoundingMode:o,dataFormat:s},p=T.runKernel(kl,l,c);return p=J(p,a.dtype),u?D(p,[p.shape[1],p.shape[2],p.shape[3],p.shape[4]]):p}var px=k({avgPool3d_:WH});function UH(r,t=0){E(r.length>=1,()=>"Pass at least one tensor to concat");let e=qa(r,"tensors","concat","string_or_numeric");if(e[0].dtype==="complex64"&&e.forEach(s=>{if(s.dtype!=="complex64")throw new Error(`Cannot concatenate complex64 tensors with a tensor
with dtype ${s.dtype}. `)}),e.length===1)return sn(e[0]);let n=e,o={axis:t};return T.runKernel(ii,n,o)}var ne=k({concat_:UH});function HH(r){let e={x:I(r,"x","sigmoid","float32")};return T.runKernel(Es,e)}var Xr=k({sigmoid_:HH});function qH(r,t,e){let n=I(r,"x","slice","string_or_numeric");if(n.rank===0)throw new Error("Slicing scalar is not possible");let o={x:n},s={begin:t,size:e};return T.runKernel(di,o,s)}var Dt=k({slice_:qH});function KH(r){let e={x:I(r,"x","tanh","float32")};return T.runKernel(Os,e)}var _i=k({tanh_:KH});function jH(r,t,e,n,o,s){let i=I(r,"forgetBias","basicLSTMCell"),a=I(t,"lstmKernel","basicLSTMCell"),u=I(e,"lstmBias","basicLSTMCell"),l=I(n,"data","basicLSTMCell"),c=I(o,"c","basicLSTMCell"),p=I(s,"h","basicLSTMCell"),m=ne([l,p],1),f=Lt(m,a),d=X(f,u),h=d.shape[0],g=d.shape[1]/4,x=[h,g],b=Dt(d,[0,0],x),w=Dt(d,[0,g],x),C=Dt(d,[0,g*2],x),N=Dt(d,[0,g*3],x),_=X(R(Xr(b),_i(w)),R(c,Xr(X(i,C)))),A=R(_i(_),Xr(N));return[_,A]}var OE=k({basicLSTMCell_:jH});function XH(r,t,e){let n=I(r,"x","batchToSpaceND"),o=t.reduce((a,u)=>a*u);E(n.rank>=1+t.length,()=>`input rank is ${n.rank} but should be > than blockShape.length ${t.length}`),E(e.length===t.length,()=>`crops.length is ${e.length} but should be equal to blockShape.length ${t.length}`),E(n.shape[0]%o===0,()=>`input tensor batch is ${n.shape[0]} but is not divisible by the product of the elements of blockShape ${t.join(" * ")} === ${o}`);let s={x:n},i={blockShape:t,crops:e};return T.runKernel(si,s,i)}var Xl=k({batchToSpaceND_:XH});function PE(r){let t;return r.rank===0||r.rank===1?t=D(r,[1,1,1,r.size]):r.rank===2?t=D(r,[1,1,r.shape[0],r.shape[1]]):r.rank===3?t=D(r,[1,r.shape[0],r.shape[1],r.shape[2]]):t=r,t}function YH(r,t,e,n,o,s){s==null&&(s=.001);let i=I(r,"x","batchNorm"),a=I(t,"mean","batchNorm"),u=I(e,"variance","batchNorm"),l;o!=null&&(l=I(o,"scale","batchNorm"));let c;n!=null&&(c=I(n,"offset","batchNorm")),E(a.rank===u.rank,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),E(c==null||a.rank===c.rank,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),E(l==null||a.rank===l.rank,()=>"Batch normalization gradient requires mean and scale to have equal ranks.");let m={x:PE(i),scale:l,offset:c,mean:a,variance:u},f={varianceEpsilon:s},d=T.runKernel(ns,m,f);return D(d,i.shape)}var Ai=k({batchNorm_:YH});function ZH(r,t,e,n,o,s){let i=I(r,"x","batchNorm"),a=I(t,"mean","batchNorm"),u=I(e,"variance","batchNorm"),l;o!=null&&(l=I(o,"scale","batchNorm"));let c;return n!=null&&(c=I(n,"offset","batchNorm")),E(i.rank===2,()=>`Error in batchNorm2D: x must be rank 2 but got rank ${i.rank}.`),E(a.rank===2||a.rank===1,()=>`Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank ${a.rank}.`),E(u.rank===2||u.rank===1,()=>`Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank ${u.rank}.`),l!=null&&E(l.rank===2||l.rank===1,()=>`Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank ${l.rank}.`),c!=null&&E(c.rank===2||c.rank===1,()=>`Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank ${c.rank}.`),Ai(i,a,u,c,l,s)}var mx=k({batchNorm2d_:ZH});function JH(r,t,e,n,o,s){let i=I(r,"x","batchNorm"),a=I(t,"mean","batchNorm"),u=I(e,"variance","batchNorm"),l;o!=null&&(l=I(o,"scale","batchNorm"));let c;return n!=null&&(c=I(n,"offset","batchNorm")),E(i.rank===3,()=>`Error in batchNorm3D: x must be rank 3 but got rank ${i.rank}.`),E(a.rank===3||a.rank===1,()=>`Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank ${a.rank}.`),E(u.rank===3||u.rank===1,()=>`Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank ${u.rank}.`),l!=null&&E(l.rank===3||l.rank===1,()=>`Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank ${l.rank}.`),c!=null&&E(c.rank===3||c.rank===1,()=>`Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank ${c.rank}.`),Ai(i,a,u,c,l,s)}var fx=k({batchNorm3d_:JH});function QH(r,t,e,n,o,s){let i=I(r,"x","batchNorm"),a=I(t,"mean","batchNorm"),u=I(e,"variance","batchNorm"),l;o!=null&&(l=I(o,"scale","batchNorm"));let c;return n!=null&&(c=I(n,"offset","batchNorm")),E(i.rank===4,()=>`Error in batchNorm4D: x must be rank 4 but got rank ${i.rank}.`),E(a.rank===4||a.rank===1,()=>`Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank ${a.rank}.`),E(u.rank===4||u.rank===1,()=>`Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank ${u.rank}.`),l!=null&&E(l.rank===4||l.rank===1,()=>`Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank ${l.rank}.`),c!=null&&E(c.rank===4||c.rank===1,()=>`Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank ${c.rank}.`),Ai(i,a,u,c,l,s)}var dx=k({batchNorm4d_:QH});function tq(r,t,e){let n=I(r,"x","bincount"),o=I(t,"weights","bincount");E(n.dtype==="int32",()=>`Error in bincount: input dtype must be int32, but got ${n.dtype}`),E(e>=0,()=>`size must be non-negative, but got ${e}.`),E(o.size===n.size||o.size===0,()=>`Error in bincount: weights must have the same size as input or0-length, but got input shape: ${n.shape}, weights shape: ${o.shape}.`);let s={x:n,weights:o},i={size:e};return T.runKernel(up,s,i)}var hx=k({bincount_:tq});function eq(r,t){let e=I(r,"s0","broadcastArgs","int32"),n=I(t,"s1","broadcastArgs","int32");if(e.rank!==1)throw new Error(`broadcastArgs(): first input must be a vector (rank=1). Has rank ${e.rank}`);if(n.rank!==1)throw new Error(`broadcastArgs(): second input must be a vector (rank=1). Has rank ${n.rank}`);let o={s0:e,s1:n};return T.runKernel(cp,o)}var LE=k({broadcastArgs_:eq});function rq(r,t){let e=I(r,"broadcastTo","x"),n=e.shape;if(t.some(l=>!(l>0)||l%1!==0))throw new Error(`broadcastTo(): Invalid broadcast shape [${t}].`);if(t.length<e.rank)throw new Error(`broadcastTo(): shape.length=${t.length} < input.rank=${e.rank}.`);if(t.length>e.rank){let l=e.shape.slice();for(;l.length<t.length;)l.unshift(1);e=D(e,l)}let o=e.shape,s=Array.from(t);for(let l=t.length-1;l>=0;l--)if(o[l]===t[l])s[l]=1;else if(e.shape[l]!==1)throw new Error(`broadcastTo(): [${n}] cannot be broadcast to [${t}].`);if(s.map((l,c)=>l>1?c:-1).filter(l=>l>=0).length===0)return sn(e);let a={x:e},u={reps:s};return T.runKernel(Zn,a,u)}var $i=k({broadcastTo_:rq});function nq(r){let e={x:I(r,"x","ceil","float32")};return T.runKernel(Ho,e)}var gx=k({ceil_:nq});function go(r,t,e){let n={shape:r,value:t,dtype:e};return T.runKernel(Al,{},n)}function oq(r,t,e){let n=I(r,"x","clipByValue");if(E(t<=e,()=>`Error in clip: min (${t}) must be less than or equal to max (${e}).`),t===e)return go(n.shape,t,n.dtype);let o={x:n},s={clipValueMin:t,clipValueMax:e};return T.runKernel(ao,o,s)}var Cr=k({clipByValue_:oq});function sq(r){return ne(r,0)}var xx=k({concat1d_:sq});function iq(r,t){return ne(r,t)}var yx=k({concat2d_:iq});function aq(r,t){return ne(r,t)}var bx=k({concat3d_:aq});function lq(r,t){return ne(r,t)}var wx=k({concat4d_:lq});function uq(r,t,e,n,o="NHWC",s=[1,1],i){let a=I(r,"x","conv2d","float32"),u=I(t,"filter","conv2d","float32"),l=a,c=!1;a.rank===3&&(c=!0,l=D(a,[1,a.shape[0],a.shape[1],a.shape[2]])),E(l.rank===4,()=>`Error in conv2d: input must be rank 4, but got rank ${l.rank}.`),E(u.rank===4,()=>`Error in conv2d: filter must be rank 4, but got rank ${u.rank}.`),Ie("conv2d",n,i);let p=o==="NHWC"?l.shape[3]:l.shape[1];E(p===u.shape[2],()=>`Error in conv2d: depth of input (${p}) must match input depth for filter ${u.shape[2]}.`),E(_r(e,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${e} and dilations '${s}'`);let m={x:l,filter:u},f={strides:e,pad:n,dataFormat:o,dilations:s,dimRoundingMode:i},d=T.runKernel(qo,m,f);return c?D(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var Cn=k({conv2d_:uq});function cq(r,t,e,n,o="NWC",s=1,i){let a=I(r,"x","conv1d"),u=I(t,"filter","conv1d"),l=a,c=!1;a.rank===2&&(c=!0,l=D(a,[1,a.shape[0],a.shape[1]])),E(l.rank===3,()=>`Error in conv1d: input must be rank 3, but got rank ${l.rank}.`),E(u.rank===3,()=>`Error in conv1d: filter must be rank 3, but got rank ${u.rank}.`),Ie("conv1d",n,i),E(l.shape[2]===u.shape[1],()=>`Error in conv1d: depth of input (${l.shape[2]}) must match input depth for filter ${u.shape[1]}.`),E(_r(e,s),()=>`Error in conv1D: Either stride or dilation must be 1. Got stride ${e} and dilation '${s}'`),E(o==="NWC",()=>`Error in conv1d: got dataFormat of ${o} but only NWC is currently supported.`);let p=D(u,[1,u.shape[0],u.shape[1],u.shape[2]]),m=D(l,[l.shape[0],1,l.shape[1],l.shape[2]]),g=Cn(m,p,[1,e],n,"NHWC",[1,s],i);return c?D(g,[g.shape[2],g.shape[3]]):D(g,[g.shape[0],g.shape[2],g.shape[3]])}var Jp=k({conv1d_:cq});function pq(r,t,e,n,o,s="NHWC",i){E(r.length===t.rank,()=>`Length of inShape (${r.length}) and rank of dy (${t.rank}) must match`);let a=r,u=t,l=!1;t.rank===3&&(l=!0,u=D(t,[1,t.shape[0],t.shape[1],t.shape[2]]),a=[1,r[0],r[1],r[2]]),E(a.length===4,()=>`Error in conv2dDerInput: inShape must be length 4, but got length ${a.length}.`),E(u.rank===4,()=>`Error in conv2dDerInput: dy must be rank 4, but got rank ${u.rank}`),E(e.rank===4,()=>`Error in conv2dDerInput: filter must be rank 4, but got rank ${e.rank}`);let c=s==="NHWC"?a[3]:a[1],p=s==="NHWC"?u.shape[3]:u.shape[1];E(c===e.shape[2],()=>`Error in conv2dDerInput: depth of input (${c}) must match input depth for filter ${e.shape[2]}.`),E(p===e.shape[3],()=>`Error in conv2dDerInput: depth of output (${p}) must match output depth for filter ${e.shape[3]}.`),Ie("conv2dDerInput",o,i);let m={dy:u,filter:e},f={strides:n,pad:o,dataFormat:s,dimRoundingMode:i,inputShape:a},d=T.runKernel(Ko,m,f);return l?D(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var Qp=k({conv2DBackpropInput_:pq});function mq(r,t,e,n,o,s){let i=I(r,"x","conv2dTranspose"),a=I(t,"filter","conv2dTranspose");return Qp(e,i,a,n,o,"NHWC",s)}var tm=k({conv2dTranspose_:mq});function fq(r,t,e,n,o="NDHWC",s=[1,1,1]){let i=I(r,"x","conv3d"),a=I(t,"filter","conv3d"),u=i,l=!1;i.rank===4&&(l=!0,u=D(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]])),E(u.rank===5,()=>`Error in conv3d: input must be rank 5, but got rank ${u.rank}.`),E(a.rank===5,()=>`Error in conv3d: filter must be rank 5, but got rank ${a.rank}.`),E(u.shape[4]===a.shape[3],()=>`Error in conv3d: depth of input (${u.shape[4]}) must match input depth for filter ${a.shape[3]}.`),E(_r(e,s),()=>`Error in conv3D: Either strides or dilations must be 1. Got strides ${e} and dilations '${s}'`),E(o==="NDHWC",()=>`Error in conv3d: got dataFormat of ${o} but only NDHWC is currently supported.`);let c={x:u,filter:a},p={strides:e,pad:n,dataFormat:o,dilations:s},m=T.runKernel(El,c,p);return l?D(m,[m.shape[1],m.shape[2],m.shape[3],m.shape[4]]):m}var Cx=k({conv3d_:fq});function dq(r,t,e,n,o){E(r.length===t.rank,()=>`Length of inShape (${r.length}) and rank of dy (${t.rank}) must match`);let s=r,i=t,a=!1;t.rank===4&&(a=!0,i=D(t,[1,t.shape[0],t.shape[1],t.shape[2],t.shape[3]]),s=[1,r[0],r[1],r[2],r[3]]);let u=s[4],l=i.shape[4];E(s.length===5,()=>`Error in conv3dDerInput: inShape must be length 5, but got length ${s.length}.`),E(i.rank===5,()=>`Error in conv3dDerInput: dy must be rank 5, but got rank ${i.rank}`),E(e.rank===5,()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${e.rank}`),E(u===e.shape[3],()=>`Error in conv3dDerInput: depth of input (${u}) must match input depth for filter ${e.shape[3]}.`),E(l===e.shape[4],()=>`Error in conv3dDerInput: depth of output (${l}) must match output depth for filter ${e.shape[4]}.`);let c={dy:i,filter:e},p={pad:o,strides:n,inputShape:s},m=T.runKernel(dp,c,p);return a?D(m,[m.shape[1],m.shape[2],m.shape[3],m.shape[4]]):m}var Ix=k({conv3DBackpropInput_:dq});function hq(r,t,e,n,o){let s=I(r,"x","conv3dTranspose"),i=I(t,"filter","conv3dTranspose");return Ix(e,s,i,n,o)}var vx=k({conv3dTranspose_:hq});function gq(r){let e={x:I(r,"x","cos","float32")};return T.runKernel(jo,e)}var Yl=k({cos_:gq});function xq(r){let e={x:I(r,"x","cosh","float32")};return T.runKernel(Xo,e)}var em=k({cosh_:xq});function yq(r,t=0,e=!1,n=!1){let s={x:I(r,"x","cumprod")},i={axis:t,exclusive:e,reverse:n};return T.runKernel(pa,s,i)}var ju=k({cumprod_:yq});function bq(r,t=0,e=!1,n=!1){let s={x:I(r,"x","cumsum")},i={axis:t,exclusive:e,reverse:n};return T.runKernel(Yo,s,i)}var rm=k({cumsum_:bq});function wq(r,t,e,n=!1){let o=I(r,"x","denseBincount"),s=I(t,"weights","denseBincount");E(o.dtype==="int32",()=>`Error in denseBincount: input dtype must be int32, but got ${o.dtype}`),E(o.rank<=2,()=>`Error in denseBincount: input must be at most rank 2, but got rank ${o.rank}.`),E(e>=0,()=>`size must be non-negative, but got ${e}.`),E(s.size===o.size||s.size===0,()=>`Error in denseBincount: weights must have the same shape as x or 0-length, but got x shape: ${o.shape}, weights shape: ${s.shape}.`);let i={x:o,weights:s},a={size:e,binaryOutput:n};return T.runKernel(hp,i,a)}var ME=k({denseBincount_:wq});function Cq(r,t,e="NHWC"){let n=I(r,"x","depthToSpace","float32"),o=e==="NHWC"?n.shape[1]:n.shape[2],s=e==="NHWC"?n.shape[2]:n.shape[3],i=e==="NHWC"?n.shape[3]:n.shape[1];E(t>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${t}`),E(o*t>=0,()=>`Negative dimension size caused by overflow when multiplying
${o} and ${t} for depthToSpace with input shape
${n.shape}`),E(s*t>=0,()=>`Negative dimension size caused by overflow when multiplying
${s} and ${t} for depthToSpace with input shape
${n.shape}`),E(i%(t*t)===0,()=>`Dimension size must be evenly divisible by ${t*t} but is ${i} for depthToSpace with input shape ${n.shape}`);let a={x:n},u={blockSize:t,dataFormat:e};return T.runKernel(fa,a,u)}var Sx=k({depthToSpace_:Cq});function Iq(r,t,e,n,o="NHWC",s=[1,1],i){let a=I(r,"x","depthwiseConv2d","float32"),u=I(t,"filter","depthwiseConv2d","float32"),l=a,c=!1;a.rank===3&&(c=!0,l=D(a,[1,a.shape[0],a.shape[1],a.shape[2]])),E(l.rank===4,()=>`Error in depthwiseConv2d: input must be rank 4, but got rank ${l.rank}.`),E(u.rank===4,()=>`Error in depthwiseConv2d: filter must be rank 4, but got rank ${u.rank}.`);let p=o==="NHWC"?l.shape[3]:l.shape[1];E(p===u.shape[2],()=>`Error in depthwiseConv2d: number of input channels (${p}) must match the inChannels dimension in filter ${u.shape[2]}.`),Ie("depthwiseConv2d",n,i);let m={x:l,filter:u},f={strides:e,pad:n,dataFormat:o,dilations:s,dimRoundingMode:i},d=T.runKernel(Zo,m,f);return c?D(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var Di=k({depthwiseConv2d_:Iq});function vq(r){let e={x:I(r,"x","diag")};return T.runKernel(yp,e)}var zE=k({diag_:vq});function Sq(r,t,e,n,o=[1,1],s="NHWC"){let i=I(r,"x","dilation2d"),a=I(t,"filter","dilation2d");E(i.rank===3||i.rank===4,()=>`Error in dilation2d: input must be rank 3 or 4, but got rank ${i.rank}.`),E(a.rank===3,()=>`Error in dilation2d: filter must be rank 3, but got rank ${a.rank}.`),E(s==="NHWC",()=>`Error in dilation2d: Only NHWC is currently supported, but got dataFormat of ${s}`);let u=i,l=!1;i.rank===3&&(u=D(i,[1,i.shape[0],i.shape[1],i.shape[2]]),l=!0);let c={x:u,filter:a},p={strides:e,pad:n,dilations:o},m=T.runKernel(_l,c,p);return l?D(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var Nx=k({dilation2d_:Sq});function Nq(r,t){let e=I(r,"a","equal","string_or_numeric"),n=I(t,"b","equal","string_or_numeric");[e,n]=Wt(e,n),Pt(e.shape,n.shape);let o={a:e,b:n};return T.runKernel(ha,o)}var Ar=k({equal_:Nq});function kq(r,t,e){let n=I(t,"a","where"),o=I(e,"b","where"),s=I(r,"condition","where","bool"),i=Pt(Pt(s.shape,n.shape),o.shape),a=$i(s,i),u=$i(n,i),l=$i(o,i),c={condition:a,t:u,e:l};return T.runKernel(fi,c)}var _e=k({where_:kq});function Tq(r){let e={x:I(r,"x","zerosLike")};return T.runKernel(yi,e)}var It=k({zerosLike_:Tq});function Eq(r,t){let e=I(r,"a","div"),n=I(t,"b","div");[e,n]=Wt(e,n);let o=pt(e,n),s=It(o),i=Ar(n,s);return _e(i,s,o)}var kx=k({divNoNan_:Eq});function _q(r,t){let e=I(r,"t1","dot"),n=I(t,"t2","dot");E((e.rank===1||e.rank===2)&&(n.rank===1||n.rank===2),()=>`Error in dot: inputs must all be rank 1 or 2, but got ranks ${e.rank} and ${n.rank}.`);let o=e.rank===1?e.size:e.shape[1],s=n.rank===1?n.size:n.shape[0];if(E(o===s,()=>`Error in dot: inner dimensions of inputs must match, but got ${o} and ${s}.`),e.rank===1&&n.rank===1){let i=D(e,[1,-1]),a=D(n,[-1,1]),u=Lt(i,a);return D(u,[])}else if(e.rank===1&&n.rank===2){let i=D(e,[1,-1]),a=D(n,[n.shape[0],n.shape[1]]),u=Lt(i,a);return D(u,[u.size])}else if(e.rank===2&&n.rank===1){let i=D(n,[-1,1]),a=Lt(e,i);return D(a,[a.size])}else{let i=D(n,[n.shape[0],n.shape[1]]);return Lt(e,i)}}var Tx=k({dot_:_q});function Aq(r,...t){let e=t.map((o,s)=>I(o,`tensors${s}`,"einsum")),n={equation:r};return T.runKernel(bp,e,n)}var BE=k({einsum_:Aq});function $q(r){let e={x:I(r,"x","elu","float32")};return T.runKernel(Qo,e)}var Ri=k({elu_:$q});function Dq(r){let t=I(r,"x","erf");E(t.dtype==="int32"||t.dtype==="float32",()=>"Input dtype must be `int32` or `float32`."),t.dtype==="int32"&&(t=J(t,"float32"));let e={x:t};return T.runKernel(da,e)}var Ex=k({erf_:Dq});function KS(r,t){for(let e=0;e<r.length;++e)if(r[r.length-e-1]!==t-1-e)return!1;return!0}function VE(r,t,e){let n=r.length+t.length,o=[],s=0,i=0;for(let a=0;a<n;a++)e.indexOf(a)===-1?o.push(r[s++]):o.push(t[i++]);return o}function jS(r,t){let e=[],n=r.length;for(let s=0;s<n;s++)t.indexOf(s)===-1&&e.push(r[s]);let o=t.map(s=>r[s]);return[e,o]}function xo(r,t){let e=t.map(n=>1);return VE(r,e,t)}function Rq(r,t,e){E(KS(t,e),()=>`${r} supports only inner-most axes for now. Got axes ${t} and rank-${e} input.`)}function XS(r,t){if(KS(r,t))return null;let e=[];for(let n=0;n<t;++n)r.indexOf(n)===-1&&e.push(n);return r.forEach(n=>e.push(n)),e}function ih(r){return r.map((t,e)=>[e,t]).sort((t,e)=>t[1]-e[1]).map(t=>t[0])}function Fq(r,t){let e=[];for(let n=t-r;n<t;++n)e.push(n);return e}function Oq(r,t=null,e=!1){let o={x:I(r,"x","max")},s={reductionIndices:t,keepDims:e};return T.runKernel(as,o,s)}var Br=k({max_:Oq});function Pq(r,t=null,e=!1){let o={x:I(r,"x","min")},s={axis:t,keepDims:e};return T.runKernel(ps,o,s)}var Xu=k({min_:Pq});function Lq(r,t){let e=I(r,"base","pow"),n=I(t,"exp","pow");[e,n]=Wt(e,n);let o={a:e,b:n};return T.runKernel(xs,o)}var an=k({pow_:Lq});function mt(r,t){if((hr(r)&&t!=="string"||Array.isArray(r))&&t!=="complex64")throw new Error("Error creating a new Scalar: value must be a primitive (number|boolean|string)");if(t==="string"&&hr(r)&&!(r instanceof Uint8Array))throw new Error("When making a scalar from encoded string, the value must be `Uint8Array`.");return on(r,[],[],t)}function Mq(r){let e={x:I(r,"x","sqrt","float32")};return T.runKernel(_s,e)}var ve=k({sqrt_:Mq});function zq(r){let t=I(r,"x","square"),e={};return T.runKernel("Square",{x:t},e)}var Mt=k({square_:zq});function Bq(r,t=null,e=!1){let n=I(r,"x","sum");n.dtype==="bool"&&(n=J(n,"int32"));let o={x:n},s={axis:t,keepDims:e};return T.runKernel(As,o,s)}var ft=k({sum_:Bq});function Vq(r,t="euclidean",e=null,n=!1){r=I(r,"x","norm");let o=GE(r,t,e),s=o.shape;if(n){let i=ar(e,r.shape);s=xo(o.shape,i)}return D(o,s)}function GE(r,t,e=null){if(r.rank===0)return Ee(r);if(r.rank!==1&&e===null)return GE(D(r,[-1]),t,e);if(r.rank===1||typeof e=="number"||Array.isArray(e)&&e.length===1){if(t===1)return ft(Ee(r),e);if(t===1/0)return Br(Ee(r),e);if(t===-1/0)return Xu(Ee(r),e);if(t==="euclidean"||t===2)return ve(ft(an(Ee(r),mt(2,"int32")),e));throw new Error(`Error in norm: invalid ord value: ${t}`)}if(Array.isArray(e)&&e.length===2){if(t===1)return Br(ft(Ee(r),e[0]),e[1]-1);if(t===1/0)return Br(ft(Ee(r),e[1]),e[0]);if(t===-1/0)return Xu(ft(Ee(r),e[1]),e[0]);if(t==="fro"||t==="euclidean")return ve(ft(Mt(r),e));throw new Error(`Error in norm: invalid ord value: ${t}`)}throw new Error(`Error in norm: invalid axis: ${e}`)}var Ya=k({norm_:Vq});function Gq(r,t=null,e=!1){return Ya(r,"euclidean",t,e)}var _x=k({euclideanNorm_:Gq});function Wq(r){let e={x:I(r,"x","exp")};return T.runKernel(ts,e)}var er=k({exp_:Wq});function Uq(r,t=0){let e=I(r,"x","expandDims","string_or_numeric");E(t<=e.rank,()=>"Axis must be <= rank of the tensor");let n={input:e},o={dim:t};return T.runKernel(ai,n,o)}var gr=k({expandDims_:Uq});function Hq(r){let e={x:I(r,"x","expm1")};return T.runKernel(ga,e)}var Ax=k({expm1_:Hq});function qq(r,t){let e=I(r,"x","tile","string_or_numeric");E(e.rank===t.length,()=>`Error in transpose: rank of input ${e.rank} must match length of reps ${t}.`);let n={x:e},o={reps:t};return T.runKernel(Zn,n,o)}var $r=k({tile_:qq});function Kq(r,t,e,n="float32"){t==null&&(t=r);let o=wt([r,t],n),s=r<=t?r:t;for(let a=0;a<s;++a)o.set(1,a,a);let i=D(o.toTensor(),[r,t]);if(e==null)return i;if(e.length===1)return $r(gr(i,0),[e[0],1,1]);if(e.length===2)return $r(gr(gr(i,0),0),[e[0],e[1],1,1]);if(e.length===3)return $r(gr(gr(gr(i,0),0),0),[e[0],e[1],e[2],1,1]);throw new Error(`eye() currently supports only 1D and 2D batchShapes, but received ${e.length}D.`)}var Yu=k({eye_:Kq});function jq(r){let e={x:I(r,"x","floor","float32")};return T.runKernel(es,e)}var Fi=k({floor_:jq});function Xq(r,t,e=0,n=0){let o=I(r,"x","gather"),s=I(t,"indices","gather","int32"),i={x:o,indices:s},a={axis:e,batchDims:n};return T.runKernel(li,i,a)}var Oi=k({gather_:Xq});function Yq(r,t){let e=I(r,"a","greater","string_or_numeric"),n=I(t,"b","greater","string_or_numeric");[e,n]=Wt(e,n),Pt(e.shape,n.shape);let o={a:e,b:n};return T.runKernel(ba,o)}var He=k({greater_:Yq});function Zq(r,t){let e=I(r,"a","greaterEqual","string_or_numeric"),n=I(t,"b","greaterEqual","string_or_numeric");[e,n]=Wt(e,n),Pt(e.shape,n.shape);let o={a:e,b:n};return T.runKernel(os,o)}var Fn=k({greaterEqual_:Zq});function Jq(r){let e={x:I(r,"x","isFinite")};return T.runKernel(wa,e)}var $x=k({isFinite_:Jq});function Qq(r){let e={x:I(r,"x","isInf")};return T.runKernel(Ca,e)}var Dx=k({isInf_:Qq});function tK(r){let e={x:I(r,"x","isNaN")};return T.runKernel(Ia,e)}var Rx=k({isNaN_:tK});function eK(r,t=.2){let n={x:I(r,"x","leakyRelu")},o={alpha:t};return T.runKernel(ss,n,o)}var Zl=k({leakyRelu_:eK});function rK(r,t){let e=I(r,"a","less","string_or_numeric"),n=I(t,"b","less","string_or_numeric");[e,n]=Wt(e,n),Pt(e.shape,n.shape);let o={a:e,b:n};return T.runKernel(va,o)}var nm=k({less_:rK});function nK(r,t){let e=I(r,"a","lessEqual","string_or_numeric"),n=I(t,"b","lessEqual","string_or_numeric");[e,n]=Wt(e,n),Pt(e.shape,n.shape);let o={a:e,b:n};return T.runKernel(Sa,o)}var On=k({lessEqual_:nK});function WE(r,t,e){if(e<=0)throw new Error("The number of values should be positive.");let n={start:r,stop:t,num:e};return T.runKernel(Sp,{},n)}function oK(r,t=5,e=1,n=1,o=.5){let s=I(r,"x","localResponseNormalization");E(s.rank===4||s.rank===3,()=>`Error in localResponseNormalization: x must be rank 3 or 4 but got
rank ${s.rank}.`),E(ea(t),()=>`Error in localResponseNormalization: depthRadius must be an integer but got depthRadius ${t}.`);let i=s,a=!1;s.rank===3&&(a=!0,i=D(s,[1,s.shape[0],s.shape[1],s.shape[2]]));let u={x:i},l={depthRadius:t,bias:e,alpha:n,beta:o},c=T.runKernel($l,u,l);return a?D(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var Fx=k({localResponseNormalization_:oK});function sK(r){let e={x:I(r,"x","log","float32")};return T.runKernel(is,e)}var Ir=k({log_:sK});function iK(r){let e={x:I(r,"x","log1p")};return T.runKernel(Na,e)}var Jl=k({log1p_:iK});function aK(r){return E(ri(r),()=>"The f passed in grad(f) must be a function"),(t,e)=>{let n=I(t,"x","tf.grad","string_or_numeric"),o=e!=null?I(e,"dy","tf.grad"):null;return T.tidy(()=>{let{value:s,grads:i}=T.gradients(()=>r(n),[n],o);return o!=null&&$e(s.shape,o.shape,"The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)"),Px(i),i[0]})}}function lK(r){return E(ri(r),()=>"The f passed in grads(f) must be a function"),(t,e)=>{E(Array.isArray(t),()=>"The args passed in grads(f)(args) must be an array of `Tensor`s or `TensorLike`s");let n=qa(t,"args","tf.grads","string_or_numeric"),o=e!=null?I(e,"dy","tf.grads"):null;return T.tidy(()=>{let{value:s,grads:i}=T.gradients(()=>r(...n),n,o);return o!=null&&$e(s.shape,o.shape,"The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),Px(i),i})}}function uK(r){return E(ri(r),()=>"The f passed in valueAndGrad(f) must be a function"),(t,e)=>{E(t instanceof Ft,()=>"The x passed in valueAndGrad(f)(x) must be a tensor"),E(e==null||e instanceof Ft,()=>"The dy passed in valueAndGrad(f)(x, dy) must be a tensor");let{grads:n,value:o}=T.gradients(()=>r(t),[t],e);return Px(n),{grad:n[0],value:o}}}function cK(r){return E(ri(r),()=>"The f passed in valueAndGrads(f) must be a function"),(t,e)=>{E(Array.isArray(t)&&t.every(o=>o instanceof Ft),()=>"The args passed in valueAndGrads(f)(args) must be array of tensors"),E(e==null||e instanceof Ft,()=>"The dy passed in valueAndGrads(f)(args, dy) must be a tensor");let n=T.gradients(()=>r(...t),t,e);return e!=null&&$e(n.value.shape,e.shape,"The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),Px(n.grads),n}}function Ox(r,t){E(ri(r),()=>"The f passed in variableGrads(f) must be a function"),E(t==null||Array.isArray(t)&&t.every(l=>l instanceof Ha),()=>"The varList passed in variableGrads(f, varList) must be an array of variables");let e=t!=null;if(!e){t=[];for(let l in T.registeredVariables)t.push(T.registeredVariables[l])}let n=e?t.filter(l=>!l.trainable):null,o=t.length;t=t.filter(l=>l.trainable),E(t.length>0,()=>`variableGrads() expects at least one of the input variables to be trainable, but none of the ${o} variables is trainable.`);let s=!0,{value:i,grads:a}=T.gradients(r,t,null,s);E(a.some(l=>l!=null),()=>"Cannot find a connection between any variable and the result of the loss function y=f(x). Please make sure the operations that use variables are inside the function f passed to minimize()."),E(i.rank===0,()=>`The f passed in variableGrads(f) must return a scalar, but it returned a rank-${i.rank} tensor`);let u={};return t.forEach((l,c)=>{a[c]!=null&&(u[l.name]=a[c])}),n!=null&&n.forEach(l=>u[l.name]=null),{value:i,grads:u}}function ln(r){return T.customGrad(r)}function Px(r){if(r.filter(e=>e==null).length>0)throw new Error(`Cannot compute gradient of y=f(x) with respect to x. Make sure that
the f you passed encloses all operations that lead from x to y.`)}function pK(r){let e={x:I(r,"x","softplus")};return T.runKernel(za,e)}var Ms=k({softplus_:pK});function mK(r){let t=I(r,"x","logSigmoid");return ln(n=>({value:Ut(Ms(Ut(n))),gradFunc:i=>R(i,Xr(Ut(n)))}))(t)}var Lx=k({logSigmoid_:mK});function fK(r,t){let e=I(r,"a","sub"),n=I(t,"b","sub");[e,n]=Wt(e,n);let o={a:e,b:n};return T.runKernel(Rs,o)}var ct=k({sub_:fK});function dK(r,t=-1){let e=I(r,"logits","logSoftmax");if(t===-1&&(t=e.rank-1),t!==e.rank-1)throw Error(`Log Softmax along a non-last dimension is not yet supported. Logits was rank ${e.rank} and axis was ${t}`);return ln((o,s)=>{let a=Br(o,t,!0),u=ct(o,a),l=ct(J(u,"float32"),Ir(ft(er(u),t,!0)));return s([l]),{value:l,gradFunc:(p,m)=>{let[f]=m,d=!0,h=er(f);return ct(p,R(ft(p,t,d),h))}}})(e)}var om=k({logSoftmax_:dK});function hK(r,t=null,e=!1){let n=I(r,"x","logSumExp"),o=ar(t,n.shape),s=Br(n,o,!0),i=ct(n,s),a=er(i),u=ft(a,o),l=Ir(u),c=X(D(s,l.shape),l);if(e){let p=xo(c.shape,o);return D(c,p)}return c}var sm=k({logSumExp_:hK});function gK(r,t){let e=I(r,"a","logicalAnd","bool"),n=I(t,"b","logicalAnd","bool");Pt(e.shape,n.shape);let o={a:e,b:n};return T.runKernel(ka,o)}var Dr=k({logicalAnd_:gK});function xK(r){let e={x:I(r,"x","logicalNot","bool")};return T.runKernel(Ta,e)}var Ql=k({logicalNot_:xK});function yK(r,t){let e=I(r,"a","logicalOr","bool"),n=I(t,"b","logicalOr","bool");Pt(e.shape,n.shape);let o={a:e,b:n};return T.runKernel(Ea,o)}var im=k({logicalOr_:yK});function bK(r,t){let e=I(r,"a","logicalXor","bool"),n=I(t,"b","logicalXor","bool");return Pt(e.shape,n.shape),Dr(im(r,t),Ql(Dr(r,t)))}var Mx=k({logicalXor_:bK});var zx=2147483648;function wK(r,t,e="left"){let n=I(r,"sortedSequence","searchSorted"),o=I(t,"values","searchSorted"),s=n.shape[n.shape.length-1],i=o.shape[o.shape.length-1],a=D(n,[-1,s]),u=D(o,[-1,i]);if(a.rank<2)throw new Error("Sorted input argument must be at least 2-dimensional");if(a.shape[0]!==u.shape[0])throw new Error("Leading dimension of 'sortedSequence' and 'values' must match.");if(Zt(u.shape)>=zx)throw new Error(`values tensor size must less than ${zx}`);if(a.shape[1]>=zx)throw new Error(`trailing dim_size must less than ${zx} for int32 output type, was ${a.shape[1]}`);let l={sortedSequence:a,values:u},c={side:e};return T.runKernel(Op,l,c)}var ah=k({searchSorted_:wK});function UE(r,t){return ah(r,t,"left")}function CK(r,t,e,n,o){let s=I(r,"x","maxPool"),i=1,a=s,u=!1;s.rank===3&&(u=!0,a=D(s,[1,s.shape[0],s.shape[1],s.shape[2]])),E(a.rank===4,()=>`Error in maxPool: input must be rank 4 but got rank ${a.rank}.`),E(_r(e,i),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${e} and dilations '${i}'`),Ie("maxPool",n,o);let l={x:a},c={filterSize:t,strides:e,pad:n,dimRoundingMode:o},p=T.runKernel(us,l,c);return u?D(p,[p.shape[1],p.shape[2],p.shape[3]]):p}var tu=k({maxPool_:CK});function IK(r,t=[1,1,1],e,n,o,s="NDHWC"){let i=I(r,"x","maxPool3d"),a=i,u=!1;i.rank===4&&(u=!0,a=D(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]])),E(a.rank===5,()=>`Error in maxPool3d: x must be rank 5 but got rank ${a.rank}.`),E(s==="NDHWC",()=>`Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),Ie("maxPool3d",n,o);let l={x:a},c={filterSize:t,strides:e,pad:n,dimRoundingMode:o,dataFormat:s},p=T.runKernel(Dl,l,c);return u?D(p,[p.shape[1],p.shape[2],p.shape[3],p.shape[4]]):p}var Bx=k({maxPool3d_:IK});function vK(r,t,e,n,o=!1){let i={x:I(r,"x","maxPoolWithArgmax")},a={filterSize:t,strides:e,pad:n,includeBatchInIndex:o},u=T.runKernel(Ep,i,a);return{result:u[0],indexes:u[1]}}var HE=k({maxPoolWithArgmax_:vK});function SK(r,t){let e=I(r,"a","maximum"),n=I(t,"b","maximum");[e,n]=Wt(e,n),e.dtype==="bool"&&(e=J(e,"int32"),n=J(n,"int32")),Pt(e.shape,n.shape);let o={a:e,b:n};return T.runKernel(ls,o)}var In=k({maximum_:SK});function NK(r,t=null,e=!1){let o={x:I(r,"x","mean")},s={axis:t,keepDims:e};return T.runKernel(cs,o,s)}var Se=k({mean_:NK});function Ne(r,t="float32"){if(t==="complex64"){let n=Ne(r,"float32"),o=Ne(r,"float32");return bn(n,o)}let e=ip(Zt(r),t);return T.makeTensor(e,r,t)}function lr(r,t="float32"){if(t==="complex64"){let n=lr(r,"float32"),o=Ne(r,"float32");return bn(n,o)}let e=zd(Zt(r),t);return T.makeTensor(e,r,t)}function qE(r,t,{indexing:e="xy"}={}){if(e!=="xy"&&e!=="ij")throw new TypeError(`${e} is not a valid third argument to meshgrid`);if(r===void 0)return[];let n=I(r,"x","meshgrid",r instanceof Ft?r.dtype:"float32");if(t===void 0)return[n];let o=I(t,"y","meshgrid",t instanceof Ft?t.dtype:"float32"),s=Zt(n.shape),i=Zt(o.shape);return e==="xy"?(n=D(n,[1,-1]),o=D(o,[-1,1]),[Lt(lr([i,1],n.dtype),n),Lt(o,lr([1,s],o.dtype))]):(n=D(n,[-1,1]),o=D(o,[1,-1]),[Lt(n,lr([1,i],n.dtype)),Lt(lr([s,1],o.dtype),o)])}function kK(r,t){let e=I(r,"a","minimum"),n=I(t,"b","minimum");[e,n]=Wt(e,n),e.dtype==="bool"&&(e=J(e,"int32"),n=J(n,"int32")),Pt(e.shape,n.shape);let o={a:e,b:n};return T.runKernel(ms,o)}var Pi=k({minimum_:kK});function TK(r,t,e){E(e==="reflect"||e==="symmetric",()=>`Invalid mode. Mode must be either reflect or symmetric. Got ${e}.`);let n=I(r,"x","mirrorPad");if(n.rank===0)throw new Error("mirrorPad(scalar) is not defined. Pass non-scalar to mirrorPad");E(t.length===n.rank,()=>`Padding doesn't match input. Must be ${n.rank}. Got ${t.length}.`);let o=e==="reflect"?1:0;for(let a=0;a<n.rank;a++)E(t[a].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),E(t[a][0]>=0&&t[a][0]<=n.shape[a]-o&&t[a][1]>=0&&t[a][1]<=n.shape[a]-o,()=>`Padding in dimension ${a} cannot be greater than or equal to ${n.shape[a]-o} or less than 0 for input of shape ${n.shape}`);let s={paddings:t,mode:e},i={x:n};return T.runKernel(fs,i,s)}var Vx=k({mirrorPad_:TK});function EK(r,t){let e=I(r,"a","mod"),n=I(t,"b","mod");[e,n]=Wt(e,n);let o={a:e,b:n};return T.runKernel(_a,o)}var Gx=k({mod_:EK});function _K(r,t=null,e=!1){r=I(r,"x","moments");let n=ar(t,r.shape),o=Se(r,n,e),s=o.shape;e||(s=xo(o.shape,n));let i=Mt(ct(J(r,"float32"),D(o,s))),a=Se(i,n,e);return{mean:o,variance:a}}var Zu=k({moments_:_K});function AK(r,t,e,n){let o=I(t,"data","multiRNNCell"),s=qa(e,"c","multiRNNCell"),i=qa(n,"h","multiRNNCell"),a=o,u=[];for(let p=0;p<r.length;p++){let m=r[p](a,s[p],i[p]);u.push(m[0]),u.push(m[1]),a=m[1]}let l=[],c=[];for(let p=0;p<u.length;p+=2)l.push(u[p]),c.push(u[p+1]);return[l,c]}var KE=k({multiRNNCell_:AK});function $K(r,t,e,n=!1){let o=I(r,"logits","multinomial"),s=o.size,i=o.rank;if(s<2)throw new Error(`Error in multinomial: you need at least 2 outcomes, but got ${s}.`);if(i>2)throw new Error(`Rank of probabilities must be 1 or 2, but is ${i}`);e=e||Math.random();let u={logits:i===1?D(o,[1,-1]):o},l={numSamples:t,seed:e,normalized:n},c=T.runKernel(_p,u,l);return i===1?D(c,[c.size]):c}var jE=k({multinomial_:$K});function DK(r,t){let e=I(r,"a","notEqual","string_or_numeric"),n=I(t,"b","notEqual","string_or_numeric");[e,n]=Wt(e,n),Pt(e.shape,n.shape);let o={a:e,b:n};return T.runKernel(Aa,o)}var zs=k({notEqual_:DK});function RK(r){let e={x:I(r,"x","onesLike")};return T.runKernel(ci,e)}var xr=k({onesLike_:RK});function FK(r,t){let e=I(r,"v1","outerProduct"),n=I(t,"v2","outerProduct");E(e.rank===1&&n.rank===1,()=>`Error in outerProduct: inputs must be rank 1, but got ranks ${e.rank} and ${n.rank}.`);let o=D(e,[-1,1]),s=D(n,[1,-1]);return Lt(o,s)}var XE=k({outerProduct_:FK});function OK(r,t,e=0){let n=I(r,"x","pad");if(n.rank===0)throw new Error("pad(scalar) is not defined. Pass non-scalar to pad");let o={paddings:t,constantValue:e},s={x:n};return T.runKernel(gs,s,o)}var un=k({pad_:OK});function PK(r,t,e=0){return E(t.length===2,()=>"Invalid number of paddings. Must be length of 2."),un(r,[t],e)}var YE=k({pad1d_:PK});function LK(r,t,e=0){return E(t.length===2&&t[0].length===2&&t[1].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),un(r,t,e)}var ZE=k({pad2d_:LK});function MK(r,t,e=0){return E(t.length===3&&t[0].length===2&&t[1].length===2&&t[2].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),un(r,t,e)}var JE=k({pad3d_:MK});function zK(r,t,e=0){return E(t.length===4&&t[0].length===2&&t[1].length===2&&t[2].length===2&&t[3].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),un(r,t,e)}var QE=k({pad4d_:zK});function BK(r,t,e){let n=I(r,"x","spaceToBatchND");E(n.rank>=1+t.length,()=>`input rank ${n.rank} should be > than [blockShape] ${t.length}`),E(e.length===t.length,()=>`paddings.shape[0] ${e.length} must be equal to [blockShape] ${t.length}`),E(n.shape.reduce((i,a,u)=>u>0&&u<=t.length?i&&(a+e[u-1][0]+e[u-1][1])%t[u-1]===0:i,!0),()=>`input spatial dimensions ${n.shape.slice(1)} with paddings ${e.toString()} must be divisible by blockShapes ${t.toString()}`);let o={x:n},s={blockShape:t,paddings:e};return T.runKernel(hi,o,s)}var eu=k({spaceToBatchND_:BK});function VK(r,t,e,n,o,s,i){o==null&&(o=[1,1]),s==null&&(s=1),n===0&&(n="valid");let a=I(r,"x","maxPool"),u=a,l=!1;a.rank===3&&(l=!0,u=D(a,[1,a.shape[0],a.shape[1],a.shape[2]])),E(_r(s,o),()=>`Error in pool: Either strides or dilations must be 1. Got strides ${s} and dilations '${o}'`);let c=HS(u.shape,t,s,o,n),p=[c.dilationHeight,c.dilationWidth],m;n==="same"?m=WK([c.filterHeight,c.filterWidth],p):m=[[0,0],[0,0]];let f=p[0]===1&&p[1]===1,[d,h]=GK([c.inHeight,c.inWidth],p,m),g=f?n:"valid",x=f?u:eu(u,p,d),w=(e==="avg"?()=>jl(x,t,s,g,i):()=>tu(x,t,s,g,i))(),C=f?w:Xl(w,p,h);return l?D(C,[C.shape[1],C.shape[2],C.shape[3]]):C}function GK(r,t,e){let n=e.map(c=>c[0]),o=e.map(c=>c[1]),s=r.concat(n,o),i=t.map((c,p)=>(c-s[p]%c)%c),a=o.map((c,p)=>c+i[p]),u=t.map((c,p)=>[n[p],a[p]]),l=t.map((c,p)=>[0,i[p]]);return[u,l]}function WK(r,t){let n=r.map((i,a)=>i+(i-1)*(t[a]-1)).map(i=>i-1),o=n.map(i=>Math.floor(i/2)),s=n.map((i,a)=>i-o[a]);return n.map((i,a)=>[o[a],s[a]])}var Wx=k({pool_:VK});function UK(r,t){let e=I(r,"x","prelu"),n=I(t,"alpha","prelu"),o={x:e,alpha:n};return T.runKernel(ys,o)}var ru=k({prelu_:UK});function HK(r,t=null,e=!1){let n=I(r,"x","prod");n.dtype==="bool"&&(n=J(n,"int32"));let o={x:n},s={axis:t,keepDims:e};return T.runKernel(bs,o,s)}var Ux=k({prod_:HK});function qK(r,t,e,n){let o=r.map((c,p)=>I(c,`tensors${p}`,"raggedGather","int32")),s=I(t,"paramsDenseValues","raggedGather"),i=I(e,"indices","raggedGather","int32"),a={paramsNestedSplits:o,paramsDenseValues:s,indices:i},u={outputRaggedRank:n},l=T.runKernel(Ap,a,u);return{outputNestedSplits:l.slice(0,l.length-1),outputDenseValues:l[l.length-1]}}var t_=k({raggedGather_:qK});function KK(r,t,e,n,o){let s=I(r,"shape","raggedTensorToTensor","int32"),i=I(t,"values","raggedTensorToTensor"),a=I(e,"defaultValue","raggedTensorToTensor",i.dtype),u=n.map((p,m)=>I(p,`tensors${m}`,"raggedTensorToTensor","int32")),l={shape:s,values:i,defaultValue:a,rowPartitionTensors:u},c={rowPartitionTypes:o};return T.runKernel($p,l,c)}var e_=k({raggedTensorToTensor_:KK});function jK(r,t,e){let n=Zt(r),o=null;if(e==null||e==="float32")o=new Float32Array(n);else if(e==="int32")o=new Int32Array(n);else if(e==="bool")o=new Uint8Array(n);else throw new Error(`Unknown data type ${e}`);for(let s=0;s<n;s++)o[s]=t();return T.makeTensor(o,r,e)}var r_=k({rand_:jK});var jx=Sl(lh());var Qu=class{constructor(t,e,n,o,s){this.mean=t,this.stdDev=e,this.dtype=n,this.nextVal=NaN,this.truncated=o,this.truncated&&(this.upper=this.mean+this.stdDev*2,this.lower=this.mean-this.stdDev*2);let i=s||Math.random();this.random=jx.alea(i.toString())}nextValue(){if(!isNaN(this.nextVal)){let o=this.nextVal;return this.nextVal=NaN,o}let t,e,n=!1;for(;!n;){let o,s,i;do o=2*this.random()-1,s=2*this.random()-1,i=o*o+s*s;while(i>=1||i===0);let a=Math.sqrt(-2*Math.log(i)/i);t=this.mean+this.stdDev*o*a,e=this.mean+this.stdDev*s*a,(!this.truncated||this.isValidTruncated(t))&&(n=!0)}return(!this.truncated||this.isValidTruncated(e))&&(this.nextVal=this.convertValue(e)),this.convertValue(t)}convertValue(t){return this.dtype==null||this.dtype==="float32"?t:Math.round(t)}isValidTruncated(t){return t<=this.upper&&t>=this.lower}},qx=class{constructor(t,e,n,o){this.alpha=t,this.beta=1/e,this.dtype=n;let s=o||Math.random();this.randu=jx.alea(s.toString()),this.randn=new Qu(0,1,n,!1,this.randu()),t<1?this.d=t+2/3:this.d=t-1/3,this.c=1/Math.sqrt(9*this.d)}nextValue(){let t,e,n,o,s,i;for(;;){do o=this.randn.nextValue(),i=1+this.c*o;while(i<=0);if(i*=i*i,t=o*o,e=1-.331*t*t,n=.5*t+this.d*(1-i+Math.log(i)),s=this.randu(),s<e||Math.log(s)<n)break}return i=1/this.beta*this.d*i,this.alpha<1&&(i*=Math.pow(this.randu(),1/this.alpha)),this.convertValue(i)}convertValue(t){return this.dtype==="float32"?t:Math.round(t)}},Kx=class{constructor(t=0,e=1,n,o){if(this.canReturnFloat=()=>this.dtype==null||this.dtype==="float32",this.min=t,this.range=e-t,this.dtype=n,o==null&&(o=Math.random()),typeof o=="number"&&(o=o.toString()),!this.canReturnFloat()&&this.range<=1)throw new Error(`The difference between ${t} - ${e} <= 1 and dtype is not float`);this.random=jx.alea(o)}convertValue(t){return this.canReturnFloat()?t:Math.round(t)}nextValue(){return this.convertValue(this.min+this.range*this.random())}};function ej(r,t,e=1,n="float32",o){if(e==null&&(e=1),n==null&&(n="float32"),n!=="float32"&&n!=="int32")throw new Error(`Unsupported data type ${n}`);let s=new qx(t,e,n,o),i=wt(r,n);for(let a=0;a<i.values.length;a++)i.values[a]=s.nextValue();return i.toTensor()}var b_=k({randomGamma_:ej});function rj(r,t=0,e=1,n,o){if(n!=null&&n==="bool")throw new Error(`Unsupported data type ${n}`);let s=new Qu(t,e,n,!1,o),i=wt(r,n);for(let a=0;a<i.values.length;a++)i.values[a]=s.nextValue();return i.toTensor()}var tc=k({randomNormal_:rj});function nj(r,t,e){if(t!=null&&t==="bool")throw new Error(`Unsupported data type ${t}`);return tc(r,0,1,t,e)}var w_=k({randomStandardNormal_:nj});function oj(r,t=0,e=1,n="float32",o){let s=wt(r,n),i=new Kx(t,e,null,o);for(let a=0;a<s.values.length;a++)s.values[a]=i.nextValue();return s.toTensor()}var Li=k({randomUniform_:oj});function nu(r,t,e=1,n="float32"){if(e===0)throw new Error("Cannot have a step of zero");let o={start:r,stop:t,step:e,dtype:n};return T.runKernel(Rl,{},o)}function sj(r){let e={x:I(r,"x","reciprocal")};return T.runKernel(Fa,e)}var Xx=k({reciprocal_:sj});function ij(r){let e={x:I(r,"x","relu")};return T.runKernel(ws,e)}var Rr=k({relu_:ij});function aj(r){let e={x:I(r,"x","relu6")};return T.runKernel(vs,e)}var am=k({relu6_:aj});function lj(r,t){let n={x:I(r,"x","reverse")},o={dims:t};return T.runKernel(Ss,n,o)}var ur=k({reverse_:lj});function uj(r){let t=I(r,"x","reverse");return E(t.rank===1,()=>`Error in reverse1D: x must be rank 1 but got rank ${t.rank}.`),ur(t,0)}var C_=k({reverse1d_:uj});function cj(r,t){let e=I(r,"x","reverse");return E(e.rank===2,()=>`Error in reverse2D: x must be rank 2 but got rank ${e.rank}.`),ur(e,t)}var I_=k({reverse2d_:cj});function pj(r,t){let e=I(r,"x","reverse");return E(e.rank===3,()=>`Error in reverse3D: x must be rank 3 but got rank ${e.rank}.`),ur(e,t)}var v_=k({reverse3d_:pj});function mj(r,t){let e=I(r,"x","reverse");return E(e.rank===4,()=>`Error in reverse4D: x must be rank 4 but got rank ${e.rank}.`),ur(e,t)}var S_=k({reverse4d_:mj});function fj(r){let e={x:I(r,"x","round")};return T.runKernel(Ns,e)}var lm=k({round_:fj});function dj(r){let e={x:I(r,"x","rsqrt","float32")};return T.runKernel(ks,e)}var um=k({rsqrt_:dj});function hj(r){let e={x:I(r,"x","selu")};return T.runKernel(Pa,e)}var cm=k({selu_:hj});function gj(r,t,e,n,o,s=[1,1],i="NHWC"){let a=I(r,"x","separableConv2d"),u=I(t,"depthwiseFilter","separableConv2d"),l=I(e,"pointwiseFilter","separableConv2d"),c=a,p=!1;if(a.rank===3&&(p=!0,c=D(a,[1,a.shape[0],a.shape[1],a.shape[2]])),i==="NCHW")throw new Error("separableConv2d currently does not support dataFormat NCHW; only NHWC is supported");E(c.rank===4,()=>`Error in separableConv2d: input must be rank 4, but got rank ${c.rank}.`),E(u.rank===4,()=>`Error in separableConv2d: depthwise filter must be rank 4, but got rank ${u.rank}.`),E(l.rank===4,()=>`Error in separableConv2d: pointwise filter must be rank 4, but got rank ${u.rank}.`),E(l.shape[0]===1,()=>`Error in separableConv2d: the first dimension of pointwise filter must be 1, but got ${l.shape[0]}.`),E(l.shape[1]===1,()=>`Error in separableConv2d: the second dimension of pointwise filter must be 1, but got ${l.shape[1]}.`);let m=u.shape[2],f=u.shape[3];E(l.shape[2]===m*f,()=>`Error in separableConv2d: the third dimension of pointwise filter must be ${m*f}, but got ${l.shape[2]}.`);let d=Di(c,u,n,o,i,s),g=Cn(d,l,1,"valid",i);return p?D(g,[g.shape[1],g.shape[2],g.shape[3]]):g}var pm=k({separableConv2d_:gj});async function xj(r,t){let e=I(r,"x","setdiff1d"),n=I(t,"y","setdiff1d");E(e.dtype===n.dtype,()=>`x and y should have the same dtype, but got x (${e.dtype}) and y (${n.dtype}).`),E(e.rank===1,()=>`x should be 1D tensor, but got x (${e.shape}).`),E(n.rank===1,()=>`y should be 1D tensor, but got y (${n.shape}).`);let o=await e.data(),s=await n.data(),i=new Set(s),a=0;for(let c=0;c<o.length;c++)i.has(o[c])||a++;let u=new pe([a],e.dtype),l=new pe([a],"int32");for(let c=0,p=0;c<o.length;c++)i.has(o[c])||(u.values[p]=o[c],l.values[p]=c,p++);return[u.toTensor(),l.toTensor()]}var N_=xj;function yj(r){let e={x:I(r,"x","sign")};return T.runKernel(Ma,e)}var Yx=k({sign_:yj});function bj(r){let e={x:I(r,"x","sin","float32")};return T.runKernel(Ts,e)}var mm=k({sin_:bj});function wj(r){let e={x:I(r,"x","sinh")};return T.runKernel(La,e)}var fm=k({sinh_:wj});function Cj(r,t,e){let n=I(r,"x","slice1d");return E(n.rank===1,()=>`slice1d expects a rank-1 tensor, but got a rank-${n.rank} tensor`),Dt(n,[t],[e])}var dm=k({slice1d_:Cj});function Ij(r,t,e){let n=I(r,"x","slice2d");return E(n.rank===2,()=>`slice2d expects a rank-2 tensor, but got a rank-${n.rank} tensor`),Dt(n,t,e)}var uh=k({slice2d_:Ij});function vj(r,t,e){let n=I(r,"x","slice3d");return E(n.rank===3,()=>`slice3d expects a rank-3 tensor, but got a rank-${n.rank} tensor`),Dt(n,t,e)}var hm=k({slice3d_:vj});function Sj(r,t,e){let n=I(r,"x","slice4d");return E(n.rank===4,()=>`slice4d expects a rank-4 tensor, but got a rank-${n.rank} tensor`),Dt(n,t,e)}var ec=k({slice4d_:Sj});function Nj(r,t=-1){let e=I(r,"logits","softmax","float32");if(t===-1&&(t=e.rank-1),t!==e.rank-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${e.rank} and dim was ${t}`);let n={logits:e},o={dim:t};return T.runKernel($s,n,o)}var ou=k({softmax_:Nj});function kj(r){E(r.dtype==="complex64",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${r.dtype}.`);let t={input:r};return T.runKernel(Cp,t)}var su=k({fft_:kj});function Tj(r){E(r.dtype==="complex64",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${r.dtype}.`);let t={input:r};return T.runKernel(Ip,t)}var Za=k({ifft_:Tj});function Ej(r){let t=r.shape[r.shape.length-1],e=r.size/t,n;if(t<=2){let o=D(r,[e,t]);n=Za(o)}else{let o=[e,2*(t-1)],s=D(Xa(r),[e,t]),i=D(Kl(r),[e,t]),a=ur(Dt(s,[0,1],[e,t-2]),1),u=R(ur(Dt(i,[0,1],[e,t-2]),1),mt(-1)),l=ne([s,a],1),c=ne([i,u],1),p=D(bn(l,c),[o[0],o[1]]);n=Za(p)}if(n=Xa(n),r.rank===3&&r.shape[0]!==0){let o=n,s=r.shape[0];n=D(n,[s,n.shape[0]/s,n.shape[1]]),o.dispose()}return n}var gm=k({irfft_:Ej});function _j(r,t,e=0){let o={x:I(r,"x","split")},s={numOrSizeSplits:t,axis:e};return T.runKernel(gi,o,s)}var cr=k({split_:_j});function Aj(r,t){E(r.dtype==="float32",()=>`The dtype for rfft() must be real value but got ${r.dtype}`);let e=r.shape[r.shape.length-1],n=r.size/e,o;if(t!=null&&t<e){let d=r.shape.map(g=>0),h=r.shape.map(g=>g);h[r.shape.length-1]=t,o=Dt(r,d,h),e=t}else if(t!=null&&t>e){let d=r.shape.map(h=>h);d[r.shape.length-1]=t-e,o=ne([r,Ne(d)],r.shape.length-1),e=t}else o=r;let s=It(o),i=D(bn(o,s),[n,e]),a=su(i),u=Math.floor(e/2)+1,l=Xa(a),c=Kl(a),p=cr(l,[u,e-u],l.shape.length-1),m=cr(c,[u,e-u],c.shape.length-1),f=o.shape.slice();return f[o.shape.length-1]=u,D(bn(p[0],m[0]),f)}var iu=k({rfft_:Aj});function $j(r,t){let e=I(r,"a","squaredDifference"),n=I(t,"b","squaredDifference");[e,n]=Wt(e,n),Pt(e.shape,n.shape);let o={a:e,b:n},s={};return T.runKernel(Ds,o,s)}var xm=k({squaredDifference_:$j});function Dj(r,t){let e=I(r,"x","squeeze","string_or_numeric");return D(e,Xv(e.shape,t).newShape)}var Pn=k({squeeze_:Dj});function Rj(r,t=0){let e=qa(r,"tensors","stack","string_or_numeric");E(e.length>=1,()=>"Pass at least one tensor to tf.stack"),e.length>0&&E(t<=e[0].rank,()=>"Axis must be <= rank of the tensor");let n=e,o={axis:t};return T.runKernel(pi,n,o)}var rr=k({stack_:Rj});function Fj(r,t=0){let n={x:I(r,"x","step")},o={alpha:t};return T.runKernel(uo,n,o)}var yo=k({step_:Fj});function Oj(r,t,e,n,o=0,s=0,i=0,a=0,u=0){let c={x:I(r,"x","stridedSlice","string_or_numeric")},p={begin:t,end:e,strides:n,beginMask:o,endMask:s,ellipsisMask:i,newAxisMask:a,shrinkAxisMask:u};return T.runKernel(Va,c,p)}var Zx=k({stridedSlice_:Oj});function Pj(r){let e={x:I(r,"x","tan","float32")};return T.runKernel(Fs,e)}var Jx=k({tan_:Pj});function Le(r,t){Xn(r);let e=Mr(r,t);if(e.length!==1)throw new Error("tensor1d() requires values to be a flat/TypedArray");return on(r,null,e,t)}function Bs(r,t,e){if(Xn(r),t!=null&&t.length!==2)throw new Error("tensor2d() requires shape to have two numbers");let n=Mr(r,e);if(n.length!==2&&n.length!==1)throw new Error("tensor2d() requires values to be number[][] or flat/TypedArray");if(n.length===1&&t==null)throw new Error("tensor2d() requires shape to be provided when `values` are a flat/TypedArray");return on(r,t,n,e)}function k_(r,t,e){if(Xn(r),t!=null&&t.length!==4)throw new Error("tensor4d() requires shape to have four numbers");let n=Mr(r,e);if(n.length!==4&&n.length!==1)throw new Error("tensor4d() requires values to be number[][][][] or flat/TypedArray");if(n.length===1&&t==null)throw new Error("tensor4d() requires shape to be provided when `values` are a flat array");return on(r,t,n,e)}function T_(r,t,e){if(Xn(r),t!=null&&t.length!==5)throw new Error("tensor5d() requires shape to have five numbers");let n=Mr(r,e);if(n.length!==5&&n.length!==1)throw new Error("tensor5d() requires values to be number[][][][][] or flat/TypedArray");if(n.length===1&&t==null)throw new Error("tensor5d() requires shape to be provided when `values` are a flat array");return on(r,t,n,e)}function E_(r,t,e){if(Xn(r),t!=null&&t.length!==6)throw new Error("tensor6d() requires shape to have six numbers");let n=Mr(r,e);if(n.length!==6&&n.length!==1)throw new Error("tensor6d() requires values to be number[][][][][][] or flat/TypedArray");if(n.length===1&&t==null)throw new Error("tensor6d() requires shape to be provided when `values` are a flat array");return t=t||n,on(r,t,n,e)}function Lj(r,t=1,e=!0){let n=I(r,"x","topk");if(n.rank===0)throw new Error("topk() expects the input to be of rank 1 or higher");let o=n.shape[n.shape.length-1];if(t<0)throw new Error(`'k' passed to topk() must be >= 0 but got ${t}`);if(t>o)throw new Error(`'k' passed to topk() must be <= the last dimension (${o}) but got ${t}`);let s={x:n},i={k:t,sorted:e},[a,u]=T.runKernel(Ga,s,i);return{values:a,indices:u}}var Qx=k({topk_:Lj});function Mj(r,t=0,e=1,n,o){if(n!=null&&n==="bool")throw new Error("Unsupported data type $ { dtype }");let s=new Qu(t,e,n,!0,o),i=wt(r,n);for(let a=0;a<i.values.length;a++)i.values[a]=s.nextValue();return i.toTensor()}var ym=k({truncatedNormal_:Mj});function zj(r,t=0){let e=I(r,"x","unique","string_or_numeric");E(e.rank>0,()=>"The input tensor must be at least 1D");let n={x:e},o={axis:t},[s,i]=T.runKernel(Lp,n,o);return{values:s,indices:i}}var ty=k({unique_:zj});function Bj(r,t,e){let n=I(r,"x","unsortedSegmentSum"),o=I(t,"segmentIds","unsortedSegmentSum","int32");E(ea(e),()=>"numSegments must be of dtype int");let s={x:n,segmentIds:o},i={numSegments:e};return T.runKernel(Vl,s,i)}var bm=k({unsortedSegmentSum_:Bj});function Vj(r,t=0){let e=I(r,"x","unstack","string_or_numeric");E(t>=-e.shape.length&&t<e.shape.length,()=>`Axis = ${t} is not in [-${e.shape.length}, ${e.shape.length})`);let n={value:e},o={axis:t};return T.runKernel(xi,n,o)}var vr=k({unstack_:Vj});function __(r,t){return ah(r,t,"right")}function ey(r,t=!0,e,n){return T.makeVariable(r,t,e,n)}function ry(r,t){let e=[];for(let s=0;s<t.length;s++)t[s]&&e.push(s);let n=wt(r,"int32"),o=wt([e.length,r.length],"int32");for(let s=0;s<e.length;s++){let i=n.indexToLoc(e[s]),a=s*r.length;o.values.set(i,a)}return o.toTensor()}async function Gj(r){let t=I(r,"condition","whereAsync","bool"),e=await t.data(),n=ry(t.shape,e);return r!==t&&t.dispose(),n}var ny=Gj;async function Wj(r,t,e){let n=I(r,"tensor","boolMask"),o=I(t,"mask","boolMask","bool"),s=e==null?0:e,i=o.rank,a=n.shape;E(i>0,()=>"mask cannot be scalar"),$e(a.slice(s,s+i),o.shape,"mask's shape must match the first K dimensions of tensor's shape,");let u=1;for(let h=s;h<s+i;h++)u*=a[h];let l=a.slice(0,s).concat([u],a.slice(s+i)),c=D(n,l),p=D(o,[-1]),m=await ny(p),f=Pn(m,[1]),d=Oi(c,f,s);return r!==n&&n.dispose(),t!==o&&o.dispose(),f.dispose(),c.dispose(),p.dispose(),m.dispose(),d}var Uj=Wj;function Hj(r,t,e,n,o=!0){let s=I(r,"v","movingAverage"),i=I(t,"x","movingAverage"),a=I(e,"decay","movingAverage");xS(s,i),E(An(s.shape,i.shape),()=>"Shape mismatch in v and x");let u=mt(1),l=ct(u,a),c=R(ct(i,s),l);if(o){E(n!=null,()=>"When using zeroDebias: true, step is required.");let p=I(n,"step","movingAverage");c=pt(c,ct(u,an(a,p)))}return X(s,c)}var qj=k({movingAverage_:Hj});function Kj(r,t,e){let n=I(r,"indices","scatterND","int32"),o=I(t,"updates","scatterND");tx(o,n,e);let s={indices:n,updates:o},i={shape:e};return T.runKernel(Oa,s,i)}var jj=k({scatterND_:Kj});function A_(r,t,e,n){if(r.dtype!=="int32")throw new Error(`tf.sparseToDense() expects the indices to be int32 type, but the dtype was ${r.dtype}.`);if(r.rank>2)throw new Error(`sparseIndices should be a scalar, vector, or matrix, but got shape ${r.shape}.`);let o=r.rank>0?r.shape[0]:1,s=r.rank>1?r.shape[1]:1;if(e.length!==s)throw new Error(`outputShape has incorrect number of elements:, ${e.length}, should be: ${s}.`);let i=t.size;if(!(t.rank===0||t.rank===1&&i===o))throw new Error(`sparseValues has incorrect shape ${t.shape}, should be [] or [${o}]`);if(t.dtype!==n.dtype)throw new Error("sparseValues.dtype must match defaultValues.dtype")}function Yj(r,t,e,n=0){let o=I(r,"sparseIndices","sparseToDense","int32"),s=I(t,"sparseValues","sparseToDense","string_or_numeric"),i=I(n,"defaultValue","sparseToDense",s.dtype);A_(o,s,e,i);let a={sparseIndices:o,sparseValues:s,defaultValue:i},u={outputShape:e};return T.runKernel(Pp,a,u)}var Zj=k({sparseToDense_:Yj});function Jj(r,t){let e=I(t,"indices","gatherND","int32"),o={params:I(r,"x","gatherND","string_or_numeric"),indices:e};return T.runKernel(ya,o)}var Qj=k({gatherND_:Jj});function $_(r,t){if(t==null)return r.shape.slice();if(An(r.shape,t))return t;if(r.shape.length===t.length){let e=[];for(let n=0;n<r.shape.length;n++)t[n]==null&&r.shape[n]!=null?e.push(r.shape[n]):e.push(t[n]);return e}return t}function t6(r,t,e,n){let o=I(r,"x","dropout");if(E(o.dtype==="float32",()=>`x has to be a floating point tensor since it's going to be scaled, but got a ${o.dtype} tensor instead.`),E(t>=0&&t<1,()=>`rate must be a float in the range [0, 1), but got ${t}.`),t===0)return r instanceof Ft?o.clone():o;let s=$_(o,e),i=1-t,a=pt(Fi(X(Li(s,0,1,"float32",n),i)),i);return R(o,a)}var n0=k({dropout_:t6});function o0(r){return Math.floor(Math.pow(2,Math.ceil(Math.log(r)/Math.log(2))))}function ch(r,t,e){let n=1-r%2,o=new Float32Array(r);for(let s=0;s<r;++s){let i=2*Math.PI*s/(r+n-1);o[s]=t-e*Math.cos(i)}return Le(o,"float32")}async function e6(r,t,e=1){let n=I(r,"predictions","inTopK"),o=I(t,"targets","inTopK");E(n.rank>1,()=>`inTopK() expects the predictions to be of rank 2 or higher, but got ${n.rank}`),E(n.rank-1===o.rank,()=>`predictions rank should be 1 larger than targets rank, but got predictions rank ${n.rank} and targets rank ${o.rank}`),$e(n.shape.slice(0,n.shape.length-1),o.shape,"predictions's shape should be align with the targets' shape, except the last dimension.");let s=n.shape[n.shape.length-1];E(e>0&&e<=s,()=>`'k' passed to inTopK() must be > 0 && <= the predictions last dimension (${s}), but got ${e}`);let i=await n.data(),a=await o.data(),[u,l]=[i.length/s,s],c=Yv("bool",u);for(let p=0;p<u;p++){let m=p*l,f=i.subarray(m,m+l),d=[];for(let h=0;h<f.length;h++)d.push({value:f[h],index:h});d.sort((h,g)=>g.value-h.value),c[p]=0;for(let h=0;h<e;h++)if(d[h].index===a[p]){c[p]=1;break}}return r!==n&&n.dispose(),t!==o&&o.dispose(),wr(c,o.shape,"bool")}var r6=e6;var au={};Gt(au,{conv2d:()=>D_,depthwiseConv2d:()=>R_,matMul:()=>F_});function n6(r,t,e,n,o,s="NHWC",i){let a=r;r.rank===3&&(a=D(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let u=t;u.rank===3&&(u=D(t,[1,t.shape[0],t.shape[1],t.shape[2]])),E(a.rank===4,()=>`Error in conv2dDerFilter: input must be rank 4, but got shape ${a.shape}.`),E(u.rank===4,()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${u.shape}.`),E(e.length===4,()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${e}.`);let l=s==="NHWC"?a.shape[3]:a.shape[1],c=s==="NHWC"?u.shape[3]:u.shape[1];E(l===e[2],()=>`Error in conv2dDerFilter: depth of input ${l}) must match input depth in filter (${e[2]}.`),E(c===e[3],()=>`Error in conv2dDerFilter: depth of dy (${c}) must match output depth for filter (${e[3]}).`),Ie("conv2dDerFilter",o,i);let p={x:a,dy:u},m={strides:n,pad:o,dataFormat:s,dimRoundingMode:i,filterShape:e};return T.runKernel(mp,p,m)}var wm=k({conv2DBackpropFilter_:n6});function rc(r,t,e){if(e==null||e==="linear")return r;if(e==="relu")return R(r,yo(t));throw new Error(`Cannot compute gradient for fused activation ${e}.`)}function nc(r,t){let e=t,n=ge(r.shape,t.shape);return n.length>0&&(e=ft(e,n)),D(e,r.shape)}function oc(r,t,e,n){if(t==="linear")return r;if(t==="relu")return Rr(r);if(t==="elu")return Ri(r);if(t==="relu6")return am(r);if(t==="prelu")return ru(r,e);if(t==="leakyrelu")return Zl(r,n);if(t==="sigmoid")return Xr(r);throw new Error(`Unknown fused activation ${t}.`)}var sc=(r,t)=>!(r>0)||t==="linear";function o6({x:r,filter:t,strides:e,pad:n,dataFormat:o="NHWC",dilations:s=[1,1],dimRoundingMode:i,bias:a,activation:u="linear",preluActivationWeights:l,leakyreluAlpha:c}){if(u=u||"linear",sc(T.state.gradientDepth,u)===!1){E(o==="NHWC",()=>`Error in fused conv2d: got dataFormat of ${o} but only NHWC is currently supported for the case of gradient depth is 0 and the activation is not linear.`);let _=Cn(r,t,e,n,o,s,i);return a!=null&&(_=X(_,a)),oc(_,u,l,c)}let p=I(r,"x","conv2d","float32"),m=I(t,"filter","conv2d","float32"),f=p,d=!1;p.rank===3&&(d=!0,f=D(p,[1,p.shape[0],p.shape[1],p.shape[2]])),E(f.rank===4,()=>`Error in fused conv2d: input must be rank 4, but got rank ${f.rank}.`),E(m.rank===4,()=>`Error in fused conv2d: filter must be rank 4, but got rank ${m.rank}.`),Ie("fused conv2d",n,i);let h=o==="NHWC"?f.shape[3]:f.shape[1];E(m.shape[2]===h,()=>`Error in conv2d: depth of input (${h}) must match input depth for filter ${m.shape[2]}.`),E(_r(e,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${e} and dilations '${s}'`);let g=Ku(f.shape,m.shape,e,s,n,i),x;a!=null&&(x=I(a,"bias","fused conv2d"),[x]=Wt(x,p),o==="NHWC"?Pt(g.outShape,x.shape):(E(x.shape.length<=1,()=>`Error in fused conv2d: only supports scalar or 1-D Tensor bias for NCHW format but got the bias of rank-${x.shape.length}.`),E(x.shape.length===0||x.shape[0]===g.outChannels||x.shape[0]===1,()=>`Error in fused conv2d: bias shape (${x.shape}) is not compatible with the number of output channels (${g.outChannels})`)));let b;if(l!=null){let _=l.shape;if(E(_.length<=1||_.length===3,()=>`Error in fused conv2d: only supports scalar, 1-D Tensor or 3-D Tensor PReLU activation weights but got a tensor of rank-${_.length}.`),_.length===1)E(_[0]===1||_[0]===g.outChannels,()=>`Error in fused conv2d: PReLU activation weights (${_}) is not compatible with the number of output channels (${g.outChannels}).`);else if(_.length===3)try{Pt(_,g.outShape)}catch(A){let $=`Error in fused conv2d: PReLU activation weights (${_}) is not compatible with the output shape of the conv2d (${g.outShape}).`;throw Error($)}b=I(l,"prelu weights","fused conv2d")}let w=(_,A)=>{E(o==="NHWC",()=>`Error in gradient of fused conv2D: got dataFormat of ${o} but only NHWC is currently supported.`);let[$,F,P,V]=A,G=rc(_,P,u);E(Qn(s),()=>`Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`);let W=Qp(F.shape,G,$,e,n),q=wm(F,G,$.shape,e,n),H=[W,q];if(V!=null){let j=nc(V,G);H.push(j)}return H},C={x:f,filter:m,bias:x,preluActivationWeights:b},N={strides:e,pad:n,dataFormat:o,dilations:s,dimRoundingMode:i,activation:u,leakyreluAlpha:c};return a==null?ln((A,$,F)=>{let P=T.runKernel(wi,C,N);return F([$,A,P]),d&&(P=D(P,[P.shape[1],P.shape[2],P.shape[3]])),{value:P,gradFunc:w}})(f,m):ln((A,$,F,P)=>{let V=T.runKernel(wi,C,N);return P([$,A,V,F]),d&&(V=D(V,[V.shape[1],V.shape[2],V.shape[3]])),{value:V,gradFunc:w}})(f,m,x)}var D_=k({fusedConv2d_:o6});function s6(r,t,e,n,o,s=[1,1],i){let a=r;r.rank===3&&(a=D(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let u=t;u.rank===3&&(u=D(t,[1,t.shape[0],t.shape[1],t.shape[2]]));let l={x:a,dy:u},c={strides:n,pad:o,dimRoundingMode:i,dilations:s,filterShape:e};return T.runKernel(gp,l,c)}var oy=k({depthwiseConv2dNativeBackpropFilter_:s6});function i6(r,t,e,n,o,s=[1,1],i){let a=t,u=!1;t.rank===3&&(u=!0,a=D(t,[1,t.shape[0],t.shape[1],t.shape[2]]));let l={dy:a,filter:e},c={strides:n,pad:o,dimRoundingMode:i,dilations:s,inputShape:r},p=T.runKernel(xp,l,c);return u?D(p,[p.shape[1],p.shape[2],p.shape[3]]):p}var sy=k({depthwiseConv2dNativeBackpropInput_:i6});function a6({x:r,filter:t,strides:e,pad:n,dataFormat:o="NHWC",dilations:s=[1,1],dimRoundingMode:i,bias:a,activation:u="linear",preluActivationWeights:l,leakyreluAlpha:c}){if(sc(T.state.gradientDepth,u)===!1){let N=Di(r,t,e,n,o,s,i);return a!=null&&(N=X(N,a)),oc(N,u,l,c)}let p=I(r,"x","depthwiseConv2d","float32"),m=I(t,"filter","depthwiseConv2d","float32"),f=p,d=!1;p.rank===3&&(d=!0,f=D(p,[1,p.shape[0],p.shape[1],p.shape[2]])),E(f.rank===4,()=>`Error in fused depthwiseConv2d: input must be rank 4, but got rank ${f.rank}.`),E(m.rank===4,()=>`Error in fused depthwiseConv2d: filter must be rank 4, but got rank ${m.rank}.`),E(f.shape[3]===m.shape[2],()=>`Error in fused depthwiseConv2d: number of input channels (${f.shape[3]}) must match the inChannels dimension in filter ${m.shape[2]}.`),s==null&&(s=[1,1]),E(_r(e,s),()=>`Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${e} and dilations '${s}'`),Ie("fused depthwiseConv2d",n,i);let h=Ku(f.shape,m.shape,e,s,n,i,!0),g;a!=null&&(g=I(a,"bias","fused conv2d"),[g]=Wt(g,p),Pt(h.outShape,g.shape));let x;l!=null&&(x=I(l,"prelu weights","fused depthwiseConv2d"));let b=(N,_)=>{E(Qn(s),()=>`Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${s}'`);let[A,$,F,P]=_,V=rc(N,F,u),G=sy($.shape,V,A,e,n,s,i),W=oy($,V,A.shape,e,n,s,i);if(P!=null){let q=nc(g,V);return[G,W,q]}return[G,W]},w={x:f,filter:m,bias:g,preluActivationWeights:x},C={strides:e,pad:n,dataFormat:o,dilations:s,dimRoundingMode:i,activation:u,leakyreluAlpha:c};return a==null?ln((_,A,$)=>{let F=T.runKernel(Ci,w,C);return $([A,_,F]),d&&(F=D(F,[F.shape[1],F.shape[2],F.shape[3]])),{value:F,gradFunc:b}})(f,m):ln((_,A,$,F)=>{let P=T.runKernel(Ci,w,C);return F([A,_,P,$]),d&&(P=D(P,[P.shape[1],P.shape[2],P.shape[3]])),{value:P,gradFunc:b}})(f,m,g)}var R_=k({fusedDepthwiseConv2d_:a6});function l6({a:r,b:t,transposeA:e=!1,transposeB:n=!1,bias:o,activation:s="linear",preluActivationWeights:i,leakyreluAlpha:a=.2}){if(sc(T.state.gradientDepth,s)===!1){let V=Lt(r,t,e,n);return o!=null&&(V=X(V,o)),oc(V,s,i,a)}let u=I(r,"a","fused matMul"),l=I(t,"b","fused matMul");[u,l]=Wt(u,l);let c=e?u.shape[u.rank-2]:u.shape[u.rank-1],p=n?l.shape[l.rank-1]:l.shape[l.rank-2],m=e?u.shape[u.rank-1]:u.shape[u.rank-2],f=n?l.shape[l.rank-2]:l.shape[l.rank-1],d=u.shape.slice(0,-2),h=l.shape.slice(0,-2),g=Zt(d),x=Zt(h);E(c===p,()=>`Error in fused matMul: inner shapes (${c}) and (${p}) of Tensors with shapes ${u.shape} and ${l.shape} and transposeA=${e} and transposeB=${n} must match.`);let w=Pt(u.shape.slice(0,-2),l.shape.slice(0,-2)).concat([m,f]),C=e?D(u,[g,c,m]):D(u,[g,m,c]),N=n?D(l,[x,f,p]):D(l,[x,p,f]),_;o!=null&&(_=I(o,"bias","fused matMul"),[_]=Wt(_,u),Pt(w,_.shape));let A;i!=null&&(A=I(i,"prelu weights","fused matMul"));let $=(V,G)=>{let[W,q,H,j]=G,Y=rc(D(V,H.shape),H,s),Z,et;if(!e&&!n?(Z=Lt(Y,q,!1,!0),et=Lt(W,Y,!0,!1)):!e&&n?(Z=Lt(Y,q,!1,!1),et=Lt(Y,W,!0,!1)):e&&!n?(Z=Lt(q,Y,!1,!0),et=Lt(W,Y,!1,!1)):(Z=Lt(q,Y,!0,!0),et=Lt(Y,W,!0,!0)),o!=null){let rt=nc(j,Y);return[Z,et,rt]}else return[Z,et]},F={a:C,b:N,bias:_,preluActivationWeights:A},P={transposeA:e,transposeB:n,activation:s,leakyreluAlpha:a};return o==null?ln((G,W,q)=>{let H=T.runKernel(bi,F,P);return q([G,W,H]),{value:D(H,w),gradFunc:$}})(C,N):ln((G,W,q,H)=>{let j=T.runKernel(bi,F,P);return H([G,W,j,q]),{value:D(j,w),gradFunc:$}})(C,N,_)}var F_=k({fusedMatMul_:l6});function u6(r){return ch(r,.54,.46)}var O_=k({hammingWindow_:u6});function c6(r){return ch(r,.5,.5)}var iy=k({hannWindow_:c6});function p6(r,t,e,n=!1,o=0){let s=0,i=[];for(;s+t<=r.size;)i.push(Dt(r,s,t)),s+=e;if(n)for(;s<r.size;){let a=s+t-r.size,u=ne([Dt(r,s,t-a),go([a],o)]);i.push(u),s+=e}return i.length===0?Bs([],[0,t]):D(ne(i),[i.length,t])}var ay=k({frame_:p6});function m6(r,t,e,n,o=iy){n==null&&(n=o0(t));let s=ay(r,t,e),i=R(s,o(t));return iu(i,n)}var P_=k({stft_:m6});function f6(r,t,e,n,o="bilinear",s=0){let i=I(r,"image","cropAndResize"),a=I(t,"boxes","cropAndResize","float32"),u=I(e,"boxInd","cropAndResize","int32"),l=a.shape[0];E(i.rank===4,()=>`Error in cropAndResize: image must be rank 4,but got rank ${i.rank}.`),E(a.rank===2&&a.shape[1]===4,()=>`Error in cropAndResize: boxes must be have size [${l},4] but had shape ${a.shape}.`),E(u.rank===1&&u.shape[0]===l,()=>`Error in cropAndResize: boxInd must be have size [${l}] but had shape ${a.shape}.`),E(n.length===2,()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${n.length}.`),E(n[0]>=1&&n[1]>=1,()=>`cropSize must be atleast [1,1], but was ${n}`),E(o==="bilinear"||o==="nearest",()=>`method must be bilinear or nearest, but was ${o}`);let c={image:i,boxes:a,boxInd:u},p={method:o,extrapolationValue:s,cropSize:n};return T.runKernel(ma,c,p)}var L_=k({cropAndResize_:f6});function d6(r){let t=I(r,"image","flipLeftRight","float32");E(t.rank===4,()=>`Error in flipLeftRight: image must be rank 4,but got rank ${t.rank}.`);let e={image:t};return T.runKernel(xa,e,{})}var M_=k({flipLeftRight_:d6});function h6(r){let t=I(r,"image","grayscaleToRGB"),e=t.rank-1,n=t.shape[e];E(t.rank>=2,()=>`Error in grayscaleToRGB: images must be at least rank 2, but got rank ${t.rank}.`),E(n===1,()=>`Error in grayscaleToRGB: last dimension of a grayscale image should be size 1, but got size ${n}.`);let o=new Array(t.rank);return o.fill(1,0,e),o[e]=3,$r(t,o)}var z_=k({grayscaleToRGB_:h6});function g6(r,t,e=0,n=.5){let o=I(r,"image","rotateWithOffset","float32");E(o.rank===4,()=>`Error in rotateWithOffset: image must be rank 4,but got rank ${o.rank}.`);let s={image:o},i={radians:t,fillValue:e,center:n};return T.runKernel(Ua,s,i)}var B_=k({rotateWithOffset_:g6});function bo(r,t,e,n,o,s){n==null&&(n=.5),o==null&&(o=Number.NEGATIVE_INFINITY),s==null&&(s=0);let i=r.shape[0];return e=Math.min(e,i),E(0<=n&&n<=1,()=>`iouThreshold must be in [0, 1], but was '${n}'`),E(r.rank===2,()=>`boxes must be a 2D tensor, but was of rank '${r.rank}'`),E(r.shape[1]===4,()=>`boxes must have 4 columns, but 2nd dimension was ${r.shape[1]}`),E(t.rank===1,()=>"scores must be a 1D tensor"),E(t.shape[0]===i,()=>`scores has incompatible shape with boxes. Expected ${i}, but was ${t.shape[0]}`),E(0<=s&&s<=1,()=>`softNmsSigma must be in [0, 1], but was '${s}'`),{maxOutputSize:e,iouThreshold:n,scoreThreshold:o,softNmsSigma:s}}function x6(r,t,e,n=.5,o=Number.NEGATIVE_INFINITY){let s=I(r,"boxes","nonMaxSuppression","float32"),i=I(t,"scores","nonMaxSuppression","float32"),a=bo(s,i,e,n,o);e=a.maxOutputSize,n=a.iouThreshold,o=a.scoreThreshold;let u={maxOutputSize:e,iouThreshold:n,scoreThreshold:o};return T.runKernel($a,{boxes:s,scores:i},u)}var V_=k({nonMaxSuppression_:x6});function G_(r,t,e){let n=y6(r,t,e),o=n<0?-(n+1):n;r.splice(o,0,t)}function y6(r,t,e){return w6(r,t,e||b6)}function b6(r,t){return r>t?1:r<t?-1:0}function w6(r,t,e){let n=0,o=r.length,s=0,i=!1;for(;n<o;){s=n+(o-n>>>1);let a=e(t,r[s]);a>0?n=s+1:(o=s,i=!a)}return i?n:-n-1}function ly(r,t,e,n,o){return s0(r,t,e,n,o,0)}function uy(r,t,e,n,o,s){return s0(r,t,e,n,o,0,!1,s,!0)}function cy(r,t,e,n,o,s){return s0(r,t,e,n,o,s,!0)}function s0(r,t,e,n,o,s,i=!1,a=!1,u=!1){let l=[];for(let g=0;g<t.length;g++)t[g]>o&&l.push({score:t[g],boxIndex:g,suppressBeginIndex:0});l.sort(W_);let c=s>0?-.5/s:0,p=[],m=[];for(;p.length<e&&l.length>0;){let g=l.pop(),{score:x,boxIndex:b,suppressBeginIndex:w}=g;if(x<o)break;let C=!1;for(let N=p.length-1;N>=w;--N){let _=C6(r,b,p[N]);if(_>=n){C=!0;break}if(g.score=g.score*I6(n,c,_),g.score<=o)break}g.suppressBeginIndex=p.length,C||(g.score===x?(p.push(b),m.push(g.score)):g.score>o&&G_(l,g,W_))}let f=p.length,d=e-f;a&&d>0&&(p.push(...new Array(d).fill(0)),m.push(...new Array(d).fill(0)));let h={selectedIndices:p};return i&&(h.selectedScores=m),u&&(h.validOutputs=f),h}function C6(r,t,e){let n=r.subarray(t*4,t*4+4),o=r.subarray(e*4,e*4+4),s=Math.min(n[0],n[2]),i=Math.min(n[1],n[3]),a=Math.max(n[0],n[2]),u=Math.max(n[1],n[3]),l=Math.min(o[0],o[2]),c=Math.min(o[1],o[3]),p=Math.max(o[0],o[2]),m=Math.max(o[1],o[3]),f=(a-s)*(u-i),d=(p-l)*(m-c);if(f<=0||d<=0)return 0;let h=Math.max(s,l),g=Math.max(i,c),x=Math.min(a,p),b=Math.min(u,m),w=Math.max(x-h,0)*Math.max(b-g,0);return w/(f+d-w)}function I6(r,t,e){let n=Math.exp(t*e*e);return e<=r?n:0}function W_(r,t){return r.score-t.score||r.score===t.score&&t.boxIndex-r.boxIndex}async function v6(r,t,e,n=.5,o=Number.NEGATIVE_INFINITY){let s=I(r,"boxes","nonMaxSuppressionAsync"),i=I(t,"scores","nonMaxSuppressionAsync"),a=bo(s,i,e,n,o);e=a.maxOutputSize,n=a.iouThreshold,o=a.scoreThreshold;let u=await Promise.all([s.data(),i.data()]),l=u[0],c=u[1],{selectedIndices:p}=ly(l,c,e,n,o);return s!==r&&s.dispose(),i!==t&&i.dispose(),Le(p,"int32")}var U_=v6;function S6(r,t,e,n=.5,o=Number.NEGATIVE_INFINITY,s=0){let i=I(r,"boxes","nonMaxSuppression"),a=I(t,"scores","nonMaxSuppression"),u=bo(i,a,e,n,o,s);e=u.maxOutputSize,n=u.iouThreshold,o=u.scoreThreshold,s=u.softNmsSigma;let l={boxes:i,scores:a},c={maxOutputSize:e,iouThreshold:n,scoreThreshold:o,softNmsSigma:s},p=T.runKernel(Ra,l,c);return{selectedIndices:p[0],selectedScores:p[1]}}var H_=k({nonMaxSuppressionWithScore_:S6});async function N6(r,t,e,n=.5,o=Number.NEGATIVE_INFINITY,s=0){let i=I(r,"boxes","nonMaxSuppressionAsync"),a=I(t,"scores","nonMaxSuppressionAsync"),u=bo(i,a,e,n,o,s);e=u.maxOutputSize,n=u.iouThreshold,o=u.scoreThreshold,s=u.softNmsSigma;let l=await Promise.all([i.data(),a.data()]),c=l[0],p=l[1],{selectedIndices:m,selectedScores:f}=cy(c,p,e,n,o,s);return i!==r&&i.dispose(),a!==t&&a.dispose(),{selectedIndices:Le(m,"int32"),selectedScores:Le(f)}}var q_=N6;function k6(r,t,e,n=.5,o=Number.NEGATIVE_INFINITY,s=!1){let i=I(r,"boxes","nonMaxSuppression"),a=I(t,"scores","nonMaxSuppression"),u=bo(i,a,e,n,o,null),l=u.maxOutputSize,c=u.iouThreshold,p=u.scoreThreshold,m={boxes:i,scores:a},f={maxOutputSize:l,iouThreshold:c,scoreThreshold:p,padToMaxOutputSize:s},d=T.runKernel(Da,m,f);return{selectedIndices:d[0],validOutputs:d[1]}}var K_=k({nonMaxSuppressionPadded_:k6});async function T6(r,t,e,n=.5,o=Number.NEGATIVE_INFINITY,s=!1){let i=I(r,"boxes","nonMaxSuppressionAsync"),a=I(t,"scores","nonMaxSuppressionAsync"),u=bo(i,a,e,n,o,null),l=u.maxOutputSize,c=u.iouThreshold,p=u.scoreThreshold,[m,f]=await Promise.all([i.data(),a.data()]),{selectedIndices:d,validOutputs:h}=uy(m,f,l,c,p,s);return i!==r&&i.dispose(),a!==t&&a.dispose(),{selectedIndices:Le(d,"int32"),validOutputs:mt(h,"int32")}}var j_=T6;function E6(r,t,e=!1,n=!1){let o=I(r,"images","resizeBilinear");E(o.rank===3||o.rank===4,()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${o.rank}.`),E(t.length===2,()=>`Error in resizeBilinear: new shape must 2D, but got shape ${t}.`),E(n===!1||e===!1,()=>"Error in resizeBilinear: If halfPixelCenters is true, alignCorners must be false.");let s=o,i=!1;o.rank===3&&(i=!0,s=D(o,[1,o.shape[0],o.shape[1],o.shape[2]]));let[]=t,a={images:s},u={alignCorners:e,halfPixelCenters:n,size:t},l=T.runKernel(Is,a,u);return i?D(l,[l.shape[1],l.shape[2],l.shape[3]]):l}var py=k({resizeBilinear_:E6});function _6(r,t,e=!1,n=!1){let o=I(r,"images","resizeNearestNeighbor");E(o.rank===3||o.rank===4,()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${o.rank}.`),E(t.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${t}.`),E(o.dtype==="float32"||o.dtype==="int32",()=>"`images` must have `int32` or `float32` as dtype"),E(n===!1||e===!1,()=>"Error in resizeNearestNeighbor: If halfPixelCenters is true, alignCorners must be false.");let s=o,i=!1;o.rank===3&&(i=!0,s=D(o,[1,o.shape[0],o.shape[1],o.shape[2]]));let[]=t,a={images:s},u={alignCorners:e,halfPixelCenters:n,size:t},l=T.runKernel(Cs,a,u);return i?D(l,[l.shape[1],l.shape[2],l.shape[3]]):l}var my=k({resizeNearestNeighbor_:_6});function A6(r,t="binary",e=!1,n=.5){let o=I(r,"image","threshold"),s=.2989,i=.587,a=.114,u=o.shape[0]*o.shape[1],l=R(Le([n]),255),c,p,m,f;if(E(o.rank===3,()=>`Error in threshold: image must be rank 3,but got rank ${o.rank}.`),E(o.shape[2]===3||o.shape[2]===1,()=>`Error in threshold: image color channel must be equal to 3 or 1but got ${o.shape[2]}.`),E(o.dtype==="int32"||o.dtype==="float32",()=>`Error in dtype: image dtype must be int32 or float32,but got dtype ${o.dtype}.`),E(t==="otsu"||t==="binary",()=>`Method must be binary or otsu, but was ${t}`),o.shape[2]===3){[c,p,m]=cr(o,[1,1,1],-1);let g=R(c,s),x=R(p,i),b=R(m,a);f=X(X(g,x),b)}else f=r;if(t==="otsu"){let g=hx(J(lm(f),"int32"),wr([]),256);l=$6(g,u)}let d=e?On(f,l):He(f,l);return J(R(d,255),"int32")}function $6(r,t){let e=Le([-1]),n=Le([0]),o=Le([0]),s,i,a,u,l,c;for(let p=0;p<r.size-1;p++){s=Dt(r,0,p+1),i=Dt(r,p+1),l=pt(ft(s),t),c=pt(ft(i),t);let m=ft(R(s,nu(0,s.size)));a=pt(m,ft(s));let f=go(i.shape,s.size),d=X(nu(0,i.size),f),h=R(i,d);u=pt(ft(h),ft(i));let g=ct(a,u),x=ct(a,u),b=R(l,c);o=R(R(b,g),x);let w=He(o,n);n=_e(w,o,n),e=_e(w,Le([p]),e)}return e}var X_=k({threshold_:A6});function D6(r,t,e="nearest",n="constant",o=0,s){let i=I(r,"image","transform","float32"),a=I(t,"transforms","transform","float32");E(i.rank===4,()=>`Error in transform: image must be rank 4,but got rank ${i.rank}.`),E(a.rank===2&&(a.shape[0]===i.shape[0]||a.shape[0]===1)&&a.shape[1]===8,()=>"Error in transform: Input transform should be batch x 8 or 1 x 8"),E(s==null||s.length===2,()=>`Error in transform: outputShape must be [height, width] or null, but got ${s}.`);let u={image:i,transforms:a},l={interpolation:e,fillMode:n,fillValue:o,outputShape:s};return T.runKernel(Wa,u,l)}var Y_=k({transform_:D6});function R6(r,t,e){E(t%1===0,()=>`bandPart(): numLower must be an integer, got ${t}.`),E(e%1===0,()=>`bandPart(): numUpper must be an integer, got ${e}.`);let n=I(r,"a","bandPart");E(n.rank>=2,()=>`bandPart(): Rank must be at least 2, got ${n.rank}.`);let o=n.shape,[s,i]=n.shape.slice(-2);if(!(t<=s))throw new Error(`bandPart(): numLower (${t}) must not be greater than the number of rows (${s}).`);if(!(e<=i))throw new Error(`bandPart(): numUpper (${e}) must not be greater than the number of columns (${i}).`);t<0&&(t=s),e<0&&(e=i);let a=D(nu(0,s,1,"int32"),[-1,1]),u=nu(0,i,1,"int32"),l=ct(a,u),c=Dr(On(l,mt(+t,"int32")),Fn(l,mt(-e,"int32"))),p=Ne([s,i],n.dtype);return D(rr(vr(D(n,[-1,s,i])).map(m=>_e(c,m,p))),o)}var Z_=k({bandPart_:R6});function F6(r){let t;if(Array.isArray(r)){t=!1,E(r!=null&&r.length>0,()=>"Gram-Schmidt process: input must not be null, undefined, or empty");let o=r[0].shape[0];for(let s=1;s<r.length;++s)E(r[s].shape[0]===o,()=>`Gram-Schmidt: Non-unique lengths found in the input vectors: (${r[s].shape[0]} vs. ${o})`)}else t=!0,r=cr(r,r.shape[0],0).map(o=>Pn(o,[0]));E(r.length<=r[0].shape[0],()=>`Gram-Schmidt: Number of vectors (${r.length}) exceeds number of dimensions (${r[0].shape[0]}).`);let e=[],n=r;for(let o=0;o<r.length;++o)e.push(T.tidy(()=>{let s=n[o];if(o>0)for(let i=0;i<o;++i){let a=R(ft(R(e[i],s)),e[i]);s=ct(s,a)}return pt(s,Ya(s,"euclidean"))}));return t?rr(e,0):e}var J_=k({gramSchmidt_:F6});function O6(r,t=!1){if(E(r.rank>=2,()=>`qr() requires input tensor to have a rank >= 2, but got rank ${r.rank}`),r.rank===2)return Q_(r,t);{let e=r.shape.slice(0,r.shape.length-2).reduce((u,l)=>u*l),n=vr(D(r,[e,r.shape[r.shape.length-2],r.shape[r.shape.length-1]]),0),o=[],s=[];n.forEach(u=>{let[l,c]=Q_(u,t);o.push(l),s.push(c)});let i=D(rr(o,0),r.shape),a=D(rr(s,0),r.shape);return[i,a]}}function Q_(r,t=!1){return T.tidy(()=>{E(r.shape.length===2,()=>`qr2d() requires a 2D Tensor, but got a ${r.shape.length}D Tensor.`);let e=r.shape[0],n=r.shape[1],o=Yu(e),s=sn(r),i=Bs([[1]],[1,1]),a=sn(i),u=e>=n?n:e;for(let l=0;l<u;++l){let c=s,p=a,m=o;[a,s,o]=T.tidy(()=>{let f=Dt(s,[l,l],[e-l,1]),d=Ya(f),h=Dt(s,[l,l],[1,1]),g=_e(He(h,0),Bs([[-1]]),Bs([[1]])),x=ct(h,R(g,d)),b=pt(f,x);b.shape[0]===1?a=sn(i):a=ne([i,Dt(b,[1,0],[b.shape[0]-1,b.shape[1]])],0);let w=Ut(pt(Lt(g,x),d)),C=Dt(s,[l,0],[e-l,n]),N=R(w,a),_=Ot(a);if(l===0)s=ct(C,Lt(N,Lt(_,C)));else{let F=ct(C,Lt(N,Lt(_,C)));s=ne([Dt(s,[0,0],[l,n]),F],0)}let A=Ot(N),$=Dt(o,[0,l],[e,o.shape[1]-l]);if(l===0)o=ct($,Lt(Lt($,a),A));else{let F=ct($,Lt(Lt($,a),A));o=ne([Dt(o,[0,0],[e,l]),F],1)}return[a,s,o]}),St([c,p,m])}return!t&&e>n&&(o=Dt(o,[0,0],[e,n]),s=Dt(s,[0,0],[n,n])),[o,s]})}var tA=k({qr_:O6});var Xe;(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"})(Xe||(Xe={}));function P6(r,t,e=Xe.SUM_BY_NONZERO_WEIGHTS){let n=I(r,"losses","computeWeightedLoss"),o=null;t!=null&&(o=I(t,"weights","computeWeightedLoss"));let s=o==null?n:R(n,o);if(e===Xe.NONE)return s;if(e===Xe.SUM)return ft(s);if(e===Xe.MEAN){if(o==null)return Se(s);{let i=n.size/o.size,a=pt(ft(s),ft(o));return i>1?pt(a,mt(i)):a}}if(e===Xe.SUM_BY_NONZERO_WEIGHTS){if(o==null)return pt(ft(s),mt(n.size));{let i=R(o,lr(n.shape)),a=J(ft(zs(i,mt(0))),"float32");return pt(ft(s),a)}}throw Error(`Unknown reduction: ${e}`)}var Vr=k({computeWeightedLoss_:P6});function L6(r,t,e,n=Xe.SUM_BY_NONZERO_WEIGHTS){let o=I(r,"labels","absoluteDifference"),s=I(t,"predictions","absoluteDifference"),i=null;e!=null&&(i=I(e,"weights","absoluteDifference")),$e(o.shape,s.shape,"Error in absoluteDifference: ");let a=Ee(ct(o,s));return Vr(a,i,n)}var eA=k({absoluteDifference_:L6});function M6(r,t,e,n,o=Xe.SUM_BY_NONZERO_WEIGHTS){let s=I(r,"labels","cosineDistance"),i=I(t,"predictions","cosineDistance"),a=null;n!=null&&(a=I(n,"weights","cosineDistance")),$e(s.shape,i.shape,"Error in cosineDistance: ");let u=mt(1),l=ct(u,ft(R(s,i),e,!0));return Vr(l,a,o)}var rA=k({cosineDistance_:M6});function z6(r,t,e,n=Xe.SUM_BY_NONZERO_WEIGHTS){let o=I(r,"labels","hingeLoss"),s=I(t,"predictions","hingeLoss"),i=null;e!=null&&(i=I(e,"weights","hingeLoss")),$e(o.shape,s.shape,"Error in hingeLoss: ");let a=mt(1);o=ct(R(mt(2),o),a);let u=Rr(ct(a,R(o,s)));return Vr(u,i,n)}var nA=k({hingeLoss_:z6});function B6(r,t,e,n=1,o=Xe.SUM_BY_NONZERO_WEIGHTS){let s=I(r,"labels","huberLoss"),i=I(t,"predictions","huberLoss"),a=null;e!=null&&(a=I(e,"weights","huberLoss")),$e(s.shape,i.shape,"Error in huberLoss: ");let u=mt(n),l=Ee(ct(i,s)),c=Pi(l,u),p=ct(l,c),m=X(R(mt(.5),Mt(c)),R(u,p));return Vr(m,a,o)}var oA=k({huberLoss_:B6});function V6(r,t,e,n=1e-7,o=Xe.SUM_BY_NONZERO_WEIGHTS){let s=I(r,"labels","logLoss"),i=I(t,"predictions","logLoss"),a=null;e!=null&&(a=I(e,"weights","logLoss")),$e(s.shape,i.shape,"Error in logLoss: ");let u=mt(1),l=mt(n),c=Ut(R(s,Ir(X(i,l)))),p=R(ct(u,s),Ir(X(ct(u,i),l))),m=ct(c,p);return Vr(m,a,o)}var sA=k({logLoss_:V6});function G6(r,t,e,n=Xe.SUM_BY_NONZERO_WEIGHTS){let o=I(r,"labels","meanSquaredError"),s=I(t,"predictions","meanSquaredError"),i=null;e!=null&&(i=I(e,"weights","meanSquaredError")),$e(o.shape,s.shape,"Error in meanSquaredError: ");let a=xm(o,s);return Vr(a,i,n)}var iA=k({meanSquaredError_:G6});function W6(r,t){let e=I(r,"labels","sigmoidCrossEntropyWithLogits"),n=I(t,"logits","sigmoidCrossEntropyWithLogits");$e(e.shape,n.shape,"Error in sigmoidCrossEntropyWithLogits: ");let o=Rr(n),s=R(n,e),i=Jl(er(Ut(Ee(n))));return X(ct(o,s),i)}function U6(r,t,e,n=0,o=Xe.SUM_BY_NONZERO_WEIGHTS){let s=I(r,"multiClassLabels","sigmoidCrossEntropy"),i=I(t,"logits","sigmoidCrossEntropy"),a=null;if(e!=null&&(a=I(e,"weights","sigmoidCrossEntropy")),$e(s.shape,i.shape,"Error in sigmoidCrossEntropy: "),n>0){let l=mt(n),c=mt(1),p=mt(.5);s=X(R(s,ct(c,l)),R(p,l))}let u=W6(s,i);return Vr(u,a,o)}var aA=k({sigmoidCrossEntropy_:U6});function H6(r,t,e=-1){if(e===-1&&(e=t.rank-1),e!==t.rank-1)throw Error(`Softmax cross entropy along a non-last dimension is not yet supported. Labels / logits was rank ${t.rank} and dim was ${e}`);return ln((o,s,i)=>{let u=sm(s,[e],!0),l=ct(J(s,"float32"),u);i([o,l]);let c=Ut(R(l,o));return{value:ft(c,[e]),gradFunc:(f,d)=>{let[h,g]=d,x=xo(f.shape,[e]);return[R(D(f,x),ct(J(h,"float32"),er(g))),R(D(f,x),ct(er(g),J(h,"float32")))]}}})(r,t)}function q6(r,t,e,n=0,o=Xe.SUM_BY_NONZERO_WEIGHTS){let s=I(r,"onehotLabels","softmaxCrossEntropy"),i=I(t,"logits","softmaxCrossEntropy"),a=null;if(e!=null&&(a=I(e,"weights","softmaxCrossEntropy")),$e(s.shape,i.shape,"Error in softmaxCrossEntropy: "),n>0){let l=mt(n),c=mt(1),p=mt(s.shape[1]);s=X(R(s,ct(c,l)),pt(l,p))}let u=H6(s,i);return Vr(u,a,o)}var lA=k({softmaxCrossEntropy_:q6});function K6(r,t,e,n){let o=I(r,"indices","sparseFillEmptyRows","int32"),s=I(t,"values","sparseFillEmptyRows"),i=I(e,"denseShape","sparseFillEmptyRows","int32"),a=I(n,"defaultValue","sparseFillEmptyRows",s.dtype);if(o.rank!==2)throw new Error(`Indices should be Tensor2D but received shape
${o.shape}`);if(s.rank!==1)throw new Error(`Values should be Tensor1D but received shape ${s.shape}`);if(i.rank!==1)throw new Error(`Dense shape should be Tensor1D but received shape ${i.shape}`);if(a.rank!==0)throw new Error(`Default value should be a scalar but received shape ${a.shape}`);let u={indices:o,values:s,denseShape:i,defaultValue:a},l=T.runKernel(Fl,u);return{outputIndices:l[0],outputValues:l[1],emptyRowIndicator:l[2],reverseIndexMap:l[3]}}var uA=k({sparseFillEmptyRows_:K6});function j6(r,t,e){let n=I(r,"inputIndices","sparseReshape","int32"),o=I(t,"inputShape","sparseReshape","int32"),s=I(e,"newShape","sparseReshape","int32");if(n.rank!==2)throw new Error(`Input indices should be Tensor2D but received shape
${n.shape}`);if(o.rank!==1)throw new Error(`Input shape should be Tensor1D but received shape ${o.shape}`);if(s.rank!==1)throw new Error(`New shape should be Tensor1D but received shape ${s.shape}`);let i={inputIndices:n,inputShape:o,newShape:s},a=T.runKernel(Ba,i);return{outputIndices:a[0],outputShape:a[1]}}var cA=k({sparseReshape_:j6});function X6(r,t,e){let n=I(r,"data","sparseSegmentMean"),o=I(t,"indices","sparseSegmentMean","int32"),s=I(e,"segmentIds","sparseSegmentMean","int32");if(n.rank<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(o.rank!==1)throw new Error(`Indices should be Tensor1D but received shape
${o.shape}`);if(s.rank!==1)throw new Error(`Segment ids should be Tensor1D but received shape
${s.shape}`);let i={data:n,indices:o,segmentIds:s};return T.runKernel(Ol,i)}var pA=k({sparseSegmentMean_:X6});function Y6(r,t,e){let n=I(r,"data","sparseSegmentSum"),o=I(t,"indices","sparseSegmentSum","int32"),s=I(e,"segmentIds","sparseSegmentSum","int32");if(n.rank<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(o.rank!==1)throw new Error(`Indices should be Tensor1D but received shape
${o.shape}`);if(s.rank!==1)throw new Error(`Segment ids should be Tensor1D but received shape
${s.shape}`);let i={data:n,indices:o,segmentIds:s};return T.runKernel(Pl,i)}var mA=k({sparseSegmentSum_:Y6});function Z6(r,t,e,n,o,s,i,a){let u=I(r,"data","stringNGrams","string");if(u.dtype!=="string")throw new Error("Data must be of datatype string");if(u.shape.length!==1)throw new Error(`Data must be a vector, saw: ${u.shape}`);let l=I(t,"dataSplits","stringNGrams");if(l.dtype!=="int32")throw new Error("Data splits must be of datatype int32");let c={separator:e,nGramWidths:n,leftPad:o,rightPad:s,padWidth:i,preserveShortSequences:a},p={data:u,dataSplits:l},m=T.runKernel(Ml,p,c);return{nGrams:m[0],nGramsSplits:m[1]}}var fA=k({stringNGrams_:Z6});function J6(r,t,e=!0){let n=I(r,"input","stringSplit","string"),o=I(t,"delimiter","stringSplit","string");if(n.rank!==1)throw new Error(`Input should be Tensor1D but received shape ${n.shape}`);if(o.rank!==0)throw new Error(`Delimiter should be a scalar but received shape ${o.shape}`);let s={skipEmpty:e},i={input:n,delimiter:o},a=T.runKernel(zl,i,s);return{indices:a[0],values:a[1],shape:a[2]}}var dA=k({stringSplit_:J6});function Q6(r,t){let e=I(r,"input","stringToHashBucketFast","string"),n={numBuckets:t};if(t<=0)throw new Error("Number of buckets must be at least 1");let o={input:e};return T.runKernel(Bl,o,n)}var hA=k({stringToHashBucketFast_:Q6});var tX={fft:su,ifft:Za,rfft:iu,irfft:gm},eX={hammingWindow:O_,hannWindow:iy,frame:ay,stft:P_},lu={flipLeftRight:M_,grayscaleToRGB:z_,resizeNearestNeighbor:my,resizeBilinear:py,rotateWithOffset:B_,cropAndResize:L_,nonMaxSuppression:V_,nonMaxSuppressionAsync:U_,nonMaxSuppressionWithScore:H_,nonMaxSuppressionWithScoreAsync:q_,nonMaxSuppressionPadded:K_,nonMaxSuppressionPaddedAsync:j_,threshold:X_,transform:Y_},i0={bandPart:Z_,gramSchmidt:J_,qr:tA},rX={absoluteDifference:eA,computeWeightedLoss:Vr,cosineDistance:rA,hingeLoss:nA,huberLoss:oA,logLoss:sA,meanSquaredError:iA,sigmoidCrossEntropy:aA,softmaxCrossEntropy:lA},nX={sparseFillEmptyRows:uA,sparseReshape:cA,sparseSegmentMean:pA,sparseSegmentSum:mA},oX={stringNGrams:fA,stringSplit:dA,stringToHashBucketFast:hA};var Gr=class extends sh{minimize(t,e=!1,n){let{value:o,grads:s}=this.computeGradients(t,n);if(n!=null){let i=n.map(a=>({name:a.name,tensor:s[a.name]}));this.applyGradients(i)}else this.applyGradients(s);return St(s),e?o:(o.dispose(),null)}get iterations(){return this.iterations_==null&&(this.iterations_=0),this.iterations_}incrementIterations(){this.iterations_=this.iterations+1}computeGradients(t,e){return Ox(t,e)}dispose(){this.iterations_!=null&&St(this.iterations_)}async saveIterations(){return this.iterations_==null&&(this.iterations_=0),{name:"iter",tensor:mt(this.iterations_,"int32")}}async getWeights(){throw new Error("getWeights() is not implemented for this optimizer yet.")}async setWeights(t){throw new Error(`setWeights() is not implemented for this optimizer class ${this.getClassName()}`)}async extractIterations(t){return this.iterations_=(await t[0].tensor.data())[0],t.slice(1)}};Object.defineProperty(Gr,Symbol.hasInstance,{value:r=>r.minimize!=null&&r.computeGradients!=null&&r.applyGradients!=null});var uu=class extends Gr{constructor(t,e,n=null){super(),this.learningRate=t,this.rho=e,this.epsilon=n,this.accumulatedGrads=[],this.accumulatedUpdates=[],n==null&&(this.epsilon=T.backend.epsilon())}applyGradients(t){(Array.isArray(t)?t.map(n=>n.name):Object.keys(t)).forEach((n,o)=>{let s=T.registeredVariables[n],i=!1;this.accumulatedGrads[o]==null&&(this.accumulatedGrads[o]={originalName:`${n}/accum_grad`,variable:B(()=>It(s).variable(i))}),this.accumulatedUpdates[o]==null&&(this.accumulatedUpdates[o]={originalName:`${n}/accum_var`,variable:B(()=>It(s).variable(i))});let a=Array.isArray(t)?t[o].tensor:t[n];if(a==null)return;let u=this.accumulatedGrads[o].variable,l=this.accumulatedUpdates[o].variable;B(()=>{let c=X(R(u,this.rho),R(Mt(a),1-this.rho)),p=R(pt(ve(X(l,this.epsilon)),ve(X(u,this.epsilon))),a),m=X(R(l,this.rho),R(Mt(p),1-this.rho));u.assign(c),l.assign(m);let f=X(R(p,-this.learningRate),s);s.assign(f)})}),this.incrementIterations()}dispose(){this.accumulatedUpdates!=null&&(St(this.accumulatedGrads.map(t=>t.variable)),St(this.accumulatedUpdates.map(t=>t.variable)))}async getWeights(){let t=[...this.accumulatedGrads,...this.accumulatedUpdates];return[await this.saveIterations()].concat(t.map(e=>({name:e.originalName,tensor:e.variable})))}async setWeights(t){t=await this.extractIterations(t);let e=t.length/2,n=!1;this.accumulatedGrads=t.slice(0,e).map(o=>({originalName:o.name,variable:o.tensor.variable(n)})),this.accumulatedUpdates=t.slice(e,e*2).map(o=>({originalName:o.name,variable:o.tensor.variable(n)}))}getConfig(){return{learningRate:this.learningRate,rho:this.rho,epsilon:this.epsilon}}static fromConfig(t,e){return new t(e.learningRate,e.rho,e.epsilon)}};uu.className="Adadelta";wn(uu);var cu=class extends Gr{constructor(t,e=.1){super(),this.learningRate=t,this.initialAccumulatorValue=e,this.accumulatedGrads=[]}applyGradients(t){(Array.isArray(t)?t.map(n=>n.name):Object.keys(t)).forEach((n,o)=>{let s=T.registeredVariables[n];this.accumulatedGrads[o]==null&&(this.accumulatedGrads[o]={originalName:`${n}/accumulator`,variable:B(()=>go(s.shape,this.initialAccumulatorValue).variable(!1))});let i=Array.isArray(t)?t[o].tensor:t[n];if(i==null)return;let a=this.accumulatedGrads[o].variable;B(()=>{let u=X(a,Mt(i));a.assign(u);let l=X(R(pt(i,ve(X(u,T.backend.epsilon()))),-this.learningRate),s);s.assign(l)})}),this.incrementIterations()}dispose(){this.accumulatedGrads!=null&&St(this.accumulatedGrads.map(t=>t.variable))}async getWeights(){return[await this.saveIterations()].concat(this.accumulatedGrads.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(t){t=await this.extractIterations(t);let e=!1;this.accumulatedGrads=t.map(n=>({originalName:n.name,variable:n.tensor.variable(e)}))}getConfig(){return{learningRate:this.learningRate,initialAccumulatorValue:this.initialAccumulatorValue}}static fromConfig(t,e){return new t(e.learningRate,e.initialAccumulatorValue)}};cu.className="Adagrad";wn(cu);var pu=class extends Gr{constructor(t,e,n,o=null){super(),this.learningRate=t,this.beta1=e,this.beta2=n,this.epsilon=o,this.accumulatedFirstMoment=[],this.accumulatedSecondMoment=[],B(()=>{this.accBeta1=mt(e).variable(),this.accBeta2=mt(n).variable()}),o==null&&(this.epsilon=T.backend.epsilon())}applyGradients(t){let e=Array.isArray(t)?t.map(n=>n.name):Object.keys(t);B(()=>{let n=ct(1,this.accBeta1),o=ct(1,this.accBeta2);e.forEach((s,i)=>{let a=T.registeredVariables[s],u=!1;this.accumulatedFirstMoment[i]==null&&(this.accumulatedFirstMoment[i]={originalName:`${s}/m`,variable:B(()=>It(a).variable(u))}),this.accumulatedSecondMoment[i]==null&&(this.accumulatedSecondMoment[i]={originalName:`${s}/v`,variable:B(()=>It(a).variable(u))});let l=Array.isArray(t)?t[i].tensor:t[s];if(l==null)return;let c=this.accumulatedFirstMoment[i].variable,p=this.accumulatedSecondMoment[i].variable,m=X(R(c,this.beta1),R(l,1-this.beta1)),f=X(R(p,this.beta2),R(Mt(l),1-this.beta2)),d=pt(m,n),h=pt(f,o);c.assign(m),p.assign(f);let g=X(R(pt(d,X(ve(h),this.epsilon)),-this.learningRate),a);a.assign(g)}),this.accBeta1.assign(R(this.accBeta1,this.beta1)),this.accBeta2.assign(R(this.accBeta2,this.beta2))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.accBeta2.dispose(),this.accumulatedFirstMoment!=null&&St(this.accumulatedFirstMoment.map(t=>t.variable)),this.accumulatedSecondMoment!=null&&St(this.accumulatedSecondMoment.map(t=>t.variable))}async getWeights(){let t=[...this.accumulatedFirstMoment,...this.accumulatedSecondMoment];return[await this.saveIterations()].concat(t.map(e=>({name:e.originalName,tensor:e.variable})))}async setWeights(t){t=await this.extractIterations(t),B(()=>{this.accBeta1.assign(an(this.beta1,this.iterations_+1)),this.accBeta2.assign(an(this.beta2,this.iterations_+1))});let e=t.length/2,n=!1;this.accumulatedFirstMoment=t.slice(0,e).map(o=>({originalName:o.name,variable:o.tensor.variable(n)})),this.accumulatedSecondMoment=t.slice(e,e*2).map(o=>({originalName:o.name,variable:o.tensor.variable(n)}))}getConfig(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon}}static fromConfig(t,e){return new t(e.learningRate,e.beta1,e.beta2,e.epsilon)}};pu.className="Adam";wn(pu);var mu=class extends Gr{constructor(t,e,n,o=null,s=0){super(),this.learningRate=t,this.beta1=e,this.beta2=n,this.epsilon=o,this.decay=s,this.accumulatedFirstMoment=[],this.accumulatedWeightedInfNorm=[],B(()=>{this.iteration=mt(0).variable(),this.accBeta1=mt(e).variable()}),o==null&&(this.epsilon=T.backend.epsilon())}applyGradients(t){let e=Array.isArray(t)?t.map(n=>n.name):Object.keys(t);B(()=>{let n=ct(1,this.accBeta1),o=pt(-this.learningRate,X(R(this.iteration,this.decay),1));e.forEach((s,i)=>{let a=T.registeredVariables[s],u=!1;this.accumulatedFirstMoment[i]==null&&(this.accumulatedFirstMoment[i]={originalName:`${s}/m`,variable:It(a).variable(u)}),this.accumulatedWeightedInfNorm[i]==null&&(this.accumulatedWeightedInfNorm[i]={originalName:`${s}/v`,variable:It(a).variable(u)});let l=Array.isArray(t)?t[i].tensor:t[s];if(l==null)return;let c=this.accumulatedFirstMoment[i].variable,p=this.accumulatedWeightedInfNorm[i].variable,m=X(R(c,this.beta1),R(l,1-this.beta1)),f=R(p,this.beta2),d=Ee(l),h=In(f,d);c.assign(m),p.assign(h);let g=X(R(pt(o,n),pt(m,X(h,this.epsilon))),a);a.assign(g)}),this.iteration.assign(X(this.iteration,1)),this.accBeta1.assign(R(this.accBeta1,this.beta1))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.iteration.dispose(),this.accumulatedFirstMoment!=null&&St(this.accumulatedFirstMoment.map(t=>t.variable)),this.accumulatedWeightedInfNorm!=null&&St(this.accumulatedWeightedInfNorm.map(t=>t.variable))}async getWeights(){throw new Error("getWeights() is not implemented for Adamax yet.")}async setWeights(t){throw new Error("setWeights() is not implemented for Adamax yet.")}getConfig(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon,decay:this.decay}}static fromConfig(t,e){return new t(e.learningRate,e.beta1,e.beta2,e.epsilon,e.decay)}};mu.className="Adamax";wn(mu);var Mi=class extends Gr{constructor(t){super(),this.learningRate=t,this.setLearningRate(t)}applyGradients(t){(Array.isArray(t)?t.map(n=>n.name):Object.keys(t)).forEach((n,o)=>{let s=Array.isArray(t)?t[o].tensor:t[n];if(s==null)return;let i=T.registeredVariables[n];B(()=>{let a=X(R(this.c,s),i);i.assign(a)})}),this.incrementIterations()}setLearningRate(t){this.learningRate=t,this.c!=null&&this.c.dispose(),this.c=De(mt(-t))}dispose(){this.c.dispose()}async getWeights(){return[await this.saveIterations()]}async setWeights(t){if(t=await this.extractIterations(t),t.length!==0)throw new Error("SGD optimizer does not have settable weights.")}getConfig(){return{learningRate:this.learningRate}}static fromConfig(t,e){return new t(e.learningRate)}};Mi.className="SGD";wn(Mi);var fu=class extends Mi{constructor(t,e,n=!1){super(t),this.learningRate=t,this.momentum=e,this.useNesterov=n,this.accumulations=[],this.m=mt(this.momentum)}applyGradients(t){(Array.isArray(t)?t.map(n=>n.name):Object.keys(t)).forEach((n,o)=>{let s=T.registeredVariables[n];this.accumulations[o]==null&&(this.accumulations[o]={originalName:`${n}/momentum`,variable:B(()=>It(s).variable(!1))});let i=this.accumulations[o].variable,a=Array.isArray(t)?t[o].tensor:t[n];a!=null&&B(()=>{let u,l=X(R(this.m,i),a);this.useNesterov?u=X(R(this.c,X(a,R(l,this.m))),s):u=X(R(this.c,l),s),i.assign(l),s.assign(u)})}),this.incrementIterations()}dispose(){this.m.dispose(),this.accumulations!=null&&St(this.accumulations.map(t=>t.variable))}setMomentum(t){this.momentum=t}async getWeights(){return[await this.saveIterations()].concat(this.accumulations.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(t){t=await this.extractIterations(t);let e=!1;this.accumulations=t.map(n=>({originalName:n.name,variable:n.tensor.variable(e)}))}getConfig(){return{learningRate:this.learningRate,momentum:this.momentum,useNesterov:this.useNesterov}}static fromConfig(t,e){return new t(e.learningRate,e.momentum,e.useNesterov)}};fu.className="Momentum";wn(fu);var du=class extends Gr{constructor(t,e=.9,n=0,o=null,s=!1){if(super(),this.learningRate=t,this.decay=e,this.momentum=n,this.epsilon=o,this.accumulatedMeanSquares=[],this.accumulatedMoments=[],this.accumulatedMeanGrads=[],this.centered=s,o==null&&(this.epsilon=T.backend.epsilon()),t==null)throw new Error("learningRate for RMSPropOptimizer must be defined.")}applyGradients(t){(Array.isArray(t)?t.map(n=>n.name):Object.keys(t)).forEach((n,o)=>{let s=T.registeredVariables[n],i=!1;this.accumulatedMeanSquares[o]==null&&(this.accumulatedMeanSquares[o]={originalName:`${n}/rms`,variable:B(()=>It(s).variable(i))}),this.accumulatedMoments[o]==null&&(this.accumulatedMoments[o]={originalName:`${n}/momentum`,variable:B(()=>It(s).variable(i))}),this.accumulatedMeanGrads[o]==null&&this.centered&&(this.accumulatedMeanGrads[o]={originalName:`${n}/mg`,variable:B(()=>It(s).variable(i))});let a=Array.isArray(t)?t[o].tensor:t[n];if(a==null)return;let u=this.accumulatedMeanSquares[o].variable,l=this.accumulatedMoments[o].variable;B(()=>{let c=X(R(u,this.decay),R(Mt(a),1-this.decay));if(this.centered){let p=this.accumulatedMeanGrads[o].variable,m=X(R(p,this.decay),R(a,1-this.decay)),f=pt(R(a,this.learningRate),ve(ct(c,X(Mt(m),this.epsilon)))),d=X(R(l,this.momentum),f);u.assign(c),p.assign(m),l.assign(d);let h=ct(s,d);s.assign(h)}else{let p=X(R(u,this.decay),R(Mt(a),1-this.decay)),m=X(R(l,this.momentum),pt(R(a,this.learningRate),ve(X(p,this.epsilon))));u.assign(p),l.assign(m);let f=ct(s,m);s.assign(f)}})}),this.incrementIterations()}dispose(){this.accumulatedMeanSquares!=null&&St(this.accumulatedMeanSquares.map(t=>t.variable)),this.accumulatedMeanGrads!=null&&this.centered&&St(this.accumulatedMeanGrads.map(t=>t.variable)),this.accumulatedMoments!=null&&St(this.accumulatedMoments.map(t=>t.variable))}async getWeights(){let t=[...this.accumulatedMeanSquares,...this.accumulatedMoments];return this.centered&&t.push(...this.accumulatedMeanGrads),[await this.saveIterations()].concat(t.map(e=>({name:e.originalName,tensor:e.variable})))}async setWeights(t){t=await this.extractIterations(t);let e=this.centered?t.length/3:t.length/2,n=!1;this.accumulatedMeanSquares=t.slice(0,e).map(o=>({originalName:o.name,variable:o.tensor.variable(n)})),this.accumulatedMoments=t.slice(e,e*2).map(o=>({originalName:o.name,variable:o.tensor.variable(n)})),this.centered&&(this.accumulatedMeanGrads=t.slice(e*2,e*3).map(o=>({originalName:o.name,variable:o.tensor.variable(n)})))}getConfig(){return{learningRate:this.learningRate,decay:this.decay,momentum:this.momentum,epsilon:this.epsilon,centered:this.centered}}static fromConfig(t,e){return new t(e.learningRate,e.decay,e.momentum,e.epsilon,e.centered)}};du.className="RMSProp";wn(du);var Vs=class{static sgd(t){return new Mi(t)}static momentum(t,e,n=!1){return new fu(t,e,n)}static rmsprop(t,e=.9,n=0,o=null,s=!1){return new du(t,e,n,o,s)}static adam(t=.001,e=.9,n=.999,o=null){return new pu(t,e,n,o)}static adadelta(t=.001,e=.95,n=null){return new uu(t,e,n)}static adamax(t=.002,e=.9,n=.999,o=null,s=0){return new mu(t,e,n,o,s)}static adagrad(t,e=.1){return new cu(t,e)}};var ic={sgd:Vs.sgd,momentum:Vs.momentum,adadelta:Vs.adadelta,adagrad:Vs.adagrad,rmsprop:Vs.rmsprop,adamax:Vs.adamax,adam:Vs.adam};var sX=(()=>typeof requestAnimationFrame!="undefined"?requestAnimationFrame:typeof setImmediate!="undefined"?setImmediate:r=>r())();function ph(){return new Promise(r=>sX(()=>r()))}var S={};Gt(S,{ERF_A1:()=>wX,ERF_A2:()=>CX,ERF_A3:()=>IX,ERF_A4:()=>vX,ERF_A5:()=>SX,ERF_P:()=>bX,PARALLELIZE_THRESHOLD:()=>fy,RowPartitionType:()=>zi,SELU_SCALE:()=>l0,SELU_SCALEALPHA:()=>a0,applyActivation:()=>oc,assertAndGetBroadcastShape:()=>Pt,assertAxesAreInnerMostDims:()=>Rq,assertParamsConsistent:()=>iX,assignToTypedArray:()=>AX,axesAreInnerMostDims:()=>KS,calculateShapes:()=>xE,checkEinsumDimSizes:()=>PX,checkPadOnDimRoundingMode:()=>Ie,combineLocations:()=>VE,combineRaggedTensorToTensorShapes:()=>lX,complexWithEvenIndex:()=>TX,complexWithOddIndex:()=>EX,computeConv2DInfo:()=>Ku,computeConv3DInfo:()=>RE,computeDefaultPad:()=>qS,computeDilation2DInfo:()=>OH,computeOptimalWindowSize:()=>mX,computeOutAndReduceShapes:()=>jS,computeOutShape:()=>aX,computePool2DInfo:()=>HS,computePool3DInfo:()=>PH,convertConv2DDataFormat:()=>FE,decodeEinsumEquation:()=>FX,eitherStridesOrDilationsAreOne:()=>_r,expandShapeToKeepDim:()=>xo,exponent:()=>DX,exponents:()=>$X,fromStringArrayToUint8:()=>n5,fromUint8ToStringArray:()=>r5,getAxesPermutation:()=>XS,getBroadcastDims:()=>dE,getComplexWithIndex:()=>_X,getEinsumComputePath:()=>LX,getEinsumPermutation:()=>OX,getFusedBiasGradient:()=>nc,getFusedDyActivation:()=>rc,getImageCenter:()=>fX,getInnerMostAxes:()=>Fq,getPermuted:()=>hX,getRaggedRank:()=>cX,getReductionAxes:()=>ge,getReshaped:()=>dX,getReshapedPermuted:()=>gX,getRowPartitionTypesHelper:()=>uX,getSliceBeginCoords:()=>xX,getSliceSize:()=>yX,getSparseFillEmptyRowsIndicesDenseShapeMismatch:()=>VX,getSparseFillEmptyRowsNegativeIndexErrorMessage:()=>GX,getSparseFillEmptyRowsOutOfRangeIndexErrorMessage:()=>WX,getSparseReshapeEmptyTensorZeroOutputDimErrorMessage:()=>qX,getSparseReshapeInputOutputMismatchErrorMessage:()=>jX,getSparseReshapeInputOutputMultipleErrorMessage:()=>KX,getSparseReshapeMultipleNegativeOneOutputDimErrorMessage:()=>UX,getSparseReshapeNegativeOutputDimErrorMessage:()=>HX,getSparseSegmentReductionIndicesOutOfRangeErrorMessage:()=>JX,getSparseSegmentReductionNegativeSegmentIdsErrorMessage:()=>XX,getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage:()=>YX,getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage:()=>ZX,getUndoAxesPermutation:()=>ih,isIdentityPermutation:()=>MX,log:()=>qU,mergeRealAndImagArrays:()=>NX,prepareAndValidate:()=>gE,prepareSplitSize:()=>BX,segment_util:()=>c0,shouldFuse:()=>sc,slice_util:()=>Pe,splitRealAndImagArrays:()=>kX,tupleValuesAreOne:()=>Qn,upcastType:()=>or,validateDefaultValueShape:()=>pX,validateInput:()=>tx,validateUpdateShape:()=>zS,warn:()=>Ii});function iX(r,t){let e=r[0].length;r.forEach((o,s)=>{E(o.length===e,()=>`Error in concat${e}D: rank of tensors[${s}] must be the same as the rank of the rest (${e})`)}),E(t>=0&&t<e,()=>`Error in concat${e}D: axis must be between 0 and ${e-1}.`);let n=r[0];r.forEach((o,s)=>{for(let i=0;i<e;i++)E(i===t||o[i]===n[i],()=>`Error in concat${e}D: Shape of tensors[${s}] (${o}) does not match the shape of the rest (${n}) along the non-concatenated axis ${s}.`)})}function aX(r,t){let e=r[0].slice();for(let n=1;n<r.length;n++)e[t]+=r[n][t];return e}var zi;(function(r){r[r.FIRST_DIM_SIZE=0]="FIRST_DIM_SIZE",r[r.VALUE_ROWIDS=1]="VALUE_ROWIDS",r[r.ROW_LENGTHS=2]="ROW_LENGTHS",r[r.ROW_SPLITS=3]="ROW_SPLITS",r[r.ROW_LIMITS=4]="ROW_LIMITS",r[r.ROW_STARTS=5]="ROW_STARTS"})(zi||(zi={}));function lX(r,t,e){let n=new Array;if(e==null&&t==null)return n;if(t==null)for(;n.length<r+e.length;)n.push(-1);else n=t.slice();if(e==null)return n;if(r+e.length!==n.length)throw new Error(`rt input.shape and shape=${t} are incompatible: rt input.rank = ${r+e.length}, but shape.rank = ${n.length}`);for(let o=1;o<e.length;++o){let s=e[o],i=n[n.length-e.length+o],a=n[i];if(s>=0)if(a>=0){if(a!==s)throw new Error(`rt input.shape and shape=${t} are incompatible: rt input.shape[${o+r}] = ${s} but shape[${o+r}] = ${a}`)}else n[i]=s}return n}function uX(r){let t={FIRST_DIM_SIZE:zi.FIRST_DIM_SIZE,VALUE_ROWIDS:zi.VALUE_ROWIDS,ROW_LENGTHS:zi.ROW_LENGTHS,ROW_SPLITS:zi.ROW_SPLITS,ROW_LIMITS:zi.ROW_LIMITS,ROW_STARTS:zi.ROW_STARTS},e=[];for(let n of r)if(n in t)e.push(t[n]);else break;return e}function cX(r){return r.length===0?0:r[0]===zi.FIRST_DIM_SIZE?r.length-1:r.length}function pX(r,t){if(r==null||t==null)return;let e=r.length,n=t.length;if(e>=n)throw new Error(`defaultValue.shape=${r} and ragged tensor flatValues.shape=${t}, are incompatible: defaultValue.rank = ${e} must be less than ragged tensor input flatValues.rank = ${n})`);for(let o=0;o<Math.min(e,n-1);++o){let s=r[o],i=t[o+1];if(s>=0&&i>=0&&s!==1&&s!==i)throw new Error(`defaultValue.shape=${r}, and ragged tensor input flatValues.shape=${t} are incompatible: defaultValue.shape[${o-r.length}] = ${s} but ragged tensor input.flatValues.shape[${o-r.length}] = ${i}`)}}var fy=30;function mX(r){return r<=fy?r:sp(r,Math.floor(Math.sqrt(r)))}function fX(r,t,e){let n=e*(typeof r=="number"?r:r[0]),o=t*(typeof r=="number"?r:r[1]);return[n,o]}function dX(r,t,e,n=!0){let o=[];if(n)o=o.concat(t.slice(0)),o.push(r[0]/e),o=o.concat(r.slice(1));else{o=o.concat(r[0]);let s=t.length;for(let i=0;i<s;++i)o=o.concat([r[i+1]/t[i],t[i]]);o=o.concat(r.slice(s+1))}return o}function hX(r,t,e=!0){let n=[];if(e){n.push(t);for(let o=t+1;o<r;++o)o<=2*t?(n.push(o),n.push(o-(t+1))):n.push(o)}else{let o=[],s=[];for(let i=1;i<r;++i)i>=t*2+1||i%2===1?s.push(i):o.push(i);n.push(...o),n.push(0),n.push(...s)}return n}function gX(r,t,e,n=!0){let o=[];n?o.push(r[0]/e):o.push(r[0]*e);for(let s=1;s<r.length;++s)s<=t.length?n?o.push(t[s-1]*r[s]):o.push(r[s]/t[s-1]):o.push(r[s]);return o}function xX(r,t){let e=[0];for(let n=0;n<t;++n)e.push(r[n][0]);return e}function yX(r,t,e){let n=r.slice(0,1);for(let o=0;o<e;++o)n.push(r[o+1]-t[o][0]-t[o][1]);return n}var a0=1.7580993408473768,l0=1.0507009873554805;var bX=.3275911,wX=.254829592,CX=-.284496736,IX=1.421413741,vX=-1.453152027,SX=1.061405429;function NX(r,t){if(r.length!==t.length)throw new Error(`Cannot merge real and imag arrays of different lengths. real:${r.length}, imag: ${t.length}.`);let e=new Float32Array(r.length*2);for(let n=0;n<e.length;n+=2)e[n]=r[n/2],e[n+1]=t[n/2];return e}function kX(r){let t=new Float32Array(r.length/2),e=new Float32Array(r.length/2);for(let n=0;n<r.length;n+=2)t[n/2]=r[n],e[n/2]=r[n+1];return{real:t,imag:e}}function TX(r){let t=Math.ceil(r.length/4),e=new Float32Array(t),n=new Float32Array(t);for(let o=0;o<r.length;o+=4)e[Math.floor(o/4)]=r[o],n[Math.floor(o/4)]=r[o+1];return{real:e,imag:n}}function EX(r){let t=Math.floor(r.length/4),e=new Float32Array(t),n=new Float32Array(t);for(let o=2;o<r.length;o+=4)e[Math.floor(o/4)]=r[o],n[Math.floor(o/4)]=r[o+1];return{real:e,imag:n}}function _X(r,t){let e=r[t*2],n=r[t*2+1];return{real:e,imag:n}}function AX(r,t,e,n){r[n*2]=t,r[n*2+1]=e}function $X(r,t){let e=new Float32Array(r/2),n=new Float32Array(r/2);for(let o=0;o<Math.ceil(r/2);o++){let s=(t?2:-2)*Math.PI*(o/r);e[o]=Math.cos(s),n[o]=Math.sin(s)}return{real:e,imag:n}}function DX(r,t,e){let n=(e?2:-2)*Math.PI*(r/t),o=Math.cos(n),s=Math.sin(n);return{real:o,imag:s}}var u0="->",RX=/->/g,gA=",",xA="...";function FX(r,t){r=r.replace(/\s/g,"");let e=(r.length-r.replace(RX,"").length)/u0.length;if(e<1)throw new Error("Equations without an arrow are not supported.");if(e>1)throw new Error(`Equation must contain exactly one arrow ("${u0}").`);let[n,o]=r.split(u0);E(n.indexOf(xA)===-1,()=>`The ellipsis notation ("${xA}") is not supported yet.`);let s=n.split(gA),i=s.length;if(t!==i)throw new Error(`Expected ${i} input tensors, received ${t}`);if(i>2)throw new Error("Support for more than 2 input tensors is not implemented yet.");let a=[];for(let m=0;m<o.length;++m){let f=o[m];if(!s.some(d=>d.indexOf(f)!==-1))throw new Error(`Output subscripts contain the label ${f} not present in the input subscripts.`);a.indexOf(f)===-1&&a.push(f)}for(let m=0;m<n.length;++m){let f=n[m];a.indexOf(f)===-1&&f!==gA&&a.push(f)}let u=new Array(s.length);for(let m=0;m<i;++m){if(new Set(s[m].split("")).size!==s[m].length)throw new Error(`Found duplicate axes in input component ${s[m]}. Support for duplicate axes in input is not implemented yet.`);u[m]=[];for(let f=0;f<s[m].length;++f)u[m].push(a.indexOf(s[m][f]))}let l=a.length,c=o.length,p=[];for(let m=c;m<l;++m)p.push(m);return{allDims:a,summedDims:p,idDims:u}}function OX(r,t){let e=new Array(r);e.fill(-1);for(let o=0;o<t.length;++o)e[t[o]]=o;let n=[];for(let o=0;o<r;++o)e[o]===-1&&n.push(o);return e=e.filter(o=>o!==-1),{permutationIndices:e,expandDims:n}}function PX(r,t,e){let n=new Array(r);for(let o=0;o<e.length;++o){let s=e[o].shape;for(let i=0;i<t[o].length;++i)n[t[o][i]]===void 0?n[t[o][i]]=s[i]:E(n[t[o][i]]===s[i],()=>`Expected dimension ${n[t[o][i]]} at axis ${i} of input shaped ${JSON.stringify(s)}, but got dimension ${s[i]}`)}}function LX(r,t){let e=r,n=[],o=0;r.length===0&&e.push(-1),o=r.length+1;for(let i=0;i<o;++i)n.push([]);let s=[];for(let i=0;i<e.length;++i){let a=e[i],u=zX(t,a);for(let l of u)s.indexOf(l)===-1&&(n[i].push(l),s.push(l))}return{path:e,steps:n}}function MX(r){return r.every((t,e)=>t===e)}function zX(r,t){let e=[];for(let n=0;n<r.length;++n)(r[n].length===0||r[n].indexOf(t)!==-1||t===-1)&&e.push(n);return e}function BX(r,t,e=0){let n=[];if(typeof t=="number")E(r.shape[e]%t===0,()=>"Number of splits must evenly divide the axis."),n=new Array(t).fill(r.shape[e]/t);else{let o=t.reduce((i,a)=>(a===-1&&(i+=1),i),0);E(o<=1,()=>"There should be only one negative value in split array.");let s=t.indexOf(-1);if(s!==-1){let i=t.reduce((a,u)=>u>0?a+u:a);t[s]=r.shape[e]-i}E(r.shape[e]===t.reduce((i,a)=>i+a),()=>"The sum of sizes must match the size of the axis dimension."),n=t}return n}function VX(r){return`Received SparseTensor with denseShape[0] = 0 but
indices.shape[0] = ${r}`}function GX(r,t){return`indices(${r}, 0) is invalid: ${t} < 0`}function WX(r,t,e){return`indices(${r}, 0) is invalid: ${t} >= ${e}`}function UX(r,t){return`only one output dimension may be -1, not both ${r} and ${t}`}function HX(r,t){return`size ${r} must be non-negative, not ${t}`}function qX(){return"reshape cannot infer the missing input size for an empty tensor unless all specified input sizes are non-zero"}function KX(r,t){let e=Zt(r),n=Zt(t);return`Input to reshape is a SparseTensor with ${e}
dense values, but the requested shape requires a multiple of ${n}. inputShape=${r} outputShape= ${t}`}function jX(r,t){let e=Zt(r),n=Zt(t);return`Input to reshape is a tensor with ${e} dense values, but the requested shape has ${n}. inputShape=${r} outputShape=${t}`}function XX(){return"segment ids must be >= 0"}function YX(){return"segment ids are not increasing"}function ZX(r,t){return`Segment id ${r} out of range [0, ${t}), possibly because segmentIds input is not sorted.`}function JX(r,t,e){return`Bad: indices[${r}] == ${t} out of range [0, ${e})`}var c0={};Gt(c0,{collectGatherOpShapeInfo:()=>e5,computeOutShape:()=>t5,segOpComputeOptimalWindowSize:()=>QX});function QX(r,t){let e=!1,n;for(r<=fy?(n=r,e=!0):n=sp(r,Math.floor(Math.sqrt(r)));!e;)n>t||n===r?e=!0:n=sp(r,n+1);return n}function t5(r,t,e){let n=[],o=r.length;for(let s=0;s<o;s++)s!==t?n.push(r[s]):n.push(e);return n}function e5(r,t,e,n){let o=t.shape.length,s=r.shape.length;if(n!==0&&(n<-o||n>o))throw new Error(`Expect batchDims in the range of [-${o}, ${o}], but got ${n}`);if(n<0&&(n+=o),n>s)throw new Error(`batchDims (${n}) must be less than rank(x) (
${s}).`);if(e<n)throw new Error(`batchDims (${n}) must be less than or equal to axis (${e}).`);for(let p=0;p<n;++p)if(r.shape[p]!==t.shape[p])throw new Error(`x.shape[${p}]: ${r.shape[p]} should be equal to indices.shape[${p}]: ${t.shape[p]}.`);let i=r.shape[e],a=[],u=1,l=1,c=1;for(let p=0;p<n;++p)a.push(r.shape[p]),u*=r.shape[p];for(let p=n;p<e;p++)a.push(r.shape[p]),l*=r.shape[p];for(let p=n;p<o;p++)a.push(t.shape[p]);for(let p=e+1;p<s;p++)a.push(r.shape[p]),c*=r.shape[p];return{batchSize:u,sliceSize:c,outerSize:l,dimSize:i,outputShape:a}}function r5(r){try{return r.map(t=>Gp(t))}catch(t){throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${t}`)}}function n5(r){return r.map(t=>Wl(t))}var Wr={};Gt(Wr,{nonMaxSuppressionV3Impl:()=>ly,nonMaxSuppressionV4Impl:()=>uy,nonMaxSuppressionV5Impl:()=>cy,whereImpl:()=>ry});var dy={kernelName:oi,inputsToSave:["x"],gradFunc:(r,t)=>{let[e]=t;return{x:()=>R(r,yo(J(e,"float32"),-1))}}};var yA={kernelName:ra,inputsToSave:["x"],gradFunc:(r,t)=>{let[e]=t;return{x:()=>{let n=Mt(J(e,"float32")),o=ve(ct(mt(1),n));return Ut(pt(r,o))}}}};var bA={kernelName:na,inputsToSave:["x"],gradFunc:(r,t)=>{let[e]=t;return{x:()=>{let n=ve(ct(Mt(J(e,"float32")),1));return pt(r,n)}}}};var wA={kernelName:Yn,inputsToSave:["a","b"],gradFunc:(r,t)=>{let[e,n]=t,o=Pt(e.shape,n.shape);return{a:()=>{let a=r,u=ge(e.shape,o);return u.length>0&&(a=ft(a,u)),D(a,e.shape)},b:()=>{let a=r,u=ge(n.shape,o);return u.length>0&&(a=ft(a,u)),D(a,n.shape)}}}};var CA={kernelName:Vo,saveAllInputs:!0,gradFunc:(r,t)=>{let e={};return t.forEach((n,o)=>{e[o]=()=>r.clone()}),e}};var IA={kernelName:Go,inputsToSave:["x"],gradFunc:(r,t)=>{let[e]=t;return{x:()=>It(e)}}};var vA={kernelName:Nl,inputsToSave:["x"],gradFunc:(r,t)=>{let[e]=t;return{x:()=>It(e)}}};var SA={kernelName:ia,inputsToSave:["x"],gradFunc:(r,t)=>{let[e]=t;return{x:()=>pt(r,ve(ct(mt(1),Mt(J(e,"float32")))))}}};var NA={kernelName:aa,inputsToSave:["x"],gradFunc:(r,t)=>{let[e]=t;return{x:()=>{let n=ve(X(mt(1),Mt(J(e,"float32"))));return pt(r,n)}}}};var kA={kernelName:ca,inputsToSave:["a","b"],gradFunc:(r,t)=>{let[e,n]=t,o=Pt(e.shape,n.shape);return{a:()=>{let a=X(Mt(e),Mt(n)),u=R(r,pt(n,a)),l=ge(e.shape,o);return l.length>0&&(u=ft(u,l)),D(u,e.shape)},b:()=>{let a=X(Mt(e),Mt(n)),u=Ut(R(r,pt(e,a))),l=ge(n.shape,o);return l.length>0&&(u=ft(u,l)),D(u,n.shape)}}}};var TA={kernelName:la,inputsToSave:["x"],gradFunc:(r,t)=>{let[e]=t;return{x:()=>pt(r,X(Mt(J(e,"float32")),1))}}};var EA={kernelName:ua,inputsToSave:["x"],gradFunc:(r,t)=>{let[e]=t;return{x:()=>pt(r,ct(mt(1),Mt(J(e,"float32"))))}}};function o5(r,t,e,n,o,s){let i=I(r,"dy","avgPool3dGrad"),a=I(t,"input","avgPool3dGrad"),u=i,l=a,c=!1;a.rank===4&&(c=!0,u=D(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]]),l=D(a,[1,a.shape[0],a.shape[1],a.shape[2],a.shape[3]])),E(u.rank===5,()=>`Error in avgPool3dGrad: dy must be rank 5 but got rank ${u.rank}.`),E(l.rank===5,()=>`Error in avgPool3dGrad: input must be rank 5 but got rank ${l.rank}.`),Ie("avgPool3dGrad",o,s);let p={dy:u,input:l},m={filterSize:e,strides:n,pad:o,dimRoundingMode:s},f=T.runKernel(lp,p,m);return c?D(f,[f.shape[1],f.shape[2],f.shape[3],f.shape[4]]):f}var _A=k({avgPool3dGrad_:o5});var AA={kernelName:kl,inputsToSave:["x"],gradFunc:(r,t,e)=>{let[n]=t,{filterSize:o,strides:s,pad:i,dimRoundingMode:a}=e;return{x:()=>_A(r,n,o,s,i,a)}}};function s5(r,t,e,n,o){let s=I(r,"dy","avgPoolGrad"),i=I(t,"input","avgPoolGrad");E(i.rank===s.rank,()=>`Rank of input (${i.rank}) does not match rank of dy (${s.rank})`);let a=i,u=s,l=!1;i.rank===3&&(l=!0,a=D(i,[1,i.shape[0],i.shape[1],i.shape[2]]),u=D(s,[1,s.shape[0],s.shape[1],s.shape[2]])),E(u.rank===4,()=>`Error in avgPoolGrad: dy must be rank 4 but got rank ${u.rank}.`),E(a.rank===4,()=>`Error in avgPoolGrad: input must be rank 4 but got rank ${a.rank}.`);let c={dy:u,input:a},p={filterSize:e,strides:n,pad:o},m=T.runKernel(ap,c,p);return l?D(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var $A=k({avgPoolGrad_:s5});var DA={kernelName:Wo,inputsToSave:["x"],gradFunc:(r,t,e)=>{let[n]=t,{filterSize:o,strides:s,pad:i}=e;return{x:()=>$A(r,n,o,s,i)}}};var RA={kernelName:Uo,inputsToSave:["a","b"],gradFunc:(r,t,e)=>{let[n,o]=t,{transposeA:s,transposeB:i}=e;return!s&&!i?{a:()=>Lt(r,o,!1,!0),b:()=>Lt(n,r,!0,!1)}:!s&&i?{a:()=>Lt(r,o,!1,!1),b:()=>Lt(r,n,!0,!1)}:s&&!i?{a:()=>Lt(o,r,!1,!0),b:()=>Lt(n,r,!1,!1)}:{a:()=>Lt(o,r,!0,!0),b:()=>Lt(r,n,!0,!0)}}};var FA={kernelName:si,gradFunc:(r,t,e)=>{let{blockShape:n,crops:o}=e;return{x:()=>eu(r,n,o)}}};var OA={kernelName:i1,gradFunc:(r,t,e)=>{let n=e,o=n.inputShape,s=n.shape,i=Array.from(s);for(let u=o.length-1;u>=0;u--)if(o[u]===s[u])i[u]=1;else if(o[u]!==1)throw new Error(`broadcastTo(): [${o}] cannot be broadcast to [${s}].`);let a=[];for(let u=0;u<i.length;u++)i[u]>1&&a.push(u);return{x:()=>ft(r,a,!0)}}};var PA={kernelName:io,gradFunc:r=>({x:()=>r.clone()})};var LA={kernelName:Ho,gradFunc:r=>({x:()=>It(r)})};var MA={kernelName:ao,inputsToSave:["x"],gradFunc:(r,t,e)=>{let[n]=t,{clipValueMin:o,clipValueMax:s}=e;return{x:()=>_e(Dr(Fn(n,o),On(n,s)),r,It(r))}}};var zA={kernelName:Tl,inputsToSave:["x"],gradFunc:dy.gradFunc};var BA={kernelName:ii,saveAllInputs:!0,gradFunc:(r,t,e)=>{let n=t.map(u=>u.shape),{axis:o}=e,s=ar(o,t[0].shape)[0],i=n.map(u=>u[s]);return cr(r,i,s).map(u=>()=>u)}};var VA={kernelName:qo,inputsToSave:["x","filter"],gradFunc:(r,t,e)=>{let[n,o]=t,{dilations:s,strides:i,pad:a,dataFormat:u}=e;return E(Qn(s),()=>`Error in gradient of conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`),{x:()=>Qp(n.shape,r,o,i,a,u),filter:()=>wm(n,r,o.shape,i,a,u)}}};var GA={kernelName:Ko,inputsToSave:["dy","filter"],gradFunc:(r,t,e)=>{let[n,o]=t,{strides:s,pad:i,dataFormat:a,dimRoundingMode:u}=e;return{dy:()=>Cn(r,o,s,i,a,1,u),filter:()=>wm(r,n,o.shape,s,i,a,u)}}};function i5(r,t,e,n,o){let s=r;r.rank===4&&(s=D(r,[1,r.shape[0],r.shape[1],r.shape[2],r.shape[3]]));let i=t;i.rank===4&&(i=D(t,[1,t.shape[0],t.shape[1],t.shape[2],t.shape[3]])),E(s.rank===5,()=>`Error in conv3dDerFilter: input must be rank 5, but got shape ${s.shape}.`),E(i.rank===5,()=>`Error in conv3dDerFilter: dy must be rank 5, but got shape ${i.shape}.`),E(e.length===5,()=>`Error in conv3dDerFilter: filterShape must be length 5, but got ${e}.`),E(s.shape[4]===e[3],()=>`Error in conv3dDerFilter: depth of input ${s.shape[4]}) must match input depth in filter (${e[3]}.`),E(i.shape[4]===e[4],()=>`Error in conv3dDerFilter: depth of dy (${i.shape[4]}) must match output depth for filter (${e[4]}).`);let a={x:s,dy:i},u={strides:n,pad:o,filterShape:e};return T.runKernel(fp,a,u)}var WA=k({conv3DBackpropFilter_:i5});var UA={kernelName:El,inputsToSave:["x","filter"],gradFunc:(r,t,e)=>{let{dilations:n,strides:o,pad:s}=e;E(Qn(n),()=>`Error in gradient of conv3D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${n}'`);let[i,a]=t;return{x:()=>Ix(i.shape,r,a,o,s),filter:()=>WA(i,r,a.shape,o,s)}}};var HA={kernelName:jo,inputsToSave:["x"],gradFunc:(r,t)=>{let[e]=t;return{x:()=>R(Ut(mm(J(e,"float32"))),r)}}};var qA={kernelName:Xo,inputsToSave:["x"],gradFunc:(r,t)=>{let[e]=t;return{x:()=>R(fm(J(e,"float32")),r)}}};var KA={kernelName:Yo,inputsToSave:["x"],gradFunc:(r,t,e)=>{let[n]=t,{axis:o,exclusive:s,reverse:i}=e;return{x:()=>{let a=XS([o],n.rank),u=rm(r,o,s,!i);return a!=null&&(u=Ot(u,a)),u}}}};var jA={kernelName:Zo,inputsToSave:["x","filter"],gradFunc:(r,t,e)=>{let{dilations:n,strides:o,pad:s,dimRoundingMode:i}=e,a=n==null?[1,1]:n;E(Qn(a),()=>`Error in gradient of depthwiseConv2dNative: dilation rates greater than 1 are not yet supported. Got dilations '${a}'`);let[u,l]=t;return E(u.rank===4,()=>`Error in gradient of depthwiseConv2dNative: input must be rank 4, but got rank ${u.rank}.`),E(l.rank===4,()=>`Error in gradient of depthwiseConv2dNative: filter must be rank 4, but got rank ${l.rank}.`),E(u.shape[3]===l.shape[2],()=>`Error in gradient of depthwiseConv2d: number of input channels (${u.shape[3]}) must match the inChannels dimension in filter ${l.shape[2]}.`),E(_r(o,a),()=>`Error in gradient of depthwiseConv2d: Either strides or dilations must be 1. Got strides ${o} and dilations '${a}'.`),Ie("depthwiseConv2d",s,i),{x:()=>sy(u.shape,r,l,o,s,a,i),filter:()=>oy(u,r,l.shape,o,s,a,i)}}};var XA={kernelName:_l,inputsToSave:["x","filter"],gradFunc:(r,t,e)=>{let[n,o]=t,s={x:n,filter:o,dy:r},i={x:n,filter:o,dy:r};return{x:()=>T.runKernel(Ud,s,e),filter:()=>T.runKernel(Hd,i,e)}}};var YA={kernelName:Qo,outputsToSave:[!0],gradFunc:(r,t)=>{let[e]=t,n={dy:r,y:e};return{x:()=>T.runKernel(wp,n)}}};var ZA={kernelName:da,inputsToSave:["x"],gradFunc:(r,t)=>{let[e]=t,n=R(er(Ut(Mt(e))),2/Math.sqrt(Math.PI));return{x:()=>R(r,n)}}};var JA={kernelName:ts,outputsToSave:[!0],gradFunc:(r,t)=>{let[e]=t;return{x:()=>R(r,e)}}};var QA={kernelName:ai,inputsToSave:["input"],gradFunc:(r,t)=>{let[e]=t;return{input:()=>D(r,e.shape)}}};var t2={kernelName:ga,inputsToSave:["x"],gradFunc:(r,t)=>{let[e]=t;return{x:()=>R(r,er(e))}}};var e2={kernelName:es,gradFunc:r=>({x:()=>It(r)})};var r2={kernelName:rs,inputsToSave:["a","b"],gradFunc:(r,t)=>{let[e,n]=t,o=Pt(e.shape,n.shape);return{a:()=>{let a=pt(r,J(n,"float32")),u=ge(e.shape,o);return u.length>0?D(ft(a,u),e.shape):a},b:()=>{let a=R(r,J(e,"float32")),u=ge(n.shape,o);u.length>0&&(a=D(ft(a,u),n.shape));let l=Mt(n);return Ut(pt(a,J(l,"float32")))}}}};var n2={kernelName:ns,inputsToSave:["x","mean","variance","scale"],gradFunc:(r,t,e)=>{let{varianceEpsilon:n}=e,[o,s,i,a]=t,u=a==null?mt(1):a,l=ge(s.shape,o.shape),c=[];if(s.rank===1){for(let C=0;C<o.shape.length-1;++C)c.push(o.shape[C]);c.push(1)}let p=ct(o,s),m=R(r,u),f=um(X(i,mt(n))),d=R(R(R(f,f),f),mt(-.5));return{x:()=>s.rank===1?D(R(R(r,$r(D(f,[1,1,1,s.shape[0]]),c)),u),o.shape):D(R(R(r,f),u),o.shape),mean:()=>{let C=R(R(f,mt(-1)),m);return s.rank===1&&(C=ft(C,l)),D(C,s.shape)},variance:()=>{let C=R(R(d,p),m);return s.rank===1&&(C=ft(C,l)),D(C,s.shape)},scale:()=>{let C=R(p,f),N=R(r,C);return s.rank===1&&(N=ft(N,l)),D(N,s.shape)},offset:()=>{let C=r;return s.rank===1&&(C=ft(C,l)),D(C,s.shape)}}}};var i2={kernelName:li,inputsToSave:["x","indices"],gradFunc:(r,t,e)=>{let[n,o]=t,{axis:s}=e,i=ar(s,n.shape)[0];return{x:()=>{let u=n.shape,l=o.size,c=u.slice(0,i),p=c.length,m=u.slice(s,u.length).slice(1),f=m.length,d=o2(0,p),h=o2(p+1,p+1+f),g=s2([c,[l],m]),x=D(r,g),b=D(o,[l]),w=s2([[p],d,h]),C=Ot(x,w),N=bm(C,b,n.shape[i]),_=ih(w);return N=Ot(N,_),N},indices:()=>o}}};function o2(r,t){let e=[];for(let n=r;n<t;++n)e.push(n);return e}function s2(r){let t=[];for(let e=0;e<r.length;++e)for(let n=0;n<r[e].length;++n)t.push(r[e][n]);return t}var a2={kernelName:os,inputsToSave:["a","b"],gradFunc:(r,t)=>{let[e,n]=t;return{a:()=>It(e),b:()=>It(n)}}};var l2={kernelName:lo,gradFunc:r=>({x:()=>J(r,"float32")})};var u2={kernelName:wa,gradFunc:r=>({x:()=>It(r)})};var c2={kernelName:Ca,gradFunc:r=>({x:()=>It(r)})};var p2={kernelName:Ia,gradFunc:r=>({x:()=>It(r)})};var m2={kernelName:ss,inputsToSave:["x"],gradFunc:(r,t,e)=>{let[n]=t,{alpha:o}=e,s=He(n,0);return{x:()=>_e(s,r,R(r,o))}}};var f2={kernelName:Na,inputsToSave:["x"],gradFunc:(r,t)=>{let[e]=t;return{x:()=>pt(r,X(e,1))}}};var d2={kernelName:is,inputsToSave:["x"],gradFunc:(r,t)=>{let[e]=t;return{x:()=>pt(r,J(e,"float32"))}}};var h2={kernelName:l1,inputsToSave:[],outputsToSave:[!0],gradFunc:(r,t,e)=>{let[n]=t,{axis:o}=e;return{logits:()=>{let i=er(n);return ct(r,R(ft(r,o,!0),i))}}}};function a5(r,t,e,n=5,o=1,s=1,i=.5){let a={x:r,y:t,dy:e},u={depthRadius:n,bias:o,alpha:s,beta:i};return T.runKernel(Np,a,u)}var g2=k({localResponseNormalizationBackprop_:a5});var x2={kernelName:$l,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,t,e)=>{let[n,o]=t,{depthRadius:s,bias:i,alpha:a,beta:u}=e;return{x:()=>g2(n,o,r,s,i,a,u)}}};function hy(r,t,e,n){return t.rank<e.rank&&(t=D(t,xo(t.shape,n))),r.rank<e.rank&&(r=D(r,xo(r.shape,n))),{x:()=>R(r,J(Ar(e,t),r.dtype))}}var p0={kernelName:as,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,t,e)=>{let n=e,{reductionIndices:o}=n,s=t[0],i=t[1],a=ar(o,s.shape),u=hy(r,i,s,a);return{x:()=>u.x()}}};var y2={kernelName:ls,inputsToSave:["a","b"],gradFunc:(r,t)=>{let[e,n]=t;return{a:()=>R(r,J(Fn(e,n),"float32")),b:()=>R(r,J(nm(e,n),"float32"))}}};function l5(r,t,e,n,o,s,i){let a=I(r,"dy","maxPool3dGrad"),u=I(t,"input","maxPool3dGrad"),l=I(e,"output","maxPool3dGrad"),c=a,p=u,m=l,f=!1;u.rank===4&&(f=!0,c=D(a,[1,a.shape[0],a.shape[1],a.shape[2],a.shape[3]]),p=D(u,[1,u.shape[0],u.shape[1],u.shape[2],u.shape[3]]),m=D(l,[1,l.shape[0],l.shape[1],l.shape[2],l.shape[3]])),E(c.rank===5,()=>`Error in maxPool3dGrad: dy must be rank 5 but got rank ${c.rank}.`),E(p.rank===5,()=>`Error in maxPool3dGrad: input must be rank 5 but got rank ${p.rank}.`),E(m.rank===5,()=>`Error in maxPool3dGrad: output must be rank 5 but got rank ${m.rank}.`),Ie("maxPool3dGrad",s,i);let d={dy:c,input:p,output:m},h={filterSize:n,strides:o,pad:s,dimRoundingMode:i},g=T.runKernel(Tp,d,h);return f?D(g,[g.shape[1],g.shape[2],g.shape[3],g.shape[4]]):g}var b2=k({maxPool3dGrad_:l5});var w2={kernelName:Dl,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,t,e)=>{let[n,o]=t,{filterSize:s,strides:i,pad:a,dimRoundingMode:u}=e;return{x:()=>b2(r,n,o,s,i,a,u)}}};function u5(r,t,e,n,o,s,i){let a=I(r,"dy","maxPoolGrad"),u=I(t,"input","maxPoolGrad"),l=I(e,"output","maxPoolGrad");E(u.rank===a.rank,()=>`Rank of input (${u.rank}) does not match rank of dy (${a.rank})`),E(a.rank===4,()=>`Error in maxPoolGrad: dy must be rank 4 but got rank ${a.rank}.`),E(u.rank===4,()=>`Error in maxPoolGrad: input must be rank 4 but got rank ${u.rank}.`),Ie("maxPoolGrad",s,i);let c={dy:a,input:u,output:l},p={filterSize:n,strides:o,pad:s,dimRoundingMode:i};return T.runKernel(kp,c,p)}var C2=k({maxPoolGrad_:u5});var I2={kernelName:us,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,t,e)=>{let[n,o]=t,{filterSize:s,strides:i,pad:a}=e;return{x:()=>C2(r,n,o,s,i,a)}}};var v2={kernelName:cs,inputsToSave:["x"],gradFunc:(r,t,e)=>{let[n]=t,{axis:o}=e,s=ar(o,n.shape),a=jS(n.shape,s)[1],u=Zt(a);return{x:()=>{let c=n.shape.slice();s.forEach(f=>{c[f]=1});let p=D(r,c);return pt(R(p,lr(n.shape,"float32")),u)}}}};var S2={kernelName:ps,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,t,e)=>{let n=e,{axis:o}=n,[s,i]=t,a=ar(o,s.shape),u=hy(r,i,s,a);return{x:()=>u.x()}}};var N2={kernelName:ms,inputsToSave:["a","b"],gradFunc:(r,t)=>{let[e,n]=t;return{a:()=>R(r,J(On(e,n),"float32")),b:()=>R(r,J(He(e,n),"float32"))}}};var k2={kernelName:fs,inputsToSave:["x"],gradFunc:(r,t,e)=>{let n=t[0],{paddings:o}=e,s=o.map(i=>i[0]);return{x:()=>Dt(r,s,n.shape)}}};var T2={kernelName:_a,inputsToSave:["a","b"],gradFunc:(r,t)=>{let[e,n]=t,o=Pt(e.shape,n.shape);return{a:()=>{let a=ge(e.shape,o);return a.length>0?D(ft(r,a),e.shape):r},b:()=>{let a=R(r,Ut(Fi(pt(e,n)))),u=ge(n.shape,o);return u.length>0?D(ft(a,u),n.shape):a}}}};var E2={kernelName:ds,inputsToSave:["a","b"],gradFunc:(r,t)=>{let[e,n]=t,o=Pt(e.shape,n.shape);return{a:()=>{let a=R(r,J(n,"float32")),u=ge(e.shape,o);return u.length>0?D(ft(a,u),e.shape):a},b:()=>{let a=R(r,J(e,"float32")),u=ge(n.shape,o);return u.length>0?D(ft(a,u),n.shape):a}}}};var _2={kernelName:ui,gradFunc:r=>({x:()=>Ut(r)})};var A2={kernelName:hs,inputsToSave:["indices"],gradFunc:(r,t)=>{let e=t[0];return{indices:()=>Ne(e.shape,"float32")}}};var $2={kernelName:ci,gradFunc:r=>({x:()=>It(r)})};var D2={kernelName:pi,saveAllInputs:!0,gradFunc:(r,t,e)=>{let{axis:n}=e;return vr(r,n).map(s=>()=>s)}};var m0={kernelName:gs,inputsToSave:["x"],gradFunc:(r,t,e)=>{let n=t[0],{paddings:o}=e,s=o.map(i=>i[0]);return{x:()=>Dt(r,s,n.shape)}}};var R2={kernelName:xs,inputsToSave:["a","b"],outputsToSave:[!0],gradFunc:(r,t)=>{let[e,n,o]=t,s=e,i=n,a=Pt(s.shape,i.shape);return{a:()=>{let c=J(i,"float32"),p=R(r,R(c,an(s,ct(c,mt(1))))),m=ge(s.shape,a);return m.length>0&&(p=ft(p,m)),D(p,s.shape)},b:()=>{let c=He(s,0),p=_e(c,Ir(s),It(s)),m=R(r,R(o,p)),f=ge(i.shape,a);return f.length>0&&(m=ft(m,f)),D(m,i.shape)}}}};var F2={kernelName:ys,inputsToSave:["x","alpha"],gradFunc:(r,t)=>{let[e,n]=t,o=He(e,0);return{x:()=>_e(o,r,R(r,n)),alpha:()=>{let s=_e(o,It(r),R(r,e)),i=ge(n.shape,r.shape);return i.length>0&&(s=ft(s,i)),D(s,n.shape)}}}};function c5(r,t,e){let n=r.shape.slice();n[e]=1;let o=D(t,n),s=ju(r,e,!0,!1),i=ju(r,e,!0,!0),a=R(s,i);return R(o,a)}function p5(r,t,e){let n=r.shape.length,o=n-e.length,s=S.getAxesPermutation(e,n),i=r;s!=null&&(i=Ot(r,s));let a=i.shape.slice(),l=a.splice(n-e.length,e.length).reduce((m,f)=>m*f,1);a.push(l);let c=i.reshape(a),p=c5(c,t,o);if(p=p.reshape(i.shape),s!=null){let m=S.getUndoAxesPermutation(s);p=Ot(p,m)}return p}var O2={kernelName:bs,inputsToSave:["x"],gradFunc:(r,t,e)=>{let[n]=t,{axis:o}=e,s=[];return o==null?s=n.shape.map((i,a)=>a):typeof o=="number"?s=[o]:s=o,{x:()=>p5(n,r,s)}}};var P2={kernelName:Jo,inputsToSave:["a","b"],gradFunc:(r,t)=>{let[e,n]=t,o=Pt(e.shape,n.shape);return{a:()=>{let a=pt(r,J(n,"float32")),u=ge(e.shape,o);return u.length>0?D(ft(a,u),e.shape):a},b:()=>{let a=R(r,J(e,"float32")),u=ge(n.shape,o);u.length>0&&(a=D(ft(a,u),n.shape));let l=Mt(n);return Ut(pt(a,J(l,"float32")))}}}};var L2={kernelName:Fa,inputsToSave:["x"],gradFunc:(r,t)=>{let[e]=t;return{x:()=>pt(r,Ut(Mt(e)))}}};var M2={kernelName:vs,inputsToSave:["x"],gradFunc:(r,t)=>{let[e]=t,n=R(On(e,6),yo(e));return{x:()=>R(r,J(n,"float32"))}}};var z2={kernelName:ws,inputsToSave:["x"],gradFunc:(r,t)=>{let[e]=t;return{x:()=>R(r,J(yo(e),"float32"))}}};var B2={kernelName:mi,inputsToSave:["x"],gradFunc:(r,t)=>{let[e]=t;return{x:()=>D(r,e.shape)}}};var V2={kernelName:Is,inputsToSave:["images"],gradFunc:(r,t,e)=>{let[n]=t,o={dy:r,images:n};return{images:()=>T.runKernel(Fp,o,e)}}};var G2={kernelName:Cs,inputsToSave:["images"],gradFunc:(r,t,e)=>{let[n]=t,o={dy:r,images:n};return{images:()=>T.runKernel(Rp,o,e)}}};var W2={kernelName:Ss,gradFunc:(r,t,e)=>{let{dims:n}=e,o=ar(n,r.shape);return{x:()=>ur(r,o)}}};var U2={kernelName:Ns,gradFunc:r=>({x:()=>It(r)})};var H2={kernelName:ks,inputsToSave:["x"],gradFunc:(r,t)=>{let[e]=t;return{x:()=>Ut(pt(r,R(an(e,1.5),2)))}}};var q2={kernelName:fi,inputsToSave:["condition"],gradFunc:(r,t)=>{let[e]=t;return{condition:()=>J(It(e),"float32"),t:()=>R(r,J(e,r.dtype)),e:()=>R(r,J(Ql(e),r.dtype))}}};var K2={kernelName:Pa,inputsToSave:["x"],gradFunc:(r,t)=>{let[e]=t;return{x:()=>{let n=He(e,mt(0)),o=mt(a0),s=mt(l0),i=R(r,s),a=R(R(r,o),er(J(e,"float32")));return _e(n,i,a)}}}};var j2={kernelName:Es,outputsToSave:[!0],gradFunc:(r,t)=>{let[e]=t;return{x:()=>R(r,R(e,ct(mt(1),e)))}}};var X2={kernelName:Ma,gradFunc:r=>({x:()=>It(r)})};var Y2={kernelName:Ts,inputsToSave:["x"],gradFunc:(r,t)=>{let[e]=t;return{x:()=>R(Yl(J(e,"float32")),r)}}};var Z2={kernelName:La,inputsToSave:["x"],gradFunc:(r,t)=>{let[e]=t;return{x:()=>R(em(J(e,"float32")),r)}}};var J2={kernelName:di,inputsToSave:["x"],gradFunc:(r,t,e)=>{let[n]=t,{begin:o,size:s}=e,i=n.shape,[a,u]=VS(n,o,s),l=[];for(let c=0;c<r.rank;c++)l.push([a[c],i[c]-a[c]-u[c]]);return{x:()=>un(r,l)}}};var Q2={kernelName:$s,outputsToSave:[!0],gradFunc:(r,t,e)=>{let[n]=t,{dim:o}=e,s=!0,i=R(r,n);return{logits:()=>ct(i,R(ft(i,[o],s),n))}}};var t$={kernelName:za,inputsToSave:["x"],gradFunc:(r,t)=>{let[e]=t;return{x:()=>R(r,Xr(e))}}};var f0={kernelName:hi,gradFunc:(r,t,e)=>{let{blockShape:n,paddings:o}=e;return{x:()=>Xl(r,n,o)}}};var d0={kernelName:gi,gradFunc:(r,t,e)=>{let{axis:n}=e;return{x:()=>ne(r,n)}}};var e$={kernelName:_s,inputsToSave:["x"],gradFunc:(r,t)=>{let[e]=t;return{x:()=>pt(r,R(ve(J(e,"float32")),2))}}};var r$={kernelName:Ll,inputsToSave:["x"],gradFunc:(r,t)=>{let[e]=t;return{x:()=>R(r,R(J(e,"float32"),2))}}};var n$={kernelName:Ds,inputsToSave:["a","b"],gradFunc:(r,t)=>{let[e,n]=t,o=mt(2);return{a:()=>R(r,R(o,ct(e,n))),b:()=>R(r,R(o,ct(n,e)))}}};var o$={kernelName:uo,gradFunc:r=>({x:()=>It(r)})};var s$={kernelName:Rs,inputsToSave:["a","b"],gradFunc:(r,t)=>{let[e,n]=t,o=Pt(e.shape,n.shape);return{a:()=>{let a=r,u=ge(e.shape,o);return u.length>0&&(a=ft(a,u)),D(a,e.shape)},b:()=>{let a=r,u=ge(n.shape,o);return u.length>0&&(a=ft(a,u)),D(Ut(a),n.shape)}}}};var i$={kernelName:As,inputsToSave:["x"],gradFunc:(r,t,e)=>{let[n]=t,o=n.shape.slice(),{axis:s}=e;ar(s,n.shape).forEach(l=>{o[l]=1});let a=D(r,o),u=R(a,lr(n.shape,"float32"));return{x:()=>u}}};var a$={kernelName:Fs,inputsToSave:["x"],gradFunc:(r,t)=>{let[e]=t;return{x:()=>pt(r,Mt(Yl(e)))}}};var l$={kernelName:Os,outputsToSave:[!0],gradFunc:(r,t)=>{let[e]=t;return{x:()=>R(ct(mt(1),Mt(e)),r)}}};var u$={kernelName:Zn,inputsToSave:["x"],gradFunc:(r,t,e)=>{let[n]=t,{reps:o}=e;return{x:()=>{let i=It(n);if(n.rank===1)for(let a=0;a<o[0];++a)i=X(i,Dt(r,[a*n.shape[0]],[n.shape[0]]));else if(n.rank===2)for(let a=0;a<o[0];++a)for(let u=0;u<o[1];++u)i=X(i,Dt(r,[a*n.shape[0],u*n.shape[1]],[n.shape[0],n.shape[1]]));else if(n.rank===3)for(let a=0;a<o[0];++a)for(let u=0;u<o[1];++u)for(let l=0;l<o[2];++l)i=X(i,Dt(r,[a*n.shape[0],u*n.shape[1],l*n.shape[2]],[n.shape[0],n.shape[1],n.shape[2]]));else if(n.rank===4)for(let a=0;a<o[0];++a)for(let u=0;u<o[1];++u)for(let l=0;l<o[2];++l)for(let c=0;c<o[3];++c)i=X(i,Dt(r,[a*n.shape[0],u*n.shape[1],l*n.shape[2],c*n.shape[3]],[n.shape[0],n.shape[1],n.shape[2],n.shape[3]]));else throw new Error(`Gradient for tile operation is not implemented for rank-${n.rank} tensors yet.`);return i}}}};var c$={kernelName:Jn,gradFunc:(r,t,e)=>{let n=e,{perm:o}=n,s=ih(o);return{x:()=>Ot(r,s)}}};var p$={kernelName:xi,gradFunc:(r,t,e)=>{let n=e,{axis:o}=n;return{value:()=>rr(r,o)}}};var m$={kernelName:Vl,inputsToSave:["segmentIds"],gradFunc:(r,t)=>{let[e]=t;return{x:()=>m5(r,e)}}};function m5(r,t){let e=In(t,It(t)),n=Oi(r,e),o=Fn(t,mt(0,"int32")),s=n.rank-o.rank;for(let a=0;a<s;++a)o=gr(o,a+1);o=Dr(o,lr(n.shape,"bool"));let i=It(n);return _e(o,n,i)}var f$={kernelName:yi,gradFunc:r=>({x:()=>It(r)})};var f5=[dy,yA,bA,wA,CA,IA,vA,SA,NA,kA,TA,EA,AA,DA,RA,FA,OA,PA,LA,MA,zA,BA,GA,VA,UA,HA,qA,KA,jA,XA,P2,YA,ZA,JA,QA,t2,r2,e2,n2,i2,a2,l2,u2,c2,p2,m2,f2,d2,h2,x2,p0,p0,y2,w2,I2,v2,S2,N2,k2,T2,E2,_2,A2,$2,D2,m0,m0,R2,F2,O2,L2,M2,z2,B2,V2,G2,W2,U2,H2,q2,K2,j2,X2,Y2,Z2,J2,Q2,t$,f0,f0,d0,d0,e$,n$,r$,o$,s$,i$,a$,l$,u$,c$,p$,m$,f$];for(let r of f5)c1(r);O().prototype.abs=function(){return this.throwIfDisposed(),Ee(this)};O().prototype.acos=function(){return this.throwIfDisposed(),rx(this)};O().prototype.acosh=function(){return this.throwIfDisposed(),nx(this)};O().prototype.add=function(r){return this.throwIfDisposed(),X(this,r)};O().prototype.all=function(r,t){return this.throwIfDisposed(),Yp(this,r,t)};O().prototype.any=function(r,t){return this.throwIfDisposed(),Hu(this,r,t)};O().prototype.argMax=function(r){return this.throwIfDisposed(),Ei(this,r)};O().prototype.argMin=function(r){return this.throwIfDisposed(),ox(this,r)};O().prototype.asScalar=function(){return this.throwIfDisposed(),E(this.size===1,()=>"The array must have only 1 element."),D(this,[])};O().prototype.asType=function(r){return this.throwIfDisposed(),J(this,r)};O().prototype.as1D=function(){return this.throwIfDisposed(),D(this,[this.size])};O().prototype.as2D=function(r,t){return this.throwIfDisposed(),D(this,[r,t])};O().prototype.as3D=function(r,t,e){return this.throwIfDisposed(),D(this,[r,t,e])};O().prototype.as4D=function(r,t,e,n){return this.throwIfDisposed(),D(this,[r,t,e,n])};O().prototype.as5D=function(r,t,e,n,o){return this.throwIfDisposed(),D(this,[r,t,e,n,o])};O().prototype.asin=function(){return this.throwIfDisposed(),sx(this)};O().prototype.asinh=function(){return this.throwIfDisposed(),ix(this)};O().prototype.atan=function(){return this.throwIfDisposed(),ax(this)};O().prototype.atan2=function(r){return this.throwIfDisposed(),lx(this,r)};O().prototype.atanh=function(){return this.throwIfDisposed(),ux(this)};O().prototype.avgPool=function(r,t,e,n){return this.throwIfDisposed(),jl(this,r,t,e,n)};O().prototype.batchToSpaceND=function(r,t){return this.throwIfDisposed(),Xl(this,r,t)};O().prototype.batchNorm=function(r,t,e,n,o){return this.throwIfDisposed(),Ai(this,r,t,e,n,o)};O().prototype.broadcastTo=function(r){return this.throwIfDisposed(),$i(this,r)};O().prototype.cast=function(r){return this.throwIfDisposed(),J(this,r)};O().prototype.ceil=function(){return this.throwIfDisposed(),gx(this)};O().prototype.clipByValue=function(r,t){return this.throwIfDisposed(),Cr(this,r,t)};O().prototype.concat=function(r,t){return this.throwIfDisposed(),r instanceof Ft&&(r=[r]),ne([this,...r],t)};O().prototype.conv1d=function(r,t,e,n,o,s){return this.throwIfDisposed(),Jp(this,r,t,e,n,o,s)};O().prototype.conv2dTranspose=function(r,t,e,n,o){return this.throwIfDisposed(),tm(this,r,t,e,n,o)};O().prototype.conv2d=function(r,t,e,n,o,s){return this.throwIfDisposed(),Cn(this,r,t,e,n,o,s)};O().prototype.cos=function(){return this.throwIfDisposed(),Yl(this)};O().prototype.cosh=function(){return this.throwIfDisposed(),em(this)};O().prototype.cumprod=function(r,t,e){return this.throwIfDisposed(),ju(this,r,t,e)};O().prototype.cumsum=function(r,t,e){return this.throwIfDisposed(),rm(this,r,t,e)};O().prototype.depthToSpace=function(r,t){return this.throwIfDisposed(),Sx(this,r,t)};O().prototype.depthwiseConv2d=function(r,t,e,n,o,s){return this.throwIfDisposed(),Di(this,r,t,e,n,o,s)};O().prototype.dilation2d=function(r,t,e,n,o){return this.throwIfDisposed(),Nx(this,r,t,e,n,o)};O().prototype.divNoNan=function(r){return this.throwIfDisposed(),kx(this,r)};O().prototype.div=function(r){return this.throwIfDisposed(),pt(this,r)};O().prototype.dot=function(r){return this.throwIfDisposed(),Tx(this,r)};O().prototype.elu=function(){return this.throwIfDisposed(),Ri(this)};O().prototype.equal=function(r){return this.throwIfDisposed(),Ar(this,r)};O().prototype.erf=function(){return this.throwIfDisposed(),Ex(this)};O().prototype.euclideanNorm=function(r,t){return this.throwIfDisposed(),_x(this,r,t)};O().prototype.exp=function(){return this.throwIfDisposed(),er(this)};O().prototype.expandDims=function(r){return this.throwIfDisposed(),gr(this,r)};O().prototype.expm1=function(){return this.throwIfDisposed(),Ax(this)};O().prototype.fft=function(){return this.throwIfDisposed(),su(this)};O().prototype.flatten=function(){return this.throwIfDisposed(),D(this,[this.size])};O().prototype.floor=function(){return this.throwIfDisposed(),Fi(this)};O().prototype.floorDiv=function(r){return this.throwIfDisposed(),Xp(this,r)};O().prototype.gather=function(r,t){return this.throwIfDisposed(),Oi(this,r,t)};O().prototype.greaterEqual=function(r){return this.throwIfDisposed(),Fn(this,r)};O().prototype.greater=function(r){return this.throwIfDisposed(),He(this,r)};O().prototype.ifft=function(){return this.throwIfDisposed(),Za(this)};O().prototype.irfft=function(){return this.throwIfDisposed(),gm(this)};O().prototype.isFinite=function(){return this.throwIfDisposed(),$x(this)};O().prototype.isInf=function(){return this.throwIfDisposed(),Dx(this)};O().prototype.isNaN=function(){return this.throwIfDisposed(),Rx(this)};O().prototype.leakyRelu=function(r){return this.throwIfDisposed(),Zl(this,r)};O().prototype.lessEqual=function(r){return this.throwIfDisposed(),On(this,r)};O().prototype.less=function(r){return this.throwIfDisposed(),nm(this,r)};O().prototype.localResponseNormalization=function(r,t,e,n){return this.throwIfDisposed(),Fx(this,r,t,e,n)};O().prototype.logSigmoid=function(){return this.throwIfDisposed(),Lx(this)};O().prototype.logSoftmax=function(r){return this.throwIfDisposed(),om(this,r)};O().prototype.logSumExp=function(r,t){return this.throwIfDisposed(),sm(this,r,t)};O().prototype.log=function(){return this.throwIfDisposed(),Ir(this)};O().prototype.log1p=function(){return this.throwIfDisposed(),Jl(this)};O().prototype.logicalAnd=function(r){return this.throwIfDisposed(),Dr(this,r)};O().prototype.logicalNot=function(){return this.throwIfDisposed(),Ql(this)};O().prototype.logicalOr=function(r){return this.throwIfDisposed(),im(this,r)};O().prototype.logicalXor=function(r){return this.throwIfDisposed(),Mx(this,r)};O().prototype.matMul=function(r,t,e){return this.throwIfDisposed(),Lt(this,r,t,e)};O().prototype.maxPool=function(r,t,e,n){return this.throwIfDisposed(),tu(this,r,t,e,n)};O().prototype.max=function(r,t){return this.throwIfDisposed(),Br(this,r,t)};O().prototype.maximum=function(r){return this.throwIfDisposed(),In(this,r)};O().prototype.mean=function(r,t){return this.throwIfDisposed(),Se(this,r,t)};O().prototype.min=function(r,t){return this.throwIfDisposed(),Xu(this,r,t)};O().prototype.minimum=function(r){return this.throwIfDisposed(),Pi(this,r)};O().prototype.mirrorPad=function(r,t){return this.throwIfDisposed(),Vx(this,r,t)};O().prototype.mod=function(r){return this.throwIfDisposed(),Gx(this,r)};O().prototype.mul=function(r){return this.throwIfDisposed(),R(this,r)};O().prototype.neg=function(){return this.throwIfDisposed(),Ut(this)};O().prototype.norm=function(r,t,e){return this.throwIfDisposed(),Ya(this,r,t,e)};O().prototype.notEqual=function(r){return this.throwIfDisposed(),zs(this,r)};O().prototype.oneHot=function(r,t=1,e=0){return this.throwIfDisposed(),ki(this,r,t,e)};O().prototype.onesLike=function(){return this.throwIfDisposed(),xr(this)};O().prototype.pad=function(r,t){return this.throwIfDisposed(),un(this,r,t)};O().prototype.pool=function(r,t,e,n,o,s){return this.throwIfDisposed(),Wx(this,r,t,e,n,o,s)};O().prototype.pow=function(r){return this.throwIfDisposed(),an(this,r)};O().prototype.prelu=function(r){return this.throwIfDisposed(),ru(this,r)};O().prototype.prod=function(r,t){return this.throwIfDisposed(),Ux(this,r,t)};O().prototype.reciprocal=function(){return this.throwIfDisposed(),Xx(this)};O().prototype.relu=function(){return this.throwIfDisposed(),Rr(this)};O().prototype.relu6=function(){return this.throwIfDisposed(),am(this)};O().prototype.reshapeAs=function(r){return this.throwIfDisposed(),D(this,r.shape)};O().prototype.reshape=function(r){return this.throwIfDisposed(),D(this,r)};O().prototype.resizeBilinear=function(r,t,e){return this.throwIfDisposed(),py(this,r,t,e)};O().prototype.resizeNearestNeighbor=function(r,t,e){return this.throwIfDisposed(),my(this,r,t,e)};O().prototype.reverse=function(r){return this.throwIfDisposed(),ur(this,r)};O().prototype.rfft=function(){return this.throwIfDisposed(),iu(this)};O().prototype.round=function(){return this.throwIfDisposed(),lm(this)};O().prototype.rsqrt=function(){return this.throwIfDisposed(),um(this)};O().prototype.selu=function(){return this.throwIfDisposed(),cm(this)};O().prototype.separableConv2d=function(r,t,e,n,o,s){return this.throwIfDisposed(),pm(this,r,t,e,n,o,s)};O().prototype.sigmoid=function(){return this.throwIfDisposed(),Xr(this)};O().prototype.sign=function(){return this.throwIfDisposed(),Yx(this)};O().prototype.sin=function(){return this.throwIfDisposed(),mm(this)};O().prototype.sinh=function(){return this.throwIfDisposed(),fm(this)};O().prototype.slice=function(r,t){return this.throwIfDisposed(),Dt(this,r,t)};O().prototype.softmax=function(r){return this.throwIfDisposed(),ou(this,r)};O().prototype.softplus=function(){return this.throwIfDisposed(),Ms(this)};O().prototype.spaceToBatchND=function(r,t){return this.throwIfDisposed(),eu(this,r,t)};O().prototype.split=function(r,t){return this.throwIfDisposed(),cr(this,r,t)};O().prototype.sqrt=function(){return this.throwIfDisposed(),ve(this)};O().prototype.square=function(){return this.throwIfDisposed(),Mt(this)};O().prototype.squaredDifference=function(r){return this.throwIfDisposed(),xm(this,r)};O().prototype.squeeze=function(r){return this.throwIfDisposed(),Pn(this,r)};O().prototype.stack=function(r,t){this.throwIfDisposed();let e=r instanceof Ft?[this,r]:[this,...r];return rr(e,t)};O().prototype.step=function(r){return this.throwIfDisposed(),yo(this,r)};O().prototype.stridedSlice=function(r,t,e,n,o,s,i,a){return this.throwIfDisposed(),Zx(this,r,t,e,n,o,s,i,a)};O().prototype.sub=function(r){return this.throwIfDisposed(),ct(this,r)};O().prototype.sum=function(r,t){return this.throwIfDisposed(),ft(this,r,t)};O().prototype.tan=function(){return this.throwIfDisposed(),Jx(this)};O().prototype.tanh=function(){return this.throwIfDisposed(),_i(this)};O().prototype.tile=function(r){return this.throwIfDisposed(),$r(this,r)};O().prototype.toBool=function(){return this.throwIfDisposed(),J(this,"bool")};O().prototype.toFloat=function(){return this.throwIfDisposed(),J(this,"float32")};O().prototype.toInt=function(){return this.throwIfDisposed(),J(this,"int32")};O().prototype.topk=function(r,t){return this.throwIfDisposed(),Qx(this,r,t)};O().prototype.transpose=function(r){return this.throwIfDisposed(),Ot(this,r)};O().prototype.unique=function(r){return this.throwIfDisposed(),ty(this,r)};O().prototype.unsortedSegmentSum=function(r,t){return this.throwIfDisposed(),bm(this,r,t)};O().prototype.unstack=function(r){return this.throwIfDisposed(),vr(this,r)};O().prototype.where=function(r,t){return this.throwIfDisposed(),_e(r,this,t)};O().prototype.zerosLike=function(){return this.throwIfDisposed(),It(this)};var vn=class extends Error{constructor(t){super(t),Object.setPrototypeOf(this,vn.prototype)}},Ur=class extends Error{constructor(t){super(t),Object.setPrototypeOf(this,Ur.prototype)}},z=class extends Error{constructor(t){super(t),Object.setPrototypeOf(this,z.prototype)}},vt=class extends Error{constructor(t){super(t),Object.setPrototypeOf(this,vt.prototype)}},Cm=class extends Error{constructor(t){super(t),Object.setPrototypeOf(this,Cm.prototype)}};var mh=class{constructor(t){this.maxEntries=t||100,this.cache=new Map}get(t){let e;return this.cache.has(t)&&(e=this.cache.get(t),this.cache.delete(t),this.cache.set(t,e)),e}put(t,e){if(this.cache.has(t))this.cache.delete(t);else if(this.cache.size>=this.maxEntries){let n=this.cache.keys().next().value;this.cache.delete(n)}this.cache.set(t,e)}getMaxEntries(){return this.maxEntries}setMaxEntries(t){if(t<0)throw new Error(`The maxEntries of LRU caches must be at least 0, but got ${t}.`);if(this.maxEntries>t)for(let e=0;e<this.maxEntries-t;e++){let n=this.cache.keys().next().value;this.cache.delete(n)}this.maxEntries=t}};function Co(r,t){if(Array.isArray(r)){let e=[];for(let n=0;n<t;n++)e=e.concat(r);return e}else{let e=new Array(t);return e.fill(r),e}}function eo(r,t){if(!r)throw new Cm(t)}function g0(r,t){let e=0;for(let n of r)n===t&&e++;return e}function Sr(r){return r.length===1?r[0]:r}function xe(r){return Array.isArray(r)?r:[r]}function Io(r){let e=r.replace(/(.)([A-Z][a-z0-9]+)/g,"$1_$2").replace(/([a-z])([A-Z])/g,"$1_$2").toLowerCase();return e[0]!=="_"?e:"private"+e}function Ja(r){return r.length<=1||r.indexOf("_")===-1?r:r.replace(/[_]+(\w|$)/g,(t,e)=>e.toUpperCase())}var wo={};function Im(r){if(r==null)return null;let t={};return t.className=r.getClassName(),t.config=r.getConfig(),t}function h0(r){if(!(r==null||typeof r!="object"))if(Array.isArray(r))r.forEach(t=>h0(t));else{let t=Object.keys(r);for(let e of t){let n=r[e];n!=null&&typeof n=="object"&&(!Array.isArray(n)&&n.type==="ndarray"&&typeof n.value=="number"?r[e]=n.value:h0(n))}}}function Bi(r,t={},e={},n="object",o=!1){if(typeof r=="string"){let s=r,i;if(s in e)i=e[s];else if(s in wo)i=wo[s];else if(i=t[s],i==null)throw new z(`Unknown ${n}: ${r}. This may be due to one of the following reasons:
1. The ${n} is defined in Python, in which case it needs to be ported to TensorFlow.js or your JavaScript code.
2. The custom ${n} is defined in JavaScript, but is not registered properly with tf.serialization.registerClass().`);return i}else{let s=r;if(s.className==null||s.config==null)throw new z(`${n}: Improper config format: ${JSON.stringify(s)}.
'className' and 'config' must set.`);let i=s.className,a,u;if(i in e?[a,u]=e[i]:i in wo?[a,u]=wo.className:i in t&&([a,u]=t[i]),a==null)throw new z(`Unknown ${n}: ${i}. This may be due to one of the following reasons:
1. The ${n} is defined in Python, in which case it needs to be ported to TensorFlow.js or your JavaScript code.
2. The custom ${n} is defined in JavaScript, but is not registered properly with tf.serialization.registerClass().`);if(u!=null){let l={};for(let f of Object.keys(wo))l[f]=wo[f];for(let f of Object.keys(e))l[f]=e[f];let c=s.config;c.customObjects=l;let p=Object.assign({},wo);for(let f of Object.keys(e))wo[f]=e[f];h0(s.config);let m=u(a,s.config,e,o);return wo=Object.assign({},p),m}else{let l=Object.assign({},wo);for(let p of Object.keys(e))wo[p]=e[p];let c=new a(s.config);return wo=Object.assign({},l),c}}}function d5(r,t){return r<t?-1:r>t?1:0}function fh(r,t){return-1*d5(r,t)}function vo(r){if(r==null)return r;let t=[];for(let e of r)t.indexOf(e)===-1&&t.push(e);return t}function d$(r){if(r==null)throw new z(`Invalid value in obj: ${JSON.stringify(r)}`);for(let t in r)if(r.hasOwnProperty(t))return!1;return!0}function Vi(r,t,e){if(e!=null&&r.indexOf(e)<0)throw new z(`${e} is not a valid ${t}. Valid values are ${r} or null/undefined.`)}function gy(r,t,e=0,n=1/0){return eo(e>=0),eo(n>=e),Array.isArray(r)&&r.length>=e&&r.length<=n&&r.every(o=>typeof o===t)}function Ze(r,t){Array.isArray(r)?(y.assert(r.length>0,()=>`${t} is unexpectedly an empty array.`),r.forEach((e,n)=>Ze(e,`element ${n+1} of ${t}`))):y.assert(Number.isInteger(r)&&r>0,()=>`Expected ${t} to be a positive integer, but got ${h$(r)}.`)}function h$(r){return r===null?"null":Array.isArray(r)?"["+r.map(t=>h$(t)).join(",")+"]":typeof r=="string"?`"${r}"`:`${r}`}function g$(r,t,e){let n=e!=null?e():y.now(),o;return(...i)=>{let a=e!=null?e():y.now();return a-n<t||(n=a,o=r(...i)),o}}function xy(r){return r==="relu"?"relu":r==="linear"?"linear":r==="elu"?"elu":null}var h5=0;function by(){return h5++}var yy={};function hu(r=""){return r in yy||(yy[r]=0),yy[r]+=1,r+yy[r].toString()}var x$=["channelsFirst","channelsLast"],y$=["nearest","bilinear"],b$=["valid","same","causal"],w$=["max","avg"],C$=["sum","mul","concat","ave"];var vm=new Map;function Re(r){Vi(x$,"DataFormat",r)}function v$(r){Vi(y$,"InterpolationFormat",r)}function cn(r){Vi(b$,"PaddingMode",r)}function x0(r){Vi(w$,"PoolMode",r)}var dh=[],I$="/";function Ws(r,t){dh.push(r);try{let e=t();return dh.pop(),e}catch(e){throw dh.pop(),e}}function g5(){return dh.length===0?"":dh.join(I$)+I$}function wy(r){if(!S$(r))throw new Error("Not a valid tensor name: '"+r+"'");return g5()+r}function Cy(r){if(!S$(r))throw new Error("Not a valid tensor name: '"+r+"'");vm.has(r)||vm.set(r,0);let t=vm.get(r);if(vm.set(r,vm.get(r)+1),t>0){let e=`${r}_${t}`;return vm.set(e,1),e}else return r}var x5=new RegExp(/^[A-Za-z0-9][-A-Za-z0-9\._\/]*$/);function S$(r){return!!r.match(x5)}function N$(r){return r===parseInt(r.toString(),10)}function So(r,t,e){t==null&&(t=0),e==null&&(e=r.length);let n=1;for(let o=t;o<e;++o)n*=r[o];return n}function ac(r){if(r.length===0)return Number.NaN;let t=Number.POSITIVE_INFINITY;for(let e=0;e<r.length;e++){let n=r[e];n<t&&(t=n)}return t}function Us(r){if(r.length===0)return Number.NaN;let t=Number.NEGATIVE_INFINITY;for(let e=0;e<r.length;e++){let n=r[e];n>t&&(t=n)}return t}function Yr(r,t){if(t<r)throw new z(`end (${t}) < begin (${r}) is forbidden.`);let e=[];for(let n=r;n<t;++n)e.push(n);return e}var y0;function sr(){return y0==null&&(y0=pE().epsilon()),y0}function pn(){return"channelsLast"}function tl(r,t){return J(r,t)}function el(r,t=-1){let e=r.shape.slice();return t<0&&(t=e.length+t+1),e.splice(t,0,1),D(r,e)}function k$(r,t){return B(()=>{if(r.shape.length!==2)throw new z(`repeat() expects a rank-2 tensor, but received a rank-${r.shape.length} tensor.`);let e=el(r,1);return vy(e,[1,t,1])})}function T$(r){let t=[So(r.shape)];return D(r,t)}function E$(r){if(r.rank<=1)throw new z(`batchFlatten requires a minimum rank of 2. Got rank: ${r.rank}.`);let t=[r.shape[0],So(r.shape,1)];return D(r,t)}function Qa(r,t,e){return B(()=>{switch(r.rank){case 1:return dm(r,t,e);case 2:return uh(r,[t,0],[e,r.shape[1]]);case 3:return hm(r,[t,0,0],[e,r.shape[1],r.shape[2]]);case 4:return ec(r,[t,0,0,0],[e,r.shape[1],r.shape[2],r.shape[3]]);case 5:return Dt(r,[t,0,0,0,0],[e,r.shape[1],r.shape[2],r.shape[3],r.shape[4]]);case 6:return Dt(r,[t,0,0,0,0,0],[e,r.shape[1],r.shape[2],r.shape[3],r.shape[4],r.shape[5]]);default:throw new z(`sliceAlongFirstAxis() received an unsupported tensor rank: ${r.rank}`)}})}function b0(r,t,e){return B(()=>{switch(r.rank){case 1:return dm(r,t,e);case 2:return uh(r,[0,t],[r.shape[0],e]);case 3:return hm(r,[0,0,t],[r.shape[0],r.shape[1],e]);case 4:return ec(r,[0,0,0,t],[r.shape[0],r.shape[1],r.shape[2],e]);default:throw new z(`sliceAlongLastAxis() received an unsupported tensor rank: ${r.rank}`)}})}function hh(r,t,e,n){return B(()=>{switch(r.rank){case 1:return dm(r,t,e);case 2:switch(n){case 1:return Qa(r,t,e);case 2:return b0(r,t,e);default:throw new z(`The axis is not within the rank of the tensor ${n}`)}case 3:switch(n){case 1:return Qa(r,t,e);case 2:return hm(r,[0,t,0],[r.shape[0],e,r.shape[2]]);case 3:return b0(r,t,e);default:throw new z(`The axis is not within the rank of the tensor ${n}`)}case 4:switch(n){case 1:return Qa(r,t,e);case 2:return ec(r,[0,t,0,0],[r.shape[0],e,r.shape[2],r.shape[3]]);case 3:return ec(r,[0,0,t,0],[r.shape[0],r.shape[1],e,r.shape[3]]);case 4:return b0(r,t,e);default:throw new z(`The axis is not within the rank of the tensor ${n}`)}default:throw new z(`sliceAlongLastAxis() received an unsupported tensor rank: ${r.rank}`)}})}function Sm(r,t=-1){let e;return t<0&&(e=r[0].rank,e!==0?t=e:t=0),t===r[0].rank&&(t=-1),ne(r,t)}function C0(r,t){switch(r.rank){case 1:return xx([r,t]);case 2:return yx([r,t],0);case 3:return bx([r,t],0);case 4:return wx([r,t],0);default:throw new z(`concatAlongFirstAxis() received an unsupported tensor rank: ${r.rank}`)}}function vy(r,t){if(Array.isArray(t)||(t=[t]),r.rank!==t.length)throw new z(`The length of input n (${t.length}) does not match the number of dimensions in input x (${r.rank})`);return $r(r,t)}function Nm(r,t=0,e=1,n,o){return tc(r,t,e,n,o)}function No(r,t,e,n){if(r.rank<2||t.rank<2)throw new vt(`dot requires both inputs to be rank >= 2 but got x shape = ${r.shape} and y shape = ${t.shape}`);if(t.rank>=3){let o=r.shape.slice(-1)[0],s=t.shape.slice(-2)[0];if(o!==s)throw new vt(`If rank y >= 3, then the second last dim of y must equal the last dim of x but got x shape = ${r.shape} and y shape = ${t.shape}`)}if(r.rank===2&&t.rank===2)return au.matMul({a:r,b:t,transposeA:!1,transposeB:!1,bias:n?w0(r.rank,n,pn()):null,activation:e});{let o=r.shape.slice(),s=o.pop();r=D(r,[-1,s]);let i=t.shape.slice(),a=i.pop(),u=i.pop(),l=[...i,a],c=Array.from({length:t.rank},(d,h)=>h===0?t.rank-2:h<=t.rank-2?h-1:h);t=D(Ot(t,c),[u,-1]);let p=[...o,...l],m=!1,f=!1;return D(au.matMul({a:r,b:t,transposeA:m,transposeB:f,bias:n?w0(r.rank,n,pn()):null,activation:e}),p)}}function Sy(r,t,e){return B(()=>(Array.isArray(t)?t=Le(t,"int32"):t=J(t,"int32"),Oi(r,t,e)))}function lc(r){return R(r,r)}function w0(r,t,e){let n=t.shape;if(t.rank!==1&&t.rank!==r)throw new z(`Unexpected bias dimensions: ${t.rank}; expected it to be 1 or ${r}`);if(r===5){if(e==="channelsFirst")return n.length===1?D(t,[1,n[0],1,1,1]):D(t,[1,n[3],n[0],n[1],n[2]]);if(e==="channelsLast")return n.length===1?D(t,[1,1,1,1,n[0]]):D(t,[1].concat(n))}else if(r===4){if(e==="channelsFirst")return n.length===1?D(t,[1,n[0],1,1]):D(t,[1,n[2],n[0],n[1]]);if(e==="channelsLast")return n.length===1?D(t,[1,1,1,n[0]]):D(t,[1].concat(n))}else if(r===3){if(e==="channelsFirst")return n.length===1?D(t,[1,n[0],1]):D(t,[1,n[1],n[0]]);if(e==="channelsLast")return n.length===1?D(t,[1,1,n[0]]):D(t,[1].concat(n))}else if(r<3)return t;throw new z(`Unsupported input rank by biasAdd: ${t.rank}`)}function mn(r,t,e){return B(()=>(e==null&&(e=pn()),Re(e),X(r,w0(r.rank,t,e))))}function _$(r,t=1){if(t!==1)throw new vt(`Support for alpha values other than 1 (${t}) is not implemented yet.`);return Ri(r)}function A$(r){return B(()=>pt(r,X(Ee(r),1)))}function Ny(r,t,e,n){return B(()=>n0(r,t,e,n))}function $$(r){return B(()=>{let t=X(.5,R(.2,r));return Cr(t,0,1)})}function gu(r,t,e=!1){return e?r():t()}var D$=["fanIn","fanOut","fanAvg"],R$=["normal","uniform","truncatedNormal"];function y5(r){Vi(D$,"FanMode",r)}function b5(r){Vi(R$,"Distribution",r)}var fn=class extends Q.Serializable{fromConfigUsesCustomObjects(){return!1}getConfig(){return{}}},km=class extends fn{apply(t,e){return Ne(t,e)}};km.className="Zeros";Q.registerClass(km);var xu=class extends fn{apply(t,e){return lr(t,e)}};xu.className="Ones";Q.registerClass(xu);var Tm=class extends fn{constructor(t){if(super(),typeof t!="object")throw new z(`Expected argument of type ConstantConfig but got ${t}`);if(t.value===void 0)throw new z(`config must have value set but got ${t}`);this.value=t.value}apply(t,e){return B(()=>R(mt(this.value),lr(t,e)))}getConfig(){return{value:this.value}}};Tm.className="Constant";Q.registerClass(Tm);var Em=class extends fn{constructor(t){super(),this.DEFAULT_MINVAL=-.05,this.DEFAULT_MAXVAL=.05,this.minval=t.minval||this.DEFAULT_MINVAL,this.maxval=t.maxval||this.DEFAULT_MAXVAL,this.seed=t.seed}apply(t,e){return Li(t,this.minval,this.maxval,e)}getConfig(){return{minval:this.minval,maxval:this.maxval,seed:this.seed}}};Em.className="RandomUniform";Q.registerClass(Em);var _m=class extends fn{constructor(t){super(),this.DEFAULT_MEAN=0,this.DEFAULT_STDDEV=.05,this.mean=t.mean||this.DEFAULT_MEAN,this.stddev=t.stddev||this.DEFAULT_STDDEV,this.seed=t.seed}apply(t,e){if(e=e||"float32",e!=="float32"&&e!=="int32")throw new vt(`randomNormal does not support dType ${e}.`);return Nm(t,this.mean,this.stddev,e,this.seed)}getConfig(){return{mean:this.mean,stddev:this.stddev,seed:this.seed}}};_m.className="RandomNormal";Q.registerClass(_m);var Am=class extends fn{constructor(t){super(),this.DEFAULT_MEAN=0,this.DEFAULT_STDDEV=.05,this.mean=t.mean||this.DEFAULT_MEAN,this.stddev=t.stddev||this.DEFAULT_STDDEV,this.seed=t.seed}apply(t,e){if(e=e||"float32",e!=="float32"&&e!=="int32")throw new vt(`truncatedNormal does not support dType ${e}.`);return ym(t,this.mean,this.stddev,e,this.seed)}getConfig(){return{mean:this.mean,stddev:this.stddev,seed:this.seed}}};Am.className="TruncatedNormal";Q.registerClass(Am);var $m=class extends fn{constructor(t){super(),this.gain=t.gain!=null?t.gain:1}apply(t,e){return B(()=>{if(t.length!==2||t[0]!==t[1])throw new z("Identity matrix initializer can only be used for 2D square matrices.");return R(this.gain,Yu(t[0]))})}getConfig(){return{gain:this.gain}}};$m.className="Identity";Q.registerClass($m);function w5(r,t="channelsLast"){let e,n;if(Re(t),r.length===2)e=r[0],n=r[1];else if([3,4,5].indexOf(r.length)!==-1){if(t==="channelsFirst"){let o=So(r,2);e=r[1]*o,n=r[0]*o}else if(t==="channelsLast"){let o=So(r,0,r.length-2);e=r[r.length-2]*o,n=r[r.length-1]*o}}else{let o=So(r);e=Math.sqrt(o),n=Math.sqrt(o)}return[e,n]}var Hr=class extends fn{constructor(t){if(super(),t.scale<0)throw new z(`scale must be a positive float. Got: ${t.scale}`);this.scale=t.scale==null?1:t.scale,this.mode=t.mode==null?"fanIn":t.mode,y5(this.mode),this.distribution=t.distribution==null?"normal":t.distribution,b5(this.distribution),this.seed=t.seed}apply(t,e){let n=w5(t),o=n[0],s=n[1],i=this.scale;if(this.mode==="fanIn"?i/=Math.max(1,o):this.mode==="fanOut"?i/=Math.max(1,s):i/=Math.max(1,(o+s)/2),this.distribution==="normal"){let a=Math.sqrt(i);if(e=e||"float32",e!=="float32"&&e!=="int32")throw new vt(`${this.getClassName()} does not support dType ${e}.`);return ym(t,0,a,e,this.seed)}else{let a=Math.sqrt(3*i);return Li(t,-a,a,e)}}getConfig(){return{scale:this.scale,mode:this.mode,distribution:this.distribution,seed:this.seed}}};Hr.className="VarianceScaling";Q.registerClass(Hr);var uc=class extends Hr{constructor(t){super({scale:1,mode:"fanAvg",distribution:"uniform",seed:t==null?null:t.seed})}getClassName(){return Hr.className}};uc.className="GlorotUniform";Q.registerClass(uc);var cc=class extends Hr{constructor(t){super({scale:1,mode:"fanAvg",distribution:"normal",seed:t==null?null:t.seed})}getClassName(){return Hr.className}};cc.className="GlorotNormal";Q.registerClass(cc);var pc=class extends Hr{constructor(t){super({scale:2,mode:"fanIn",distribution:"normal",seed:t==null?null:t.seed})}getClassName(){return Hr.className}};pc.className="HeNormal";Q.registerClass(pc);var mc=class extends Hr{constructor(t){super({scale:2,mode:"fanIn",distribution:"uniform",seed:t==null?null:t.seed})}getClassName(){return Hr.className}};mc.className="HeUniform";Q.registerClass(mc);var fc=class extends Hr{constructor(t){super({scale:1,mode:"fanIn",distribution:"normal",seed:t==null?null:t.seed})}getClassName(){return Hr.className}};fc.className="LeCunNormal";Q.registerClass(fc);var dc=class extends Hr{constructor(t){super({scale:1,mode:"fanIn",distribution:"uniform",seed:t==null?null:t.seed})}getClassName(){return Hr.className}};dc.className="LeCunNormal";Q.registerClass(dc);var Dm=class extends fn{constructor(t){if(super(),this.DEFAULT_GAIN=1,this.gain=t.gain==null?this.DEFAULT_GAIN:t.gain,this.seed=t.seed,this.seed!=null)throw new vt("Random seed is not implemented for Orthogonal Initializer yet.")}apply(t,e){return B(()=>{if(t.length<2)throw new vt("Shape must be at least 2D.");t[0]*t[1]>2e3&&console.warn(`Orthogonal initializer is being called on a matrix with more than 2000 (${t[0]*t[1]}) elements: Slowness may result.`);let n=t[0]>t[1]?[t[1],t[0]]:t,o=Nm(n,0,1,"float32"),s=i0.gramSchmidt(o);return t[0]>t[1]&&(s=Ot(s)),R(this.gain,s)})}getConfig(){return{gain:this.gain,seed:this.seed}}};Dm.className="Orthogonal";Q.registerClass(Dm);var F$={constant:"Constant",glorotNormal:"GlorotNormal",glorotUniform:"GlorotUniform",heNormal:"HeNormal",heUniform:"HeUniform",identity:"Identity",leCunNormal:"LeCunNormal",leCunUniform:"LeCunUniform",ones:"Ones",orthogonal:"Orthogonal",randomNormal:"RandomNormal",randomUniform:"RandomUniform",truncatedNormal:"TruncatedNormal",varianceScaling:"VarianceScaling",zeros:"Zeros"};function O$(r,t={}){return Bi(r,Q.SerializationMap.getMap().classNameMap,t,"initializer")}function ke(r){return Im(r)}function de(r){if(typeof r=="string"){let t=r in F$?F$[r]:r;if(t==="GlorotNormal")return new cc;if(t==="GlorotUniform")return new uc;if(t==="HeNormal")return new pc;if(t==="HeUniform")return new mc;if(t==="LeCunNormal")return new fc;if(t==="LeCunUniform")return new dc;{let e={};return e.className=t,e.config={},O$(e)}}else return r instanceof fn?r:O$(r)}function ky(r){return Array.isArray(r)&&Array.isArray(r[0])}function Rm(r){return r.length===0?[]:Array.isArray(r[0])?r:[r]}function At(r){let t;if(Array.isArray(r)){if(r.length!==1)throw new z(`Expected Tensor length to be 1; got ${r.length}`);t=r[0]}else t=r;return t}function Jt(r){if(Array.isArray(r)&&Array.isArray(r[0])){if(r.length===1)return r=r,r[0];throw new z(`Expected exactly 1 Shape; got ${r.length}`)}else return r}function Fm(r){let t=0;for(let e of r)e.shape.length===0?t+=1:t+=e.shape.reduce((n,o)=>n*o);return t}var L$="Variable",gh=class{constructor(t,e="float32",n=L$,o=!0,s=null){this.dtype=e==null?"float32":e,this.shape=t.shape,this.id=by(),n=n==null?L$:n,this.originalName=wy(n),this.name=Cy(this.originalName),this.trainable_=o,this.constraint=s,this.val=ey(t,this.trainable_,this.name,this.dtype)}read(){return this.assertNotDisposed(),this.val}write(t){return this.assertNotDisposed(),I5(this.val,t),this.val.id!==t.id&&(this.val.assign(t),this.constraint!=null&&this.val.assign(this.constraint.apply(this.val))),this}dispose(){this.assertNotDisposed(),this.val.dispose()}assertNotDisposed(){if(this.val.isDisposed)throw new Error(`LayersVariable ${this.name} is already disposed.`)}get trainable(){return this.trainable_}set trainable(t){this.trainable_=t,this.val.trainable=t}};function I5(r,t){if(r.shape.toString()!==t.shape.toString())throw new Error("Shape mismatch: "+JSON.stringify(r.shape)+" vs. "+JSON.stringify(t.shape))}function xh(r){return r.map(t=>t.read())}function Om(r){r.forEach(t=>{t[0].write(t[1])})}var ye=class{constructor(t){this.dtype=t.dtype,this.shape=t.shape,t.shape!=null?this.ndim=t.shape.length:this.ndim=t.ndim,this.maxNDim=t.maxNDim,this.minNDim=t.minNDim,this.axes=t.axes||{}}},Jr=class{constructor(t,e,n,o,s,i,a){this.dtype=t,this.shape=e,this.sourceLayer=n,this.inputs=o,this.callArgs=s,this.outputTensorIndex=a,this.id=by(),i!=null&&(this.originalName=wy(i),this.name=Cy(this.originalName)),this.rank=e.length}},v5=0,rl=class{constructor(t,e){this.callArgs=e,this.id=v5++,this.outboundLayer=t.outboundLayer,this.inboundLayers=t.inboundLayers,this.nodeIndices=t.nodeIndices,this.tensorIndices=t.tensorIndices,this.inputTensors=t.inputTensors,this.outputTensors=t.outputTensors,this.inputMasks=t.inputMasks,this.outputMasks=t.outputMasks,this.inputShapes=t.inputShapes,this.outputShapes=t.outputShapes;for(let n of t.inboundLayers)n!=null&&n.outboundNodes.push(this);t.outboundLayer.inboundNodes.push(this)}getConfig(){let t=[];for(let e of this.inboundLayers)e!=null?t.push(e.name):t.push(null);return{outboundLayer:this.outboundLayer?this.outboundLayer.name:null,inboundLayers:t,nodeIndices:this.nodeIndices,tensorIndices:this.tensorIndices}}},S5=0,Rt=class extends Q.Serializable{constructor(t={}){super(),this._callHook=null,this._addedWeightNames=[],this._stateful=!1,this.id=S5++,this.activityRegularizer=null,this.inputSpec=null,this.supportsMasking=!1,this._trainableWeights=[],this._nonTrainableWeights=[],this._losses=[],this._updates=[],this._built=!1,this.inboundNodes=[],this.outboundNodes=[];let e=t.name;if(!e){let n=this.getClassName();e=Io(n)+"_"+hu(n)}if(this.name=e,this.trainable_=t.trainable==null?!0:t.trainable,t.inputShape!=null||t.batchInputShape!=null){let n;if(t.batchInputShape!=null)n=t.batchInputShape;else if(t.inputShape!=null){let s=null;t.batchSize!=null&&(s=t.batchSize),n=[s].concat(t.inputShape)}this.batchInputShape=n;let o=t.dtype;o==null&&(o=t.inputDType),o==null&&(o="float32"),this.dtype=o}t.weights!=null?this.initialWeights=t.weights:this.initialWeights=null,this._refCount=null,this.fastWeightInitDuringBuild=!1}static nodeKey(t,e){return t.name+"_ib-"+e.toString()}getNodeAtIndex(t,e){if(this.inboundNodes.length===0)throw new Ur(`The layer has never been called and thus has no defined ${e}.`);if(this.inboundNodes.length<=t)throw new z(`Asked to get ${e} at node ${t}, but the layer has only ${this.inboundNodes.length} inbound nodes.`);return this.inboundNodes[t]}getInputAt(t){return Sr(this.getNodeAtIndex(t,"input").inputTensors)}getOutputAt(t){return Sr(this.getNodeAtIndex(t,"output").outputTensors)}get input(){if(this.inboundNodes.length>1)throw new vn(`Layer ${this.name} has multiple inbound nodes, hence the notion of "layer input" is ill-defined. Use \`getInputAt(nodeIndex)\` instead.`);if(this.inboundNodes.length===0)throw new vn(`Layer ${this.name} is not connected, no input to return.`);return Sr(this.getNodeAtIndex(0,"input").inputTensors)}get output(){if(this.inboundNodes.length===0)throw new vn(`Layer ${this.name} has no inbound nodes.`);if(this.inboundNodes.length>1)throw new vn(`Layer ${this.name} has multiple inbound nodes, hence the notion of "layer output" is ill-defined. Use \`getOutputAt(nodeIndex)\` instead.`);return Sr(this.getNodeAtIndex(0,"output").outputTensors)}get losses(){return this._losses}calculateLosses(){return this.losses.map(t=>t())}get updates(){return this._updates}get built(){return this._built}set built(t){this._built=t}get trainable(){return this.trainable_}set trainable(t){this._trainableWeights.forEach(e=>e.trainable=t),this.trainable_=t}get trainableWeights(){return this.trainable_?this._trainableWeights.filter(t=>t.trainable):[]}set trainableWeights(t){this._trainableWeights=t}get nonTrainableWeights(){return this.trainable?this._trainableWeights.filter(t=>!t.trainable).concat(this._nonTrainableWeights):this._trainableWeights.concat(this._nonTrainableWeights)}set nonTrainableWeights(t){this._nonTrainableWeights=t}get weights(){return this.trainableWeights.concat(this.nonTrainableWeights)}get stateful(){return this._stateful}resetStates(){if(!this.stateful)throw new Error("Cannot call the resetStates() method of a non-stateful Layer object.")}assertInputCompatibility(t){if(t=xe(t),this.inputSpec==null||this.inputSpec.length===0)return;let e=xe(this.inputSpec);if(t.length!==e.length)throw new z(`Layer ${this.name} expects ${e.length} inputs, but it received ${t.length} input tensors. Input received: ${t}`);for(let n=0;n<t.length;n++){let o=t[n],s=e[n];if(s==null)continue;let i=o.rank;if(s.ndim!=null&&i!==s.ndim)throw new z(`Input ${n} is incompatible with layer ${this.name}: expected ndim=${s.ndim}, found ndim=${i}`);if(s.maxNDim!=null&&i>s.maxNDim)throw new z(`Input ${n} is incompatible with layer ${this.name}: expected max_ndim=${s.maxNDim}, found ndim=${i}`);if(s.minNDim!=null&&i<s.minNDim)throw new z(`Input ${n} is incompatible with layer ${this.name}: expected min_ndim=${s.minNDim}, found ndim=${i}.`);if(s.dtype!=null&&o.dtype!==s.dtype)throw new z(`Input ${n} is incompatible with layer ${this.name} : expected dtype=${s.dtype}, found dtype=${o.dtype}.`);if(s.axes){let a=o.shape;for(let u in s.axes){let l=Number(u),c=s.axes[u],p=l>=0?a[l]:a[a.length+l];if(c!=null&&[c,null].indexOf(p)===-1)throw new z(`Input ${n} is incompatible with layer ${this.name}: expected axis ${l} of input shape to have value ${c} but got shape ${a}.`)}}if(s.shape!=null)for(let a=0;a<s.shape.length;++a){let u=s.shape[a],l=o.shape[a];if(u!=null&&l!=null&&u!==l)throw new z(`Input ${n} is incompatible with layer ${this.name}: expected shape=${s.shape}, found shape=${o.shape}.`)}}}call(t,e){return t}invokeCallHook(t,e){this._callHook!=null&&this._callHook(t,e)}setCallHook(t){this._callHook=t}clearCallHook(){this._callHook=null}apply(t,e){e=e||{},this.assertNotDisposed();let n=xe(t),o=!0;for(let i of n)if(!(i instanceof Jr)){o=!1;break}let s=!0;for(let i of n)if(i instanceof Jr){s=!1;break}if(o===s)throw new z("Arguments to apply() must be all SymbolicTensors or all Tensors");return Ws(this.name,()=>{if(!this.built){this.assertInputCompatibility(t);let i=[];for(let a of xe(t))i.push(a.shape);this.build(Sr(i)),this.built=!0,this.initialWeights&&this.setWeights(this.initialWeights),this._refCount===null&&s&&(this._refCount=1)}if(this.assertInputCompatibility(t),s){let i=this.call(t,e),a=xe(i),u=[];for(let l of a)n.indexOf(l)!==-1&&(l=l.clone()),u.push(l);if(i=Sr(u),this.activityRegularizer!=null)throw new vt("Layer invocation in the presence of activity regularizer(s) is not supported yet.");return i}else{let i=N5(t),a=this.computeOutputShape(i),u,l=k5(t);if(this.warnOnIncompatibleInputShape(Array.isArray(t)?i[0]:i),a!=null&&a.length>0&&Array.isArray(a[0])?u=a.map((c,p)=>new Jr(l,c,this,xe(t),e,this.name,p)):u=new Jr(l,a,this,xe(t),e,this.name),this.addInboundNode(t,u,null,null,i,a,e),this._refCount++,this.activityRegularizer!=null)throw new vt("Layer invocation in the presence of activity regularizer(s) is not supported yet.");return u}})}warnOnIncompatibleInputShape(t){if(this.batchInputShape!=null)if(t.length!==this.batchInputShape.length)console.warn(`The rank of the input tensor provided (shape: ${JSON.stringify(t)}) does not match that of the batchInputShape (${JSON.stringify(this.batchInputShape)}) of the layer ${this.name}`);else{let e=!1;this.batchInputShape.forEach((n,o)=>{n!=null&&t[o]!=null&&t[o]!==n&&(e=!0)}),e&&console.warn(`The shape of the input tensor (${JSON.stringify(t)}) does not match the expectation of layer ${this.name}: ${JSON.stringify(this.batchInputShape)}`)}}get outputShape(){if(this.inboundNodes==null||this.inboundNodes.length===0)throw new vn(`The layer ${this.name} has never been called and thus has no defined output shape.`);let t=[];for(let e of this.inboundNodes){let n=JSON.stringify(e.outputShapes);t.indexOf(n)===-1&&t.push(n)}if(t.length===1){let e=this.inboundNodes[0].outputShapes;return Array.isArray(e)&&Array.isArray(e[0])&&e.length===1?e[0]:e}else throw new vn(`The layer ${this.name} has multiple inbound nodes with different output shapes. Hence the notion of "output shape" is ill-defined for the layer.`)}countParams(){if(!this.built)throw new Ur(`You tried to call countParams() on ${this.name}, but the layer is not built yet. Build it first by calling build(batchInputShape).`);return Fm(this.weights)}build(t){this.built=!0}getWeights(t=!1){return xh(t?this.trainableWeights:this.weights)}setWeights(t){B(()=>{let e=this.weights;if(e.length!==t.length)throw new z(`You called setWeights(weights) on layer "${this.name}" with a weight list of length ${t.length}, but the layer was expecting ${e.length} weights. Provided weights: ${t}...`);if(e.length===0)return;let n=[],o=xh(e);for(let s=0;s<o.length;++s){let i=o[s],a=e[s],u=t[s];if(!y.arraysEqual(i.shape,u.shape))throw new z(`Layer weight shape ${i.shape} not compatible with provided weight shape ${u.shape}`);n.push([a,u])}Om(n)})}addWeight(t,e,n,o,s,i,a,u){if(this._addedWeightNames.indexOf(t)!==-1)throw new z(`Duplicate weight name ${t} for layer ${this.name}`);this._addedWeightNames.push(t),n==null&&(n="float32"),this.fastWeightInitDuringBuild&&(o=u!=null?u():de("zeros"));let l=o.apply(e,n),c=new gh(l,n,t,i,a);return l.dispose(),s!=null&&this.addLoss(()=>s.apply(c.read())),i==null&&(i=!0),i?this._trainableWeights.push(c):this._nonTrainableWeights.push(c),c}setFastWeightInitDuringBuild(t){this.fastWeightInitDuringBuild=t}addLoss(t){t==null||Array.isArray(t)&&t.length===0||(t=xe(t),this._losses!==void 0&&this._losses!==null&&this.losses.push(...t))}computeOutputShape(t){return t}computeMask(t,e){if(!this.supportsMasking){if(e!=null)if(Array.isArray(e))e.forEach(n=>{if(n!=null)throw new TypeError(`Layer ${this.name} does not support masking, but was passed an inputMask.`)});else throw new TypeError(`Layer ${this.name} does not support masking, but was passed an inputMask.`);return null}return e}addInboundNode(t,e,n,o,s,i,a=null){let u=xe(t);e=xe(e),n=xe(n),o=xe(o),s=Rm(s),i=Rm(i);let l=[],c=[],p=[];for(let m of u)l.push(m.sourceLayer),c.push(m.nodeIndex),p.push(m.tensorIndex);new rl({outboundLayer:this,inboundLayers:l,nodeIndices:c,tensorIndices:p,inputTensors:u,outputTensors:e,inputMasks:n,outputMasks:o,inputShapes:s,outputShapes:i},a);for(let m=0;m<e.length;m++)e[m].sourceLayer=this,e[m].nodeIndex=this.inboundNodes.length-1,e[m].tensorIndex=m}getConfig(){let t={name:this.name,trainable:this.trainable};return this.batchInputShape!=null&&(t.batchInputShape=this.batchInputShape),this.dtype!=null&&(t.dtype=this.dtype),t}disposeWeights(){return this.weights.forEach(t=>t.dispose()),this.weights.length}assertNotDisposed(){if(this._refCount===0)throw new Error(`Layer '${this.name}' is already disposed.`)}dispose(){if(!this.built)throw new Error(`Cannot dispose Layer ${this.name} because it has not been built yet.`);if(this._refCount===null)throw new Error(`Cannot dispose Layer ${this.name} because it has not been used yet.`);this.assertNotDisposed();let t=0;return--this._refCount===0&&(t=this.disposeWeights()),{refCountAfterDispose:this._refCount,numDisposedVariables:t}}};function N5(r){r=xe(r);let t=[];for(let e of r)t.push(e.shape);return Sr(t)}function k5(r){return"float32"}function I0(r,t,e){if((t==null||e!=null&&e>0)&&(t=r.sourceLayer,e=r.nodeIndex),t.inboundNodes.length===0)return[r];{let n=t.inboundNodes[e];if(n.inboundLayers.length===0)return n.inputTensors;{let o=[];for(let s=0;s<n.inboundLayers.length;s++){let i=n.inputTensors[s],a=n.inboundLayers[s],u=n.nodeIndices[s],l=I0(i,a,u);for(let c of l)o.indexOf(c)===-1&&o.push(c)}return o}}}var Hs=class extends Rt{constructor(t){if(super({dtype:t.dtype,name:t.name!=null?t.name:hu("input").toString()}),t.batchSize==null&&(t.batchSize=null),t.sparse==null&&(t.sparse=!1),this.trainable=!1,this.built=!0,this.sparse=t.sparse,t.inputShape!=null&&t.batchInputShape!=null)throw new z("Only provide the inputShape OR batchInputShape argument to inputLayer, not both at the same time.");let e=t.batchInputShape;if(e==null){if(t.inputShape==null)throw new z("An InputLayer should be passed either a `batchInputShape` or an `inputShape`.");e=[t.batchSize].concat(t.inputShape)}else if(t.batchSize!=null)throw new z("Cannot specify batchSize if batchInputShape is specified when creating an InputLayer.");let n=t.dtype||"float32";this.batchInputShape=e,this.dtype=n,this.inputSpec=[{shape:e}];let o=new Jr(this.dtype,this.batchInputShape,this,[],{},this.name);o.nodeIndex=0,o.tensorIndex=0,new rl({outboundLayer:this,inboundLayers:[],nodeIndices:[],tensorIndices:[],inputTensors:[o],outputTensors:[o],inputMasks:[null],outputMasks:[null],inputShapes:[e],outputShapes:[e]})}apply(t,e){throw new z(`Cannot pass any input to an InputLayer's apply() method. InputLayer name: ${this.name}`)}dispose(){return{refCountAfterDispose:this._refCount,numDisposedVariables:0}}getConfig(){return{batchInputShape:this.batchInputShape,dtype:this.dtype,sparse:this.sparse,name:this.name}}};Hs.className="InputLayer";Q.registerClass(Hs);function Ty(r){if(r.batchShape==null&&r.shape==null)throw new Error("Please provide to Input either a `shape` or a `batchShape` argument. Note that `shape` does not include the batch dimension.");if(r.batchShape!=null&&r.shape!=null)throw new z("Please provide either a `shape` or `batchShape` argument to Input, but not both.");let t=r.batchShape;r.shape!=null&&t==null&&(t=[null].concat(r.shape));let e=r.dtype;return e==null&&(e="float32"),new Hs({batchInputShape:t,name:r.name,dtype:e,sparse:r.sparse}).inboundNodes[0].outputTensors[0]}function T5(r,t){if(r.dtype==null||r.dtype===t.dtype)return t;try{return J(t,r.dtype)}catch(e){throw new z(`The dtype of the feed (${t.dtype}) can not be cast to the dtype of the key '${r.name}' (${r.dtype}).`)}}var ko=class{constructor(t){if(this.id2Value={},this.id2Mask={},this.name2Id={},t instanceof ko)for(let e in t.id2Value)this.id2Value[e]=t.id2Value[e],e in t.id2Mask&&(this.id2Mask[e]=t.id2Mask[e]);else{if(t==null)return;for(let e of t)this.add(e.key,e.value)}}add(t,e,n){if(this.id2Value[t.id]==null)this.id2Value[t.id]=T5(t,e),this.name2Id[t.name]=t.id,n!=null&&(this.id2Mask[t.id]=n);else throw new z(`Duplicate key: name=${t.name}, id=${t.id}`);return this}addFeed(t){this.add(t.key,t.value)}hasKey(t){return this.id2Value[t.id]!=null}names(){return Object.keys(this.name2Id)}getValue(t){if(t instanceof Jr){if(this.id2Value[t.id]==null)throw new z(`Nonexistent key: ${t.name}`);return this.id2Value[t.id]}else{let e=this.name2Id[t];if(e==null)throw new z(`Feed dict has no SymbolicTensor name: ${t}`);return this.id2Value[e]}}getMask(t){if(t instanceof Jr){if(this.id2Value[t.id]==null)throw new z(`Nonexistent key: ${t.name}`);return this.id2Mask[t.id]}else{let e=this.name2Id[t];if(e==null)throw new z(`Feed dict has no SymbolicTensor name: ${t}`);return this.id2Mask[e]}}disposeMasks(){this.id2Mask!=null&&St(this.id2Mask)}},Ey=new mh,_y=new mh;function z$(r){Ey!=null&&Ey.setMaxEntries(r),_y!=null&&_y.setMaxEntries(r)}function hc(r,t,e,n){let o=e==null?!1:e.training,s=Array.isArray(r),i=s?r:[r],a=i.map(d=>d.name),u=[],l=t.names();for(let d of a)l.indexOf(d)!==-1?u.push(t.getValue(d)):u.push(null);n!=null&&(n.maxNumTensors=-1/0,n.minNumTensors=1/0);let c=a.join(",")+"|"+t.names().sort().join(","),p=Ey.get(c),m;if(p==null){let d=E5(i,t);p=d.sorted,m=d.recipientCounts,Ey.put(c,p),_y.put(c,m)}m={},o||Object.assign(m,_y.get(c));let f=new ko(t);for(let d=0;d<p.length;++d){if(n!=null){let F=nh().numTensors;F>n.maxNumTensors&&(n.maxNumTensors=F),F<n.minNumTensors&&(n.minNumTensors=F)}let h=p[d],g=h.sourceLayer;if(g instanceof Hs)continue;let x=[],b=[],w=[],C=!1;for(let F of h.inputs){let P=f.getValue(F),V=f.getMask(F);x.push(P),b.push(V),V!=null&&(C=!0),o||(m[F.name]--,m[F.name]===0&&!t.hasKey(F)&&a.indexOf(F.name)===-1&&!P.isDisposed&&F.sourceLayer.stateful!==!0&&w.push(P))}C&&(e=e||{},e.mask=b[0]);let N=xe(g.apply(x,e)),_=null;g.supportsMasking&&(_=g.computeMask(x,b));let A=A5(h),$=Array.isArray(A)?A:[A];for(let F=0;F<$.length;++F){f.hasKey($[F])||f.add($[F],N[F],Array.isArray(_)?_[0]:_);let P=a.indexOf($[F].name);P!==-1&&(u[P]=N[F])}o||St(w)}return f.disposeMasks(),s?u:u[0]}function E5(r,t){y.assert(r!=null&&r.length>0,()=>"Expected at least one fetch, got none");let e=[],n={};if(r.length===1){let o=M$(r[0],t);e=o.sorted,n=o.recipientMap}else{let o=new Set;for(let s of r){let{sorted:i,recipientMap:a}=M$(s,t);for(let u of i)o.has(u.name)||(e.push(u),o.add(u.name));for(let u in a)n[u]==null&&(n[u]=new Set),a[u].forEach(l=>n[u].add(l))}}return{sorted:e,recipientCounts:_5(n)}}function _5(r){let t={};for(let e in r)t[e]=r[e].size;return t}function M$(r,t){let e=new Set,n=[],o={};for(let a of t.names())e.add(a);let s=[],i=[];for(s.push(r);s.length>0;){let a=s[s.length-1];if(e.has(a.name)){s.pop();continue}let u=i[i.length-1]===s.length-1;if(a.inputs.length===0||u)s.pop(),n.push(a),e.add(a.name),u&&i.pop();else{i.push(s.length-1);for(let l of a.inputs)o[l.name]==null&&(o[l.name]=new Set),o[l.name].add(a.name),!e.has(l.name)&&s.push(l)}}return{sorted:n,recipientMap:o}}function A5(r){let t;if(r.sourceLayer.inboundNodes.length===1)t=r.sourceLayer.output;else{let e=null;for(let n=0;n<r.sourceLayer.inboundNodes.length;++n)for(let o of r.sourceLayer.inboundNodes[n].outputTensors)if(o.id===r.id){e=n;break}t=r.sourceLayer.getOutputAt(e)}return t}var $5=M();$5.registerFlag("TOPOLOGICAL_SORT_CACHE_MAX_ENTRIES",()=>100,z$);var G$={};Gt(G$,{maxNorm:()=>D5,minMaxNorm:()=>O5,nonNeg:()=>F5,unitNorm:()=>R5});function v0(r,t){return B(()=>ve(ft(R(r,r),t,!0)))}var gc=class extends Q.Serializable{getConfig(){return{}}},Pm=class extends gc{constructor(t){super(),this.defaultMaxValue=2,this.defaultAxis=0,this.maxValue=t.maxValue!=null?t.maxValue:this.defaultMaxValue,this.axis=t.axis!=null?t.axis:this.defaultAxis}apply(t){return B(()=>{let e=v0(t,this.axis),n=Cr(e,0,this.maxValue);return R(t,pt(n,X(sr(),e)))})}getConfig(){return{maxValue:this.maxValue,axis:this.axis}}};Pm.className="MaxNorm";Q.registerClass(Pm);var Lm=class extends gc{constructor(t){super(),this.defaultAxis=0,this.axis=t.axis!=null?t.axis:this.defaultAxis}apply(t){return B(()=>pt(t,X(sr(),v0(t,this.axis))))}getConfig(){return{axis:this.axis}}};Lm.className="UnitNorm";Q.registerClass(Lm);var Mm=class extends gc{apply(t){return Rr(t)}};Mm.className="NonNeg";Q.registerClass(Mm);var zm=class extends gc{constructor(t){super(),this.defaultMinValue=0,this.defaultMaxValue=1,this.defaultRate=1,this.defaultAxis=0,this.minValue=t.minValue!=null?t.minValue:this.defaultMinValue,this.maxValue=t.maxValue!=null?t.maxValue:this.defaultMaxValue,this.rate=t.rate!=null?t.rate:this.defaultRate,this.axis=t.axis!=null?t.axis:this.defaultAxis}apply(t){return B(()=>{let e=v0(t,this.axis),n=X(R(this.rate,Cr(e,this.minValue,this.maxValue)),R(1-this.rate,e));return R(t,pt(n,X(sr(),e)))})}getConfig(){return{minValue:this.minValue,maxValue:this.maxValue,rate:this.rate,axis:this.axis}}};zm.className="MinMaxNorm";Q.registerClass(zm);var B$={maxNorm:"MaxNorm",minMaxNorm:"MinMaxNorm",nonNeg:"NonNeg",unitNorm:"UnitNorm"};function Me(r){return Im(r)}function V$(r,t={}){return Bi(r,Q.SerializationMap.getMap().classNameMap,t,"constraint")}function ze(r){if(r==null)return null;if(typeof r=="string"){let e={className:r in B$?B$[r]:r,config:{}};return V$(e)}else return r instanceof gc?r:V$(r)}function D5(r){return new Pm(r)}function R5(r){return new Lm(r)}function F5(){return new Mm}function O5(r){return new zm(r)}var W$={};Gt(W$,{constant:()=>M5,glorotNormal:()=>H5,glorotUniform:()=>U5,heNormal:()=>q5,heUniform:()=>K5,identity:()=>G5,leCunNormal:()=>j5,leCunUniform:()=>X5,ones:()=>L5,orthogonal:()=>Y5,randomNormal:()=>B5,randomUniform:()=>z5,truncatedNormal:()=>V5,varianceScaling:()=>W5,zeros:()=>P5});function P5(){return new km}function L5(){return new xu}function M5(r){return new Tm(r)}function z5(r){return new Em(r)}function B5(r){return new _m(r)}function V5(r){return new Am(r)}function G5(r){return new $m(r)}function W5(r){return new Hr(r)}function U5(r){return new uc(r)}function H5(r){return new cc(r)}function q5(r){return new pc(r)}function K5(r){return new mc(r)}function j5(r){return new fc(r)}function X5(r){return new dc(r)}function Y5(r){return new Dm(r)}var CD={};Gt(CD,{Layer:()=>Rt,RNN:()=>Nn,RNNCell:()=>il,activation:()=>pY,add:()=>wY,alphaDropout:()=>nZ,average:()=>CY,averagePooling1d:()=>L0,averagePooling2d:()=>M0,averagePooling3d:()=>z0,avgPool1d:()=>AY,avgPool2d:()=>DY,avgPool3d:()=>FY,avgPooling1d:()=>$Y,avgPooling2d:()=>RY,avgPooling3d:()=>OY,batchNormalization:()=>TY,bidirectional:()=>XY,concatenate:()=>IY,conv1d:()=>rY,conv2d:()=>nY,conv2dTranspose:()=>oY,conv3d:()=>sY,conv3dTranspose:()=>iY,convLstm2d:()=>HY,convLstm2dCell:()=>qY,cropping2D:()=>lY,dense:()=>mY,depthwiseConv2d:()=>cY,dot:()=>kY,dropout:()=>fY,elu:()=>Y8,embedding:()=>bY,flatten:()=>hY,gaussianDropout:()=>rZ,gaussianNoise:()=>eZ,globalAveragePooling1d:()=>PY,globalAveragePooling2d:()=>LY,globalMaxPool1d:()=>ZY,globalMaxPool2d:()=>JY,globalMaxPooling1d:()=>xD,globalMaxPooling2d:()=>yD,gru:()=>zY,gruCell:()=>BY,input:()=>$0,inputLayer:()=>X8,layerNormalization:()=>EY,leakyReLU:()=>J8,lstm:()=>VY,lstmCell:()=>GY,masking:()=>oZ,maxPool1d:()=>QY,maxPool2d:()=>tZ,maxPooling1d:()=>bD,maxPooling2d:()=>wD,maxPooling3d:()=>MY,maximum:()=>vY,minimum:()=>SY,multiply:()=>NY,permute:()=>yY,prelu:()=>Q8,reLU:()=>Z8,repeatVector:()=>gY,rescaling:()=>sZ,reshape:()=>xY,rnn:()=>KY,separableConv2d:()=>aY,simpleRNN:()=>WY,simpleRNNCell:()=>UY,softmax:()=>tY,spatialDropout1d:()=>dY,stackedRNNCells:()=>jY,thresholdedReLU:()=>eY,timeDistributed:()=>YY,upSampling2d:()=>uY,zeroPadding2d:()=>_Y});async function Gi(r){if(r==null)return;let t=[],e=[],n=[];for(let o in r){let s=r[o];if(typeof s!="number"){let i=s;t.push(i.data()),e.push(o),n.push(i)}}if(t.length>0){let o=await Promise.all(t);for(let s=0;s<o.length;++s)r[e[s]]=o[s][0];St(n)}}function Ay(r){if(r!=null)for(let t in r){let e=r[t];typeof e!="number"&&e.dispose()}}var U$;(function(r){r[r.SILENT=0]="SILENT",r[r.VERBOSE=1]="VERBOSE"})(U$||(U$={}));var Z5=125,nl=class{constructor(){this.validationData=null}setParams(t){this.params=t}async onEpochBegin(t,e){}async onEpochEnd(t,e){}async onBatchBegin(t,e){}async onBatchEnd(t,e){}async onTrainBegin(t){}async onTrainEnd(t){}setModel(t){}},$y=class{constructor(t,e=10){t==null&&(t=[]),this.callbacks=t,this.queueLength=e}append(t){this.callbacks.push(t)}setParams(t){for(let e of this.callbacks)e.setParams(t)}setModel(t){for(let e of this.callbacks)e.setModel(t)}async onEpochBegin(t,e){e==null&&(e={});for(let n of this.callbacks)await n.onEpochBegin(t,e)}async onEpochEnd(t,e){e==null&&(e={});for(let n of this.callbacks)await n.onEpochEnd(t,e)}async onBatchBegin(t,e){e==null&&(e={});for(let n of this.callbacks)await n.onBatchBegin(t,e)}async onBatchEnd(t,e){e==null&&(e={});for(let n of this.callbacks)await n.onBatchEnd(t,e)}async onTrainBegin(t){t==null&&(t={});for(let e of this.callbacks)await e.onTrainBegin(t)}async onTrainEnd(t){t==null&&(t={});for(let e of this.callbacks)await e.onTrainEnd(t)}},S0=class extends nl{constructor(){super()}async onEpochBegin(t){this.seen=0,this.totals={}}async onBatchEnd(t,e){e==null&&(e={});let n=e.size==null?0:e.size;this.seen+=n;for(let o in e){let s=e[o];if(typeof s=="number")this.totals.hasOwnProperty(o)||(this.totals[o]=0),this.totals[o]=this.totals[o]+s*n;else{let i;o in this.totals?i=this.totals[o]:this.totals[o]=0;let a=B(()=>X(this.totals[o],R(s,n)));this.totals[o]=a,i!=null&&i.dispose()}}}async onEpochEnd(t,e){if(e!=null)for(let n of this.params.metrics)this.totals[n]!=null&&(typeof this.totals[n]=="number"?e[n]=this.totals[n]/this.seen:B(()=>{let o=R(pt(1,this.seen),this.totals[n]);e[n]=o,this.totals[n].dispose(),De(e[n])}))}},Dy=class extends nl{async onTrainBegin(t){this.epoch=[],this.history={}}async onEpochEnd(t,e){e==null&&(e={}),this.epoch.push(t);for(let n in e)this.history[n]==null&&(this.history[n]=[]),this.history[n].push(e[n])}async syncData(){let t=[],e=[],n=[];for(let s in this.history){let i=this.history[s];for(let a=0;a<i.length;++a)if(typeof i[a]!="number"){let u=i[a];t.push(u.data()),e.push(s),n.push(a)}}let o=await Promise.all(t);for(let s=0;s<o.length;++s)this.history[e[s]][n[s]].dispose(),this.history[e[s]][n[s]]=o[s][0]}},Ry=class extends nl{constructor(t,e){if(super(),this.currentEpoch=0,this.nowFunc=t.nowFunc,this.nextFrameFunc=t.nextFrameFunc||ph,this.yieldEvery=e||"auto",this.yieldEvery==="auto"&&(this.yieldEvery=Z5),this.yieldEvery==="never"&&t.onYield!=null)throw new Error("yieldEvery is `never` but you provided an `onYield` callback. Either change `yieldEvery` or remove the callback");y.isNumber(this.yieldEvery)&&(this.maybeWait=g$(this.maybeWait.bind(this),this.yieldEvery,this.nowFunc)),this.trainBegin=t.onTrainBegin,this.trainEnd=t.onTrainEnd,this.epochBegin=t.onEpochBegin,this.epochEnd=t.onEpochEnd,this.batchBegin=t.onBatchBegin,this.batchEnd=t.onBatchEnd,this.yield=t.onYield}async maybeWait(t,e,n){let o=[];this.yield!=null&&(await Gi(n),o.push(this.yield(t,e,n))),o.push(this.nextFrameFunc()),await Promise.all(o)}async onEpochBegin(t,e){this.currentEpoch=t,this.epochBegin!=null&&(await Gi(e),await this.epochBegin(t,e))}async onEpochEnd(t,e){let n=[];this.epochEnd!=null&&(await Gi(e),n.push(this.epochEnd(t,e))),this.yieldEvery==="epoch"&&n.push(this.nextFrameFunc()),await Promise.all(n)}async onBatchBegin(t,e){this.batchBegin!=null&&(await Gi(e),await this.batchBegin(t,e))}async onBatchEnd(t,e){let n=[];this.batchEnd!=null&&(await Gi(e),n.push(this.batchEnd(t,e))),this.yieldEvery==="batch"?n.push(this.nextFrameFunc()):y.isNumber(this.yieldEvery)&&n.push(this.maybeWait(this.currentEpoch,t,e)),await Promise.all(n)}async onTrainBegin(t){this.trainBegin!=null&&(await Gi(t),await this.trainBegin(t))}async onTrainEnd(t){this.trainEnd!=null&&(await Gi(t),await this.trainEnd(t))}};function Fy(r,t){return r==null&&(r={}),r instanceof nl?[r]:Array.isArray(r)&&r[0]instanceof nl?r:xe(r).map(n=>new Ry(n,t))}var dn=class{constructor(){}static registerCallbackConstructor(t,e){y.assert(t>=0&&Number.isInteger(t),()=>`Verbosity level is expected to be an integer >= 0, but got ${t}`),dn.checkForDuplicate(e),dn.constructors[t]==null&&(dn.constructors[t]=[]),dn.constructors[t].push(e)}static checkForDuplicate(t){for(let e in dn.constructors)dn.constructors[+e].forEach(o=>{if(o===t)throw new z("Duplicate callback constructor.")})}static clear(){dn.constructors={}}static createCallbacks(t){let e=[];for(let n in dn.constructors){let o=+n;t>=o&&e.push(...dn.constructors[o])}return e.map(n=>new n)}};dn.constructors={};function Oy(r,t,e,n,o,s,i,a,u){let l=new Dy,c=[new S0,...dn.createCallbacks(t)];r!=null&&c.push(...r),c.push(l);let p=new $y(c);return p.setParams({epochs:e,initialEpoch:n,samples:o,steps:s,batchSize:i,verbose:t,doValidation:a,metrics:u}),{callbackList:p,history:l}}function hn(r,t={},e=!1){return Bi(r,Q.SerializationMap.getMap().classNameMap,t,"layer",e)}function yh(r,t){return B(()=>{r.dtype!=="float32"&&(r=J(r,"float32"));let e=ft(lc(r),t,!0),n=go(e.shape,sr()),o=ve(In(e,n));return pt(r,o)})}function Wi(r,t){return B(()=>Se(lc(ct(t,r)),-1))}function Bm(r,t){return B(()=>Se(Ee(ct(t,r)),-1))}function yu(r,t){return B(()=>{let e=ct(r,t),n=Cr(Ee(r),sr(),Number.MAX_VALUE),o=Ee(pt(e,n));return R(100,Se(o,-1))})}function J5(r,t){return B(()=>{let e=Cr(t,sr(),Number.MAX_VALUE),n=Ir(X(1,e)),o=Cr(r,sr(),Number.MAX_VALUE),s=Ir(X(1,o));return Se(lc(ct(n,s)),-1)})}function Q5(r,t){return B(()=>{let e=In(0,ct(1,R(r,t)));return Se(lc(e),-1)})}function t8(r,t){return B(()=>{let e=In(0,ct(1,R(r,t)));return Se(e,-1)})}function e8(r,t){return B(()=>{let e=ft(R(r,t),-1),n=Br(R(ct(1,r),t),-1);return In(0,X(1,ct(n,e)))})}function r8(r,t){return B(()=>{let e=Math.log(2),n=ct(t,r),o=ct(X(n,Ms(R(-2,n))),e);return Se(o,-1)})}function xc(r,t,e=!1){return B(()=>{if(e)t=ou(t);else{let n=ft(t,t.shape.length-1,!0);t=pt(t,n)}return t=Cr(t,sr(),1-sr()),Ut(ft(R(J(r,"float32"),Ir(t)),t.shape.length-1))})}function Vm(r,t,e=!1){return B(()=>{let n=J(Fi(T$(r)),"int32");t=Cr(t,sr(),1-sr());let o=t.shape,s=D(ki(n,o[o.length-1]),o);return xc(s,t,e)})}function n8(r,t){if(!y.arraysEqual(r.shape,t.shape))throw new z(`logits and labels must have the same shape, but got shapes ${JSON.stringify(r.shape)} and ${JSON.stringify(t.shape)}`);return B(()=>{let e=Rr(t),n=Ut(Ee(t));return X(ct(e,R(t,r)),Jl(er(n)))})}function Gm(r,t){return B(()=>{let e;return e=Cr(t,sr(),1-sr()),e=Ir(pt(e,ct(1,e))),Se(n8(r,e),-1)})}function o8(r,t){return B(()=>{let e=Cr(r,sr(),1),n=Cr(t,sr(),1);return ft(R(r,Ir(pt(e,n))),-1)})}function s8(r,t){return B(()=>{let e=Ir(X(sr(),t));return Se(ct(t,R(r,e)),-1)})}function wh(r,t){return B(()=>{let e=yh(r,-1),n=yh(t,-1),o=R(e,n);return Ut(ft(o,-1))})}var bh={meanSquaredError:Wi,meanAbsoluteError:Bm,meanAbsolutePercentageError:yu,meanSquaredLogarithmicError:J5,squaredHinge:Q5,hinge:t8,categoricalHinge:e8,logcosh:r8,categoricalCrossentropy:xc,sparseCategoricalCrossentropy:Vm,binaryCrossentropy:Gm,kullbackLeiblerDivergence:o8,poisson:s8,cosineProximity:wh};function Py(r){if(typeof r=="string"){if(r in bh)return bh[r];let t=`Unknown loss ${r}`;throw r.toLowerCase().includes("softmaxcrossentropy")&&(t=`Unknown loss ${r}. Use "categoricalCrossentropy" as the string name for tf.losses.softmaxCrossEntropy`),new z(t)}else return r}function Ch(r,t){return B(()=>{let e=R(.5,xr(t)),n=tl(He(t,e),r.dtype);return Se(Ar(r,n),-1)})}function Ih(r,t){return B(()=>tl(Ar(Ei(r,-1),Ei(t,-1)),"float32"))}function q$(r,t){return B(()=>J(ft(Dr(Ar(r,1),Ar(t,1))),"float32"))}function i8(r,t){return B(()=>J(ft(Dr(Ar(r,1),Ar(t,0))),"float32"))}function a8(r,t){return B(()=>J(ft(Dr(Ar(r,0),Ar(t,1))),"float32"))}function N0(r,t){return B(()=>{let e=q$(r,t),n=a8(r,t),o=X(e,n);return J(_e(He(o,0),pt(e,o),0),"float32")})}function K$(r,t){return B(()=>{let e=q$(r,t),n=i8(r,t),o=X(e,n);return J(_e(He(o,0),pt(e,o),0),"float32")})}function My(r,t){return Gm(r,t)}function zy(r,t){return r.rank===t.rank&&(r=Pn(r,[r.rank-1])),t=Ei(t,-1),t.dtype!==r.dtype&&(t=J(t,r.dtype)),J(Ar(r,t),"float32")}var l8=Wi,u8=Wi,c8=Bm,p8=Bm,m8=yu,f8=yu,vh=xc,d8=wh,k0=Vm,Ly={binaryAccuracy:Ch,categoricalAccuracy:Ih,precision:N0,categoricalCrossentropy:vh,sparseCategoricalCrossentropy:k0,mse:l8,MSE:u8,mae:c8,MAE:p8,mape:m8,MAPE:f8,cosine:d8};function j$(r){if(typeof r=="string"&&r in Ly)return Ly[r];if(typeof r!="string"&&r!=null)return r;throw new z(`Unknown metric ${r}`)}function Sh(r){if(eo(r!==null,`Unknown LossOrMetricFn ${r}`),typeof r=="string")return r;{let t;for(let e of Object.keys(bh))if(bh[e]===r){t=e;break}if(t!==void 0)return t;for(let e of Object.keys(Ly))if(Ly[e]===r){t=e;break}return t!==void 0?t:r.name}}function Y$(r){let t={Adagrad:()=>ic.adagrad(.01),Adadelta:()=>ic.adadelta(1,.95,sr()),Adam:()=>ic.adam(.001,.9,.999,sr()),Adamax:()=>ic.adamax(.002,.9,.999,sr(),0),RMSProp:()=>ic.rmsprop(.001,.9,0,sr()),SGD:()=>ic.sgd(.01)};if(t.adagrad=t.Adagrad,t.adadelta=t.Adadelta,t.adam=t.Adam,t.adamax=t.Adamax,t.rmsprop=t.RMSProp,t.sgd=t.SGD,r in t)return t[r]();throw new z(`Unknown Optimizer ${r}`)}function E0(r,t,e=!1){if(r==null||typeof r!="object"||Object.getPrototypeOf(r)!==Object.prototype||!T0(r))throw new Error("User-defined metadata is expected to be a JSON object, but is not.");if(e){let n=JSON.stringify(r);n.length>1048576&&console.warn(`User-defined metadata of model "${t}" is too large in size (length=${n.length} when serialized). It is not recommended to store such large objects in user-defined metadata. Please make sure its serialized length is <= ${1048576}.`)}}function T0(r){if(r===null)return!0;if(typeof r=="object")if(Object.getPrototypeOf(r)===Object.prototype){let t=Object.keys(r);for(let e of t)if(typeof e!="string"||!T0(r[e]))return!1;return!0}else if(Array.isArray(r)){for(let t of r)if(!T0(t))return!1;return!0}else return!1;else{let t=typeof r;return t==="string"||t==="number"||t==="boolean"}}function Z$(r,t,e,n=console.log){let o=x8(r),s=["Layer (type)","Input Shape","Output shape","Param #"];o?(t=t||90,e=e||[.32,.61,.89,1]):(t=t||115,e=e||[.24,.48,.7,.8,1]),e[e.length-1]<=1&&(e=e.map(c=>Math.floor(t*c)));let i;if(!o){s.push("Receives inputs"),i=[];for(let c in r.nodesByDepth)i.push(...r.nodesByDepth[c])}n("_".repeat(t)),By(s,e,n),n("=".repeat(t));let a=r.layers;for(let c=0;c<a.length;++c)o?y8(a[c],e,n):b8(a[c],e,i,n),n((c===a.length-1?"=":"_").repeat(t));r.checkTrainableWeightsConsistency();let u=g8(r),l=Fm(r.nonTrainableWeights);n(`Total params: ${u+l}`),n(`Trainable params: ${u}`),n(`Non-trainable params: ${l}`),n("_".repeat(t))}function g8(r){let t;return r.collectedTrainableWeights!=null?t=Fm(r.collectedTrainableWeights):t=Fm(r.trainableWeights),t}function x8(r){let t=!0,e=[],n=[];for(let o in r.nodesByDepth)e.push(r.nodesByDepth[o]);for(let o of e){if(o.length>1||o.length===1&&o[0].inboundLayers.length>1){t=!1;break}n.push(...o)}if(t)for(let o of r.layers){let s=!1;for(let i of o.inboundNodes)if(n.indexOf(i)!==-1)if(s){t=!1;break}else s=!0;if(!t)break}return t}function By(r,t,e=console.log){let n="";for(let o=0;o<r.length;++o)o>0&&(n=n.slice(0,n.length-1)+" "),n+=r[o],n=n.slice(0,t[o]),n+=" ".repeat(t[o]-n.length);e(n)}function y8(r,t,e){let n,o;try{o=r.inboundNodes.map(u=>JSON.stringify(u.inputShapes)).join(",")}catch(u){o="multiple"}try{n=JSON.stringify(r.outputShape)}catch(u){n="multiple"}let s=r.name,i=r.getClassName(),a=[`${s} (${i})`,o,n,r.countParams().toString()];By(a,t,e)}function b8(r,t,e,n){let o,s;try{s=r.inboundNodes.map(p=>JSON.stringify(p.inputShapes)).join(",")}catch(p){s="multiple"}try{o=JSON.stringify(r.outputShape)}catch(p){o="multiple"}let i=[];for(let p of r.inboundNodes)if(!(e!=null&&e.length>0&&e.indexOf(p)===-1))for(let m=0;m<p.inboundLayers.length;++m){let f=p.inboundLayers[m].name,d=p.nodeIndices[m],h=p.tensorIndices[m];i.push(`${f}[${d}][${h}]`)}let a=r.name,u=r.getClassName(),l=i.length===0?"":i[0],c=[`${a} (${u})`,s,o,r.countParams().toString(),l];By(c,t,n);for(let p=1;p<i.length;++p)By(["","","","",i[p]],t,n)}function J$(r,t,e){return(r==="inboundNodes"||r==="outputLayers"||r==="inputLayers")&&t===0&&typeof e=="string"}function yc(r,t){if(r===null)return null;if(typeof r=="string")return Ja(r);if(typeof r=="number"||typeof r=="boolean")return r;if(r instanceof Array){let e=[],n=r.length;for(let o=0;o<n;++o){let s=r[o];J$(t,o,s)?e.push(s):e.push(yc(s,t))}return e}else{let e={};for(let n of Object.keys(r)){let o=r[n];if(n==="name"&&typeof o=="string")e[n]=o;else{let s=Ja(n);e[s]=yc(o,s)}}return e}}function Vy(r,t){if(r==null)return null;if(typeof r=="string")return Io(r);if(typeof r=="number"||typeof r=="boolean")return r;if(r instanceof Array){let e=[],n=r.length;for(let o=0;o<n;++o){let s=r[o];J$(t,o,s)?e.push(s):e.push(Vy(s,t))}return e}else{let e={};for(let n of Object.keys(r)){let o=r[n],s=Io(n);(n==="name"||n==="className")&&typeof o=="string"?e[s]=o:e[s]=Vy(o,n)}return e}}var Wm="3.21.0";var Ln=class extends Rt{constructor(t){if(super({}),this.containerNodes=new Set,this.name=t.name,this.name==null){let b=this.getClassName().toLowerCase();this.name=hu(b)}if(this.supportsMasking=!1,this.trainable_=!0,Array.isArray(t.inputs)?this.inputs=t.inputs.slice():this.inputs=[t.inputs],Array.isArray(t.outputs)?this.outputs=t.outputs.slice():this.outputs=[t.outputs],vo(this.inputs).length!==this.inputs.length)throw new z(`The list of inputs passed to the model is redundant. All inputs should only appear once. Found: ${this.inputs.map(b=>b.name)}`);vo(this.outputs).length!==this.outputs.length&&console.warn(`The list of outputs passed to the model is redundant. All outputs should only appear once. Found: ${this.outputs.map(b=>b.name)}`),this.inputLayers=[],this.inputLayersNodeIndices=[],this.inputLayersTensorIndices=[],this.outputLayers=[],this.outputLayersNodeIndices=[],this.outputLayersTensorIndices=[],this.layers=[],this.internalContainerRefs=[];for(let b of this.outputs){let w=b.sourceLayer,C=b.nodeIndex,N=b.tensorIndex;this.outputLayers.push(w),this.outputLayersNodeIndices.push(C),this.outputLayersTensorIndices.push(N)}for(let b of this.inputs){let w=b.sourceLayer,C=b.nodeIndex,N=b.tensorIndex;eo(C===0,"input layer has >1 nodes"),eo(N===0,"input layer has >1 tensors"),this.inputLayers.push(w),this.inputLayersNodeIndices.push(C),this.inputLayersTensorIndices.push(N)}this.inputNames=[],this.outputNames=[],this.feedInputShapes=[],this.feedInputNames=[],this.feedOutputNames=[];for(let b=0;b<this.inputLayers.length;b++){let w=this.inputLayers[b];if(!(w instanceof Hs))throw new TypeError(`Input layers to a LayersModel must be InputLayer objects. Received inputs: ${t.inputs}. Input ${b} (0-based) originates from layer type ${w.getClassName()}.`);this.inputNames.push(w.name),this.feedInputShapes.push(w.batchInputShape),this.feedInputNames.push(w.name)}for(let b of this.outputLayers)this.outputNames.push(b.name);this.internalInputShapes=this.inputs.map(b=>b.shape),this.internalOutputShapes=this.outputs.map(b=>b.shape);let e={},n={},o={},s={},i={},a=[],u=(b,w,C,N,_,A)=>{(N==null||_==null||A==null)&&(N=b.sourceLayer,_=b.nodeIndex,A=b.tensorIndex);let $=N.inboundNodes[_];if(C.indexOf($)!==-1)throw new Ur(`The tensor ${b.name} at layer "${N.name}" is part of a cycle.`);if(w.indexOf($)!==-1)return;this.containerNodes.add(Ln.nodeKey(N,_)),N.id in i||(i[N.id]=Object.keys(i).length),C.indexOf($)===-1&&C.push($);let F=$.inboundLayers.length;for(let P=0;P<F;P++){let V=$.inputTensors[P],G=$.inboundLayers[P],W=$.nodeIndices[P],q=$.tensorIndices[P];u(V,w,C,G,W,q)}for(w.push($);C.indexOf($)>=0;)C.splice(C.indexOf($),1);a.push($)},l=[],c=[];for(let b of this.outputs)u(b,l,c);let p=a.slice().reverse();for(let b of p){n[b.id]=b,b.id in e||(e[b.id]=0);let w=e[b.id],C=o[b.outboundLayer.id]==null?0:o[b.outboundLayer.id];w=Math.max(w,C),o[b.outboundLayer.id]=w,s[b.outboundLayer.id]=b.outboundLayer,e[b.id]=w;for(let N=0;N<b.inboundLayers.length;N++){let _=b.inboundLayers[N],A=b.nodeIndices[N],$=_.inboundNodes[A],F=e[$.id]==null?0:e[$.id];e[$.id]=Math.max(w+1,F),n[$.id]=$}}let m={};for(let b in e){let w=e[b];w in m||(m[w]=[]),m[w].push(n[b])}let f={};for(let b in o){let w=o[b];w in f||(f[w]=[]),f[w].push(s[b])}let d=Object.keys(f).map(b=>parseInt(b,10)).sort(fh);this.layers=[];for(let b of d){let w=f[b];w.sort((C,N)=>{let _=i[C.id],A=i[N.id];return _<A?-1:_>A?1:0});for(let C of w)C instanceof Ln&&this.internalContainerRefs.push(C),this.layers.push(C)}this.layersByDepth=f,d=Object.keys(m).map(b=>parseInt(b,10)).sort(fh);let h=this.inputs.slice(),g=[];for(let b of d)for(let w of m[b]){let C=w.outboundLayer;if(C!=null){for(let N of w.inputTensors)if(h.indexOf(N)===-1)throw new Ur(`Graph disconnected: cannot obtain value for tensor ${N} at layer "${C.name}". The following previous layers were accessed without issue: ${g}`);for(let N of w.outputTensors)h.push(N);g.push(C.name)}}this.nodesByDepth=m;let x=this.layers.map(b=>b.name);for(let b of x){let w=x.filter(C=>C===b).length;if(w!==1)throw new Ur(`The name "${b}" is used ${w} times in the model. All layer names should be unique. Layer names: `+JSON.stringify(x))}this.outboundNodes=[],this.inboundNodes=[],new rl({outboundLayer:this,inboundLayers:[],nodeIndices:[],tensorIndices:[],inputTensors:this.inputs,outputTensors:this.outputs,inputMasks:this.inputs.map(b=>null),outputMasks:this.outputs.map(b=>null),inputShapes:this.inputs.map(b=>b.shape),outputShapes:this.outputs.map(b=>b.shape)}),this.built=!0,this._refCount=1}assertNotDisposed(){if(this._refCount===0)throw new Error(`Container '${this.name}' is already disposed.`)}dispose(){this.assertNotDisposed();let t={refCountAfterDispose:null,numDisposedVariables:0};if(--this._refCount===0){for(let e of this.layers)t.numDisposedVariables+=e.dispose().numDisposedVariables;for(let e of this.internalContainerRefs)t.numDisposedVariables+=e.dispose().numDisposedVariables}return t.refCountAfterDispose=this._refCount,t}get trainable(){return this.trainable_}set trainable(t){this.layers.forEach(e=>{e._trainableWeights.forEach(n=>n.trainable=t)}),this.trainable_=t}get trainableWeights(){if(this._trainableWeights.length>0)throw new z("Container instance unexpectedly contains _trainableWeights.The trainable weights of a Container are a union of the trainable weights of its consituent Layers. Its own _trainableWeights must remain an empty Array.");if(!this.trainable)return[];let t=[];for(let e of this.layers)t=t.concat(e.trainableWeights);return t}get nonTrainableWeights(){let t=[];for(let e of this.layers)t.push(...e.nonTrainableWeights);if(!this.trainable){let e=[];for(let n of this.layers)e.push(...n.trainableWeights);return e.concat(t)}return t}get weights(){return this.trainableWeights.concat(this.nonTrainableWeights)}loadWeights(t,e=!0){let n={},o=0;for(let i of this.layers)for(let a of i.weights){if(n[a.originalName]!=null)throw new z(`Duplicate weight name: ${a.originalName}`);n[a.originalName]=a,o++}let s=[];for(let i in t){let a=i;if(n[i]==null){let u=i.split("/");a=u.slice(0,-2).concat([u[u.length-1]]).join("/")}if(n[a]!=null)s.push([n[a],t[i]]);else if(e)throw new z(`Provided weight data has no target variable: ${i}`);delete n[a]}if(e){let i=[];for(let a in n)i.push(a);if(i.length>0)throw new z(`${i.length} of ${o} weights are not set: ${i}`)}Om(s)}updatedConfig(){let t=this.getConfig(),e={};return e.className=this.getClassName(),e.config=t,e.kerasVersion=`tfjs-layers ${Wm}`,e.backend="TensorFlow.js",e}toJSON(t,e=!0){let n=Vy(this.updatedConfig());return e?JSON.stringify(n):n}call(t,e){return B(()=>{t=xe(t);let n=new ko;for(let o=0;o<this.inputs.length;++o)n.add(this.inputs[o],t[o]);return hc(this.outputs,n,e)})}computeMask(t,e){return B(()=>{t=xe(t);let n;return e==null?n=Co(null,t.length):n=xe(e),this.runInternalGraph(t,n)[1]})}computeOutputShape(t){let e=Rm(t);if(e.length!==this.inputLayers.length)throw new z(`Invalid inputShape argument ${t}: model has ${this.inputLayers.length} tensor inputs.`);let n={};for(let a=0;a<e.length;a++){let u=this.inputLayers[a],l=e[a],c=u.name+"_0_0";n[c]=l}let o=Object.keys(this.nodesByDepth).map(a=>parseInt(a,10)).sort(fh);if(o.length>1)for(let a of o){let u=this.nodesByDepth[a];for(let l of u){let c=l.outboundLayer;if(this.inputLayers.map(h=>h.id).indexOf(c.id)!==-1)continue;let p=[];for(let h=0;h<l.inboundLayers.length;h++){let g=l.inboundLayers[h],x=l.nodeIndices[h],b=l.tensorIndices[h],w=`${g.name}_${x}_${b}`,C=n[w];p.push(C)}let m=c.computeOutputShape(Sr(p)),f=Rm(m),d=c.inboundNodes.indexOf(l);for(let h=0;h<f.length;h++){let g=`${c.name}_${d}_${h}`;n[g]=f[h]}}}let s=[],i=[];for(let a=0;a<this.outputLayers.length;a++){let u=this.outputLayers[a],l=this.outputLayersNodeIndices[a],c=this.outputLayersTensorIndices[a],p=`${u.name}_${l}_${c}`;i.push(p)}for(let a=0;a<i.length;a++){let u=i[a];eo(u in n),s.push(n[u])}return Sr(s)}runInternalGraph(t,e){e==null&&(e=Co(null,t.length));let n={};for(let u=0;u<this.inputs.length;++u){let l=this.inputs[u],c=t[u],p=e[u];n[l.id]=[c,p]}let o=Object.keys(this.nodesByDepth).map(u=>parseInt(u,10)).sort(fh);for(let u of o){let l=this.nodesByDepth[u];for(let c of l){let p=c.outboundLayer,m=c.inputTensors,f=c.outputTensors,d=new Array;for(let h of m)h.id in n&&d.push(n[h.id]);if(d.length===m.length){let h={},g,x,b,w;if(c.callArgs!=null&&(h=c.callArgs),d.length===1){let[C,N]=d[0];h.mask==null&&(h.mask=N),b=xe(p.call(C,h)),w=xe(p.computeMask(C,N)),g=[C],x=[N]}else g=d.map(C=>C[0]),x=d.map(C=>C[1]),h.mask==null&&(h.mask=x),b=xe(p.call(g,h)),w=xe(p.computeMask(g,x));if(p.activityRegularizer)throw new vt("LayersModel invocation with concrete Tensor value(s) in the presence of activity regularizer(s) is not supported yet.");for(let C=0;C<f.length;++C){let N=f[C],_=b[C],A=w[C];n[N.id]=[_,A]}}}}let s=[],i=[],a=[];for(let u of this.outputs){eo(u.id in n,`Could not compute output ${u.name} : ${u.id}`);let[l,c]=n[u.id];a.push(l.shape),s.push(l),i.push(c)}return[s,i,a]}buildNodeConversionMap(t){let e={},n;for(let o of this.layers){n=o instanceof Ln?1:0;for(let s=0;s<o.inboundNodes.length;s++){let i=Ln.nodeKey(o,s);this.containerNodes.has(i)&&(e[i]=n,n+=1)}}return e}getLayer(t,e){if(e!=null){if(this.layers.length<=e)throw new z(`Was asked to retrieve layer at index ${e}, but model only has ${this.layers.length} layer(s).`);return this.layers[e]}else if(t==null)throw new z("Provide either a layer name or layer index");for(let n of this.layers)if(n.name===t)return n;throw new z(`No such layer: ${t}`)}calculateLosses(){return B(()=>{let t=[];for(let e of this.layers)for(let n=0;n<e.inboundNodes.length;++n){let o=Ln.nodeKey(e,n);this.containerNodes.has(o)&&t.push(...e.calculateLosses())}return t})}getConfig(){let t={name:this.name},e=this.buildNodeConversionMap(this.layers),n=[];for(let i of this.layers){let a=i.getClassName(),u=i.getConfig(),l=[];for(let p=0;p<i.inboundNodes.length;p++){let m=i.inboundNodes[p],f=Ln.nodeKey(i,p),d={};if(this.containerNodes.has(f)){if(m.callArgs)try{JSON.stringify(m.callArgs),d=m.callArgs}catch(h){console.warn(`Layer ${i.name} was passed non-serializable keyword arguments: ${m.callArgs}. They will not be included in the serialized model (and thus will be missing at deserialization time).`),d={}}if(m.inboundLayers.length>0){let h=[];for(let g=0;g<m.inboundLayers.length;g++){let x=m.inboundLayers[g],b=m.nodeIndices[g],w=m.tensorIndices[g],C=Ln.nodeKey(x,b),N=e[C];N==null&&(N=0),h.push([x.name,N,w,d])}l.push(h)}}}let c={};c.name=i.name,c.className=a,c.config=u,c.inboundNodes=l,n.push(c)}t.layers=n;let o=[];for(let i=0;i<this.inputLayers.length;i++){let a=this.inputLayers[i],u=this.inputLayersNodeIndices[i],l=Ln.nodeKey(a,u);if(!this.containerNodes.has(l))continue;let c=e[l];c==null&&(c=0);let p=this.inputLayersTensorIndices[i];o.push([a.name,c,p])}t.inputLayers=o;let s=[];for(let i=0;i<this.outputLayers.length;i++){let a=this.outputLayers[i],u=this.outputLayersNodeIndices[i],l=Ln.nodeKey(a,u);if(!this.containerNodes.has(l))continue;let c=e[l];c==null&&(c=0);let p=this.outputLayersTensorIndices[i];s.push([a.name,c,p])}return t.outputLayers=s,t}static fromConfig(t,e,n={},o=!1){let s={},i={};function a(g,x){g.name in i?i[g.name].push(x):i[g.name]=[x]}function u(g,x){let b=[],w;for(let C of x){let N=C[0],_=C[1],A=C[2];if(w=C[3]==null?{}:C[3],!(N in s)){a(g,x);return}let $=s[N];if($.inboundNodes.length<=_){a(g,x);return}let F=$.inboundNodes[_];b.push(F.outputTensors[A])}b.length>0&&g.apply(Sr(b),w)}function l(g){let x=g.name,b=hn(g,e.customObjects!=null?e.customObjects:{});b.setFastWeightInitDuringBuild(o),s[x]=b,g.inboundNodes.forEach(C=>{if(!(C instanceof Array))throw new z(`Corrupted configuration, expected array for nodeData: ${C}`);a(b,C)})}let c=e.name,p=e.layers;for(let g of p)l(g);for(;!d$(i);)for(let g of p){let x=s[g.name];if(x.name in i){let b=i[x.name];delete i[x.name];for(let w of b)u(x,w)}}let m=[],f=[],d=e.inputLayers;for(let g of d){let x=g[0],b=g[1],w=g[2];eo(x in s);let N=s[x].inboundNodes[b].outputTensors;m.push(N[w])}let h=e.outputLayers;for(let g of h){let x=g[0],b=g[1],w=g[2];eo(x in s);let N=s[x].inboundNodes[b].outputTensors;f.push(N[w])}return new t({inputs:m,outputs:f,name:c})}get stateful(){if(this._stateful)throw new z("Container instance unexpectedly has _stateful = true. The statefulness of a Container is determined by the Layers it contains. Its _stateful property must remain the default false.");for(let t of this.layers)if(t.stateful)return!0;return!1}resetStates(){B(()=>{this.layers.forEach(t=>{t.stateful&&t.resetStates()})})}};function w8(r,t,e){let n=t.length;if(r==null||Array.isArray(r)&&r.length===0)return t.map(o=>null);if(n===1)return Array.isArray(r)&&r.length===1?r:typeof r=="object"&&t[0]in r?[r[t[0]]]:[r];if(Array.isArray(r)){if(r.length!==n)throw new Error(`Provided ${e} is an array of ${r.length} element(s), but the model has ${n} outputs. Make sure a set of weights is provided for each model output.`);return r}else if(typeof r=="object"&&Object.keys(r).length>0&&typeof r[Object.keys(r)[0]]=="object"){let o=[];return t.forEach(s=>{s in r?o.push(r[s]):o.push(null)}),o}else throw new Error(`The model has multiple (${n}) outputs, so ${e} must be either an array with ${n} elements or an object with ${t} keys. Provided ${e} not understood: ${JSON.stringify(r)}`)}function Gy(r,t){return w8(r,t,"classWeight")}async function Wy(r,t,e,n){if(t!=null||n!=null)throw new Error("Support sampleWeight is not implemented yet");if(e!=null){let o=B(()=>{if(r.shape.length===1)return sn(r);if(r.shape.length===2){if(r.shape[1]>1)return Ei(r,1);if(r.shape[1]===1)return D(r,[r.shape[0]]);throw new Error(`Encountered unexpected last-dimension size (${r.shape[1]}) during handling of class weights. The size is expected to be >= 1.`)}else throw new Error(`Unexpected rank of target (y) tensor (${r.rank}) during handling of class weights. The rank is expected to be 1 or 2.`)}),s=Array.from(await o.data());St(o);let i=[];return s.forEach(a=>{if(e[a]==null)throw new Error(`classWeight must contain all classes in the training data. The class ${a} exists in the data but not in classWeight`);i.push(e[a])}),Le(i,"float32")}else return null}function Q$(r,t){return R(r,t)}var C8=32;function rD(r,t){let e,n,o=t;e=o.xs,n=o.ys,y.assert(e!=null&&n!=null,()=>`A Dataset iterator for fitDataset() is expected to generate objects of the form \`{xs: xVal, ys: yVal}\`, where the two values may be \`tf.Tensor\`, an array of Tensors, or a map of string to Tensor. The provided Dataset instead generates ${t}`);let s=tD("input",r.inputNames,e),i=tD("output",r.outputNames,n),a=s[0].shape[0];y.assert(s.length===r.inputs.length,()=>`LayersModel has ${r.inputs.length} inputs, but the dataset provides ${s.length} inputs. (Expected input keys: ${JSON.stringify(r.inputNames)})`),y.assert(i.length===r.outputs.length,()=>`LayersModel has ${r.outputs.length} outputs, but the dataset provides ${i.length} outputs. (Expected output keys: ${JSON.stringify(r.outputNames)})`);for(let u=0;u<s.length;u++)y.assert(s[u].shape[0]===a,()=>`Batch size mismatch: input ${r.inputNames[u]} has ${s[u].shape[0]}; expected ${a} based on input ${r.inputNames[0]}.`);for(let u=0;u<i.length;u++)y.assert(i[u].shape[0]===a,()=>`Batch size mismatch: output ${r.outputNames[u]} has ${i[u].shape[0]}; expected ${a} based on input ${r.inputNames[0]}.`);return{xs:s,ys:i}}function tD(r,t,e){if(e instanceof Ft)return[e];if(Array.isArray(e))return y.assert(e.length===t.length,()=>`Received an array of ${e.length} Tensors, but expected ${t.length} to match the ${r} keys ${t}.`),e;{let n=[];for(let o of t){if(e[o]==null)throw new z(`The feature data generated by the dataset lacks the required ${r} key '${o}'.`);n.push(e[o])}return n}}function I8(r){if(r.length===3)throw new vt("Validation with sample weights is not implemented yet.");return{xs:r[0],ys:r[1]}}async function nD(r,t,e){let n=e.batchesPerEpoch!=null;if(y.assert(r.optimizer!=null,()=>"You must compile a model before training/testing. Use LayersModel.compile(modelCompileConfig)."),y.assert(e!=null,()=>"For fitDataset(), the 2nd argument (config) is required, but it is not provided in this call."),y.assert(e.epochs!=null&&e.epochs>0&&Number.isInteger(e.epochs),()=>`For fitDataset(), config.epochs is expected to be a positive integer, but got ${e.epochs}`),y.assert(!n||e.batchesPerEpoch>0&&Number.isInteger(e.batchesPerEpoch),()=>`For fitDataset(), config.batchesPerEpoch is expected to be a positive integer if specified, but got ${e.batchesPerEpoch}`),y.assert(e.validationSplit==null,()=>"`validationSplit` is not supported by `fitDataset()`. Use validationData instead."),r.isTraining)throw new Error("Cannot start training because another fit() call is ongoing.");r.isTraining=!0;try{let o=e.validationData!=null,s,i;if(o)if(eD(e.validationData))y.assert(e.validationBatches==null||e.validationBatches>0&&Number.isInteger(e.validationBatches),()=>`For fitDataset() with dataset-based validation, config.validationBatches is expected not to be provided, or to be a positive integer, but got ${e.validationBatches}`);else{let g=I8(e.validationData);s=g.xs,i=g.ys}let a=r.makeTrainFunction(),u=r.getDedupedMetricsNames(),l;o?l=u.slice().concat(u.map(g=>"val_"+g)):l=u.slice();let c=Fy(e.callbacks,e.yieldEvery),p=e.verbose==null?1:e.verbose,{callbackList:m,history:f}=Oy(c,p,e.epochs,null,null,v8(t,e),null,o,l);m.setModel(r),r.history=f,await m.onTrainBegin(),r.stopTraining_=!1;let d=e.initialEpoch==null?0:e.initialEpoch,h=await t.iterator();for(;d<e.epochs;){let g={};await m.onEpochBegin(d);let x=0,b=0;for(n||(h=await t.iterator());!n||x<e.batchesPerEpoch;){let w=await h.next();if(n&&w.done){console.warn(`You provided \`batchesPerEpoch\` as ${e.batchesPerEpoch}, but your dataset iterator ran out of data after ${x} batches; interrupting training. Make sure that your dataset can generate at least \`batchesPerEpoch * epochs\` batches (in this case, ${e.batchesPerEpoch*e.epochs} batches). You may need to use the repeat() function when building your dataset.`);break}if(w.value!=null){let{xs:C,ys:N}=rD(r,w.value),_={};_.batch=b,_.size=C[0].shape[0],await m.onBatchBegin(b,_);let A=[];if(e.classWeight!=null){let P=Gy(e.classWeight,r.outputNames);for(let V=0;V<P.length;++V)A.push(await Wy(N[V],null,P[V]))}let $=C.concat(N).concat(A),F=a($);St($);for(let P=0;P<u.length;++P){let V=u[P],G=F[P];_[V]=G,De(G)}await m.onBatchEnd(b,_),Ay(_),b++,x++}if(n?x>=e.batchesPerEpoch:w.done){if(o){let C;eD(e.validationData)?C=xe(await r.evaluateDataset(e.validationData,{batches:e.validationBatches})):C=xe(r.evaluate(s,i,{batchSize:e.validationBatchSize==null?C8:e.validationBatchSize,verbose:0}));for(let N=0;N<r.metricsNames.length;++N)g[`val_${r.metricsNames[N]}`]=C[N]}break}if(r.stopTraining_)break}if(await m.onEpochEnd(d,g),d++,r.stopTraining_)break}return await m.onTrainEnd(),await r.history.syncData(),r.history}finally{r.isTraining=!1}}function v8(r,t){let e=null;return t.batchesPerEpoch!=null?e=t.batchesPerEpoch:Number.isFinite(r.size)&&(e=r.size),e}function eD(r){return typeof r.iterator=="function"}function S8(r){return typeof r.next=="function"}async function oD(r,t,e){e=e||{};let n=e.batches!=null,o=r.testFunction,s=[];if(e.verbose>0)throw new vt("Verbose mode is not implemented yet.");y.assert(!n||e.batches>0&&Number.isInteger(e.batches),()=>`Test loop expects \`batches\` to be a positive integer, but received ${JSON.stringify(e.batches)}`);let i=S8(t)?t:await t.iterator(),a=0,u=0;for(;!n||u<e.batches;){let l=await i.next();if(s=B(()=>{if(l.value){let{xs:c,ys:p}=rD(r,l.value),m=c.concat(p),f=B(()=>o(m));if(St(m),u===0)for(let h=0;h<f.length;++h)s.push(mt(0));let d=m[0].shape[0];for(let h=0;h<f.length;++h){let g=f[h],x=s[h];s[h]=B(()=>X(s[h],R(d,g))),u>0&&St(x)}St(f),a+=d,++u}return s}),l.done){n&&console.warn(`Your dataset iterator ran out of data during evaluateDataset(). Interrupting evalution. Make sure that your dataset can generate at least \`batches\` batches (in this case, ${e.batches} batches). You may need to use the repeat() function when building your dataset.`);break}}for(let l=0;l<s.length;++l){let c=s[l];s[l]=pt(s[l],a),St(c)}return Sr(s)}function Uy(r){y.assert(r>0&&Number.isInteger(r),()=>`batchSize is required to be a positive integer, but got ${r}`)}function Um(r,t,e){return r==null?[null]:Array.isArray(r)?r.map(n=>Qa(n,t,e-t)):Qa(r,t,e-t)}function Hy(r,t){return B(()=>r==null?null:Array.isArray(r)?r.map(e=>Hy(e,t)):Sy(r,t.dtype==="int32"?t:J(t,"int32")))}function qy(r,t){let e=[],n=0,o=null;for(;n<r;)o=n+t,o>=r&&(o=r),e.push([n,o]),n=o;return e}async function N8(r,t,e,n,o,s,i,a,u,l,c,p,m,f,d){o==null&&(o=32),s==null&&(s=1),c==null&&(c=!0),m==null&&(m=0);let h=!1;if(u!=null&&l!=null&&(h=!0),d!=null&&(h=!0,f==null))throw new z("Can only use `validationSteps` when doing step-wise training, i.e., `stepsPerEpoch` must be set.");let g=r.checkNumSamples(e,o,f,"steps_per_epoch"),x;g!=null&&(x=Yr(0,g)),i==null&&(i=1);let{callbackList:b,history:w}=Oy(a,i,s,m,g,f,o,h,p);b.setModel(r),r.history=w,await b.onTrainBegin(),r.stopTraining_=!1;for(let C=m;C<s;++C){await b.onEpochBegin(C);let N={};if(f!=null)throw new vt("stepsPerEpoch mode is not implemented yet.");{if(c==="batch")throw new vt("batch shuffling is not implemneted yet");c&&y.shuffle(x);let _=Le(x),A=qy(g,o);for(let $=0;$<A.length;++$){let F={};if(await b.onBatchBegin($,F),B(()=>{let P=A[$][0],V=A[$][1],G=Qa(_,P,V-P);F.batch=$,F.size=V-P;let W=Hy(e,G),q=t(W);for(let H=0;H<n.length;++H){let j=n[H],Y=q[H];F[j]=Y,De(Y)}if($===A.length-1&&h){let H=r.testLoop(u,l,o);for(let j=0;j<n.length;++j){let Y=n[j],Z=H[j];De(Z),N["val_"+Y]=Z}}}),await b.onBatchEnd($,F),Ay(F),r.stopTraining_)break}_.dispose()}if(await b.onEpochEnd(C,N),r.stopTraining_)break}return await b.onTrainEnd(),await r.history.syncData(),r.history}async function sD(r,t,e,n={}){if(r.isTraining)throw new Error("Cannot start training because another fit() call is ongoing.");r.isTraining=!0;let o,s,i,a,u,l,c,p,m;try{let f=n.batchSize==null?32:n.batchSize;Uy(f);let d=!1,h=await r.standardizeUserData(t,e,n.sampleWeight,n.classWeight,d,f);o=h[0],s=h[1],m=h[2];let g=!1,x;if(n.validationData!=null&&n.validationData.length>0){if(g=!0,n.validationData.length===2)u=n.validationData[0],l=n.validationData[1];else throw n.validationData.length===3?new vt("validationData including sample weights is not supported yet."):new z(`When passing validation data, it must contain 2 (valX, valY) or 3 (valX, valY, valSampleWeight) items; ${n.validationData} is invalid.`);let F=!0,P=await r.standardizeUserData(u,l,null,null,F,f);c=P[0],p=P[1],x=c.concat(p)}else if(n.validationSplit!=null&&n.validationSplit>0&&n.validationSplit<1){g=!0;let F=Math.floor(o[0].shape[0]*(1-n.validationSplit)),P=o[0].shape[0];c=Um(o,F,P),i=o,o=Um(o,0,F),p=Um(s,F,P),a=s,s=Um(s,0,F),x=c.concat(p)}else n.validationSteps!=null&&(g=!0);let b=o.concat(s).concat(m);r.checkTrainableWeightsConsistency();let w=r.makeTrainFunction(),C=r.getDedupedMetricsNames(),N,_;g?(r.makeTestFunction(),N=r.testFunction,_=C.slice().concat(C.map(F=>"val_"+F))):(N=null,x=[],_=C.slice());let A=Fy(n.callbacks,n.yieldEvery);return await N8(r,w,b,C,f,n.epochs,n.verbose,A,N,x,n.shuffle,_,n.initialEpoch,null,null)}finally{r.isTraining=!1,To(o,t),To(s,e),To(i,t),To(a,e),To(c,u),To(p,l),m!=null&&St(m)}}function _0(r){let t=[];r instanceof Ft&&(r=[r]);for(let e=0;e<r.length;++e){let n=r[e];if(n.rank===1)t.push(el(n,1));else{if(n.rank===0)throw new Error("Expected tensor to be at least 1D, but received a 0D tensor (scalar).");t.push(n)}}return t}function To(r,t){if(r==null)return;let e=[];if(t instanceof Ft)e.push(t.id);else if(Array.isArray(t))t.forEach(o=>e.push(o.id));else if(t!=null)for(let o in t){let s=t[o];e.push(s.id)}let n=[];if(r instanceof Ft)e.indexOf(r.id)===-1&&n.push(r);else if(Array.isArray(r))r.forEach(o=>{e.indexOf(o.id)===-1&&n.push(o)});else if(r!=null)for(let o in r){let s=r[o];e.indexOf(s.id)===-1&&n.push(s)}n.forEach(o=>{o.isDisposed||o.dispose()})}function k8(r){return r instanceof Ft}function A0(r){return Array.isArray(r)}function iD(r){return!k8(r)&&!A0(r)}function aD(r,t,e,n=!0,o=""){if(t==null||t.length===0){if(r!=null){let i=!1;if(A0(r)&&r.length>0)i=!0;else if(iD(r)){for(let a in r)if(r.hasOwnProperty(a)){i=!0;break}}else i=!0;if(i)throw new z(`Error when checking model ${o} expected no data, but got ${r}`)}return[]}if(r==null)return t.map(i=>null);let s;if(iD(r)){r=r,s=[];for(let i of t){if(r[i]==null)throw new z(`No data provided for "${i}". Need data for each key in: ${t}`);s.push(r[i])}}else if(A0(r)){if(r=r,r.length!==t.length)throw new z(`Error when checking model ${o}: the Array of Tensors that you are passing to your model is not the size the model expected. Expected to see ${t.length} Tensor(s), but instead got the following list of Tensor(s): ${r}`);s=r}else{if(r=r,t.length>1)throw new z(`The model ${o} expects ${t.length} Tensor(s), but only received one Tensor. Found: Tensor with shape ${r.shape}`);s=[r]}if(s=_0(s),e!=null)for(let i=0;i<t.length;++i){if(e[i]==null)continue;let a=s[i];if(a.shape.length!==e[i].length)throw new z(`Error when checking ${o}: expected ${t[i]} to have ${e[i].length} dimension(s). but got array with shape ${a.shape}`);for(let u=0;u<e[i].length;++u){if(u===0&&!n)continue;let l=a.shape[u],c=e[i][u];if(c!=null&&c>=0&&l!==c)throw new z(`${o} expected a batch of elements where each example has shape [${e[i].slice(1,e[i].length)}] (i.e.,tensor shape [*,${e[i].slice(1,e[i].length)}]) but the ${o} received an input with ${a.shape[0]} examples, each with shape [${a.shape.slice(1,a.shape.length)}] (tensor shape [${a.shape}])`)}}return s}function T8(r,t,e){let n=vo(r.map(s=>s.shape[0]));n.sort();let o=vo(t.map(s=>s.shape[0]));if(o.sort(),n.length>1)throw new z(`All input Tensors (x) should have the same number of samples. Got array shapes: ${JSON.stringify(r.map(s=>s.shape))}`);if(o.length>1)throw new z(`All target Tensors (y) should have the same number of samples. Got array shapes: ${JSON.stringify(t.map(s=>s.shape))}`);if(n.length>0&&o.length>0&&!y.arraysEqual(n,o))throw new z(`Input Tensors should have the same number of samples as target Tensors. Found ${n[0]} input sample(s) and ${o[0]} target sample(s).`)}function E8(r,t,e){let n=[Wi,Gm,xc];for(let o=0;o<r.length;++o){let s=r[o],i=t[o],a=e[o];if(i!=null){if(i===xc&&s.shape[s.shape.length-1]===1)throw new z(`You are passing a target array of shape ${s.shape} while using a loss 'categorical_crossentropy'. 'categorical_crossentropy'expects targets to be binary matrices (1s and 0s) of shape [samples, classes].`);if(n.indexOf(i)!==-1){let u=s.shape.slice(1),l=a.slice(1);for(let c=0;c<u.length;++c){let p=u[c],m=l[c];if(m!=null&&p!==m)throw new z(`A target Tensor with shape ${s.shape} was passed for an output of shape ${a}, while using a loss function that expects targets to have the same shape as the output.`)}}}}}function lD(r,t,e,n=!0,o=""){let s;if(Array.isArray(r)){if(r.length!==t.length)throw new z(`Error when checking model ${o}: the Array of Tensors that you are passing to your model is not the size the the model expected. Expected to see ${t.length} Tensor(s), but instead got ${r.length} Tensors(s).`);s=r}else{if(t.length>1)throw new z(`The model expects ${t.length} ${o} Tensors, but only received one Tensor. Found: array with shape ${JSON.stringify(r.shape)}.`);s=[r]}if(e!=null)for(let i=0;i<t.length;++i){if(e[i]==null)continue;let a=s[i];if(a.shape.length!==e[i].length)throw new z(`Error when checking ${o}: expected ${t[i]} to have ${e[i].length} dimension(s), but got array with shape ${JSON.stringify(a.shape)}`);for(let u=0;u<e[i].length;++u){if(u===0&&!n)continue;let l=a.shape[u],c=e[i][u];if(c!=null&&c!==l)throw new z(`Error when checking ${o}: expected ${t[i]} to have shape ${JSON.stringify(e[i])} but got array with shape ${JSON.stringify(a.shape)}.`)}}}function _8(r,t){if(r==null||Array.isArray(r)&&r.length===0)return t.map(n=>[]);let e;if(typeof r=="string"||typeof r=="function")e=[r];else if(Array.isArray(r)||typeof r=="object")e=r;else throw new TypeError(`Type of metrics argument not understood. Expected an string,function, Array, or Object, found: ${r}`);if(Array.isArray(e))return t.map(n=>e);{let n=[];for(let o of t){let s=e.hasOwnProperty(o)?e[o]:[];Array.isArray(s)||(s=[s]),n.push(s)}return n}}var A8="layers-model",Mn=class extends Ln{constructor(t){super(t),this.isTraining=!1}summary(t,e,n=console.log){if(!this.built)throw new z("This model has never been called, thus its weights have not been created yet. So no summary can be displayed. Build the model first (e.g., by calling it on some test data).");Z$(this,t,e,n)}compile(t){if(t.loss==null&&(t.loss=[]),this.loss=t.loss,typeof t.optimizer=="string")this.optimizer_=Y$(t.optimizer),this.isOptimizerOwned=!0;else{if(!(t.optimizer instanceof Gr))throw new z("User-defined optimizer must be an instance of tf.Optimizer.");this.optimizer_=t.optimizer,this.isOptimizerOwned=!1}let e=[];if(!Array.isArray(t.loss)&&typeof t.loss!="string"&&typeof t.loss!="function"){t.loss=t.loss;for(let i in t.loss)if(this.outputNames.indexOf(i)===-1)throw new z(`Unknown entry in loss dictionary: "${i}". Only expected the following keys: ${this.outputNames}`);for(let i of this.outputNames)t.loss[i]==null&&console.warn(`Output "${i}" is missing from loss dictionary. We assume this was done on purpose, and we will not be expecting data to be passed to ${i} during training`),e.push(Py(t.loss[i]))}else if(Array.isArray(t.loss)){if(t.loss.length!==this.outputs.length)throw new z(`When passing an Array as loss, it should have one entry per model output. The model has ${this.outputs.length} output(s), but you passed loss=${t.loss}.`);e=t.loss.map(a=>Py(a))}else{let i=Py(t.loss);this.outputs.forEach(a=>{e.push(i)})}this.lossFunctions=e,this.feedOutputNames=[],this.feedOutputShapes=[],this.feedLossFns=[];for(let i=0;i<this.outputs.length;++i){let a=this.internalOutputShapes[i],u=this.outputNames[i];this.feedOutputNames.push(u),this.feedOutputShapes.push(a),this.feedLossFns.push(this.lossFunctions[i])}let n=[];this.metrics=t.metrics,this.metricsNames=["loss"],this.metricsTensors=[],Ws("loss",()=>{for(let i=0;i<this.outputs.length;++i){if(n.indexOf(i)!==-1)continue;let a=this.lossFunctions[i];this.outputs.length>1&&(this.metricsTensors.push([a,i]),this.metricsNames.push(this.outputNames[i]+"_loss"))}});let o=_8(t.metrics,this.outputNames),s=(i,a,u)=>{this.outputNames.length>1&&(a=this.outputNames[i]+"_"+a),this.metricsNames.push(a),this.metricsTensors.push([u,i])};Ws("metric",()=>{for(let i=0;i<this.outputs.length;++i){if(n.indexOf(i)!==-1)continue;let a=o[i];(l=>{let c="",p,m,f;for(let d of l){if(typeof d=="string"&&["accuracy","acc","crossentropy","ce"].indexOf(d)!==-1){let g=this.internalOutputShapes[i];g[g.length-1]===1||this.lossFunctions[i]===Gm?["accuracy","acc"].indexOf(d)!==-1?m=Ch:["crossentropy","ce"].indexOf(d)!==-1&&(m=My):this.lossFunctions[i]===Vm?["accuracy","acc"].indexOf(d)!==-1?m=zy:["crossentropy","ce"].indexOf(d)!==-1&&(m=k0):["accuracy","acc"].indexOf(d)!==-1?m=Ih:["crossentropy","ce"].indexOf(d)!==-1&&(m=vh);let x;["accuracy","acc"].indexOf(d)!==-1?x="acc":["crossentropy","ce"].indexOf(d)!==-1&&(x="ce"),f=m,p=c+x}else f=j$(d),p=c+Sh(d);let h;Ws(p,()=>{h=f}),s(i,p,h)}})(a)}}),this.collectedTrainableWeights=this.trainableWeights}checkTrainableWeightsConsistency(){this.collectedTrainableWeights!=null&&this.trainableWeights.length!==this.collectedTrainableWeights.length&&console.warn("Discrepancy between trainableweights and collected trainable weights. Did you set `model.trainable` without calling `model.compile()` afterwards?")}evaluate(t,e,n={}){let o=n.batchSize==null?32:n.batchSize;Uy(o);let s=!0,i=this.standardizeUserDataXY(t,e,s,o);try{let a=i[0].concat(i[1]);this.makeTestFunction();let u=this.testFunction,l=this.testLoop(u,a,o,n.verbose,n.steps);return Sr(l)}finally{To(i[0],t),To(i[1],e)}}async evaluateDataset(t,e){return this.makeTestFunction(),oD(this,t,e)}checkNumSamples(t,e,n,o="steps"){let s;if(n!=null){if(s=null,e!=null)throw new z(`If ${o} is set, batchSize must be null or undefined.Got batchSize = ${e}`)}else if(t!=null)Array.isArray(t)?s=t[0].shape[0]:s=t.shape[0];else throw new z(`Either the input data should have a defined shape, or ${o} shoud be specified.`);return s}execute(t,e){if(Array.isArray(e)&&e.length===0)throw new z("`outputs` is an empty Array, which is not allowed.");let n=Array.isArray(e),o=n?e:[e],s=this.retrieveSymbolicTensors(o),i=new ko;if(t instanceof Ft&&(t=[t]),Array.isArray(t)){if(t.length!==this.inputs.length)throw new z(`The number of inputs provided (${t.length}) does not match the number of inputs of this model (${this.inputs.length}).`);for(let u=0;u<this.inputs.length;++u)i.add(this.inputs[u],t[u])}else for(let u of this.inputs){let l=t[u.name];if(l==null)throw new z(`No value is provided for the model's input ${u.name}`);i.add(u,l)}let a=hc(s,i);return n?a:a[0]}retrieveSymbolicTensors(t){let e=Co(null,t.length),n=t.length;for(let o of this.layers){let s=Array.isArray(o.output)?o.output:[o.output],i=s.map(a=>a.name);for(let a=0;a<t.length;++a){let u=i.indexOf(t[a]);if(u!==-1&&(e[a]=s[u],n--),n===0)break}if(n===0)break}if(n>0){let o=[];throw e.forEach((s,i)=>{s==null&&o.push(t[i])}),new z(`Cannot find SymbolicTensors for output name(s): ${JSON.stringify(o)}`)}return e}predictLoop(t,e=32,n=!1){return B(()=>{let o=this.checkNumSamples(t);if(n)throw new vt("Verbose predictLoop() is not implemented yet.");let s=qy(o,e),i=this.outputs.map(a=>[]);for(let a=0;a<s.length;++a)B(()=>{let l=s[a][0],c=s[a][1],p=Um(t,l,c),m=[];if(Array.isArray(p))for(let d=0;d<p.length;++d)m.push({key:this.inputs[d],value:p[d]});else m.push({key:this.inputs[0],value:p});let f=new ko(m);return hc(this.outputs,f)}).forEach((l,c)=>i[c].push(l));return Sr(i.map(a=>ne(a,0)))})}predict(t,e={}){let n=_0(t);lD(n,this.inputNames,this.feedInputShapes,!1);try{let o=e.batchSize==null?32:e.batchSize;return Uy(o),this.predictLoop(n,o)}finally{To(n,t)}}predictOnBatch(t){lD(t,this.inputNames,this.feedInputShapes,!0);let e=(Array.isArray(t)?t[0]:t).shape[0];return this.predictLoop(t,e)}standardizeUserDataXY(t,e,n=!0,o){if(this.optimizer_==null)throw new Ur("You must compile a model before training/testing. Use LayersModel.compile(modelCompileArgs).");let s=[];for(let i=0;i<this.feedOutputShapes.length;++i){let a=this.feedOutputShapes[i];this.feedLossFns[i]===Vm?s.push(a.slice(0,a.length-1).concat([1])):s.push(a)}if(t=aD(t,this.feedInputNames,this.feedInputShapes,!1,"input"),e=aD(e,this.feedOutputNames,s,!1,"target"),T8(t,e,null),E8(e,this.feedLossFns,this.feedOutputShapes),this.stateful&&o!=null&&o>0&&t[0].shape[0]%o!==0)throw new z(`In a stateful network, you should only pass inputs with a number of samples that is divisible by the batch size ${o}. Found: ${t[0].shape[0]} sample(s).`);return[t,e]}async standardizeUserData(t,e,n,o,s=!0,i){let[a,u]=this.standardizeUserDataXY(t,e,s,i);if(n!=null)throw new Error("sample weight is not supported yet.");let l=null;if(o!=null){let c=Gy(o,this.outputNames);l=[];for(let p=0;p<c.length;++p)l.push(await Wy(u[p],null,c[p]))}return[a,u,l]}testLoop(t,e,n,o=0,s){return B(()=>{let i=this.checkNumSamples(e,n,s,"steps"),a=[];if(o>0)throw new vt("Verbose mode is not implemented yet.");if(s!=null)throw new vt("steps mode in testLoop() is not implemented yet");{let u=qy(i,n),l=Le(Yr(0,i));for(let c=0;c<u.length;++c){let p=u[c][0],m=u[c][1],f=Qa(l,p,m-p),d=Hy(e,f),h=t(d);if(c===0)for(let g=0;g<h.length;++g)a.push(mt(0));for(let g=0;g<h.length;++g){let x=h[g];a[g]=X(a[g],R(m-p,x))}}for(let c=0;c<a.length;++c)a[c]=pt(a[c],i)}return a})}getDedupedMetricsNames(){let t=this.metricsNames,e=[];for(let n=0;n<t.length;++n){let o=t[n],s=o;g0(t,o)>1&&(s+=`_${g0(t.slice(0,n),o)}`),e.push(s)}return e}makeTrainFunction(){return t=>{let e=[],n=t.slice(0,this.inputs.length),o=t.slice(this.inputs.length,this.inputs.length+this.outputs.length),s=t.slice(this.inputs.length+this.outputs.length,this.inputs.length+this.outputs.length*2),i=[],a=()=>{let p=[];for(let h=0;h<this.inputs.length;++h)p.push({key:this.inputs[h],value:n[h]});let m=new ko(p),f=hc(this.outputs,m,{training:!0}),d;for(let h=0;h<this.lossFunctions.length;++h){let g=this.lossFunctions[h],x=g(o[h],f[h]);s[h]!=null&&(x=Q$(x,s[h]));let b=Se(x);e.push(b),h===0?d=x:d=X(d,x)}for(let h=0;h<this.metricsTensors.length;++h){let g;if(this.outputs.length>1&&h<this.outputs.length)g=e[h];else{let x=this.metricsTensors[h][0],b=this.metricsTensors[h][1];g=Se(x(o[b],f[b]))}De(g),i.push(g)}return d=Se(d),this.calculateLosses().forEach(h=>{d=X(d,h)}),d},u=this.collectedTrainableWeights.map(p=>p.read()),l=!0;return[this.optimizer_.minimize(a,l,u)].concat(i)}}makeTestFunction(){this.testFunction=t=>B(()=>{let e=[],n,o=t.slice(0,this.inputs.length),s=t.slice(this.inputs.length,this.inputs.length+this.outputs.length),i=[];for(let l=0;l<this.inputs.length;++l)i.push({key:this.inputs[l],value:o[l]});let a=new ko(i),u=hc(this.outputs,a);for(let l=0;l<this.lossFunctions.length;++l){let c=this.lossFunctions[l],p=Se(c(s[l],u[l]));l===0?n=p:n=X(n,p),e.push(n)}for(let l=0;l<this.metricsTensors.length;++l){let c=this.metricsTensors[l][0],p=this.metricsTensors[l][1],m=Se(c(s[p],u[p]));e.push(m)}return e})}async fit(t,e,n={}){return sD(this,t,e,n)}async fitDataset(t,e){return nD(this,t,e)}async trainOnBatch(t,e){let n=await this.standardizeUserData(t,e),o=n[0],s=n[1],a=this.makeTrainFunction()(o.concat(s)),u=[];for(let l of a){let c=await l.data();u.push(c[0])}return St(a),To(n[0],t),To(n[1],e),Sr(u)}getNamedWeights(t){let e=[],n=t!=null&&t.trainableOnly,o=n?this.trainableWeights:this.weights,s=this.getWeights(n);for(let i=0;i<o.length;++i)n&&!o[i].trainable||e.push({name:o[i].originalName,tensor:s[i]});return e}set stopTraining(t){this.stopTraining_=t}get stopTraining(){return this.stopTraining_}get optimizer(){return this.optimizer_}set optimizer(t){this.optimizer_!==t&&(this.optimizer_=t,this.isOptimizerOwned=!1)}dispose(){let t=super.dispose();if(t.refCountAfterDispose===0&&this.optimizer!=null&&this.isOptimizerOwned){let e=nh().numTensors;this.optimizer_.dispose(),t.numDisposedVariables+=e-nh().numTensors}return t}getLossIdentifiers(){let t;if(typeof this.loss=="string")t=Io(this.loss);else if(Array.isArray(this.loss)){for(let e of this.loss)if(typeof e!="string")throw new Error("Serialization of non-string loss is not supported.");t=this.loss.map(e=>Io(e))}else{let e=Object.keys(this.loss);t={};let n=this.loss;for(let o of e)if(typeof n[o]=="string")t[o]=Io(n[o]);else throw new Error("Serialization of non-string loss is not supported.")}return t}getMetricIdentifiers(){if(typeof this.metrics=="string"||typeof this.metrics=="function")return[Io(Sh(this.metrics))];if(Array.isArray(this.metrics))return this.metrics.map(t=>Io(Sh(t)));{let t={};for(let e in this.metrics)t[e]=Io(Sh(this.metrics[e]));return t}}getTrainingConfig(){return{loss:this.getLossIdentifiers(),metrics:this.getMetricIdentifiers(),optimizer_config:{class_name:this.optimizer.getClassName(),config:this.optimizer.getConfig()}}}loadTrainingConfig(t){if(t.weighted_metrics!=null)throw new Error("Loading weight_metrics is not supported yet.");if(t.loss_weights!=null)throw new Error("Loading loss_weights is not supported yet.");if(t.sample_weight_mode!=null)throw new Error("Loading sample_weight_mode is not supported yet.");let e=yc(t.optimizer_config),n=hn(e),o;if(typeof t.loss=="string")o=Ja(t.loss);else if(Array.isArray(t.loss))o=t.loss.map(i=>Ja(i));else if(t.loss!=null){o={};for(let i in t.loss)o[i]=Ja(t.loss[i])}let s;if(Array.isArray(t.metrics))s=t.metrics.map(i=>Ja(i));else if(t.metrics!=null){s={};for(let i in t.metrics)s[i]=Ja(t.metrics[i])}this.compile({loss:o,metrics:s,optimizer:n})}async save(t,e){if(typeof t=="string"){let l=Er.getSaveHandlers(t);if(l.length===0)throw new z(`Cannot find any save handlers for URL '${t}'`);if(l.length>1)throw new z(`Found more than one (${l.length}) save handlers for URL '${t}'`);t=l[0]}if(t.save==null)throw new z("LayersModel.save() cannot proceed because the IOHandler provided does not have the `save` attribute defined.");let n=await Er.encodeWeights(this.getNamedWeights(e)),o=!1,s=null,a={modelTopology:this.toJSON(s,o),format:A8,generatedBy:`TensorFlow.js tfjs-layers v${Wm}`,convertedBy:null};if((e==null?!1:e.includeOptimizer)&&this.optimizer!=null){a.trainingConfig=this.getTrainingConfig();let l="optimizer",{data:c,specs:p}=await Er.encodeWeights(await this.optimizer.getWeights(),l);n.specs.push(...p),n.data=Er.concatenateArrayBuffers([n.data,c])}return this.userDefinedMetadata!=null&&(E0(this.userDefinedMetadata,this.name,!0),a.userDefinedMetadata=this.userDefinedMetadata),a.weightData=n.data,a.weightSpecs=n.specs,t.save(a)}setUserDefinedMetadata(t){E0(t,this.name),this.userDefinedMetadata=t}getUserDefinedMetadata(){return this.userDefinedMetadata}};Mn.className="Model";Q.registerClass(Mn);var Ky=class extends Mn{};Ky.className="Functional";Q.registerClass(Ky);async function uD(r,t){"modelTopology"in r||(r={modelTopology:r}),r=r;let e=r.modelTopology;e.model_config!=null&&(e=e.model_config);let n=yc(e),o=hn(n,t);if(r.weightsManifest!=null){let s=await Er.loadWeights(r.weightsManifest,r.pathPrefix,o.weights.map(a=>a.originalName)),i={};for(let a of o.weights)i[a.originalName]=s[a.originalName];o.loadWeights(i),St(s)}return o}async function cD(r,t){if(t==null&&(t={}),typeof r=="string"){let e=Er.getLoadHandlers(r,t);if(e.length===0)e.push(Er.browserHTTPRequest(r,t));else if(e.length>1)throw new z(`Found more than one (${e.length}) load handlers for URL '${r}'`);r=e[0]}return $8(r,void 0,t)}async function $8(r,t,e){if(e==null&&(e={}),r.load==null)throw new z("Cannot proceed with model loading because the IOHandler provided does not have the `load` method implemented.");let n=await r.load(),o=n.modelTopology;o.model_config!=null&&(o=o.model_config);let s=e.strict==null?!0:e.strict,i=n.weightData!=null&&n.weightSpecs!=null&&s,a=hn(yc(o),t,i),u=n.trainingConfig;if(u!=null&&a.loadTrainingConfig(u),n.userDefinedMetadata!=null&&a.setUserDefinedMetadata(n.userDefinedMetadata),n.weightData!=null){if(n.weightSpecs==null)throw new z("LayersModel artifacts contains weight data, but not weight specs. Therefore loading of weights cannot proceed.");let{modelWeights:l,optimizerWeights:c}=D8(n.weightData,n.weightSpecs);a.loadWeights(l,s),a.optimizer!=null&&c.length>0&&await a.optimizer.setWeights(c),St(l),St(c.map(p=>p.tensor))}return a}function D8(r,t){let e=Er.decodeWeights(r,t),n={},o=[];return t.forEach(s=>{s.group==="optimizer"?o.push({name:s.name,tensor:e[s.name]}):n[s.name]=e[s.name]}),{modelWeights:n,optimizerWeights:o}}var Ui=class extends Mn{constructor(t){if(super({inputs:[],outputs:[]}),t=t||{},this.trainable=!0,this.built=!1,this.name=t.name!=null?t.name:hu("sequential_"),t.layers!=null)for(let e of t.layers)this.add(e)}checkShape(t){if(t.inboundNodes[0].outputTensors[0].shape.some(n=>n<0))throw new z(`Negative dimension size caused by adding layer ${t.name} with input shape [${t.inboundNodes[0].inputTensors[0].shape}]`)}add(t){let e=t instanceof Ui||t instanceof Mn,n;if(e){if(n=t,n.outputs.length!==1)throw new z("All layers in a Sequential model should have a single output tensor. For multi-output layers, use the functional API.");if(n.inputs.length!==1)throw new z("All layers in a Sequential model should have a single input tensor. For multi-input layers, use the functional API.")}if(this.outputs.length===0){if(t.inboundNodes.length===0){if(t.batchInputShape==null)throw new z("The first layer in a Sequential model must get an `inputShape` or `batchInputShape` argument.");let o=Ty({batchShape:t.batchInputShape,dtype:t.dtype,name:t.name+"_input"});t.apply(o)}if(e)this.outputs=n.outputs,this.inputs=n.inputs;else{if(t.inboundNodes.length!==1)throw new z(`A layer added to a Sequential model must not already be connected somewhere else. LayersModel received layer ${t.name} which has ${t.inboundNodes.length} pre-existing inbound connections.`);if(t.inboundNodes[0].outputTensors.length!==1)throw new z("All layers in a Sequential model should have a single output tensor. For multi-output layers, use the functional API.");this.checkShape(t),this.outputs=[t.inboundNodes[0].outputTensors[0]],this.inputs=I0(this.outputs[0])}this.inboundNodes=[],new rl({outboundLayer:this,inboundLayers:[],nodeIndices:[],tensorIndices:[],inputTensors:this.inputs,outputTensors:this.outputs,inputMasks:Co(null,this.inputs.length),outputMasks:[null],inputShapes:this.inputs.map(o=>o.shape),outputShapes:this.outputs[0].shape})}else{let o=t.apply(this.outputs[0]);if(Array.isArray(o))throw new TypeError("All layers in a Sequential model should have a single output tensor. For multi-output layers, use the functional API.");this.checkShape(t),this.outputs=[o],this.inboundNodes[0].outputTensors=this.outputs,this.inboundNodes[0].outputShapes=[this.outputs[0].shape]}this.layers.push(t),this.built=!1}pop(){if(this.layers.length===0)throw new TypeError("There are no layers in the model.");if(this.layers.pop(),this.layers.length===0)this.outputs=[],this.inboundNodes=[],this.outboundNodes=[];else{let t=this.layers.length-1;this.layers[t].outboundNodes=[],this.outputs=[this.layers[t].output],this.inboundNodes[0].outputTensors=this.outputs,this.inboundNodes[0].outputShapes=[this.outputs[0].shape]}}call(t,e){return this.model==null&&this.build(),this.model.call(t,e)}build(t){if(Jt(t),this.inputs.length===0||this.outputs.length===0)throw new TypeError("Sequential model cannot be built: model is empty. Add some layers first.");this.model=new Mn({inputs:this.inputs,outputs:this.outputs[0],name:this.name+"_model"}),this.model.trainable=this.trainable,this.supportsMasking=this.model.supportsMasking,this.inputLayers=this.model.inputLayers,this.inputLayersNodeIndices=this.model.inputLayersNodeIndices,this.inputLayersTensorIndices=this.model.inputLayersTensorIndices,this.outputLayers=this.model.outputLayers,this.outputLayersNodeIndices=this.model.outputLayersNodeIndices,this.outputLayersTensorIndices=this.model.outputLayersTensorIndices,this.nodesByDepth=this.model.nodesByDepth,this.containerNodes=this.model.containerNodes,this.outputNames=this.model.outputNames,this.inputNames=this.model.inputNames,this.built=!0}countParams(){return this.built||this.build(),super.countParams()}summary(t,e,n=console.log){this.built||this.build(),super.summary(t,e,n)}setWeights(t){this.model==null&&this.build(),this.model.setWeights(t)}evaluate(t,e,n={}){if(!this.built)throw new Ur("The model needs to be compiled before being used.");return this.model.evaluate(t,e,n)}async evaluateDataset(t,e){if(!this.built)throw new Ur("The model needs to be compiled before being used.");return this.model.evaluateDataset(t,e)}predict(t,e={}){return this.model==null&&this.build(),this.model.predict(t,e)}predictOnBatch(t){return this.model==null&&this.build(),this.model.predictOnBatch(t)}compile(t){this.build(),this.model.compile(t),this.optimizer_=this.model.optimizer,this.isOptimizerOwned=this.model.isOptimizerOwned,this.loss=this.model.loss,this.metrics=this.model.metrics,this.metricsTensors=this.model.metricsTensors,this.metricsNames=this.model.metricsNames}get optimizer(){return this.model==null?void 0:this.model.optimizer}set optimizer(t){this.model.optimizer=t}async fit(t,e,n={}){if(!this.built)throw new Ur("The model needs to be compiled before being used.");return this.model.fit(t,e,n)}async fitDataset(t,e){if(!this.built)throw new Ur("The model needs to be compiled before being used.");return this.model.fitDataset(t,e)}async trainOnBatch(t,e){return this.model.trainOnBatch(t,e)}static fromConfig(t,e,n={},o=!1){let s,i={};if(e instanceof Array){if(e[0].className==null||e[0].className==="Merge")throw new z("Legacy serialization format not supported yet.");s=e}else y.assert(e.layers!=null,()=>"When the config data for a Sequential model is not an Array, it must be an Object that contains the 'layers' field."),s=e.layers,delete e.layers,i=e;let a=new t(i);if(!(a instanceof Ui))throw new vt(`Sequential.fromConfig called on non-Sequential input: ${a}`);for(let u of s){let c=hn(u,void 0,o);o&&c.setFastWeightInitDuringBuild(!0),a.add(c)}return a}set stopTraining(t){if(this.model==null)throw new z("Cannot set the stopTraining property of a sequential model before it is compiled.");this.model.stopTraining=t}get stopTraining(){if(this.model==null)throw new z("Cannot get the stopTraining property of a sequential model before it is compiled.");return this.model.stopTraining}getConfig(){let t=[];for(let e of this.layers){let n={};n.className=e.getClassName(),n.config=e.getConfig(),t.push(n)}return{name:this.name,layers:t}}};Ui.className="Sequential";Q.registerClass(Ui);function R8(r){return new Mn(r)}function F8(r){return new Ui(r)}function O8(r,t){return t==null&&(t={}),cD(r,t)}function $0(r){return Ty(r)}function P8(r,t){dn.registerCallbackConstructor(r,t)}var Qr=class extends Q.Serializable{getConfig(){return{}}},jy=class extends Qr{apply(t,e=1){return _$(t,e)}};jy.className="elu";Q.registerClass(jy);var Xy=class extends Qr{apply(t){return cm(t)}};Xy.className="selu";Q.registerClass(Xy);var Yy=class extends Qr{apply(t){return Rr(t)}};Yy.className="relu";Q.registerClass(Yy);var Zy=class extends Qr{apply(t){return B(()=>Pi(6,Rr(t)))}};Zy.className="relu6";Q.registerClass(Zy);var Jy=class extends Qr{apply(t){return t}};Jy.className="linear";Q.registerClass(Jy);var Qy=class extends Qr{apply(t){return Xr(t)}};Qy.className="sigmoid";Q.registerClass(Qy);var tb=class extends Qr{apply(t){return $$(t)}};tb.className="hardSigmoid";Q.registerClass(tb);var eb=class extends Qr{apply(t){return Ms(t)}};eb.className="softplus";Q.registerClass(eb);var rb=class extends Qr{apply(t){return A$(t)}};rb.className="softsign";Q.registerClass(rb);var nb=class extends Qr{apply(t){return _i(t)}};nb.className="tanh";Q.registerClass(nb);var Hm=class extends Qr{apply(t,e=-1){return ou(t,e)}};Hm.className="softmax";Q.registerClass(Hm);var ob=class extends Qr{apply(t,e=-1){return om(t,e)}};ob.className="logSoftmax";Q.registerClass(ob);var sb=class extends Qr{apply(t,e=1){return B(()=>R(Xr(R(t,e)),t))}};sb.className="swish";Q.registerClass(sb);var ib=class extends Qr{apply(t){return B(()=>R(t,_i(Ms(t))))}};ib.className="mish";Q.registerClass(ib);function qs(r){return r.getClassName()}function D0(r,t={}){return Bi(r,Q.SerializationMap.getMap().classNameMap,t,"activation")}function Ks(r){if(r==null){let t={};return t.className="linear",t.config={},D0(t)}if(typeof r=="string"){let t={};return t.className=r,t.config={},D0(t)}else return r instanceof Qr?r:D0(r)}function R0(r){if(r!=null&&typeof r!="object")throw new Error(`Argument to L1L2 regularizer's constructor is expected to be an object, but received: ${r}`)}var ab=class extends Q.Serializable{},bu=class extends ab{constructor(t){super(),R0(t),this.l1=t==null||t.l1==null?.01:t.l1,this.l2=t==null||t.l2==null?.01:t.l2,this.hasL1=this.l1!==0,this.hasL2=this.l2!==0}apply(t){return B(()=>{let e=Ne([1]);return this.hasL1&&(e=X(e,ft(R(this.l1,Ee(t))))),this.hasL2&&(e=X(e,ft(R(this.l2,lc(t))))),D(e,[])})}getConfig(){return{l1:this.l1,l2:this.l2}}static fromConfig(t,e){return new t({l1:e.l1,l2:e.l2})}};bu.className="L1L2";Q.registerClass(bu);function fD(r){return R0(r),new bu({l1:r!=null?r.l1:null,l2:0})}function dD(r){return R0(r),new bu({l2:r!=null?r.l2:null,l1:0})}var pD={l1l2:"L1L2"};function me(r){return Im(r)}function mD(r,t={}){return Bi(r,Q.SerializationMap.getMap().classNameMap,t,"regularizer")}function be(r){if(r==null)return null;if(typeof r=="string"){let e={className:r in pD?pD[r]:r,config:{}};return mD(e)}else return r instanceof ab?r:mD(r)}var qm=class extends Rt{constructor(t){super(t==null?{}:t),this.supportsMasking=!0,t!=null&&(this.maxValue=t.maxValue)}call(t,e){t=At(t);let n=Rr(t);return this.maxValue!=null&&(n=Cr(n,0,this.maxValue)),n}computeOutputShape(t){return t}getConfig(){let t={maxValue:this.maxValue},e=super.getConfig();return Object.assign(t,e),t}};qm.className="ReLU";Q.registerClass(qm);var Km=class extends Rt{constructor(t){super(t==null?{}:t),this.DEFAULT_ALPHA=.3,t==null&&(t={}),this.alpha=t.alpha==null?this.DEFAULT_ALPHA:t.alpha}call(t,e){let n=At(t);return Zl(n,this.alpha)}computeOutputShape(t){return t}getConfig(){let t={alpha:this.alpha},e=super.getConfig();return Object.assign(t,e),t}};Km.className="LeakyReLU";Q.registerClass(Km);var jm=class extends Rt{constructor(t){if(super(t==null?{}:t),this.DEFAULT_ALPHA_INITIALIZER="zeros",t==null&&(t={}),this.supportsMasking=!0,this.alphaInitializer=de(t.alphaInitializer||this.DEFAULT_ALPHA_INITIALIZER),this.alphaRegularizer=be(t.alphaRegularizer),this.alphaConstraint=ze(t.alphaConstraint),t.sharedAxes==null)this.sharedAxes=null;else if(Array.isArray(t.sharedAxes))this.sharedAxes=t.sharedAxes;else if(typeof t.sharedAxes=="number")this.sharedAxes=[t.sharedAxes];else throw new z(`Expected sharedAxes to be a number or an array of numbers, but got ${t.sharedAxes}`)}build(t){t=Jt(t);let e=t.slice(1);if(this.sharedAxes!=null)for(let o of this.sharedAxes)e[o-1]=1;this.alpha=this.addWeight("alpha",e,"float32",this.alphaInitializer,this.alphaRegularizer,!0,this.alphaConstraint);let n={};if(this.sharedAxes!=null)for(let o=1;o<t.length;++o)n[o]=t[o];this.inputSpec=[new ye({ndim:t.length,axes:n})],this.built=!0}call(t,e){return t=At(t),ru(t,this.alpha.read())}getConfig(){let t={alphaInitializer:ke(this.alphaInitializer),alphaRegularizer:me(this.alphaRegularizer),alphaConstraint:Me(this.alphaConstraint),sharedAxes:this.sharedAxes},e=super.getConfig();return Object.assign(t,e),t}};jm.className="PReLU";Q.registerClass(jm);var Xm=class extends Rt{constructor(t){if(super(t==null?{}:t),this.DEFAULT_ALPHA=1,t==null&&(t={}),t.alpha!=null&&t.alpha!==this.DEFAULT_ALPHA)throw new vt(`Non-default alpha value (${t.alpha}) is not supported by the ELU layer yet.`);this.alpha=t.alpha==null?this.DEFAULT_ALPHA:t.alpha}call(t,e){let n=At(t);return Ri(n)}computeOutputShape(t){return t}getConfig(){let t={alpha:this.alpha},e=super.getConfig();return Object.assign(t,e),t}};Xm.className="ELU";Q.registerClass(Xm);var Ym=class extends Rt{constructor(t){super(t==null?{}:t),this.DEFAULT_THETA=1,t==null&&(t={}),this.theta=t.theta==null?this.DEFAULT_THETA:t.theta}call(t,e){let n=At(t);return R(n,J(He(n,this.theta),"float32"))}computeOutputShape(t){return t}getConfig(){let t={theta:this.theta},e=super.getConfig();return Object.assign(t,e),t}};Ym.className="ThresholdedReLU";Q.registerClass(Ym);var Zm=class extends Rt{constructor(t){super(t==null?{}:t),this.DEFAULT_AXIS=1,t==null&&(t={}),this.softmax=new Hm().apply,this.axis=t.axis==null?this.DEFAULT_AXIS:t.axis}call(t,e){let n=At(t);return this.softmax(n,this.axis)}computeOutputShape(t){return t}getConfig(){let t={axis:this.axis},e=super.getConfig();return Object.assign(t,e),t}};Zm.className="Softmax";Q.registerClass(Zm);function wu(r,t,e){if(typeof r=="number")return Co(r,t);if(r.length!==t)throw new z(`The ${e} argument must be an integer or tuple of ${t} integers. Received: ${r.length} elements.`);for(let n=0;n<t;++n){let o=r[n];if(!N$(o))throw new z(`The ${e} argument must be an integer or tuple of ${t} integers. Received: ${JSON.stringify(r)} including a non-integer number ${o}`)}return r}function Sn(r,t,e,n,o=1){if(r==null)return r;let s=t+(t-1)*(o-1),i;return e==="same"?i=r:i=r-s+1,Math.floor((i+n-1)/n)}function js(r,t,e,n){if(r==null)return null;if(n==="valid")r=r*t+Us([e-t,0]);else if(n==="same")r=r*t;else throw new z(`Unsupport padding mode: ${n}.`);return r}function Nh(r,t){return B(()=>(Re(t),t==="channelsFirst"?Ot(r,[0,2,3,1]):r))}function F0(r,t){return B(()=>(Re(t),t==="channelsFirst"?Ot(r,[0,2,3,4,1]):r))}function M8(r,t,e,n=1,o="valid",s,i=1){return B(()=>{if(s==null&&(s=pn()),Re(s),r.shape.length!==3)throw new z(`The input of a conv1dWithBias operation should be 3, but is ${r.shape.length} instead.`);if(t.shape.length!==3)throw new z(`The kernel for a conv1dWithBias operation should be 3, but is ${t.shape.length} instead`);if(e!=null&&e.shape.length!==1)throw new z(`The bias for a conv1dWithBias operation should be 1, but is ${t.shape.length} instead`);if(s==="channelsFirst"&&(r=Ot(r,[0,2,1])),o==="causal")throw new vt("The support for CAUSAL padding mode in conv1dWithBias is not implemented yet.");let a=Jp(r,t,n,o==="same"?"same":"valid","NWC",i);return e!=null&&(a=mn(a,e)),a})}function hD(r,t,e,n=[1,1],o="valid",s,i,a=null){return B(()=>{if(s==null&&(s=pn()),Re(s),r.rank!==3&&r.rank!==4)throw new z(`conv2dWithBiasActivation expects input to be of rank 3 or 4, but received ${r.rank}.`);if(t.rank!==3&&t.rank!==4)throw new z(`conv2dWithBiasActivation expects kernel to be of rank 3 or 4, but received ${r.rank}.`);let u=Nh(r,s);if(o==="causal")throw new vt("The support for CAUSAL padding mode in conv1dWithBias is not implemented yet.");return u=au.conv2d({x:u,filter:t,strides:n,pad:o==="same"?"same":"valid",dilations:i,dataFormat:"NHWC",bias:e,activation:a}),s==="channelsFirst"&&(u=Ot(u,[0,3,1,2])),u})}function z8(r,t,e,n=[1,1,1],o="valid",s,i){return B(()=>{if(s==null&&(s=pn()),Re(s),r.rank!==4&&r.rank!==5)throw new z(`conv3dWithBias expects input to be of rank 4 or 5, but received ${r.rank}.`);if(t.rank!==4&&t.rank!==5)throw new z(`conv3dWithBias expects kernel to be of rank 4 or 5, but received ${r.rank}.`);let a=F0(r,s);if(o==="causal")throw new vt("The support for CAUSAL padding mode in conv3dWithBias is not implemented yet.");return a=Cx(a,t,n,o==="same"?"same":"valid","NDHWC",i),e!=null&&(a=mn(a,e)),s==="channelsFirst"&&(a=Ot(a,[0,4,1,2,3])),a})}var bc=class extends Rt{constructor(t,e){if(super(e),this.bias=null,this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_BIAS_INITIALIZER="zeros",bc.verifyArgs(e),this.rank=t,Ze(this.rank,"rank"),this.rank!==1&&this.rank!==2&&this.rank!==3)throw new vt(`Convolution layer for rank other than 1, 2, or 3 (${this.rank}) is not implemented yet.`);if(this.kernelSize=wu(e.kernelSize,t,"kernelSize"),this.strides=wu(e.strides==null?1:e.strides,t,"strides"),this.padding=e.padding==null?"valid":e.padding,cn(this.padding),this.dataFormat=e.dataFormat==null?"channelsLast":e.dataFormat,Re(this.dataFormat),this.activation=Ks(e.activation),this.useBias=e.useBias==null?!0:e.useBias,this.biasInitializer=de(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.biasConstraint=ze(e.biasConstraint),this.biasRegularizer=be(e.biasRegularizer),this.activityRegularizer=be(e.activityRegularizer),this.dilationRate=wu(e.dilationRate==null?1:e.dilationRate,t,"dilationRate"),this.rank===1&&Array.isArray(this.dilationRate)&&this.dilationRate.length!==1)throw new z(`dilationRate must be a number or an array of a single number for 1D convolution, but received ${JSON.stringify(this.dilationRate)}`);if(this.rank===2){if(typeof this.dilationRate=="number")this.dilationRate=[this.dilationRate,this.dilationRate];else if(this.dilationRate.length!==2)throw new z(`dilationRate must be a number or array of two numbers for 2D convolution, but received ${JSON.stringify(this.dilationRate)}`)}else if(this.rank===3){if(typeof this.dilationRate=="number")this.dilationRate=[this.dilationRate,this.dilationRate,this.dilationRate];else if(this.dilationRate.length!==3)throw new z(`dilationRate must be a number or array of three numbers for 3D convolution, but received ${JSON.stringify(this.dilationRate)}`)}}static verifyArgs(t){if(eo("kernelSize"in t,"required key 'kernelSize' not in config"),typeof t.kernelSize!="number"&&!gy(t.kernelSize,"number",1,3))throw new z(`BaseConv expects config.kernelSize to be number or number[] with length 1, 2, or 3, but received ${JSON.stringify(t.kernelSize)}.`)}getConfig(){let t={kernelSize:this.kernelSize,strides:this.strides,padding:this.padding,dataFormat:this.dataFormat,dilationRate:this.dilationRate,activation:qs(this.activation),useBias:this.useBias,biasInitializer:ke(this.biasInitializer),biasRegularizer:me(this.biasRegularizer),activityRegularizer:me(this.activityRegularizer),biasConstraint:Me(this.biasConstraint)},e=super.getConfig();return Object.assign(t,e),t}},Cu=class extends bc{constructor(t,e){super(t,e),this.kernel=null,Cu.verifyArgs(e),this.filters=e.filters,Ze(this.filters,"filters"),this.kernelInitializer=de(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.kernelConstraint=ze(e.kernelConstraint),this.kernelRegularizer=be(e.kernelRegularizer)}build(t){t=Jt(t);let e=this.dataFormat==="channelsFirst"?1:t.length-1;if(t[e]==null)throw new z(`The channel dimension of the input should be defined. Found ${t[e]}`);let n=t[e],o=this.kernelSize.concat([n,this.filters]);this.kernel=this.addWeight("kernel",o,null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.useBias&&(this.bias=this.addWeight("bias",[this.filters],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint)),this.inputSpec=[{ndim:this.rank+2,axes:{[e]:n}}],this.built=!0}call(t,e){return B(()=>{t=At(t);let n,o=this.bias==null?null:this.bias.read(),s=xy(this.activation.getClassName());if(s!=null&&this.rank===2)n=hD(t,this.kernel.read(),o,this.strides,this.padding,this.dataFormat,this.dilationRate,s);else{if(this.rank===1)n=M8(t,this.kernel.read(),o,this.strides[0],this.padding,this.dataFormat,this.dilationRate[0]);else if(this.rank===2)n=hD(t,this.kernel.read(),o,this.strides,this.padding,this.dataFormat,this.dilationRate);else if(this.rank===3)n=z8(t,this.kernel.read(),o,this.strides,this.padding,this.dataFormat,this.dilationRate);else throw new vt("convolutions greater than 3D are not implemented yet.");this.activation!=null&&(n=this.activation.apply(n))}return n})}computeOutputShape(t){t=Jt(t);let e=[],n=this.dataFormat==="channelsLast"?t.slice(1,t.length-1):t.slice(2);for(let s=0;s<n.length;++s){let i=Sn(n[s],this.kernelSize[s],this.padding,this.strides[s],typeof this.dilationRate=="number"?this.dilationRate:this.dilationRate[s]);e.push(i)}let o=[t[0]];return this.dataFormat==="channelsLast"?(o=o.concat(e),o.push(this.filters)):(o.push(this.filters),o=o.concat(e)),o}getConfig(){let t={filters:this.filters,kernelInitializer:ke(this.kernelInitializer),kernelRegularizer:me(this.kernelRegularizer),kernelConstraint:Me(this.kernelConstraint)},e=super.getConfig();return Object.assign(t,e),t}static verifyArgs(t){if(!("filters"in t)||typeof t.filters!="number"||t.filters<1)throw new z(`Convolution layer expected config.filters to be a 'number' > 0 but got ${JSON.stringify(t.filters)}`)}},ol=class extends Cu{constructor(t){super(2,t),ol.verifyArgs(t)}getConfig(){let t=super.getConfig();return delete t.rank,t}static verifyArgs(t){if(typeof t.kernelSize!="number"&&!gy(t.kernelSize,"number",1,2))throw new z(`Conv2D expects config.kernelSize to be number or number[] with length 1 or 2, but received ${JSON.stringify(t.kernelSize)}.`)}};ol.className="Conv2D";Q.registerClass(ol);var sl=class extends Cu{constructor(t){super(3,t),sl.verifyArgs(t)}getConfig(){let t=super.getConfig();return delete t.rank,t}static verifyArgs(t){if(typeof t.kernelSize!="number"&&!(Array.isArray(t.kernelSize)&&(t.kernelSize.length===1||t.kernelSize.length===3)))throw new z(`Conv3D expects config.kernelSize to be number or [number, number, number], but received ${JSON.stringify(t.kernelSize)}.`)}};sl.className="Conv3D";Q.registerClass(sl);var Jm=class extends ol{constructor(t){if(super(t),this.inputSpec=[new ye({ndim:4})],this.padding!=="same"&&this.padding!=="valid")throw new z(`Conv2DTranspose currently supports only padding modes 'same' and 'valid', but received padding mode ${this.padding}`)}build(t){if(t=Jt(t),t.length!==4)throw new z("Input should have rank 4; Received input shape: "+JSON.stringify(t));let e=this.dataFormat==="channelsFirst"?1:t.length-1;if(t[e]==null)throw new z("The channel dimension of the inputs should be defined. Found `None`.");let n=t[e],o=this.kernelSize.concat([this.filters,n]);this.kernel=this.addWeight("kernel",o,"float32",this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.useBias&&(this.bias=this.addWeight("bias",[this.filters],"float32",this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint)),this.inputSpec=[new ye({ndim:4,axes:{[e]:n}})],this.built=!0}call(t,e){return B(()=>{let n=At(t);if(n.shape.length!==4)throw new z(`Conv2DTranspose.call() expects input tensor to be rank-4, but received a tensor of rank-${n.shape.length}`);let o=n.shape,s=o[0],i,a;this.dataFormat==="channelsFirst"?(i=2,a=3):(i=1,a=2);let u=o[i],l=o[a],c=this.kernelSize[0],p=this.kernelSize[1],m=this.strides[0],f=this.strides[1],d=js(u,m,c,this.padding),h=js(l,f,p,this.padding),g=[s,d,h,this.filters];this.dataFormat!=="channelsLast"&&(n=Ot(n,[0,2,3,1]));let x=tm(n,this.kernel.read(),g,this.strides,this.padding);return this.dataFormat!=="channelsLast"&&(x=Ot(x,[0,3,1,2])),this.bias!=null&&(x=mn(x,this.bias.read(),this.dataFormat)),this.activation!=null&&(x=this.activation.apply(x)),x})}computeOutputShape(t){t=Jt(t);let e=t.slice(),n,o,s;this.dataFormat==="channelsFirst"?(n=1,o=2,s=3):(n=3,o=1,s=2);let i=this.kernelSize[0],a=this.kernelSize[1],u=this.strides[0],l=this.strides[1];return e[n]=this.filters,e[o]=js(e[o],u,i,this.padding),e[s]=js(e[s],l,a,this.padding),e}getConfig(){let t=super.getConfig();return delete t.dilationRate,t}};Jm.className="Conv2DTranspose";Q.registerClass(Jm);var Qm=class extends sl{constructor(t){if(super(t),this.inputSpec=[new ye({ndim:5})],this.padding!=="same"&&this.padding!=="valid")throw new z(`Conv3DTranspose currently supports only padding modes 'same' and 'valid', but received padding mode ${this.padding}`)}build(t){if(t=Jt(t),t.length!==5)throw new z("Input should have rank 5; Received input shape: "+JSON.stringify(t));let e=this.dataFormat==="channelsFirst"?1:t.length-1;if(t[e]==null)throw new z("The channel dimension of the inputs should be defined. Found `None`.");let n=t[e],o=this.kernelSize.concat([this.filters,n]);this.kernel=this.addWeight("kernel",o,"float32",this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.useBias&&(this.bias=this.addWeight("bias",[this.filters],"float32",this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint)),this.inputSpec=[new ye({ndim:5,axes:{[e]:n}})],this.built=!0}call(t,e){return B(()=>{let n=At(t);if(n.shape.length!==5)throw new z(`Conv3DTranspose.call() expects input tensor to be rank-4, but received a tensor of rank-${n.shape.length}`);let o=n.shape,s=o[0],i,a,u;this.dataFormat==="channelsFirst"?(u=2,i=3,a=4):(u=1,i=2,a=3);let l=o[u],c=o[i],p=o[a],m=this.kernelSize[0],f=this.kernelSize[1],d=this.kernelSize[2],h=this.strides[0],g=this.strides[1],x=this.strides[2],b=js(l,h,m,this.padding),w=js(c,g,f,this.padding),C=js(p,x,d,this.padding),N=[s,b,w,C,this.filters];this.dataFormat!=="channelsLast"&&(n=Ot(n,[0,2,3,4,1]));let _=vx(n,this.kernel.read(),N,this.strides,this.padding);return this.dataFormat!=="channelsLast"&&(_=Ot(_,[0,4,1,2,3])),this.bias!==null&&(_=mn(_,this.bias.read(),this.dataFormat)),this.activation!==null&&(_=this.activation.apply(_)),_})}computeOutputShape(t){t=Jt(t);let e=t.slice(),n,o,s,i;this.dataFormat==="channelsFirst"?(n=1,o=2,s=3,i=4):(n=4,o=1,s=2,i=3);let a=this.kernelSize[0],u=this.kernelSize[1],l=this.kernelSize[2],c=this.strides[0],p=this.strides[1],m=this.strides[2];return e[n]=this.filters,e[o]=js(e[o],c,a,this.padding),e[s]=js(e[s],p,u,this.padding),e[i]=js(e[i],m,l,this.padding),e}getConfig(){let t=super.getConfig();return delete t.dilationRate,t}};Qm.className="Conv3DTranspose";Q.registerClass(Qm);var lb=class extends Cu{constructor(t,e){if(super(t,e),this.DEFAULT_DEPTHWISE_INITIALIZER="glorotUniform",this.DEFAULT_POINTWISE_INITIALIZER="glorotUniform",this.depthwiseKernel=null,this.pointwiseKernel=null,e.filters==null)throw new z("The `filters` configuration field is required by SeparableConv, but is unspecified.");if(e.kernelInitializer!=null||e.kernelRegularizer!=null||e.kernelConstraint!=null)throw new z("Fields kernelInitializer, kernelRegularizer and kernelConstraint are invalid for SeparableConv2D. Use depthwiseInitializer, depthwiseRegularizer, depthwiseConstraint, pointwiseInitializer, pointwiseRegularizer and pointwiseConstraint instead.");if(e.padding!=null&&e.padding!=="same"&&e.padding!=="valid")throw new z(`SeparableConv${this.rank}D supports only padding modes: 'same' and 'valid', but received ${JSON.stringify(e.padding)}`);this.depthMultiplier=e.depthMultiplier==null?1:e.depthMultiplier,this.depthwiseInitializer=de(e.depthwiseInitializer||this.DEFAULT_DEPTHWISE_INITIALIZER),this.depthwiseRegularizer=be(e.depthwiseRegularizer),this.depthwiseConstraint=ze(e.depthwiseConstraint),this.pointwiseInitializer=de(e.depthwiseInitializer||this.DEFAULT_POINTWISE_INITIALIZER),this.pointwiseRegularizer=be(e.pointwiseRegularizer),this.pointwiseConstraint=ze(e.pointwiseConstraint)}build(t){if(t=Jt(t),t.length<this.rank+2)throw new z(`Inputs to SeparableConv${this.rank}D should have rank ${this.rank+2}, but received input shape: ${JSON.stringify(t)}`);let e=this.dataFormat==="channelsFirst"?1:t.length-1;if(t[e]==null||t[e]<0)throw new z(`The channel dimension of the inputs should be defined, but found ${JSON.stringify(t[e])}`);let n=t[e],o=this.kernelSize.concat([n,this.depthMultiplier]),s=[];for(let a=0;a<this.rank;++a)s.push(1);s.push(n*this.depthMultiplier,this.filters);let i=!0;this.depthwiseKernel=this.addWeight("depthwise_kernel",o,"float32",this.depthwiseInitializer,this.depthwiseRegularizer,i,this.depthwiseConstraint),this.pointwiseKernel=this.addWeight("pointwise_kernel",s,"float32",this.pointwiseInitializer,this.pointwiseRegularizer,i,this.pointwiseConstraint),this.useBias?this.bias=this.addWeight("bias",[this.filters],"float32",this.biasInitializer,this.biasRegularizer,i,this.biasConstraint):this.bias=null,this.inputSpec=[new ye({ndim:this.rank+2,axes:{[e]:n}})],this.built=!0}call(t,e){return B(()=>{t=At(t);let n;if(this.rank===1)throw new vt("1D separable convolution is not implemented yet.");return this.rank===2&&(this.dataFormat==="channelsFirst"&&(t=Ot(t,[0,2,3,1])),n=pm(t,this.depthwiseKernel.read(),this.pointwiseKernel.read(),this.strides,this.padding,this.dilationRate,"NHWC")),this.useBias&&(n=mn(n,this.bias.read(),this.dataFormat)),this.activation!=null&&(n=this.activation.apply(n)),this.dataFormat==="channelsFirst"&&(n=Ot(n,[0,3,1,2])),n})}getConfig(){let t=super.getConfig();return delete t.rank,delete t.kernelInitializer,delete t.kernelRegularizer,delete t.kernelConstraint,t.depthwiseInitializer=ke(this.depthwiseInitializer),t.pointwiseInitializer=ke(this.pointwiseInitializer),t.depthwiseRegularizer=me(this.depthwiseRegularizer),t.pointwiseRegularizer=me(this.pointwiseRegularizer),t.depthwiseConstraint=Me(this.depthwiseConstraint),t.pointwiseConstraint=Me(this.pointwiseConstraint),t}};lb.className="SeparableConv";var tf=class extends lb{constructor(t){super(2,t)}};tf.className="SeparableConv2D";Q.registerClass(tf);var Iu=class extends Cu{constructor(t){super(1,t),Iu.verifyArgs(t),this.inputSpec=[{ndim:3}]}getConfig(){let t=super.getConfig();return delete t.rank,delete t.dataFormat,t}static verifyArgs(t){if(typeof t.kernelSize!="number"&&!gy(t.kernelSize,"number",1,1))throw new z(`Conv1D expects config.kernelSize to be number or number[] with length 1, but received ${JSON.stringify(t.kernelSize)}.`)}};Iu.className="Conv1D";Q.registerClass(Iu);var ef=class extends Rt{constructor(t){super(t),typeof t.cropping=="number"?this.cropping=[[t.cropping,t.cropping],[t.cropping,t.cropping]]:typeof t.cropping[0]=="number"?this.cropping=[[t.cropping[0],t.cropping[0]],[t.cropping[1],t.cropping[1]]]:this.cropping=t.cropping,this.dataFormat=t.dataFormat===void 0?"channelsLast":t.dataFormat,this.inputSpec=[{ndim:4}]}computeOutputShape(t){return this.dataFormat==="channelsFirst"?[t[0],t[1],t[2]-this.cropping[0][0]-this.cropping[0][1],t[3]-this.cropping[1][0]-this.cropping[1][1]]:[t[0],t[1]-this.cropping[0][0]-this.cropping[0][1],t[2]-this.cropping[1][0]-this.cropping[1][1],t[3]]}call(t,e){return B(()=>{if(t=At(t),this.dataFormat==="channelsLast"){let n=hh(t,this.cropping[0][0],t.shape[1]-this.cropping[0][0]-this.cropping[0][1],2);return hh(n,this.cropping[1][0],t.shape[2]-this.cropping[1][1]-this.cropping[1][0],3)}else{let n=hh(t,this.cropping[0][0],t.shape[2]-this.cropping[0][0]-this.cropping[0][1],3);return hh(n,this.cropping[1][0],t.shape[3]-this.cropping[1][1]-this.cropping[1][0],4)}})}getConfig(){let t={cropping:this.cropping,dataFormat:this.dataFormat},e=super.getConfig();return Object.assign(t,e),t}};ef.className="Cropping2D";Q.registerClass(ef);var rf=class extends Rt{constructor(t){super(t),this.DEFAULT_SIZE=[2,2],this.inputSpec=[{ndim:4}],this.size=t.size==null?this.DEFAULT_SIZE:t.size,this.dataFormat=t.dataFormat==null?"channelsLast":t.dataFormat,Re(this.dataFormat),this.interpolation=t.interpolation==null?"nearest":t.interpolation,v$(this.interpolation)}computeOutputShape(t){if(this.dataFormat==="channelsFirst"){let e=t[2]==null?null:this.size[0]*t[2],n=t[3]==null?null:this.size[1]*t[3];return[t[0],t[1],e,n]}else{let e=t[1]==null?null:this.size[0]*t[1],n=t[2]==null?null:this.size[1]*t[2];return[t[0],e,n,t[3]]}}call(t,e){return B(()=>{let n=At(t),o=n.shape;if(this.dataFormat==="channelsFirst"){n=Ot(n,[0,2,3,1]);let s=this.size[0]*o[2],i=this.size[1]*o[3],a=this.interpolation==="nearest"?lu.resizeNearestNeighbor(n,[s,i]):lu.resizeBilinear(n,[s,i]);return Ot(a,[0,3,1,2])}else{let s=this.size[0]*o[1],i=this.size[1]*o[2];return this.interpolation==="nearest"?lu.resizeNearestNeighbor(n,[s,i]):lu.resizeBilinear(n,[s,i])}})}getConfig(){let t={size:this.size,dataFormat:this.dataFormat,interpolation:this.interpolation},e=super.getConfig();return Object.assign(t,e),t}};rf.className="UpSampling2D";Q.registerClass(rf);function B8(r,t,e=[1,1],n="valid",o,s){return B(()=>{o==null&&(o=pn()),Re(o);let i=Nh(r,o);if(r.rank!==4)throw new z(`Input for depthwiseConv2d is required to be 4-D, but is instead ${r.rank}-D`);if(t.rank!==4)throw new z(`depthwiseKernel is required to be 4-D, but is instead ${t.rank}-D`);return i=Di(i,t,e,n==="same"?"same":"valid","NHWC",s),o==="channelsFirst"&&(i=Ot(i,[0,3,1,2])),i})}var nf=class extends bc{constructor(t){super(2,t),this.depthwiseKernel=null,this.depthMultiplier=t.depthMultiplier==null?1:t.depthMultiplier,this.depthwiseInitializer=de(t.depthwiseInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.depthwiseConstraint=ze(t.depthwiseConstraint),this.depthwiseRegularizer=be(t.depthwiseRegularizer)}build(t){if(t=Jt(t),t.length<4)throw new z(`Inputs to DepthwiseConv2D should have rank 4. Received input shape: ${JSON.stringify(t)}.`);let e=this.dataFormat==="channelsFirst"?1:3;if(t[e]==null||t[e]<0)throw new z(`The channel dimension of the inputs to DepthwiseConv2D should be defined, but is not (${t[e]}).`);let n=t[e],o=[this.kernelSize[0],this.kernelSize[1],n,this.depthMultiplier];this.depthwiseKernel=this.addWeight("depthwise_kernel",o,null,this.depthwiseInitializer,this.depthwiseRegularizer,!0,this.depthwiseConstraint),this.useBias?this.bias=this.addWeight("bias",[n*this.depthMultiplier],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint):this.bias=null,this.built=!0}call(t,e){return B(()=>{t=At(t);let n=B8(t,this.depthwiseKernel.read(),this.strides,this.padding,this.dataFormat,null);return this.useBias&&(n=mn(n,this.bias.read(),this.dataFormat)),this.activation!=null&&(n=this.activation.apply(n)),n})}computeOutputShape(t){t=Jt(t);let e=this.dataFormat==="channelsFirst"?t[2]:t[1],n=this.dataFormat==="channelsFirst"?t[3]:t[2],o=this.dataFormat==="channelsFirst"?t[1]*this.depthMultiplier:t[3]*this.depthMultiplier,s=Sn(e,this.kernelSize[0],this.padding,this.strides[0]),i=Sn(n,this.kernelSize[1],this.padding,this.strides[1]);return this.dataFormat==="channelsFirst"?[t[0],o,s,i]:[t[0],s,i,o]}getConfig(){let t=super.getConfig();return t.depthMultiplier=this.depthMultiplier,t.depthwiseInitializer=ke(this.depthwiseInitializer),t.depthwiseRegularizer=me(this.depthwiseRegularizer),t.depthwiseConstraint=Me(this.depthwiseRegularizer),t}};nf.className="DepthwiseConv2D";Q.registerClass(nf);function O0(r,t,e,n){if(Array.isArray(r)){if(t!=null||e!=null)throw new z("When inputs is an array, neither initialState or constants should be provided");n!=null&&(e=r.slice(r.length-n,r.length),r=r.slice(0,r.length-n)),r.length>1&&(t=r.slice(1,r.length)),r=r[0]}function o(s){return s==null||Array.isArray(s)?s:[s]}return t=o(t),e=o(e),{inputs:r,initialState:t,constants:e}}function P0(r,t,e,n=!1,o,s,i=!1,a=!1){return B(()=>{let u=t.shape.length;if(u<3)throw new z(`Input should be at least 3D, but is ${u}D.`);let l=[1,0].concat(Yr(2,u));if(t=Ot(t,l),s!=null)throw new vt("The rnn() functoin of the deeplearn.js backend does not support constants yet.");i&&console.warn("Backend rnn(): the unroll = true option is not applicable to the imperative deeplearn.js backend."),o!=null&&(o=J(J(o,"bool"),"float32"),o.rank===u-1&&(o=gr(o,-1)),o=Ot(o,l)),n&&(t=ur(t,0),o!=null&&(o=ur(o,0)));let c=[],p,m=e,f=t.shape[0],d=vr(t),h;o!=null&&(h=vr(o));for(let x=0;x<f;++x){let b=d[x],w=B(()=>r(b,m));if(o==null)p=w[0],m=w[1];else{let C=B(()=>{let N=h[x],_=ct(xr(N),N),A=X(R(w[0],N),R(m[0],_)),$=m.map((F,P)=>X(R(w[1][P],N),R(F,_)));return{output:A,newStates:$}});p=C.output,m=C.newStates}a&&c.push(p)}let g;return a&&(g=rr(c,1)),[p,g,m]})}var Nn=class extends Rt{constructor(t){super(t);let e;if(t.cell==null)throw new z("cell property is missing for the constructor of RNN.");if(Array.isArray(t.cell)?e=new Ic({cells:t.cell}):e=t.cell,e.stateSize==null)throw new z("The RNN cell should have an attribute `stateSize` (tuple of integers, one integer per RNN state).");this.cell=e,this.returnSequences=t.returnSequences==null?!1:t.returnSequences,this.returnState=t.returnState==null?!1:t.returnState,this.goBackwards=t.goBackwards==null?!1:t.goBackwards,this._stateful=t.stateful==null?!1:t.stateful,this.unroll=t.unroll==null?!1:t.unroll,this.supportsMasking=!0,this.inputSpec=[new ye({ndim:3})],this.stateSpec=null,this.states_=null,this.numConstants=null,this.keptStates=[]}getStates(){if(this.states_==null){let t=Array.isArray(this.cell.stateSize)?this.cell.stateSize.length:1;return Yr(0,t).map(e=>null)}else return this.states_}setStates(t){this.states_=t}computeOutputShape(t){ky(t)&&(t=t[0]),t=t;let e=this.cell.stateSize;Array.isArray(e)||(e=[e]);let n=e[0],o;if(this.returnSequences?o=[t[0],t[1],n]:o=[t[0],n],this.returnState){let s=[];for(let i of e)s.push([t[0],i]);return[o].concat(s)}else return o}computeMask(t,e){return B(()=>{Array.isArray(e)&&(e=e[0]);let n=this.returnSequences?e:null;if(this.returnState){let o=this.states.map(s=>null);return[n].concat(o)}else return n})}get states(){if(this.states_==null){let t=Array.isArray(this.cell.stateSize)?this.cell.stateSize.length:1,e=[];for(let n=0;n<t;++n)e.push(null);return e}else return this.states_}set states(t){this.states_=t}build(t){if(this.numConstants!=null)throw new vt("Constants support is not implemented in RNN yet.");ky(t)&&(t=t[0]),t=t;let n=this.stateful?t[0]:null,o=t.slice(2);this.inputSpec[0]=new ye({shape:[n,null,...o]});let s=[t[0]].concat(t.slice(2));this.cell.build(s);let i;if(Array.isArray(this.cell.stateSize)?i=this.cell.stateSize:i=[this.cell.stateSize],this.stateSpec!=null){if(!y.arraysEqual(this.stateSpec.map(a=>a.shape[a.shape.length-1]),i))throw new z(`An initialState was passed that is not compatible with cell.stateSize. Received stateSpec=${this.stateSpec}; However cell.stateSize is ${this.cell.stateSize}`)}else this.stateSpec=i.map(a=>new ye({shape:[null,a]}));this.stateful&&this.resetStates()}resetStates(t,e=!1){B(()=>{if(!this.stateful)throw new vn("Cannot call resetStates() on an RNN Layer that is not stateful.");let n=this.inputSpec[0].shape[0];if(n==null)throw new z("If an RNN is stateful, it needs to know its batch size. Specify the batch size of your input tensors: \n- If using a Sequential model, specify the batch size by passing a `batchInputShape` option to your first layer.\n- If using the functional API, specify the batch size by passing a `batchShape` option to your Input layer.");if(this.states_==null)Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map(o=>Ne([n,o])):this.states_=[Ne([n,this.cell.stateSize])];else if(t==null)St(this.states_),this.keptStates!=null&&(St(this.keptStates),this.keptStates=[]),Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map(o=>Ne([n,o])):this.states_[0]=Ne([n,this.cell.stateSize]);else{if(Array.isArray(t)||(t=[t]),t.length!==this.states_.length)throw new z(`Layer ${this.name} expects ${this.states_.length} state(s), but it received ${t.length} state value(s). Input received: ${t}`);e===!0?this.keptStates.push(this.states_.slice()):St(this.states_);for(let o=0;o<this.states_.length;++o){let s=t[o],i=Array.isArray(this.cell.stateSize)?this.cell.stateSize[o]:this.cell.stateSize,a=[n,i];if(!y.arraysEqual(s.shape,a))throw new z(`State ${o} is incompatible with layer ${this.name}: expected shape=${a}, received shape=${s.shape}`);this.states_[o]=s}}this.states_=this.states_.map(o=>De(o.clone()))})}apply(t,e){let n=e==null?null:e.initialState,o=e==null?null:e.constants;e==null&&(e={});let s=O0(t,n,o,this.numConstants);t=s.inputs,n=s.initialState,o=s.constants;let i=[],a=[];if(n!=null){e.initialState=n,i=i.concat(n),this.stateSpec=[];for(let l of n)this.stateSpec.push(new ye({shape:l.shape}));a=a.concat(this.stateSpec)}if(o!=null&&(e.constants=o,i=i.concat(o),this.numConstants=o.length),i[0]instanceof Jr){let l=[t].concat(i),c=this.inputSpec.concat(a),p=this.inputSpec;this.inputSpec=c;let m=super.apply(l,e);return this.inputSpec=p,m}else return super.apply(t,e)}call(t,e){return B(()=>{let n=e==null?null:e.mask,o=e==null?null:e.training,s=e==null?null:e.initialState;t=At(t),s==null&&(this.stateful?s=this.states_:s=this.getInitialState(t));let i=Array.isArray(this.cell.stateSize)?this.cell.stateSize.length:1;if(s.length!==i)throw new z(`RNN Layer has ${i} state(s) but was passed ${s.length} initial state(s).`);this.unroll&&console.warn("Ignoring unroll = true for RNN layer, due to imperative backend.");let a={training:o},l=P0((d,h)=>{let g=this.cell.call([d].concat(h),a);return[g[0],g.slice(1)]},t,s,this.goBackwards,n,null,this.unroll,this.returnSequences),c=l[0],p=l[1],m=l[2];this.stateful&&this.resetStates(m,o);let f=this.returnSequences?p:c;return this.returnState?[f].concat(m):f})}getInitialState(t){return B(()=>{let e=Ne(t.shape);return e=ft(e,[1,2]),e=el(e),Array.isArray(this.cell.stateSize)?this.cell.stateSize.map(n=>n>1?vy(e,[1,n]):e):this.cell.stateSize>1?[vy(e,[1,this.cell.stateSize])]:[e]})}get trainableWeights(){return this.trainable?this.cell.trainableWeights:[]}get nonTrainableWeights(){return this.trainable?this.cell.nonTrainableWeights:this.cell.weights}setFastWeightInitDuringBuild(t){super.setFastWeightInitDuringBuild(t),this.cell!=null&&this.cell.setFastWeightInitDuringBuild(t)}getConfig(){let t=super.getConfig(),e={returnSequences:this.returnSequences,returnState:this.returnState,goBackwards:this.goBackwards,stateful:this.stateful,unroll:this.unroll};this.numConstants!=null&&(e.numConstants=this.numConstants);let n=this.cell.getConfig();return this.getClassName()===Nn.className&&(e.cell={className:this.cell.getClassName(),config:n}),Object.assign({},n,t,e)}static fromConfig(t,e,n={}){let o=e.cell,s=hn(o,n);return new t(Object.assign(e,{cell:s}))}};Nn.className="RNN";Q.registerClass(Nn);var il=class extends Rt{},wc=class extends il{constructor(t){super(t),this.DEFAULT_ACTIVATION="tanh",this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_RECURRENT_INITIALIZER="orthogonal",this.DEFAULT_BIAS_INITIALIZER="zeros",this.units=t.units,Ze(this.units,"units"),this.activation=Ks(t.activation==null?this.DEFAULT_ACTIVATION:t.activation),this.useBias=t.useBias==null?!0:t.useBias,this.kernelInitializer=de(t.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.recurrentInitializer=de(t.recurrentInitializer||this.DEFAULT_RECURRENT_INITIALIZER),this.biasInitializer=de(t.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.kernelRegularizer=be(t.kernelRegularizer),this.recurrentRegularizer=be(t.recurrentRegularizer),this.biasRegularizer=be(t.biasRegularizer),this.kernelConstraint=ze(t.kernelConstraint),this.recurrentConstraint=ze(t.recurrentConstraint),this.biasConstraint=ze(t.biasConstraint),this.dropout=ac([1,Us([0,t.dropout==null?0:t.dropout])]),this.recurrentDropout=ac([1,Us([0,t.recurrentDropout==null?0:t.recurrentDropout])]),this.dropoutFunc=t.dropoutFunc,this.stateSize=this.units,this.dropoutMask=null,this.recurrentDropoutMask=null}build(t){t=Jt(t),this.kernel=this.addWeight("kernel",[t[t.length-1],this.units],null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.recurrentKernel=this.addWeight("recurrent_kernel",[this.units,this.units],null,this.recurrentInitializer,this.recurrentRegularizer,!0,this.recurrentConstraint),this.useBias?this.bias=this.addWeight("bias",[this.units],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint):this.bias=null,this.built=!0}call(t,e){return B(()=>{if(t=t,t.length!==2)throw new z(`SimpleRNNCell expects 2 input Tensors, got ${t.length}.`);let n=t[1];t=t[0];let o=e.training==null?!1:e.training;0<this.dropout&&this.dropout<1&&this.dropoutMask==null&&(this.dropoutMask=ll({ones:()=>xr(t),rate:this.dropout,training:o,dropoutFunc:this.dropoutFunc})),0<this.recurrentDropout&&this.recurrentDropout<1&&this.recurrentDropoutMask==null&&(this.recurrentDropoutMask=ll({ones:()=>xr(n),rate:this.recurrentDropout,training:o,dropoutFunc:this.dropoutFunc}));let s,i=this.dropoutMask,a=this.recurrentDropoutMask;i!=null?s=No(R(t,i),this.kernel.read()):s=No(t,this.kernel.read()),this.bias!=null&&(s=mn(s,this.bias.read())),a!=null&&(n=R(n,a));let u=X(s,No(n,this.recurrentKernel.read()));return this.activation!=null&&(u=this.activation.apply(u)),[u,u]})}getConfig(){let t=super.getConfig(),e={units:this.units,activation:qs(this.activation),useBias:this.useBias,kernelInitializer:ke(this.kernelInitializer),recurrentInitializer:ke(this.recurrentInitializer),biasInitializer:ke(this.biasInitializer),kernelRegularizer:me(this.kernelRegularizer),recurrentRegularizer:me(this.recurrentRegularizer),biasRegularizer:me(this.biasRegularizer),activityRegularizer:me(this.activityRegularizer),kernelConstraint:Me(this.kernelConstraint),recurrentConstraint:Me(this.recurrentConstraint),biasConstraint:Me(this.biasConstraint),dropout:this.dropout,recurrentDropout:this.recurrentDropout};return Object.assign({},t,e)}};wc.className="SimpleRNNCell";Q.registerClass(wc);var of=class extends Nn{constructor(t){t.cell=new wc(t),super(t)}call(t,e){return B(()=>{this.cell.dropoutMask!=null&&(St(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&(St(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null);let n=e==null?null:e.mask,o=e==null?null:e.training,s=e==null?null:e.initialState;return super.call(t,{mask:n,training:o,initialState:s})})}static fromConfig(t,e){return new t(e)}};of.className="SimpleRNN";Q.registerClass(of);var Cc=class extends il{constructor(t){if(super(t),this.DEFAULT_ACTIVATION="tanh",this.DEFAULT_RECURRENT_ACTIVATION="hardSigmoid",this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_RECURRENT_INITIALIZER="orthogonal",this.DEFAULT_BIAS_INITIALIZER="zeros",t.resetAfter)throw new z("GRUCell does not support reset_after parameter set to true.");this.units=t.units,Ze(this.units,"units"),this.activation=Ks(t.activation===void 0?this.DEFAULT_ACTIVATION:t.activation),this.recurrentActivation=Ks(t.recurrentActivation===void 0?this.DEFAULT_RECURRENT_ACTIVATION:t.recurrentActivation),this.useBias=t.useBias==null?!0:t.useBias,this.kernelInitializer=de(t.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.recurrentInitializer=de(t.recurrentInitializer||this.DEFAULT_RECURRENT_INITIALIZER),this.biasInitializer=de(t.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.kernelRegularizer=be(t.kernelRegularizer),this.recurrentRegularizer=be(t.recurrentRegularizer),this.biasRegularizer=be(t.biasRegularizer),this.kernelConstraint=ze(t.kernelConstraint),this.recurrentConstraint=ze(t.recurrentConstraint),this.biasConstraint=ze(t.biasConstraint),this.dropout=ac([1,Us([0,t.dropout==null?0:t.dropout])]),this.recurrentDropout=ac([1,Us([0,t.recurrentDropout==null?0:t.recurrentDropout])]),this.dropoutFunc=t.dropoutFunc,this.implementation=t.implementation,this.stateSize=this.units,this.dropoutMask=null,this.recurrentDropoutMask=null}build(t){t=Jt(t);let e=t[t.length-1];this.kernel=this.addWeight("kernel",[e,this.units*3],null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.recurrentKernel=this.addWeight("recurrent_kernel",[this.units,this.units*3],null,this.recurrentInitializer,this.recurrentRegularizer,!0,this.recurrentConstraint),this.useBias?this.bias=this.addWeight("bias",[this.units*3],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint):this.bias=null,this.built=!0}call(t,e){return B(()=>{if(t=t,t.length!==2)throw new z(`GRUCell expects 2 input Tensors (inputs, h, c), got ${t.length}.`);let n=e.training==null?!1:e.training,o=t[1];t=t[0],0<this.dropout&&this.dropout<1&&this.dropoutMask==null&&(this.dropoutMask=ll({ones:()=>xr(t),rate:this.dropout,training:n,count:3,dropoutFunc:this.dropoutFunc})),0<this.recurrentDropout&&this.recurrentDropout<1&&this.recurrentDropoutMask==null&&(this.recurrentDropoutMask=ll({ones:()=>xr(o),rate:this.recurrentDropout,training:n,count:3,dropoutFunc:this.dropoutFunc}));let s=this.dropoutMask,i=this.recurrentDropoutMask,a,u,l;0<this.dropout&&this.dropout<1&&(t=R(t,s[0]));let c=No(t,this.kernel.read());this.useBias&&(c=mn(c,this.bias.read())),0<this.recurrentDropout&&this.recurrentDropout<1&&(o=R(o,i[0]));let p=this.recurrentKernel.read(),[m,f]=cr(p,[2*this.units,this.units],p.rank-1),d=No(o,m),[h,g,x]=cr(c,3,c.rank-1),[b,w]=cr(d,2,d.rank-1);a=this.recurrentActivation.apply(X(h,b)),u=this.recurrentActivation.apply(X(g,w));let C=No(R(u,o),f);l=this.activation.apply(X(x,C));let N=X(R(a,o),R(X(1,Ut(a)),l));return[N,N]})}getConfig(){let t=super.getConfig(),e={units:this.units,activation:qs(this.activation),recurrentActivation:qs(this.recurrentActivation),useBias:this.useBias,kernelInitializer:ke(this.kernelInitializer),recurrentInitializer:ke(this.recurrentInitializer),biasInitializer:ke(this.biasInitializer),kernelRegularizer:me(this.kernelRegularizer),recurrentRegularizer:me(this.recurrentRegularizer),biasRegularizer:me(this.biasRegularizer),activityRegularizer:me(this.activityRegularizer),kernelConstraint:Me(this.kernelConstraint),recurrentConstraint:Me(this.recurrentConstraint),biasConstraint:Me(this.biasConstraint),dropout:this.dropout,recurrentDropout:this.recurrentDropout,implementation:this.implementation,resetAfter:!1};return Object.assign({},t,e)}};Cc.className="GRUCell";Q.registerClass(Cc);var sf=class extends Nn{constructor(t){t.implementation===0&&console.warn("`implementation=0` has been deprecated, and now defaults to `implementation=1`. Please update your layer call."),t.cell=new Cc(t),super(t)}call(t,e){return B(()=>{this.cell.dropoutMask!=null&&(St(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&(St(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null);let n=e==null?null:e.mask,o=e==null?null:e.training,s=e==null?null:e.initialState;return super.call(t,{mask:n,training:o,initialState:s})})}static fromConfig(t,e){return e.implmentation===0&&(e.implementation=1),new t(e)}};sf.className="GRU";Q.registerClass(sf);var al=class extends il{constructor(t){super(t),this.DEFAULT_ACTIVATION="tanh",this.DEFAULT_RECURRENT_ACTIVATION="hardSigmoid",this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_RECURRENT_INITIALIZER="orthogonal",this.DEFAULT_BIAS_INITIALIZER="zeros",this.units=t.units,Ze(this.units,"units"),this.activation=Ks(t.activation===void 0?this.DEFAULT_ACTIVATION:t.activation),this.recurrentActivation=Ks(t.recurrentActivation===void 0?this.DEFAULT_RECURRENT_ACTIVATION:t.recurrentActivation),this.useBias=t.useBias==null?!0:t.useBias,this.kernelInitializer=de(t.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.recurrentInitializer=de(t.recurrentInitializer||this.DEFAULT_RECURRENT_INITIALIZER),this.biasInitializer=de(t.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.unitForgetBias=t.unitForgetBias,this.kernelRegularizer=be(t.kernelRegularizer),this.recurrentRegularizer=be(t.recurrentRegularizer),this.biasRegularizer=be(t.biasRegularizer),this.kernelConstraint=ze(t.kernelConstraint),this.recurrentConstraint=ze(t.recurrentConstraint),this.biasConstraint=ze(t.biasConstraint),this.dropout=ac([1,Us([0,t.dropout==null?0:t.dropout])]),this.recurrentDropout=ac([1,Us([0,t.recurrentDropout==null?0:t.recurrentDropout])]),this.dropoutFunc=t.dropoutFunc,this.implementation=t.implementation,this.stateSize=[this.units,this.units],this.dropoutMask=null,this.recurrentDropoutMask=null}build(t){var e;t=Jt(t);let n=t[t.length-1];this.kernel=this.addWeight("kernel",[n,this.units*4],null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.recurrentKernel=this.addWeight("recurrent_kernel",[this.units,this.units*4],null,this.recurrentInitializer,this.recurrentRegularizer,!0,this.recurrentConstraint);let o;if(this.useBias){if(this.unitForgetBias){let s=this.biasInitializer,i=this.units;o=new(e=class extends fn{apply(u,l){let c=s.apply([i]),p=new xu().apply([i]),m=s.apply([i*2]);return C0(C0(c,p),m)}},e.className="CustomInit",e)}else o=this.biasInitializer;this.bias=this.addWeight("bias",[this.units*4],null,o,this.biasRegularizer,!0,this.biasConstraint)}else this.bias=null;this.built=!0}call(t,e){return B(()=>{let n=e.training==null?!1:e.training;if(t=t,t.length!==3)throw new z(`LSTMCell expects 3 input Tensors (inputs, h, c), got ${t.length}.`);let o=t[1],s=t[2];t=t[0],0<this.dropout&&this.dropout<1&&this.dropoutMask==null&&(this.dropoutMask=ll({ones:()=>xr(t),rate:this.dropout,training:n,count:4,dropoutFunc:this.dropoutFunc})),0<this.recurrentDropout&&this.recurrentDropout<1&&this.recurrentDropoutMask==null&&(this.recurrentDropoutMask=ll({ones:()=>xr(o),rate:this.recurrentDropout,training:n,count:4,dropoutFunc:this.dropoutFunc}));let i=this.dropoutMask,a=this.recurrentDropoutMask,u,l,c,p;0<this.dropout&&this.dropout<1&&(t=R(t,i[0]));let m=No(t,this.kernel.read());0<this.recurrentDropout&&this.recurrentDropout<1&&(o=R(o,a[0])),m=X(m,No(o,this.recurrentKernel.read())),this.useBias&&(m=mn(m,this.bias.read()));let[f,d,h,g]=cr(m,4,m.rank-1);u=this.recurrentActivation.apply(f),l=this.recurrentActivation.apply(d),c=X(R(l,s),R(u,this.activation.apply(h))),p=this.recurrentActivation.apply(g);let x=R(p,this.activation.apply(c));return[x,x,c]})}getConfig(){let t=super.getConfig(),e={units:this.units,activation:qs(this.activation),recurrentActivation:qs(this.recurrentActivation),useBias:this.useBias,kernelInitializer:ke(this.kernelInitializer),recurrentInitializer:ke(this.recurrentInitializer),biasInitializer:ke(this.biasInitializer),unitForgetBias:this.unitForgetBias,kernelRegularizer:me(this.kernelRegularizer),recurrentRegularizer:me(this.recurrentRegularizer),biasRegularizer:me(this.biasRegularizer),activityRegularizer:me(this.activityRegularizer),kernelConstraint:Me(this.kernelConstraint),recurrentConstraint:Me(this.recurrentConstraint),biasConstraint:Me(this.biasConstraint),dropout:this.dropout,recurrentDropout:this.recurrentDropout,implementation:this.implementation};return Object.assign({},t,e)}};al.className="LSTMCell";Q.registerClass(al);var af=class extends Nn{constructor(t){t.implementation===0&&console.warn("`implementation=0` has been deprecated, and now defaults to `implementation=1`. Please update your layer call."),t.cell=new al(t),super(t)}call(t,e){return B(()=>{this.cell.dropoutMask!=null&&(St(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&(St(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null);let n=e==null?null:e.mask,o=e==null?null:e.training,s=e==null?null:e.initialState;return super.call(t,{mask:n,training:o,initialState:s})})}static fromConfig(t,e){return e.implmentation===0&&(e.implementation=1),new t(e)}};af.className="LSTM";Q.registerClass(af);var Ic=class extends il{constructor(t){super(t),this.cells=t.cells}get stateSize(){let t=[];for(let e of this.cells.slice().reverse())Array.isArray(e.stateSize)?t.push(...e.stateSize):t.push(e.stateSize);return t}call(t,e){return B(()=>{t=t;let n=t.slice(1),o=[];for(let a of this.cells.slice().reverse())Array.isArray(a.stateSize)?o.push(n.splice(0,a.stateSize.length)):o.push(n.splice(0,1));o.reverse();let s=[],i;for(let a=0;a<this.cells.length;++a){let u=this.cells[a];n=o[a],a===0?i=[t[0]].concat(n):i=[i[0]].concat(n),i=u.call(i,e),s.push(i.slice(1))}n=[];for(let a of s.slice().reverse())n.push(...a);return[i[0]].concat(n)})}build(t){ky(t)&&(t=t[0]),t=t;let e;this.cells.forEach((n,o)=>{Ws(`RNNCell_${o}`,()=>{n.build(t),Array.isArray(n.stateSize)?e=n.stateSize[0]:e=n.stateSize,t=[t[0],e]})}),this.built=!0}getConfig(){let t=super.getConfig(),e=s=>({className:s.getClassName(),config:s.getConfig()}),o={cells:this.cells.map(e)};return Object.assign({},t,o)}static fromConfig(t,e,n={}){let o=[];for(let s of e.cells)o.push(hn(s,n));return new t({cells:o})}get trainableWeights(){if(!this.trainable)return[];let t=[];for(let e of this.cells)t.push(...e.trainableWeights);return t}get nonTrainableWeights(){let t=[];for(let e of this.cells)t.push(...e.nonTrainableWeights);if(!this.trainable){let e=[];for(let n of this.cells)e.push(...n.trainableWeights);return e.concat(t)}return t}getWeights(){let t=[];for(let e of this.cells)t.push(...e.weights);return xh(t)}setWeights(t){let e=[];for(let n of this.cells){let o=n.weights.length,s=t.splice(o);for(let i=0;i<n.weights.length;++i)e.push([n.weights[i],s[i]])}Om(e)}};Ic.className="StackedRNNCells";Q.registerClass(Ic);function ll(r){let{ones:t,rate:e,training:n=!1,count:o=1,dropoutFunc:s}=r,i=()=>s!=null?s(t(),e):Ny(t(),e),a=()=>gu(i,t,n);return!o||o<=1?De(a().clone()):Array(o).fill(void 0).map(a).map(l=>De(l.clone()))}var V8=function(r,t){var e={};for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&t.indexOf(n)<0&&(e[n]=r[n]);if(r!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,n=Object.getOwnPropertySymbols(r);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(r,n[o])&&(e[n[o]]=r[n[o]]);return e};var ub=class extends Nn{constructor(t){if(t.unroll)throw new vt("Unrolling is not possible with convolutional RNNs.");if(Array.isArray(t.cell))throw new vt("It is not possible at the moment to stack convolutional cells.");super(t),this.inputSpec=[new ye({ndim:5})]}call(t,e){return B(()=>{if(this.cell.dropoutMask!=null&&(St(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&(St(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null),e&&e.constants)throw new z("ConvRNN2D cell does not support constants");let n=e==null?null:e.mask,o=e==null?null:e.training,s=e==null?null:e.initialState;return super.call(t,{mask:n,training:o,initialState:s})})}computeOutputShape(t){let e=this.computeSingleOutputShape(t);return this.returnSequences||(e=[e[0],...e.slice(2)]),this.returnState&&(e=[e,...Array(2).fill([t[0],...e.slice(-3)])]),e}getInitialState(t){return B(()=>{let{stateSize:e}=this.cell,n=t.shape,o=this.computeSingleOutputShape(n),s=[o[0],...o.slice(2)],i=Ne(s);return Array.isArray(e)?Array(e.length).fill(i):[i]})}resetStates(t,e=!1){B(()=>{if(!this.stateful)throw new vn("Cannot call resetStates() on an RNN Layer that is not stateful.");let n=this.inputSpec[0].shape,o=this.computeSingleOutputShape(n),s=[o[0],...o.slice(2)];if(n[0]==null)throw new z("If an RNN is stateful, it needs to know its batch size. Specify the batch size of your input tensors: \n- If using a Sequential model, specify the batch size by passing a `batchInputShape` option to your first layer.\n- If using the functional API, specify the batch size by passing a `batchShape` option to your Input layer.");if(this.getStates()==null)Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map(()=>Ne(s)):this.states_=[Ne(s)];else if(t==null)St(this.states_),this.keptStates!=null&&(St(this.keptStates),this.keptStates=[]),Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map(()=>Ne(s)):this.states_[0]=Ne(s);else{if(Array.isArray(t)||(t=[t]),t.length!==this.states_.length)throw new z(`Layer ${this.name} expects ${this.states_.length} state(s), but it received ${t.length} state value(s). Input received: ${t}`);e?this.keptStates.push(this.states_.slice()):St(this.states_);for(let a=0;a<this.states_.length;++a){let u=t[a],l=s;if(!y.arraysEqual(u.shape,l))throw new z(`State ${a} is incompatible with layer ${this.name}: expected shape=${l}, received shape=${u.shape}`);this.states_[a]=u}}this.states_=this.states_.map(a=>De(a.clone()))})}computeSingleOutputShape(t){let{dataFormat:e,filters:n,kernelSize:o,padding:s,strides:i,dilationRate:a}=this.cell,u=e==="channelsFirst",l=t[u?3:2],c=t[u?4:3],p=Sn(l,o[0],s,i[0],a[0]),m=Sn(c,o[1],s,i[1],a[1]);return[...t.slice(0,2),...u?[n,p,m]:[p,m,n]]}};ub.className="ConvRNN2D";var vc=class extends al{constructor(t){let{filters:e,kernelSize:n,strides:o,padding:s,dataFormat:i,dilationRate:a}=t;super(Object.assign({},t,{units:e})),this.filters=e,Ze(this.filters,"filters"),this.kernelSize=wu(n,2,"kernelSize"),this.kernelSize.forEach(u=>Ze(u,"kernelSize")),this.strides=wu(o||1,2,"strides"),this.strides.forEach(u=>Ze(u,"strides")),this.padding=s||"valid",cn(this.padding),this.dataFormat=i||"channelsLast",Re(this.dataFormat),this.dilationRate=wu(a||1,2,"dilationRate"),this.dilationRate.forEach(u=>Ze(u,"dilationRate"))}build(t){var e;t=Jt(t);let n=this.dataFormat==="channelsFirst"?1:t.length-1;if(t[n]==null)throw new z(`The channel dimension of the input should be defined. Found ${t[n]}`);let o=t[n],s=4,i=this.kernelSize.concat([o,this.filters*s]);this.kernel=this.addWeight("kernel",i,null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint);let a=this.kernelSize.concat([this.filters,this.filters*s]);if(this.recurrentKernel=this.addWeight("recurrent_kernel",a,null,this.recurrentInitializer,this.recurrentRegularizer,!0,this.recurrentConstraint),this.useBias){let u;if(this.unitForgetBias){let l=this.biasInitializer,c=this.filters;u=new(e=class extends fn{apply(m,f){let d=l.apply([c]),h=lr([c]),g=l.apply([c*2]);return Sm([d,h,g])}},e.className="CustomInit",e)}else u=this.biasInitializer;this.bias=this.addWeight("bias",[this.filters*s],null,u,this.biasRegularizer,!0,this.biasConstraint)}this.built=!0}call(t,e){return B(()=>{if(t.length!==3)throw new z(`ConvLSTM2DCell expects 3 input Tensors (inputs, h, c), got ${t.length}.`);let n=e.training||!1,o=t[0],s=t[1],i=t[2],a=4;0<this.dropout&&this.dropout<1&&this.dropoutMask==null&&(this.dropoutMask=ll({ones:()=>xr(o),rate:this.dropout,training:n,count:a,dropoutFunc:this.dropoutFunc}));let u=this.dropoutMask,l=(rt,ot,at)=>!ot||!ot[at]?rt:R(ot[at],rt),c=l(o,u,0),p=l(o,u,1),m=l(o,u,2),f=l(o,u,3);0<this.recurrentDropout&&this.recurrentDropout<1&&this.recurrentDropoutMask==null&&(this.recurrentDropoutMask=ll({ones:()=>xr(s),rate:this.recurrentDropout,training:n,count:a,dropoutFunc:this.dropoutFunc}));let d=this.recurrentDropoutMask,h=l(s,d,0),g=l(s,d,1),x=l(s,d,2),b=l(s,d,3),w=3,[C,N,_,A]=cr(this.kernel.read(),a,w),[$,F,P,V]=this.useBias?cr(this.bias.read(),a):[null,null,null,null];c=this.inputConv(c,C,$,this.padding),p=this.inputConv(p,N,F,this.padding),m=this.inputConv(m,_,P,this.padding),f=this.inputConv(f,A,V,this.padding);let[G,W,q,H]=cr(this.recurrentKernel.read(),a,w);h=this.recurrentConv(h,G),g=this.recurrentConv(g,W),x=this.recurrentConv(x,q),b=this.recurrentConv(b,H);let j=this.recurrentActivation.apply(X(c,h)),Y=this.recurrentActivation.apply(X(p,g)),Z=X(R(Y,i),R(j,this.activation.apply(X(m,x)))),et=R(this.recurrentActivation.apply(X(f,b)),this.activation.apply(Z));return[et,et,Z]})}getConfig(){let t=super.getConfig(),{units:e}=t,n=V8(t,["units"]),o={filters:this.filters,kernelSize:this.kernelSize,padding:this.padding,dataFormat:this.dataFormat,dilationRate:this.dilationRate,strides:this.strides};return Object.assign({},n,o)}inputConv(t,e,n,o){let s=Cn(t,e,this.strides,o||"valid",this.dataFormat==="channelsFirst"?"NCHW":"NHWC",this.dilationRate);return n?mn(s,n,this.dataFormat):s}recurrentConv(t,e){return Cn(t,e,1,"same",this.dataFormat==="channelsFirst"?"NCHW":"NHWC")}};vc.className="ConvLSTM2DCell";Q.registerClass(vc);var lf=class extends ub{constructor(t){let e=new vc(t);super(Object.assign({},t,{cell:e}))}static fromConfig(t,e){return new t(e)}};lf.className="ConvLSTM2D";Q.registerClass(lf);var Sc=class extends Rt{constructor(t){super(t),this.rate=Math.max(Math.min(t.rate,1),0),this.noiseShape=t.noiseShape,this.seed=t.seed,this.supportsMasking=!0}getNoiseShape(t){if(this.noiseShape==null)return this.noiseShape;let e=t.shape,n=[];for(let o=0;o<this.noiseShape.length;++o)n.push(this.noiseShape[o]==null?e[o]:this.noiseShape[o]);return n}call(t,e){return B(()=>{this.invokeCallHook(t,e);let n=At(t);if(0<this.rate&&this.rate<1){let o=e.training==null?!1:e.training,s=this.getNoiseShape(n);return gu(()=>Ny(n,this.rate,s,this.seed),()=>n,o)}return t})}getConfig(){let t={rate:this.rate,noiseShape:this.noiseShape,seed:this.seed},e=super.getConfig();return Object.assign(t,e),t}dispose(){return super.dispose()}};Sc.className="Dropout";Q.registerClass(Sc);var uf=class extends Sc{constructor(t){super(t),this.inputSpec=[{ndim:3}]}getNoiseShape(t){let e=t.shape;return[e[0],1,e[2]]}};uf.className="SpatialDropout1D";Q.registerClass(uf);var cf=class extends Rt{constructor(t){if(super(t),this.activation=null,this.useBias=!0,this.kernel=null,this.bias=null,this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_BIAS_INITIALIZER="zeros",t.batchInputShape==null&&t.inputShape==null&&t.inputDim!=null){let e=null;t.batchSize!=null&&(e=t.batchSize),this.batchInputShape=[e,t.inputDim]}this.units=t.units,Ze(this.units,"units"),this.activation=Ks(t.activation),t.useBias!=null&&(this.useBias=t.useBias),this.kernelInitializer=de(t.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.biasInitializer=de(t.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.kernelConstraint=ze(t.kernelConstraint),this.biasConstraint=ze(t.biasConstraint),this.kernelRegularizer=be(t.kernelRegularizer),this.biasRegularizer=be(t.biasRegularizer),this.activityRegularizer=be(t.activityRegularizer),this.supportsMasking=!0,this.inputSpec=[{minNDim:2}]}build(t){t=Jt(t);let e=t[t.length-1];this.kernel==null&&(this.kernel=this.addWeight("kernel",[e,this.units],null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.useBias&&(this.bias=this.addWeight("bias",[this.units],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint))),this.inputSpec=[{minNDim:2,axes:{[-1]:e}}],this.built=!0}computeOutputShape(t){t=Jt(t);let e=t.slice();return e[e.length-1]=this.units,e}call(t,e){return B(()=>{this.invokeCallHook(t,e);let n=At(t),o=xy(this.activation.getClassName()),s;return o!=null?s=No(n,this.kernel.read(),o,this.bias?this.bias.read():null):(s=No(n,this.kernel.read()),this.bias!=null&&(s=mn(s,this.bias.read())),this.activation!=null&&(s=this.activation.apply(s))),s})}getConfig(){let t={units:this.units,activation:qs(this.activation),useBias:this.useBias,kernelInitializer:ke(this.kernelInitializer),biasInitializer:ke(this.biasInitializer),kernelRegularizer:me(this.kernelRegularizer),biasRegularizer:me(this.biasRegularizer),activityRegularizer:me(this.activityRegularizer),kernelConstraint:Me(this.kernelConstraint),biasConstraint:Me(this.biasConstraint)},e=super.getConfig();return Object.assign(t,e),t}};cf.className="Dense";Q.registerClass(cf);var pf=class extends Rt{constructor(t){t=t||{},super(t),this.inputSpec=[{minNDim:3}],this.dataFormat=t.dataFormat}computeOutputShape(t){t=Jt(t);for(let e of t.slice(1))if(e==null)throw new z(`The shape of the input to "Flatten" is not fully defined (got ${t.slice(1)}). Make sure to pass a complete "input_shape" or "batch_input_shape" argument to the first layer in your model.`);return[t[0],So(t,1)]}call(t,e){return B(()=>{this.invokeCallHook(t,e);let n=At(t);if(this.dataFormat==="channelsFirst"&&n.rank>1){let o=[0];for(let s=2;s<n.rank;++s)o.push(s);o.push(1),n=Ot(n,o)}return E$(n)})}getConfig(){let t={};this.dataFormat!=null&&(t.dataFormat=this.dataFormat);let e=super.getConfig();return Object.assign(t,e),t}};pf.className="Flatten";Q.registerClass(pf);var mf=class extends Rt{constructor(t){super(t),this.supportsMasking=!0,this.activation=Ks(t.activation)}call(t,e){return B(()=>{this.invokeCallHook(t,e);let n=At(t);return this.activation.apply(n)})}getConfig(){let t={activation:qs(this.activation)},e=super.getConfig();return Object.assign(t,e),t}};mf.className="Activation";Q.registerClass(mf);var ff=class extends Rt{constructor(t){super(t),this.n=t.n,this.inputSpec=[{ndim:2}]}computeOutputShape(t){return[t[0],this.n,t[1]]}call(t,e){return B(()=>(t=At(t),k$(t,this.n)))}getConfig(){let t={n:this.n},e=super.getConfig();return Object.assign(t,e),t}};ff.className="RepeatVector";Q.registerClass(ff);var df=class extends Rt{constructor(t){super(t),this.targetShape=t.targetShape;for(let e=0;e<this.targetShape.length;++e)this.isUnknown(this.targetShape[e])&&(this.targetShape[e]=null)}isUnknown(t){return t<0||t==null}fixUnknownDimension(t,e){let n="Total size of new array must be unchanged.",o=e.slice(),s=1,i=null;for(let u=0;u<o.length;++u){let l=o[u];if(this.isUnknown(l))if(i===null)i=u;else throw new z("Can only specifiy one unknown dimension.");else s*=l}let a=So(t);if(i!==null){if(s===0||a%s!==0)throw new z(n);o[i]=a/s}else if(a!==s)throw new z(n);return o}computeOutputShape(t){let e=!1;for(let n=0;n<t.length;++n)if(this.isUnknown(t[n])){e=!0;break}return e?t.slice(0,1).concat(this.targetShape):t.slice(0,1).concat(this.fixUnknownDimension(t.slice(1),this.targetShape))}call(t,e){return B(()=>{this.invokeCallHook(t,e);let n=At(t),o=n.shape,s=o.slice(0,1).concat(this.fixUnknownDimension(o.slice(1),this.targetShape));return D(n,s)})}getConfig(){let t={targetShape:this.targetShape},e=super.getConfig();return Object.assign(t,e),t}};df.className="Reshape";Q.registerClass(df);var hf=class extends Rt{constructor(t){if(super(t),t.dims==null)throw new Error("Required configuration field `dims` is missing during Permute constructor call.");if(!Array.isArray(t.dims))throw new Error(`Permute constructor requires \`dims\` to be an Array, but received ${t.dims} instead.`);let e=Yr(1,t.dims.length+1);if(!y.arraysEqual(t.dims.slice().sort(),e))throw new Error("Invalid permutation `dims`: "+JSON.stringify(t.dims)+" `dims` must contain consecutive integers starting from 1.");this.dims=t.dims,this.dimsIncludingBatch=[0].concat(this.dims),this.inputSpec=[new ye({ndim:this.dims.length+1})]}computeOutputShape(t){t=Jt(t);let e=t.slice();return this.dims.forEach((n,o)=>{e[o+1]=t[n]}),e}call(t,e){return Ot(At(t),this.dimsIncludingBatch)}getConfig(){let t={dims:this.dims},e=super.getConfig();return Object.assign(t,e),t}};hf.className="Permute";Q.registerClass(hf);var gf=class extends Rt{constructor(t){super(t==null?{}:t),this.supportsMasking=!0,t!=null?this.maskValue=t.maskValue==null?0:t.maskValue:this.maskValue=0}computeOutputShape(t){return t}getConfig(){let t=super.getConfig(),e={maskValue:this.maskValue};return Object.assign(e,t),e}computeMask(t,e){let n=At(t),o=-1;return Hu(zs(n,this.maskValue),o)}call(t,e){return B(()=>{this.invokeCallHook(t,e);let n=At(t),o=-1,s=!0,i=Hu(zs(n,this.maskValue),o,s);return R(n,J(i,n.dtype))})}};gf.className="Masking";Q.registerClass(gf);var xf=class extends Rt{constructor(t){if(super(t),this.embeddings=null,this.DEFAULT_EMBEDDINGS_INITIALIZER="randomUniform",t.batchInputShape==null&&t.inputShape==null){let e=null;t.batchSize!=null&&(e=t.batchSize),t.inputLength==null?this.batchInputShape=[e,null]:this.batchInputShape=[e].concat(xe(t.inputLength))}this.inputDim=t.inputDim,Ze(this.inputDim,"inputDim"),this.outputDim=t.outputDim,Ze(this.outputDim,"outputDim"),this.embeddingsInitializer=de(t.embeddingsInitializer||this.DEFAULT_EMBEDDINGS_INITIALIZER),this.embeddingsRegularizer=be(t.embeddingsRegularizer),this.activityRegularizer=be(t.activityRegularizer),this.embeddingsConstraint=ze(t.embeddingsConstraint),this.maskZero=t.maskZero,this.supportsMasking=t.maskZero,this.inputLength=t.inputLength}build(t){this.embeddings=this.addWeight("embeddings",[this.inputDim,this.outputDim],this.dtype,this.embeddingsInitializer,this.embeddingsRegularizer,!0,this.embeddingsConstraint),this.built=!0}warnOnIncompatibleInputShape(t){}computeMask(t,e){return B(()=>this.maskZero?(t=At(t),zs(t,It(t))):null)}computeOutputShape(t){if(t=Jt(t),this.inputLength==null)return[...t,this.outputDim];let e=xe(this.inputLength);if(e.length!==t.length-1)throw new z(`"inputLength" is ${this.inputLength}, but received input shape has shape ${t}`);{let n=0;for(let o=0;o<e.length;++o){let s=e[o],i=t[o+1];if(s!=null&&i!=null&&s!==i)throw new z(`"inputLength" is ${this.inputLength}, but received input shape has shape ${t}`);s==null&&(e[n]=i),n++}}return[t[0],...e,this.outputDim]}call(t,e){return B(()=>{this.invokeCallHook(t,e);let n=At(t);n.dtype!=="int32"&&(n=tl(n,"int32"));let o=Sy(this.embeddings.read(),D(n,[n.size]));return D(o,Jt(this.computeOutputShape(n.shape)))})}getConfig(){let t={inputDim:this.inputDim,outputDim:this.outputDim,embeddingsInitializer:ke(this.embeddingsInitializer),embeddingsRegularizer:me(this.embeddingsRegularizer),activityRegularizer:me(this.activityRegularizer),embeddingsConstraint:Me(this.embeddingsConstraint),maskZero:this.maskZero,inputLength:this.inputLength},e=super.getConfig();return Object.assign(t,e),t}};xf.className="Embedding";Q.registerClass(xf);var ul=class extends Rt{constructor(t){super(t||{}),this.supportsMasking=!0}mergeFunction(t){throw new vt}computeElementwiseOpOutputShape(t,e){if(t==null||e==null)return null;if(t.length<e.length)return this.computeElementwiseOpOutputShape(e,t);if(e.length===0)return t;let n=t.slice(0,t.length-e.length);for(let o=0;o<e.length;++o){let s=t[t.length-e.length+o],i=e[o];if(s==null||i==null||s<0||i<0)n.push(null);else if(s===1)n.push(i);else if(i===1)n.push(s);else{if(s!==i)throw new z("Operands could not be broadcast together with shapes "+JSON.stringify(t)+" "+JSON.stringify(e));n.push(s)}}return n}build(t){if(Array.isArray(t)&&!Array.isArray(t[0])&&(t=[Jt(t)]),t=t,t.length<2)throw new z(`A merge layer should be called on an Array of at least 2 inputs. Got ${t.length} input(s).`);let e=[];for(let s of t)s!=null&&s[0]!==null&&e.push(s[0]);if(e=vo(e),e.length>1)throw new z(`Can not merge tensors with different batch sizes. Got tensors with shapes: ${JSON.stringify(t)}.`);let n=t[0]==null?null:t[0].slice(1);for(let s=1;s<t.length;++s){let i=t[s]==null?null:t[s].slice(1);n=this.computeElementwiseOpOutputShape(n,i)}let o=t.map(s=>s.length);t.indexOf(null)===-1&&vo(o).length===1?this.reshapeRequired=!1:this.reshapeRequired=!0}call(t,e){return B(()=>{if(t=t,this.reshapeRequired){let n=[],o=t.map(s=>s.rank);if(o.indexOf(null)===-1){let s=Us(o);for(let i of t){let a=i.rank;for(let u=0;u<s-a;++u)i=el(i,1);n.push(i)}return this.mergeFunction(n)}else{let s=!1;for(let u of t){let l=u.rank;if(l==null){let c=u.shape,p=c[0],m=c.slice(1).concat([p]),f=D(u,[p].concat(So(c.slice(1))));f=Ot(f,[1,0]),f=D(f,m),n.push(f),s=!0}else if(l>1){let c=Yr(1,l).concat([0]);n.push(Ot(u,c)),s=!0}else n.push(u)}let i=this.mergeFunction(n),a=i.rank;if(s){if(a==null){let u=i.shape,l=u.length,c=u[l-1],p=[c].concat(u.slice(0,u.length-1));i=D(Ot(D(i,[-1,c]),[1,0]),p)}else if(a>1){let u=[a-1].concat(Yr(0,a-1));i=Ot(i,u)}}return i}}else return this.mergeFunction(t)})}computeOutputShape(t){t=t;let e;t[0]==null?e=null:e=t[0].slice(1);for(let o=1;o<t.length;++o){let s=t[o]==null?null:t[o].slice(1);e=this.computeElementwiseOpOutputShape(e,s)}let n=[];for(let o of t)o!=null&&o[0]!==null&&n.push(o[0]);return n=vo(n),n.length===1?e=n.concat(e):e=[null].concat(e),e}computeMask(t,e){return B(()=>{if(e==null)return null;if(!Array.isArray(e))throw new z("`mask` should be an Array");if(!Array.isArray(t))throw new z("`inputs` should be an Array");if(e.length!==t.length)throw new z(`The Array 'inputs' and 'mask' are expected to have the same length, but have different lengths (${t.length} vs ${e.length})`);if(e.every(o=>o==null))return null;e=e.map(o=>o==null?o:gr(o,0));let n=e[0];for(let o=1;o<e.length-1;++o)n=Dr(n,e[o]);return n})}},yf=class extends ul{constructor(t){super(t)}mergeFunction(t){return B(()=>{let e=t[0].clone();for(let n=1;n<t.length;++n)e=X(e,t[n]);return e})}};yf.className="Add";Q.registerClass(yf);var bf=class extends ul{constructor(t){super(t)}mergeFunction(t){return B(()=>{let e=t[0].clone();for(let n=1;n<t.length;++n)e=R(e,t[n]);return e})}};bf.className="Multiply";Q.registerClass(bf);var wf=class extends ul{constructor(t){super(t)}mergeFunction(t){return B(()=>{let e=t[0].clone();for(let n=1;n<t.length;++n)e=X(e,t[n]);return R(1/t.length,e)})}};wf.className="Average";Q.registerClass(wf);var Cf=class extends ul{constructor(t){super(t)}mergeFunction(t){return B(()=>{let e=t[0];for(let n=1;n<t.length;++n)e=In(e,t[n]);return e})}};Cf.className="Maximum";Q.registerClass(Cf);var If=class extends ul{constructor(t){super(t)}mergeFunction(t){return B(()=>{let e=t[0];for(let n=1;n<t.length;++n)e=Pi(e,t[n]);return e})}};If.className="Minimum";Q.registerClass(If);var vf=class extends ul{constructor(t){super(t),this.DEFAULT_AXIS=-1,t==null&&(t={}),this.axis=t.axis==null?this.DEFAULT_AXIS:t.axis,this.supportsMasking=!0,this.reshapeRequired=!1}build(t){if(!(Array.isArray(t)&&Array.isArray(t[0]))||t.length===1)throw new z("A `Concatenate` layer should be called on a list of at least 2 inputs");t=t;let e=!0;for(let o of t)if(o!=null){e=!1;break}if(e)return;let n=[];for(let o=0;o<t.length;++o){let s=t[o].slice();s.splice(this.axis,1);let i=!1;for(let a of n)if(y.arraysEqual(a,s)){i=!0;break}i||n.push(s)}if(n.length>1)throw new z("A `Concatenate` layer requires inputs with matching shapes except for the concat axis. Got input shapes: "+JSON.stringify(t))}mergeFunction(t){return B(()=>Sm(t,this.axis))}computeOutputShape(t){if(!(Array.isArray(t)&&Array.isArray(t[0])))throw new z("A `Concatenate` layer should be called on a list of inputs.");let e=t,n=e[0].slice(),o=this.axis<0?n.length+this.axis:this.axis;for(let s of e.slice(1)){if(n[o]==null||s[o]==null){n[o]=null;break}n[o]+=s[o]}return n}computeMask(t,e){if(e==null)return null;if(!Array.isArray(e))throw new z("`mask` should be an array for Concatenate");if(!Array.isArray(t))throw new z("`inputs` should be an array for Concatenate");if(e.length!==t.length)throw new z(`Mismatch in the length of mask (${e.length}) and the legnth of inputs (${t.length})`);return B(()=>{let n=!0;if(e.forEach(i=>{if(i!=null){n=!1;return}}),n)return null;let o=[];for(let i=0;i<t.length;++i)e[i]==null?o.push(J(xr(t[i]),"bool")):e[i].rank<t[i].rank?o.push(gr(e[i],-1)):o.push(e[i]);let s=ne(o,this.axis);return Yp(s,-1,!1)})}getConfig(){let t={axis:this.axis},e=super.getConfig();return Object.assign(t,e),t}};vf.className="Concatenate";Q.registerClass(vf);function kh(r,t){for(;r<0;)r+=t;return r}function G8(r,t,e){if(r.shape.length>3||t.shape.length>3)throw new vt("batchDot is not implemented for tensors of 4D or higher rank yet");if(y.assert(r.shape.length>=2,()=>`batchDot requires the rank of x to be >= 2, but got ${r.shape.length}`),y.assert(r.shape.length>=2,()=>`batchDot requires the rank of y to be >= 2, but got ${t.shape.length}`),typeof e=="number"&&(e=[e,e]),r.dtype==="complex64"||t.dtype==="complex64")throw new vt("batchDot is not implemented for complex64-type Tensors yet.");let n=r.shape.length,o=t.shape.length;e==null&&(e=[n-1,o-2]);let s=e;return B(()=>{let i;if(n>o){i=n-o;let u=[];for(let l=0;l<i;++l)u.push(1);t=D(t,t.shape.concat(u))}else if(o>n){i=o-n;let u=[];for(let l=0;l<i;++l)u.push(1);r=D(r,r.shape.concat(u))}else i=0;let a;if(r.shape.length===2&&t.shape.length===2)s[0]===s[1]?a=ft(R(r,t),s[0]):a=ft(R(Ot(r,[1,0]),t),s[1]);else{let u=s[0]!==r.shape.length-1,l=s[1]===t.shape.length-1;a=Lt(r,t,u,l)}if(i>0){let u;n>o?u=n+o-3:u=n-1;let l=[];for(let c=u;c<u+i;++c)l.push(c);a=Pn(a,l)}return a.shape.length===1&&(a=gr(a,1)),a})}var Sf=class extends ul{constructor(t){super(t),this.axes=t.axes,this.normalize=t.normalize==null?!1:t.normalize,this.supportsMasking=!0,this.reshapeRequired=!1}build(t){y.assert(Array.isArray(t)&&t.length===2&&Array.isArray(t[0])&&Array.isArray(t[1]),()=>"A `Dot` layer should be called on a list of exactly 2 inputs.");let e=t[0],n=t[1];if(e.length>3||n.length>3)throw new vt("Dot layer does not support tensors of 4D or higher rank yet.");let o=this.interpretAxes(e,n);if(e[o[0]]!==n[o[1]])throw new z(`Dimension incompatibility: ${e[o[0]]} !== ${n[o[1]]}`)}mergeFunction(t){if(t.length!==2)throw new z(`A \`Dot\` layer must be called on exactly 2 inputs, but received ${t.length} input(s).`);let e=t[0],n=t[1],o;return Array.isArray(this.axes)?o=this.axes.map((s,i)=>kh(s,t[i].shape.length)):o=[kh(this.axes,e.shape.length),kh(this.axes,n.shape.length)],this.normalize&&(e=yh(e,o[0]),n=yh(n,o[1])),G8(e,n,o)}interpretAxes(t,e){let n;return Array.isArray(this.axes)?n=this.axes:n=[kh(this.axes,t.length),kh(this.axes,e.length)],n}computeOutputShape(t){y.assert(Array.isArray(t)&&t.length===2&&Array.isArray(t[0])&&Array.isArray(t[1]),()=>"A `Dot` layer should be called on a list of exactly 2 inputs.");let e=t[0].slice(),n=t[1].slice();if(e.length>3||n.length>3)throw new vt("Dot layer does not support tensors of 4D or higher rank yet.");let o=this.interpretAxes(e,n);e.splice(o[0],1),n.splice(o[1],1),n.splice(0,1);let s=e.concat(n);return s.length===1&&s.push(1),s}computeMask(t,e){return null}getConfig(){let t={axes:this.axes,normalize:this.normalize},e=super.getConfig();return Object.assign(t,e),t}};Sf.className="Dot";Q.registerClass(Sf);var Nf=class extends Rt{constructor(t){super(t),this.supportsMasking=!0,this.stddev=t.stddev}computeOutputShape(t){return t}getConfig(){let t=super.getConfig(),e={stddev:this.stddev};return Object.assign(e,t),e}call(t,e){return B(()=>{this.invokeCallHook(t,e);let n=At(t);return gu(()=>X(Nm(n.shape,0,this.stddev),n),()=>n,e.training||!1)})}};Nf.className="GaussianNoise";Q.registerClass(Nf);var kf=class extends Rt{constructor(t){super(t),this.supportsMasking=!0,this.rate=t.rate}computeOutputShape(t){return t}getConfig(){let t=super.getConfig(),e={rate:this.rate};return Object.assign(e,t),e}call(t,e){return B(()=>{this.invokeCallHook(t,e);let n=At(t);return this.rate>0&&this.rate<1?gu(()=>{let s=Math.sqrt(this.rate/(1-this.rate));return R(n,Nm(n.shape,1,s))},()=>n,e.training||!1):n})}};kf.className="GaussianDropout";Q.registerClass(kf);var Tf=class extends Rt{constructor(t){super(t),this.supportsMasking=!0,this.rate=t.rate,this.noiseShape=t.noiseShape}_getNoiseShape(t){return this.noiseShape||At(t).shape}computeOutputShape(t){return t}getConfig(){let t=super.getConfig(),e={rate:this.rate};return Object.assign(e,t),e}call(t,e){return B(()=>{if(this.rate<1&&this.rate>0){let n=this._getNoiseShape(t);return gu(()=>{let s=At(t),i=1.6732632423543772,a=1.0507009873554805,u=-i*a,l=Fn(Li(n),this.rate);l=tl(l,"float32");let c=((1-this.rate)*(1+this.rate*u**2))**-.5,p=-c*u*this.rate,m=X(R(s,l),R(X(l,-1),u));return X(R(m,c),p)},()=>At(t),e.training||!1)}return t})}};Tf.className="AlphaDropout";Q.registerClass(Tf);function Th(r,t,e,n,o,s=.001){let i;if(r.rank===2)i=mx(r,t,e,n,o,s);else if(r.rank===3)i=fx(r,t,e,n,o,s);else if(r.rank===4)i=dx(r,t,e,n,o,s);else throw new vt(`batchNormalization is not implemented for array of rank ${r.rank} yet`);return i}function W8(r,t,e,n,o=.001){return B(()=>{let s=Zu(r,n),i=s.mean,a=s.variance;return[Th(r,i,a,e,t,o),i,a]})}function U8(r,t,e,n,o=.001){return B(()=>{let s=Zu(r,n),i=s.mean,a=s.variance,u=[];for(let d of Yr(0,r.rank))n.indexOf(d)!==-1?u.push(1):u.push(r.shape[d]);let l=D(i,u),c=D(a,u),p=t==null?null:D(t,u),m=e==null?null:D(e,u);return[Th(r,l,c,m,p,o),i,a]})}function H8(r,t,e,n,o=.001){return y.arraysEqual(n.slice().sort(),Yr(0,r.rank-1))?W8(r,t,e,n,o):U8(r,t,e,n,o)}var Ef=class extends Rt{constructor(t){t==null&&(t={}),super(t),this.supportsMasking=!0,this.axis=t.axis==null?-1:t.axis,this.momentum=t.momentum==null?.99:t.momentum,this.epsilon=t.epsilon==null?.001:t.epsilon,this.center=t.center==null?!0:t.center,this.scale=t.scale==null?!0:t.scale,this.betaInitializer=de(t.betaInitializer||"zeros"),this.gammaInitializer=de(t.gammaInitializer||"ones"),this.movingMeanInitializer=de(t.movingMeanInitializer||"zeros"),this.movingVarianceInitializer=de(t.movingVarianceInitializer||"ones"),this.betaConstraint=ze(t.betaConstraint),this.gammaConstraint=ze(t.gammaConstraint),this.betaRegularizer=be(t.betaRegularizer),this.gammaRegularizer=be(t.gammaRegularizer)}build(t){t=Jt(t);let e=this.axis>=0?this.axis:this.axis+t.length,n=t[e];if(n==null)throw new z(`Axis ${e} of input tensor should have a defined dimension but the layer received an input with shape ${JSON.stringify(t)}.`);this.inputSpec=[new ye({ndim:t.length,axes:{[e]:n}})];let o=[n];this.scale&&(this.gamma=this.addWeight("gamma",o,null,this.gammaInitializer,this.gammaRegularizer,!0,this.gammaConstraint)),this.center&&(this.beta=this.addWeight("beta",o,null,this.betaInitializer,this.betaRegularizer,!0,this.betaConstraint)),this.movingMean=this.addWeight("moving_mean",o,null,this.movingMeanInitializer,null,!1),this.movingVariance=this.addWeight("moving_variance",o,null,this.movingVarianceInitializer,null,!1),this.built=!0}call(t,e){return B(()=>{let n=e.training==null?!1:e.training,o=At(t),s=o.shape,i=s.length,a=Yr(0,i),u=this.axis>=0?this.axis:this.axis+i;a.splice(u,1);let l=Co(1,i);l[u]=s[u];let c=a.slice();c.sort();let p=!y.arraysEqual(c,Yr(0,i).slice(0,i-1)),m=()=>{if(p){let b=D(this.movingMean.read(),l),w=D(this.movingVariance.read(),l),C=this.center?D(this.beta.read(),l):null,N=this.scale?D(this.gamma.read(),l):null;return Th(o,b,w,C,N,this.epsilon)}else return Th(o,this.movingMean.read(),this.movingVariance.read(),this.beta==null?null:this.beta.read(),this.gamma==null?null:this.gamma.read(),this.epsilon)};if(!n)return m();let[f,d,h]=H8(o,this.gamma.read(),this.beta.read(),a,this.epsilon),g=(b,w,C)=>{B(()=>{let N=1-C,_=b.read(),A=R(ct(_,w),N);b.write(ct(_,A))})};return(()=>{g(this.movingMean,d,this.momentum),g(this.movingVariance,h,this.momentum)})(),f})}getConfig(){let t={axis:this.axis,momentum:this.momentum,epsilon:this.epsilon,center:this.center,scale:this.scale,betaInitializer:ke(this.betaInitializer),gammaInitializer:ke(this.gammaInitializer),movingMeanInitializer:ke(this.movingMeanInitializer),movingVarianceInitializer:ke(this.movingVarianceInitializer),betaRegularizer:me(this.betaRegularizer),gammaRegularizer:me(this.gammaRegularizer),betaConstraint:Me(this.betaConstraint),gammaConstraint:Me(this.gammaConstraint)},e=super.getConfig();return Object.assign(t,e),t}};Ef.className="BatchNormalization";Q.registerClass(Ef);var _f=class extends Rt{constructor(t){if(t==null&&(t={}),super(t),this.axis=t.axis==null?-1:t.axis,typeof this.axis=="number"){if(!Number.isInteger(this.axis))throw new Error(`Expected axis to be an integer, but received ${this.axis}`)}else if(Array.isArray(this.axis)){for(let e of this.axis)if(!Number.isInteger(e))throw new Error(`Expected axis to be an array of integers, but received ${JSON.stringify(this.axis)}`)}else throw new Error(`Expected axis to be an integer or an array of integers, but received ${JSON.stringify(this.axis)}`);this.epsilon=t.epsilon==null?.001:t.epsilon,this.center=t.center==null?!0:t.center,this.scale=t.scale==null?!0:t.scale,this.betaInitializer=de(t.betaInitializer||"zeros"),this.gammaInitializer=de(t.gammaInitializer||"ones"),this.betaRegularizer=be(t.betaRegularizer),this.gammaRegularizer=be(t.gammaRegularizer),this.supportsMasking=!0}build(t){t=Jt(t);let e=t.length;typeof this.axis=="number"&&(this.axis=[this.axis]);for(let s=0;s<this.axis.length;++s)this.axis[s]<0&&(this.axis[s]+=e);for(let s of this.axis)if(s<0||s>=e)throw new Error(`Invalid axis: ${s}`);if(this.axis.length!==vo(this.axis).length)throw new Error(`Found duplicate axes in: ${this.axis}`);let n=this.axis.map(s=>t[s]),o=!0;this.scale?this.gamma=this.addWeight("gamma",n,"float32",this.gammaInitializer,this.gammaRegularizer,o):this.gamma=null,this.center?this.beta=this.addWeight("beta",n,"float32",this.betaInitializer,this.betaRegularizer,o):this.beta=null,this.built=!0}call(t,e){let n=At(t),o=n.shape,s=o.length;return B(()=>{let{mean:a,variance:u}=Zu(n,this.axis,!0),l=Co(1,s);for(let h of this.axis)l[h]=o[h];let c=h=>h!=null&&h.shape.length!==s?D(h,l):h,p=this.scale?c(this.gamma.read()):null,m=this.center?c(this.beta.read()):null,f=[],d=[];for(let h=0;h<s;++h)this.axis.indexOf(h)!==-1?(f.push(o[h]),d.push(1)):(f.push(1),d.push(o[h]));return a=$r(a,f),u=$r(u,f),p!=null&&(p=$r(p,d)),m!=null&&(m=$r(m,d)),Th(n,a,u,m,p,this.epsilon)})}getConfig(){let t={axis:this.axis,epsilon:this.epsilon,center:this.center,scale:this.scale,betaInitializer:ke(this.betaInitializer),gammaInitializer:ke(this.gammaInitializer),betaRegularizer:me(this.betaRegularizer),gammaRegularizer:me(this.gammaRegularizer)},e=super.getConfig();return Object.assign(t,e),t}};_f.className="LayerNormalization";Q.registerClass(_f);function q8(r,t,e){return B(()=>{if(r.rank!==4)throw new z(`temporalPadding expects input tensor to be 4-D, but received a ${r.rank}-D tensor.`);if(t==null&&(t=[[1,1],[1,1]]),t.length!==2||t[0].length!==2||t[1].length!==2)throw new z("spatial2dPadding expects `padding` to be an Array of two Arrays, each of which is an Array of two integers.");if(e==null&&(e=pn()),e!=="channelsLast"&&e!=="channelsFirst")throw new z(`Unknown data format: ${e}. Supported data formats are 'channelsLast' and 'channelsFirst.`);let n;return e==="channelsFirst"?n=[[0,0],[0,0],t[0],t[1]]:n=[[0,0],t[0],t[1],[0,0]],un(r,n)})}var Af=class extends Rt{constructor(t){if(t==null&&(t={}),super(t),this.dataFormat=t.dataFormat==null?pn():t.dataFormat,t.padding==null)this.padding=[[1,1],[1,1]];else if(typeof t.padding=="number")this.padding=[[t.padding,t.padding],[t.padding,t.padding]];else{if(t.padding=t.padding,t.padding.length!==2)throw new z(`ZeroPadding2D expects padding to be a length-2 array, but received a length-${t.padding.length} array.`);let e,n;if(typeof t.padding[0]=="number")e=[t.padding[0],t.padding[0]],n=[t.padding[1],t.padding[1]];else{if(t.padding=t.padding,t.padding[0].length!==2)throw new z(`ZeroPadding2D expects height padding to be a length-2 array, but received a length-${t.padding[0].length} array.`);if(e=t.padding[0],t.padding[1].length!==2)throw new z(`ZeroPadding2D expects width padding to be a length-2 array, but received a length-${t.padding[1].length} array.`);n=t.padding[1]}this.padding=[e,n]}this.inputSpec=[new ye({ndim:4})]}computeOutputShape(t){t=Jt(t);let e,n;return this.dataFormat==="channelsFirst"?(t[2]!=null&&t[2]>=0?e=t[2]+this.padding[0][0]+this.padding[0][1]:e=null,t[3]!=null&&t[3]>=0?n=t[3]+this.padding[1][0]+this.padding[1][1]:n=null,[t[0],t[1],e,n]):(t[1]!=null&&t[1]>=0?e=t[1]+this.padding[0][0]+this.padding[0][1]:e=null,t[2]!=null&&t[2]>=0?n=t[2]+this.padding[1][0]+this.padding[1][1]:n=null,[t[0],e,n,t[3]])}call(t,e){return B(()=>q8(At(t),this.padding,this.dataFormat))}getConfig(){let t={padding:this.padding,dataFormat:this.dataFormat},e=super.getConfig();return Object.assign(t,e),t}};Af.className="ZeroPadding2D";Q.registerClass(Af);function hb(r,t,e,n,o,s){return B(()=>{Re(o),x0(s),cn(n),e==null&&(e=[1,1]),n==null&&(n="valid"),o==null&&(o=pn()),s==null&&(s="max"),r=Nh(r,o);let i,a=n==="same"?"same":"valid";return s==="max"?i=tu(r,t,e,a):i=jl(r,t,e,a),o==="channelsFirst"&&(i=Ot(i,[0,3,1,2])),i})}function gD(r,t,e,n,o,s){return B(()=>{Re(o),x0(s),cn(n),e==null&&(e=[1,1,1]),n==null&&(n="valid"),o==null&&(o=pn()),s==null&&(s="max"),r=F0(r,o);let i,a=n==="same"?"same":"valid";return s==="max"?i=Bx(r,t,e,a):i=px(r,t,e,a),o==="channelsFirst"&&(i=Ot(i,[0,4,1,2,3])),i})}var cb=class extends Rt{constructor(t){if(t.poolSize==null&&(t.poolSize=2),super(t),typeof t.poolSize=="number")this.poolSize=[t.poolSize];else if(Array.isArray(t.poolSize)&&t.poolSize.length===1&&typeof t.poolSize[0]=="number")this.poolSize=t.poolSize;else throw new z(`poolSize for 1D convolutional layer must be a number or an Array of a single number, but received ${JSON.stringify(t.poolSize)}`);if(Ze(this.poolSize,"poolSize"),t.strides==null)this.strides=this.poolSize;else if(typeof t.strides=="number")this.strides=[t.strides];else if(Array.isArray(t.strides)&&t.strides.length===1&&typeof t.strides[0]=="number")this.strides=t.strides;else throw new z(`strides for 1D convolutional layer must be a number or an Array of a single number, but received ${JSON.stringify(t.strides)}`);Ze(this.strides,"strides"),this.padding=t.padding==null?"valid":t.padding,cn(this.padding),this.inputSpec=[new ye({ndim:3})]}computeOutputShape(t){t=Jt(t);let e=Sn(t[1],this.poolSize[0],this.padding,this.strides[0]);return[t[0],e,t[2]]}call(t,e){return B(()=>{this.invokeCallHook(t,e),t=el(At(t),2);let n=this.poolingFunction(At(t),[this.poolSize[0],1],[this.strides[0],1],this.padding,"channelsLast");return Pn(n,[2])})}getConfig(){let t={poolSize:this.poolSize,padding:this.padding,strides:this.strides},e=super.getConfig();return Object.assign(t,e),t}},$f=class extends cb{constructor(t){super(t)}poolingFunction(t,e,n,o,s){return Re(s),cn(o),hb(t,e,n,o,s,"max")}};$f.className="MaxPooling1D";Q.registerClass($f);var Df=class extends cb{constructor(t){super(t)}poolingFunction(t,e,n,o,s){return Re(s),cn(o),hb(t,e,n,o,s,"avg")}};Df.className="AveragePooling1D";Q.registerClass(Df);var pb=class extends Rt{constructor(t){if(t.poolSize==null&&(t.poolSize=[2,2]),super(t),this.poolSize=Array.isArray(t.poolSize)?t.poolSize:[t.poolSize,t.poolSize],t.strides==null)this.strides=this.poolSize;else if(Array.isArray(t.strides)){if(t.strides.length!==2)throw new z(`If the strides property of a 2D pooling layer is an Array, it is expected to have a length of 2, but received length ${t.strides.length}.`);this.strides=t.strides}else this.strides=[t.strides,t.strides];Ze(this.poolSize,"poolSize"),Ze(this.strides,"strides"),this.padding=t.padding==null?"valid":t.padding,this.dataFormat=t.dataFormat==null?"channelsLast":t.dataFormat,Re(this.dataFormat),cn(this.padding),this.inputSpec=[new ye({ndim:4})]}computeOutputShape(t){t=Jt(t);let e=this.dataFormat==="channelsFirst"?t[2]:t[1],n=this.dataFormat==="channelsFirst"?t[3]:t[2];return e=Sn(e,this.poolSize[0],this.padding,this.strides[0]),n=Sn(n,this.poolSize[1],this.padding,this.strides[1]),this.dataFormat==="channelsFirst"?[t[0],t[1],e,n]:[t[0],e,n,t[3]]}call(t,e){return B(()=>(this.invokeCallHook(t,e),this.poolingFunction(At(t),this.poolSize,this.strides,this.padding,this.dataFormat)))}getConfig(){let t={poolSize:this.poolSize,padding:this.padding,strides:this.strides,dataFormat:this.dataFormat},e=super.getConfig();return Object.assign(t,e),t}},Rf=class extends pb{constructor(t){super(t)}poolingFunction(t,e,n,o,s){return Re(s),cn(o),hb(t,e,n,o,s,"max")}};Rf.className="MaxPooling2D";Q.registerClass(Rf);var Ff=class extends pb{constructor(t){super(t)}poolingFunction(t,e,n,o,s){return Re(s),cn(o),hb(t,e,n,o,s,"avg")}};Ff.className="AveragePooling2D";Q.registerClass(Ff);var mb=class extends Rt{constructor(t){if(t.poolSize==null&&(t.poolSize=[2,2,2]),super(t),this.poolSize=Array.isArray(t.poolSize)?t.poolSize:[t.poolSize,t.poolSize,t.poolSize],t.strides==null)this.strides=this.poolSize;else if(Array.isArray(t.strides)){if(t.strides.length!==3)throw new z(`If the strides property of a 3D pooling layer is an Array, it is expected to have a length of 3, but received length ${t.strides.length}.`);this.strides=t.strides}else this.strides=[t.strides,t.strides,t.strides];Ze(this.poolSize,"poolSize"),Ze(this.strides,"strides"),this.padding=t.padding==null?"valid":t.padding,this.dataFormat=t.dataFormat==null?"channelsLast":t.dataFormat,Re(this.dataFormat),cn(this.padding),this.inputSpec=[new ye({ndim:5})]}computeOutputShape(t){t=Jt(t);let e=this.dataFormat==="channelsFirst"?t[2]:t[1],n=this.dataFormat==="channelsFirst"?t[3]:t[2],o=this.dataFormat==="channelsFirst"?t[4]:t[3];return e=Sn(e,this.poolSize[0],this.padding,this.strides[0]),n=Sn(n,this.poolSize[1],this.padding,this.strides[1]),o=Sn(o,this.poolSize[2],this.padding,this.strides[2]),this.dataFormat==="channelsFirst"?[t[0],t[1],e,n,o]:[t[0],e,n,o,t[4]]}call(t,e){return B(()=>(this.invokeCallHook(t,e),this.poolingFunction(At(t),this.poolSize,this.strides,this.padding,this.dataFormat)))}getConfig(){let t={poolSize:this.poolSize,padding:this.padding,strides:this.strides,dataFormat:this.dataFormat},e=super.getConfig();return Object.assign(t,e),t}},Of=class extends mb{constructor(t){super(t)}poolingFunction(t,e,n,o,s){return Re(s),cn(o),gD(t,e,n,o,s,"max")}};Of.className="MaxPooling3D";Q.registerClass(Of);var Pf=class extends mb{constructor(t){super(t)}poolingFunction(t,e,n,o,s){return Re(s),cn(o),gD(t,e,n,o,s,"avg")}};Pf.className="AveragePooling3D";Q.registerClass(Pf);var fb=class extends Rt{constructor(t){super(t),this.inputSpec=[new ye({ndim:3})]}computeOutputShape(t){return[t[0],t[2]]}call(t,e){throw new vt}},Lf=class extends fb{constructor(t){super(t||{})}call(t,e){return B(()=>{let n=At(t);return Se(n,1)})}};Lf.className="GlobalAveragePooling1D";Q.registerClass(Lf);var Mf=class extends fb{constructor(t){super(t||{})}call(t,e){return B(()=>{let n=At(t);return Br(n,1)})}};Mf.className="GlobalMaxPooling1D";Q.registerClass(Mf);var db=class extends Rt{constructor(t){super(t),this.dataFormat=t.dataFormat==null?"channelsLast":t.dataFormat,Re(this.dataFormat),this.inputSpec=[new ye({ndim:4})]}computeOutputShape(t){return t=t,this.dataFormat==="channelsLast"?[t[0],t[3]]:[t[0],t[1]]}call(t,e){throw new vt}getConfig(){let t={dataFormat:this.dataFormat},e=super.getConfig();return Object.assign(t,e),t}},zf=class extends db{call(t,e){return B(()=>{let n=At(t);return this.dataFormat==="channelsLast"?Se(n,[1,2]):Se(n,[2,3])})}};zf.className="GlobalAveragePooling2D";Q.registerClass(zf);var Bf=class extends db{call(t,e){return B(()=>{let n=At(t);return this.dataFormat==="channelsLast"?Br(n,[1,2]):Br(n,[2,3])})}};Bf.className="GlobalMaxPooling2D";Q.registerClass(Bf);var gb=class extends Rt{constructor(t){super(t),this.layer=t.layer}build(t){this.built=!0}get trainable(){return this.layer!=null?this.layer.trainable:!1}set trainable(t){this.layer!=null&&(this.layer.trainable=t)}get trainableWeights(){return this.layer.trainableWeights}get nonTrainableWeights(){return this.layer.nonTrainableWeights}get updates(){return this.layer._updates}get losses(){return this.layer.losses}getWeights(){return this.layer.getWeights()}setWeights(t){this.layer.setWeights(t)}getConfig(){let t={layer:{className:this.layer.getClassName(),config:this.layer.getConfig()}},e=super.getConfig();return Object.assign(t,e),t}setFastWeightInitDuringBuild(t){super.setFastWeightInitDuringBuild(t),this.layer!=null&&this.layer.setFastWeightInitDuringBuild(t)}static fromConfig(t,e,n={}){let o=e.layer,s=hn(o,n);delete e.layer;let i={layer:s};return Object.assign(i,e),new t(i)}},Vf=class extends gb{constructor(t){super(t),this.supportsMasking=!0}build(t){if(t=Jt(t),t.length<3)throw new z(`TimeDistributed layer expects an input shape >= 3D, but received input shape ${JSON.stringify(t)}`);this.inputSpec=[{shape:t}];let e=[t[0]].concat(t.slice(2));this.layer.built||(this.layer.build(e),this.layer.built=!0),super.build(t)}computeOutputShape(t){t=Jt(t);let e=[t[0]].concat(t.slice(2)),n=this.layer.computeOutputShape(e),o=t[1];return[n[0],o].concat(n.slice(1))}call(t,e){return B(()=>(t=At(t),P0((i,a)=>[At(this.layer.call(i,e)),[]],t,[],!1,null,null,!1,!0)[1]))}};Vf.className="TimeDistributed";Q.registerClass(Vf);function K8(r){Vi(C$,"BidirectionalMergeMode",r)}var j8="concat",Gf=class extends gb{constructor(t){super(t);let e=t.layer.getConfig(),n={};n.className=t.layer.getClassName(),n.config=e,this.forwardLayer=hn(n),e.goBackwards=e.goBackwards!==!0;let o={};if(o.className=t.layer.getClassName(),o.config=e,this.backwardLayer=hn(o),this.forwardLayer.name="forward_"+this.forwardLayer.name,this.backwardLayer.name="backward_"+this.backwardLayer.name,this.mergeMode=t.mergeMode===void 0?j8:t.mergeMode,K8(this.mergeMode),t.weights)throw new vt("weights support is not implemented for Bidirectional layer yet.");this._stateful=t.layer.stateful,this.returnSequences=t.layer.returnSequences,this.returnState=t.layer.returnState,this.supportsMasking=!0,this._trainable=!0,this.inputSpec=t.layer.inputSpec,this.numConstants=null}get trainable(){return this._trainable}set trainable(t){this._trainable=t,this.forwardLayer!=null&&(this.forwardLayer.trainable=t),this.backwardLayer!=null&&(this.backwardLayer.trainable=t)}getWeights(){return this.forwardLayer.getWeights().concat(this.backwardLayer.getWeights())}setWeights(t){let e=t.length,n=Math.floor(e/2);this.forwardLayer.setWeights(t.slice(0,n)),this.backwardLayer.setWeights(t.slice(n))}computeOutputShape(t){let e=this.forwardLayer.computeOutputShape(t);Array.isArray(e)&&Array.isArray(e[0])||(e=[e]),e=e;let n,o,s;return this.returnState&&(s=e.slice(1)),n=e[0],n=n,this.mergeMode==="concat"?(n[n.length-1]*=2,o=[n]):this.mergeMode==null?o=[n,n.slice()]:o=[n],this.returnState?this.mergeMode==null?o.concat(s).concat(s.slice()):[n].concat(s).concat(s.slice()):Sr(o)}apply(t,e){let n=e==null?null:e.initialState,o=e==null?null:e.constants;e==null&&(e={});let s=O0(t,n,o,this.numConstants);if(t=s.inputs,n=s.initialState,o=s.constants,Array.isArray(t)&&(n=t.slice(1),t=t[0]),(n==null||n.length===0)&&o==null)return super.apply(t,e);let i=[],a=[];if(n!=null){let l=n.length;if(l%2>0)throw new z("When passing `initialState` to a Bidrectional RNN, the state should be an Array containing the states of the underlying RNNs.");e.initialState=n,i.push(...n);let c=n.map(p=>new ye({shape:p.shape}));this.forwardLayer.stateSpec=c.slice(0,l/2),this.backwardLayer.stateSpec=c.slice(l/2),a.push(...c)}if(o!=null)throw new vt("Support for constants in Bidirectional layers is not implemented yet.");let u=i[0]instanceof Jr;for(let l of i)if(l instanceof Jr!==u)throw new z("The initial state of a Bidirectional layer cannot be specified as a mix of symbolic and non-symbolic tensors");if(u){let l=[t].concat(i),c=this.inputSpec.concat(a),p=this.inputSpec;this.inputSpec=c;let m=super.apply(l,e);return this.inputSpec=p,m}else return super.apply(t,e)}call(t,e){return B(()=>{let n=e.initialState,o,s;if(n==null)o=this.forwardLayer.call(t,e),s=this.backwardLayer.call(t,e);else{let u=n.slice(0,n.length/2),l=n.slice(n.length/2);o=this.forwardLayer.call(t,Object.assign(e,{initialState:u})),s=this.backwardLayer.call(t,Object.assign(e,{initialState:l}))}let i;this.returnState&&(Array.isArray(o)&&(i=o.slice(1).concat(s.slice(1))),o=o[0],s=s[0]),this.returnSequences&&(s=ur(s,1));let a;return this.mergeMode==="concat"?a=Sm([o,s]):this.mergeMode==="sum"?a=X(o,s):this.mergeMode==="ave"?a=R(.5,X(o,s)):this.mergeMode==="mul"?a=R(o,s):this.mergeMode==null&&(a=[o,s]),this.returnState?this.mergeMode==null?a.concat(i):[a].concat(i):a})}resetStates(t){this.forwardLayer.resetStates(),this.backwardLayer.resetStates()}build(t){Ws(this.forwardLayer.name,()=>{this.forwardLayer.build(t)}),Ws(this.backwardLayer.name,()=>{this.backwardLayer.build(t)}),this.built=!0}computeMask(t,e){Array.isArray(e)&&(e=e[0]);let n;if(this.returnSequences?this.mergeMode==null?n=[e,e]:n=e:this.mergeMode==null?n=[null,null]:n=null,this.returnState){let s=this.forwardLayer.states.map(i=>null);return Array.isArray(n)?n.concat(s).concat(s):[n].concat(s).concat(s)}else return n}get trainableWeights(){return this.forwardLayer.trainableWeights.concat(this.backwardLayer.trainableWeights)}get nonTrainableWeights(){return this.forwardLayer.nonTrainableWeights.concat(this.backwardLayer.nonTrainableWeights)}setFastWeightInitDuringBuild(t){super.setFastWeightInitDuringBuild(t),this.forwardLayer!=null&&this.forwardLayer.setFastWeightInitDuringBuild(t),this.backwardLayer!=null&&this.backwardLayer.setFastWeightInitDuringBuild(t)}getConfig(){let t={mergeMode:this.mergeMode},e=super.getConfig();return Object.assign(t,e),t}static fromConfig(t,e){let n=hn(e.layer);if(delete e.layer,e.numConstants!=null)throw new vt("Deserialization of a Bidirectional layer with numConstants present is not supported yet.");let o=e;return o.layer=n,new t(o)}};Gf.className="Bidirectional";Q.registerClass(Gf);var Wf=class extends Rt{constructor(t){super(t),this.scale=t.scale,t.offset?this.offset=t.offset:this.offset=0}getConfig(){let t={scale:this.scale,offset:this.offset},e=super.getConfig();return Object.assign(t,e),t}call(t,e){return B(()=>(t=At(t),t.dtype!=="float32"&&(t=tl(t,"float32")),X(R(t,this.scale),this.offset)))}};Wf.className="Rescaling";Q.registerClass(Wf);function X8(r){return new Hs(r)}function Y8(r){return new Xm(r)}function Z8(r){return new qm(r)}function J8(r){return new Km(r)}function Q8(r){return new jm(r)}function tY(r){return new Zm(r)}function eY(r){return new Ym(r)}function rY(r){return new Iu(r)}function nY(r){return new ol(r)}function oY(r){return new Jm(r)}function sY(r){return new sl(r)}function iY(r){return new Qm(r)}function aY(r){return new tf(r)}function lY(r){return new ef(r)}function uY(r){return new rf(r)}function cY(r){return new nf(r)}function pY(r){return new mf(r)}function mY(r){return new cf(r)}function fY(r){return new Sc(r)}function dY(r){return new uf(r)}function hY(r){return new pf(r)}function gY(r){return new ff(r)}function xY(r){return new df(r)}function yY(r){return new hf(r)}function bY(r){return new xf(r)}function wY(r){return new yf(r)}function CY(r){return new wf(r)}function IY(r){return new vf(r)}function vY(r){return new Cf(r)}function SY(r){return new If(r)}function NY(r){return new bf(r)}function kY(r){return new Sf(r)}function TY(r){return new Ef(r)}function EY(r){return new _f(r)}function _Y(r){return new Af(r)}function L0(r){return new Df(r)}function AY(r){return L0(r)}function $Y(r){return L0(r)}function M0(r){return new Ff(r)}function DY(r){return M0(r)}function RY(r){return M0(r)}function z0(r){return new Pf(r)}function FY(r){return z0(r)}function OY(r){return z0(r)}function PY(r){return new Lf(r)}function LY(r){return new zf(r)}function xD(r){return new Mf(r)}function yD(r){return new Bf(r)}function bD(r){return new $f(r)}function wD(r){return new Rf(r)}function MY(r){return new Of(r)}function zY(r){return new sf(r)}function BY(r){return new Cc(r)}function VY(r){return new af(r)}function GY(r){return new al(r)}function WY(r){return new of(r)}function UY(r){return new wc(r)}function HY(r){return new lf(r)}function qY(r){return new vc(r)}function KY(r){return new Nn(r)}function jY(r){return new Ic(r)}function XY(r){return new Gf(r)}function YY(r){return new Vf(r)}var ZY=xD,JY=yD,QY=bD,tZ=wD;function eZ(r){return new Nf(r)}function rZ(r){return new kf(r)}function nZ(r){return new Tf(r)}function oZ(r){return new gf(r)}function sZ(r){return new Wf(r)}var ID={};Gt(ID,{MAPE:()=>gZ,MSE:()=>bZ,binaryAccuracy:()=>iZ,binaryCrossentropy:()=>aZ,categoricalAccuracy:()=>uZ,categoricalCrossentropy:()=>cZ,cosineProximity:()=>fZ,mape:()=>xZ,meanAbsoluteError:()=>dZ,meanAbsolutePercentageError:()=>hZ,meanSquaredError:()=>yZ,mse:()=>wZ,precision:()=>pZ,recall:()=>mZ,sparseCategoricalAccuracy:()=>lZ});function iZ(r,t){return Ch(r,t)}function aZ(r,t){return My(r,t)}function lZ(r,t){return zy(r,t)}function uZ(r,t){return Ih(r,t)}function cZ(r,t){return vh(r,t)}function pZ(r,t){return N0(r,t)}function mZ(r,t){return K$(r,t)}function fZ(r,t){return wh(r,t)}function dZ(r,t){return Bm(r,t)}function hZ(r,t){return yu(r,t)}function gZ(r,t){return yu(r,t)}function xZ(r,t){return yu(r,t)}function yZ(r,t){return Wi(r,t)}function bZ(r,t){return Wi(r,t)}function wZ(r,t){return Wi(r,t)}var vD={};Gt(vD,{modelFromJSON:()=>uD});var SD={};Gt(SD,{l1:()=>IZ,l1l2:()=>CZ,l2:()=>vZ});function CZ(r){return new bu(r)}function IZ(r){return fD(r)}function vZ(r){return dD(r)}var yb=class extends nl{constructor(){super(...arguments),this.model=null}setModel(t){if(!(t instanceof Mn))throw new Error("model must be a LayersModel, not some other Container");this.model=t}};function xb(r,t){return r<t}function ND(r,t){return r>t}var bb=class extends yb{constructor(t){if(super(),t==null&&(t={}),t.restoreBestWeights)throw new vt("restoreBestWeights = True is not implemented in EarlyStopping yet.");this.monitor=t.monitor||"val_loss",this.minDelta=Math.abs(t.minDelta||0),this.patience=t.patience||0,this.verbose=t.verbose||0,this.mode=t.mode||"auto",this.baseline=t.baseline,["auto","min","max"].indexOf(this.mode)===-1&&(console.warn(`EarlyStopping mode '${this.mode}' is invalid. Falling back to mode 'auto'.`),this.mode="auto"),this.mode==="min"?this.monitorFunc=xb:this.mode==="max"?this.monitorFunc=ND:this.monitor.indexOf("acc")!==-1?this.monitorFunc=ND:this.monitorFunc=xb,this.monitorFunc===xb&&(this.minDelta*=-1)}async onTrainBegin(t){this.wait=0,this.stoppedEpoch=0,this.baseline!=null?this.best=this.baseline:this.best=this.monitorFunc===xb?1/0:-1/0}async onEpochEnd(t,e){await Gi(e);let n=this.getMonitorValue(e);n!=null&&(this.monitorFunc(n-this.minDelta,this.best)?(this.best=n,this.wait=0):(this.wait++,this.wait>=this.patience&&(this.stoppedEpoch=t,this.model.stopTraining=!0)))}async onTrainEnd(t){this.stoppedEpoch>0&&this.verbose&&console.log(`Epoch ${this.stoppedEpoch}: early stopping.`)}getMonitorValue(t){t==null&&(t={});let e=t[this.monitor];return e==null&&console.warn(`Metric for EarlyStopping ${this.monitor} is not available. Available metrics are: ${Object.keys(t)}`),e}};function SZ(r){return new bb(r)}var NZ={earlyStopping:SZ};var kZ=M();kZ.registerFlag("KEEP_INTERMEDIATE_TENSORS",()=>!1,r=>{r&&console.warn("Keep intermediate tensors is ON. This will print the values of all intermediate tensors during model inference. Not all models support this mode. For details, check e2e/benchmarks/ model_config.js. This significantly impacts performance.")});var ro;(function(r){r[r.DT_INVALID=0]="DT_INVALID",r[r.DT_FLOAT=1]="DT_FLOAT",r[r.DT_DOUBLE=2]="DT_DOUBLE",r[r.DT_INT32=3]="DT_INT32",r[r.DT_UINT8=4]="DT_UINT8",r[r.DT_INT16=5]="DT_INT16",r[r.DT_INT8=6]="DT_INT8",r[r.DT_STRING=7]="DT_STRING",r[r.DT_COMPLEX64=8]="DT_COMPLEX64",r[r.DT_INT64=9]="DT_INT64",r[r.DT_BOOL=10]="DT_BOOL",r[r.DT_QINT8=11]="DT_QINT8",r[r.DT_QUINT8=12]="DT_QUINT8",r[r.DT_QINT32=13]="DT_QINT32",r[r.DT_BFLOAT16=14]="DT_BFLOAT16",r[r.DT_QINT16=15]="DT_QINT16",r[r.DT_QUINT16=16]="DT_QUINT16",r[r.DT_UINT16=17]="DT_UINT16",r[r.DT_COMPLEX128=18]="DT_COMPLEX128",r[r.DT_HALF=19]="DT_HALF",r[r.DT_RESOURCE=20]="DT_RESOURCE",r[r.DT_VARIANT=21]="DT_VARIANT",r[r.DT_UINT32=22]="DT_UINT32",r[r.DT_UINT64=23]="DT_UINT64",r[r.DT_FLOAT_REF=101]="DT_FLOAT_REF",r[r.DT_DOUBLE_REF=102]="DT_DOUBLE_REF",r[r.DT_INT32_REF=103]="DT_INT32_REF",r[r.DT_UINT8_REF=104]="DT_UINT8_REF",r[r.DT_INT16_REF=105]="DT_INT16_REF",r[r.DT_INT8_REF=106]="DT_INT8_REF",r[r.DT_STRING_REF=107]="DT_STRING_REF",r[r.DT_COMPLEX64_REF=108]="DT_COMPLEX64_REF",r[r.DT_INT64_REF=109]="DT_INT64_REF",r[r.DT_BOOL_REF=110]="DT_BOOL_REF",r[r.DT_QINT8_REF=111]="DT_QINT8_REF",r[r.DT_QUINT8_REF=112]="DT_QUINT8_REF",r[r.DT_QINT32_REF=113]="DT_QINT32_REF",r[r.DT_BFLOAT16_REF=114]="DT_BFLOAT16_REF",r[r.DT_QINT16_REF=115]="DT_QINT16_REF",r[r.DT_QUINT16_REF=116]="DT_QUINT16_REF",r[r.DT_UINT16_REF=117]="DT_UINT16_REF",r[r.DT_COMPLEX128_REF=118]="DT_COMPLEX128_REF",r[r.DT_HALF_REF=119]="DT_HALF_REF",r[r.DT_RESOURCE_REF=120]="DT_RESOURCE_REF",r[r.DT_VARIANT_REF=121]="DT_VARIANT_REF",r[r.DT_UINT32_REF=122]="DT_UINT32_REF",r[r.DT_UINT64_REF=123]="DT_UINT64_REF"})(ro||(ro={}));var kD;(function(r){let t;(function(e){e[e.LEGACY=0]="LEGACY",e[e.V1=1]="V1",e[e.V2=2]="V2"})(t=r.CheckpointFormatVersion||(r.CheckpointFormatVersion={}))})(kD||(kD={}));var B0={};function EZ(r,t){let e={tfOpName:r,category:"custom",inputs:[],attrs:[],customExecutor:t};B0[r]=e}function wb(r){return B0[r]}function _Z(r){delete B0[r]}function v(r,t,e,n,o){let s=t.inputParams[r];if(s&&s.inputIndexStart!==void 0){let a=s.inputIndexStart,u=s.inputIndexEnd===0?void 0:s.inputIndexEnd===void 0?a+1:s.inputIndexEnd;if(s.type==="tensor")return yr(t.inputNames[s.inputIndexStart],e,n,o);if(s.type==="tensors")return t.inputNames.slice(a,u).map(m=>yr(m,e,n,o));let l=yr(t.inputNames.slice(a)[0],e,n,o),c=l.dataSync();return s.type==="number"?c[0]:y.toNestedArray(l.shape,c)}let i=t.attrParams[r];return i&&i.value}function yr(r,t,e,n){let[o,s]=gn(r);if(n!=null){let a=n.getHashTableHandleByName(o);if(a!=null)return a}let i=e.currentContextIds.find(a=>!!t[Cb(o,a)]);return i!==void 0?t[Cb(o,i)][s]:void 0}function TD(r,t,e){return t[Cb(r,e.currentContextId)]}function Eo(r,t){let[e,n,o]=gn(r);return[Cb(e,t&&t.currentContextId),n,o]}function Cb(r,t){return t?`${r}-${t}`:r}function gn(r){let t=r.split(":");if(t.length===1)return[r,0,void 0];let e=t[0],n=t.length===3?t[1]:void 0,o=Number(t[t.length-1]);return[e,o,n]}function Eh(r,t,e){let n=v("pad",r,t,e);if(n==="explicit"){n=v("explicitPaddings",r,t,e);let o=[[0,0],[0,0],[0,0],[0,0]];for(let s=0;s<4;s++)o[s][0]=n[s*2],o[s][1]=n[s*2+1];return o}return n}function Xs(r){return r.kept?r:sn(r)}var V0={};Gt(V0,{json:()=>AZ});var AZ=[{tfOpName:"Add",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"AddV2",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"AddN",category:"arithmetic",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}]},{tfOpName:"BiasAdd",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"Sub",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"RealDiv",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Div",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"DivNoNan",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"FloorDiv",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Mul",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Maximum",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Minimum",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Pow",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"SquaredDifference",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Mod",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"FloorMod",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}];var G0={};Gt(G0,{json:()=>$Z});var $Z=[{tfOpName:"Abs",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Acos",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Asin",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atan2",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"y",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Ceil",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ClipByValue",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"clipValueMin",type:"number"},{start:2,name:"clipValueMax",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Complex",category:"basic_math",inputs:[{start:0,name:"real",type:"tensor"},{start:1,name:"imag",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ComplexAbs",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Cos",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Cosh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Elu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Exp",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Floor",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Log",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Imag",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"Tout",name:"outputType",type:"dtype",notSupported:!0}]},{tfOpName:"Neg",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Real",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"Tout",name:"outputType",type:"dtype",notSupported:!0}]},{tfOpName:"Prelu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"alpha",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Relu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Relu6",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Selu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sigmoid",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sin",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sinh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sqrt",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Rsqrt",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Square",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Tan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Tanh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sign",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Round",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Expm1",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Log1p",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Reciprocal",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Softplus",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Asinh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Acosh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atanh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Erf",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Prod",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axes",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool",notSupported:!0},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LeakyRelu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"alpha",name:"alpha",type:"number",defaultValue:.2},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"IsNan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}];var W0={};Gt(W0,{json:()=>DZ});var DZ=[{tfOpName:"EmptyTensorList",category:"control",inputs:[{start:0,name:"elementShape",type:"shape"},{start:1,name:"maxNumElements",type:"number"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"LoopCond",category:"control",inputs:[{start:0,name:"pred",type:"tensor"}]},{tfOpName:"Switch",category:"control",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"pred",type:"tensor"}]},{tfOpName:"Merge",category:"control",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}]},{tfOpName:"Enter",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"frame_name",name:"frameName",type:"string"},{tfName:"is_constant",name:"isConstant",type:"bool"}]},{tfOpName:"Exit",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"NextIteration",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"TensorArrayV3",category:"control",inputs:[{start:0,name:"size",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape",name:"elementShape",type:"shape"},{tfName:"dynamic_size",name:"dynamicSize",type:"bool"},{tfName:"clear_after_read",name:"clearAfterRead",type:"bool"},{tfName:"identical_element_shapes",name:"identicalElementShapes",type:"bool"},{tfName:"tensor_array_name",name:"name",type:"string"}]},{tfOpName:"TensorArrayWriteV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"tensor",type:"tensor"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"TensorArrayReadV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"TensorArrayGatherV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape",name:"elementShape",type:"shape"}]},{tfOpName:"TensorArrayScatterV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"tensor",type:"tensor"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"TensorArrayConcatV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape_except0",name:"elementShapeExcept0",type:"shape",notSupported:!0}]},{tfOpName:"TensorArraySplitV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"tensor",type:"tensor"},{start:2,name:"lengths",type:"number[]"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"TensorArraySizeV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"flowIn",type:"number"}]},{tfOpName:"TensorArrayCloseV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"}]},{tfOpName:"StatelessIf",category:"control",inputs:[{start:0,name:"cond",type:"tensor"},{start:1,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"then_branch",name:"thenBranch",type:"func"},{tfName:"else_branch",name:"elseBranch",type:"func"}]},{tfOpName:"If",category:"control",inputs:[{start:0,name:"cond",type:"tensor"},{start:1,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"then_branch",name:"thenBranch",type:"func"},{tfName:"else_branch",name:"elseBranch",type:"func"}]},{tfOpName:"StatelessWhile",category:"control",inputs:[{start:0,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"cond",name:"cond",type:"func"},{tfName:"body",name:"body",type:"func"}]},{tfOpName:"While",category:"control",inputs:[{start:0,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"cond",name:"cond",type:"func"},{tfName:"body",name:"body",type:"func"}]},{tfOpName:"TensorListScatter",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListScatterV2",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"elementShape",type:"shape"},{start:3,name:"numElements",type:"number"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListGather",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListGetItem",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListSetItem",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"tensor",type:"tensor"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListReserve",category:"control",inputs:[{start:0,name:"elementShape",type:"shape"},{start:1,name:"numElements",type:"number"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListFromTensor",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListStack",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"},{tfName:"num_elements",name:"numElements",type:"dtype"}]},{tfOpName:"TensorListSplit",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"elementShape",type:"shape"},{start:2,name:"lengths",type:"number[]"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListConcat",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"}],attrs:[{tfName:"element_shape",name:"elementShape",type:"shape"},{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListConcatV2",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"}],attrs:[{tfName:"element_shape",name:"elementShape",type:"shape"},{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListPopBack",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListPushBack",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"tensor",type:"tensor"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListLength",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"}]},{tfOpName:"TensorListResize",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"size",type:"number"}]}];var U0={};Gt(U0,{json:()=>RZ});var RZ=[{tfOpName:"AvgPool",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MaxPool",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[],notSupported:!0},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MaxPoolWithArgmax",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"include_batch_in_index",name:"includeBatchInIndex",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"AvgPool3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MaxPool3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Conv1D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"stride",name:"stride",type:"number"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NWC"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"dilation",name:"dilation",type:"number",defaultValue:1}]},{tfOpName:"Conv2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"useCudnnOnGpu",name:"useCudnnOnGpu",type:"bool"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"_FusedConv2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"use_cudnn_on_gpu",name:"useCudnnOnGpu",type:"bool",defaultValue:!0},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]",defaultValue:[1,1,1,1]},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:1e-4},{tfName:"leakyrelu_alpha",name:"leakyreluAlpha",type:"number",defaultValue:.2}]},{tfOpName:"Conv2DBackpropInput",category:"convolution",inputs:[{start:2,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:0,name:"outputShape",type:"number[]"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]",notSupported:!0}]},{tfOpName:"DepthwiseConv2d",category:"convolution",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"DepthwiseConv2dNative",category:"convolution",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"FusedDepthwiseConv2dNative",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]",defaultValue:[1,1,1,1]},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]}]},{tfOpName:"Conv3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"Dilation2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"rates",name:"dilations",type:"number[]"},{tfName:"padding",name:"pad",type:"string"}]}];var H0={};Gt(H0,{json:()=>FZ});var FZ=[{tfOpName:"Fill",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"},{start:1,name:"value",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"LinSpace",category:"creation",inputs:[{start:0,name:"start",type:"number"},{start:1,name:"stop",type:"number"},{start:2,name:"num",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"OneHot",category:"creation",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"depth",type:"number"},{start:2,name:"onValue",type:"number",defaultValue:1},{start:3,name:"offValue",type:"number",defaultValue:0}],attrs:[{tfName:"axis",name:"axis",type:"number",notSupported:!0},{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"Ones",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"OnesLike",category:"creation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"RandomStandardNormal",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"seed",name:"seed",type:"number",defaultValue:0},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"T",name:"T",type:"number",notSupported:!0}]},{tfOpName:"RandomUniform",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"minval",name:"minval",type:"number",defaultValue:0},{tfName:"maxval",name:"maxval",type:"number",defaultValue:1},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"seed",name:"seed",type:"number",defaultValue:0},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0},{tfName:"T",name:"T",type:"number",notSupported:!0}]},{tfOpName:"Range",category:"creation",inputs:[{start:0,name:"start",type:"number"},{start:1,name:"stop",type:"number"},{start:2,name:"step",type:"number",defaultValue:0}],attrs:[{tfName:"Tidx",name:"dtype",type:"dtype"}]},{tfOpName:"TruncatedNormal",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"means",name:"mean",type:"number",defaultValue:0},{tfName:"stddev",name:"stdDev",type:"number",defaultValue:1},{tfName:"seed",name:"seed",type:"number"},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"T",name:"T",type:"number",notSupported:!0}]},{tfOpName:"Zeros",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"ZerosLike",category:"creation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"Multinomial",category:"creation",inputs:[{start:0,name:"logits",type:"tensor"},{start:1,name:"numSamples",type:"number"}],attrs:[{tfName:"seed",name:"seed",type:"number"},{tfName:"seed2",name:"seed2",type:"number"},{tfName:"T",name:"dtype",type:"dtype"},{tfName:"output_dtype",name:"output_dtype",type:"dtype"}]}];var q0={};Gt(q0,{json:()=>OZ});var OZ=[{tfOpName:"NonMaxSuppressionV2",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"}]},{tfOpName:"NonMaxSuppressionV3",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"},{start:4,name:"scoreThreshold",type:"number"}]},{tfOpName:"NonMaxSuppressionV4",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"},{start:4,name:"scoreThreshold",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"T_threshold",name:"threshold",type:"dtype",notSupported:!0},{tfName:"pad_to_max_output_size",name:"padToMaxOutputSize",type:"bool"}]},{tfOpName:"NonMaxSuppressionV5",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"},{start:4,name:"scoreThreshold",type:"number"},{start:5,name:"softNmsSigma",type:"number"}]},{tfOpName:"Where",category:"dynamic",inputs:[{start:0,name:"condition",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ListDiff",category:"dynamic",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"y",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}];var K0={};Gt(K0,{json:()=>PZ});var PZ=[{tfOpName:"LowerBound",category:"evaluation",inputs:[{start:0,name:"sortedSequence",type:"tensor"},{start:1,name:"values",type:"tensor"}]},{tfOpName:"TopKV2",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"k",type:"number"}],attrs:[{tfName:"sorted",name:"sorted",type:"bool"}]},{tfOpName:"UpperBound",category:"evaluation",inputs:[{start:0,name:"sortedSequence",type:"tensor"},{start:1,name:"values",type:"tensor"}]},{tfOpName:"Unique",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"UniqueV2",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]}];var j0={};Gt(j0,{json:()=>LZ});var LZ=[{tfOpName:"PlaceholderWithDefault",category:"graph",inputs:[{start:0,name:"default",type:"tensor"}],attrs:[{tfName:"shape",name:"shape",type:"shape"},{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"Placeholder",category:"graph",attrs:[{tfName:"shape",name:"shape",type:"shape"},{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"Const",category:"graph"},{tfOpName:"Identity",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"IdentityN",category:"graph",inputs:[{start:0,end:0,name:"x",type:"tensors"}]},{tfOpName:"Snapshot",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"Rank",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"Size",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"Shape",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"ShapeN",category:"graph",inputs:[{start:0,end:0,name:"x",type:"tensors"}]},{tfOpName:"Print",category:"graph",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"data",type:"tensors"}],attrs:[{tfName:"message",name:"message",type:"string"},{tfName:"first_n",name:"firstN",type:"number",notSupported:!0},{tfName:"summarize",name:"summarize",type:"number",defaultValue:3}]},{tfOpName:"NoOp",category:"graph",inputs:[]},{tfOpName:"StopGradient",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"FakeQuantWithMinMaxVars",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"min",name:"min",type:"number"},{tfName:"max",name:"max",type:"number"}]}];var X0={};Gt(X0,{json:()=>MZ});var MZ=[{tfOpName:"HashTable",category:"hash_table",inputs:[],attrs:[{tfName:"shared_name",name:"sharedName",type:"string"},{tfName:"use_node_name_sharing",name:"useNodeNameSharing",type:"bool"},{tfName:"key_dtype",name:"keyDType",type:"dtype"},{tfName:"value_dtype",name:"valueDType",type:"dtype"}]},{tfOpName:"HashTableV2",category:"hash_table",inputs:[],attrs:[{tfName:"shared_name",name:"sharedName",type:"string"},{tfName:"use_node_name_sharing",name:"useNodeNameSharing",type:"bool"},{tfName:"key_dtype",name:"keyDType",type:"dtype"},{tfName:"value_dtype",name:"valueDType",type:"dtype"}]},{tfOpName:"LookupTableImport",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableImportV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableFind",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableFindV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableSize",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"}]},{tfOpName:"LookupTableSizeV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"}]}];var Y0={};Gt(Y0,{json:()=>zZ});var zZ=[{tfOpName:"ResizeBilinear",category:"image",inputs:[{start:0,name:"images",type:"tensor"},{start:1,name:"size",type:"number[]"}],attrs:[{tfName:"align_corners",name:"alignCorners",type:"bool"},{tfName:"half_pixel_centers",name:"halfPixelCenters",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ResizeNearestNeighbor",category:"image",inputs:[{start:0,name:"images",type:"tensor"},{start:1,name:"size",type:"number[]"}],attrs:[{tfName:"align_corners",name:"alignCorners",type:"bool"},{tfName:"half_pixel_centers",name:"halfPixelCenters",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"CropAndResize",category:"image",inputs:[{start:0,name:"image",type:"tensor"},{start:1,name:"boxes",type:"tensor"},{start:2,name:"boxInd",type:"tensor"},{start:3,name:"cropSize",type:"number[]"}],attrs:[{tfName:"method",name:"method",type:"string"},{tfName:"extrapolation_value",name:"extrapolationValue",type:"number"}]},{tfOpName:"ImageProjectiveTransformV3",category:"image",inputs:[{start:0,name:"images",type:"tensor"},{start:1,name:"transforms",type:"tensor"},{start:2,name:"outputShape",type:"number[]"},{start:3,name:"fillValue",type:"number"}],attrs:[{tfName:"interpolation",name:"interpolation",type:"string"},{tfName:"fill_mode",name:"fillMode",type:"string"}]}];var Z0={};Gt(Z0,{json:()=>BZ});var BZ=[{tfOpName:"Equal",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"NotEqual",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Greater",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"GreaterEqual",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Less",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LessEqual",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LogicalAnd",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LogicalNot",category:"logical",inputs:[{start:0,name:"a",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LogicalOr",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Select",category:"logical",inputs:[{start:0,name:"condition",type:"tensor"},{start:1,name:"a",type:"tensor"},{start:2,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"SelectV2",category:"logical",inputs:[{start:0,name:"condition",type:"tensor"},{start:1,name:"a",type:"tensor"},{start:2,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}];var J0={};Gt(J0,{json:()=>VZ});var VZ=[{tfOpName:"_FusedMatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:1e-4},{tfName:"transpose_a",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"transpose_b",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"leakyrelu_alpha",name:"leakyreluAlpha",type:"number",defaultValue:.2},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"transpose_a",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"transpose_b",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"BatchMatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"adj_x",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"adj_y",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"BatchMatMulV2",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"adj_x",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"adj_y",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Transpose",category:"matrices",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"perm",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Einsum",category:"matrices",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}],attrs:[{tfName:"equation",name:"equation",type:"string"},{tfName:"N",name:"n",type:"number",defaultValue:2},{tfName:"T",name:"dtype",type:"dtype"}]}];var Q0={};Gt(Q0,{json:()=>GZ});var GZ=[{tfOpName:"EuclideanNorm",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool",defaultValue:!1}]},{tfOpName:"FusedBatchNorm",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"FusedBatchNormV2",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"FusedBatchNormV3",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"LRN",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"depth_radius",name:"radius",type:"number",defaultValue:5},{tfName:"bias",name:"bias",type:"number",defaultValue:1},{tfName:"alpha",name:"alpha",type:"number",defaultValue:1},{tfName:"beta",name:"beta",type:"number",defaultValue:.5}]},{tfOpName:"Softmax",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"LogSoftmax",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"SparseToDense",category:"normalization",inputs:[{start:0,name:"sparseIndices",type:"tensor"},{start:1,name:"outputShape",type:"number[]"},{start:2,name:"sparseValues",type:"tensor"},{start:3,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"validate_indices",name:"validateIndices",type:"bool",defaultValue:!0,notSupported:!0}]}];var tN={};Gt(tN,{json:()=>WZ});var WZ=[{tfOpName:"Bincount",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"size",type:"number"},{start:2,name:"weights",type:"tensor"}]},{tfOpName:"DenseBincount",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"size",type:"number"},{start:2,name:"weights",type:"tensor"}],attrs:[{tfName:"binary_output",name:"binaryOutput",type:"bool"}]},{tfOpName:"Max",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Mean",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Min",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Sum",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"All",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Any",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"ArgMax",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"ArgMin",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"Prod",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Cumprod",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}],attrs:[{tfName:"exclusive",name:"exclusive",type:"bool"},{tfName:"reverse",name:"reverse",type:"bool"}]},{tfOpName:"Cumsum",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}],attrs:[{tfName:"exclusive",name:"exclusive",type:"bool"},{tfName:"reverse",name:"reverse",type:"bool"}]}];var eN={};Gt(eN,{json:()=>UZ});var UZ=[{tfOpName:"ConcatV2",category:"slice_join",inputs:[{start:0,end:-1,name:"tensors",type:"tensors"},{start:-1,name:"axis",type:"number"}],attrs:[{tfName:"N",name:"n",type:"number",defaultValue:2}]},{tfOpName:"Concat",category:"slice_join",inputs:[{start:1,end:0,name:"tensors",type:"tensors"},{start:0,name:"axis",type:"number"}],attrs:[{tfName:"N",name:"n",type:"number",defaultValue:2}]},{tfOpName:"GatherV2",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"axis",type:"number",defaultValue:0}],attrs:[{tfName:"batch_dims",name:"batchDims",type:"number",defaultValue:0}]},{tfOpName:"Gather",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"indices",type:"tensor"}],attrs:[{tfName:"validate_indices",name:"validateIndices",type:"bool",notSupported:!0}]},{tfOpName:"Reverse",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"dims",type:"bool[]"}]},{tfOpName:"ReverseV2",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}]},{tfOpName:"Slice",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"begin",type:"number[]"},{start:2,name:"size",type:"number[]"}]},{tfOpName:"StridedSlice",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"begin",type:"number[]"},{start:2,name:"end",type:"number[]"},{start:3,name:"strides",type:"number[]"}],attrs:[{tfName:"begin_mask",name:"beginMask",type:"number",defaultValue:0},{tfName:"end_mask",name:"endMask",type:"number",defaultValue:0},{tfName:"new_axis_mask",name:"newAxisMask",type:"number",defaultValue:0},{tfName:"ellipsis_mask",name:"ellipsisMask",type:"number",defaultValue:0},{tfName:"shrink_axis_mask",name:"shrinkAxisMask",type:"number",defaultValue:0}]},{tfOpName:"Pack",category:"slice_join",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}],attrs:[{tfName:"axis",name:"axis",type:"number",defaultValue:0}]},{tfOpName:"Unpack",category:"slice_join",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"axis",name:"axis",type:"number",defaultValue:0},{tfName:"num",name:"num",type:"number",defaultValue:0,notSupported:!0}]},{tfOpName:"Tile",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"reps",type:"number[]"}]},{tfOpName:"Split",category:"slice_join",inputs:[{start:0,name:"axis",type:"number",defaultValue:0},{start:1,name:"x",type:"tensor"}],attrs:[{tfName:"num_split",name:"numOrSizeSplits",type:"number",defaultValue:1}]},{tfOpName:"SplitV",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"numOrSizeSplits",type:"number[]"},{start:2,name:"axis",type:"number",defaultValue:0}]},{tfOpName:"ScatterNd",category:"slice_join",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"values",type:"tensor"},{start:2,name:"shape",type:"number[]"}]},{tfOpName:"GatherNd",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"indices",type:"tensor"}]},{tfOpName:"SparseToDense",category:"slice_join",inputs:[{start:0,name:"sparseIndices",type:"tensor"},{start:1,name:"outputShape",type:"number[]"},{start:2,name:"sparseValues",type:"tensor"},{start:3,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"validate_indices",name:"validateIndices",type:"bool",defaultValue:!1,notSupported:!0}]}];var rN={};Gt(rN,{json:()=>HZ});var HZ=[{tfOpName:"SparseFillEmptyRows",category:"sparse",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"values",type:"tensor"},{start:2,name:"denseShape",type:"tensor"},{start:3,name:"defaultValue",type:"tensor"}]},{tfOpName:"SparseReshape",category:"sparse",inputs:[{start:0,name:"inputIndices",type:"tensor"},{start:1,name:"inputShape",type:"tensor"},{start:2,name:"newShape",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"SparseSegmentMean",category:"sparse",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"segmentIds",type:"tensor"}]},{tfOpName:"SparseSegmentSum",category:"sparse",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"segmentIds",type:"tensor"}]}];var nN={};Gt(nN,{json:()=>qZ});var qZ=[{tfOpName:"FFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"IFFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"RFFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"fft_length",type:"number",notSupported:!0}]},{tfOpName:"IRFFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"fft_length",type:"number",notSupported:!0}]}];var oN={};Gt(oN,{json:()=>KZ});var KZ=[{tfOpName:"StringNGrams",category:"string",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"dataSplits",type:"tensor"}],attrs:[{tfName:"separator",name:"separator",type:"string"},{tfName:"ngram_widths",name:"nGramWidths",type:"number[]"},{tfName:"left_pad",name:"leftPad",type:"string"},{tfName:"right_pad",name:"rightPad",type:"string"},{tfName:"pad_width",name:"padWidth",type:"number"},{tfName:"preserve_short_sequences",name:"preserveShortSequences",type:"bool"}],outputs:["ngrams","ngrams_splits"]},{tfOpName:"StringSplit",category:"string",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"delimiter",type:"tensor"}],attrs:[{tfName:"skip_empty",name:"skipEmpty",type:"bool"}],outputs:["indices","values","shape"]},{tfOpName:"StringToHashBucketFast",category:"string",inputs:[{start:0,name:"input",type:"tensor"}],attrs:[{tfName:"num_buckets",name:"numBuckets",type:"number"}]}];var sN={};Gt(sN,{json:()=>jZ});var jZ=[{tfOpName:"Cast",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"SrcT",name:"sdtype",type:"dtype",notSupported:!0},{tfName:"DstT",name:"dtype",type:"dtype"}]},{tfOpName:"ExpandDims",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"MirrorPad",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"}],attrs:[{tfName:"mode",name:"mode",type:"string"}]},{tfOpName:"Pad",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"}],attrs:[{tfName:"constant_value",name:"constantValue",type:"number",defaultValue:0}]},{tfOpName:"PadV2",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"},{start:2,name:"constantValue",type:"number",defaultValue:0}]},{tfOpName:"Reshape",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"shape",type:"number[]"}]},{tfOpName:"Squeeze",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"axis",tfDeprecatedName:"squeeze_dims",name:"axis",type:"number[]"}]},{tfOpName:"SpaceToBatchND",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"blockShape",type:"number[]"},{start:2,name:"paddings",type:"number[]"}]},{tfOpName:"BatchToSpaceND",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"blockShape",type:"number[]"},{start:2,name:"crops",type:"number[]"}]},{tfOpName:"DepthToSpace",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"block_size",name:"blockSize",type:"number"},{tfName:"data_format",name:"dataFormat",type:"string"}]},{tfOpName:"BroadcastTo",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"shape",type:"number[]"}],attrs:[]},{tfOpName:"BroadcastArgs",category:"transformation",inputs:[{start:0,name:"s0",type:"tensor"},{start:1,name:"s1",type:"tensor"}],attrs:[]}];var _h=class{static get Instance(){return this._instance||(this._instance=new this)}constructor(){let t=[V0,G0,W0,U0,H0,q0,K0,j0,X0,Y0,Z0,J0,Q0,tN,eN,rN,nN,oN,sN],e=[].concat(...t.map(n=>n.json));this.opMappers=e.reduce((n,o)=>(n[o.tfOpName]=o,n),{})}transformGraph(t,e={}){let n=t.node,o=[],s=[],i=[],a=n.reduce((h,g)=>(h[g.name]=this.mapNode(g),g.op.startsWith("Placeholder")?o.push(h[g.name]):g.op==="Const"?s.push(h[g.name]):(g.input==null||g.input.length===0)&&i.push(h[g.name]),h),{}),u=[],l=[],c={},p={};e!=null&&(c=this.mapSignatureEntries(e.inputs),p=this.mapSignatureEntries(e.outputs));let m=Object.keys(a);m.forEach(h=>{let g=a[h];g.inputNames.forEach((x,b)=>{let[w,,C]=Eo(x),N=a[w];if(N.outputs!=null){let _=N.outputs.indexOf(C);if(_!==-1){let A=`${w}:${_}`;g.inputNames[b]=A}}g.inputs.push(N),N.children.push(g)})}),Object.keys(p).length===0?m.forEach(h=>{let g=a[h];g.children.length===0&&l.push(g)}):Object.keys(p).forEach(h=>{let[g]=Eo(h),x=a[g];x!=null&&(x.signatureKey=p[h],l.push(x))}),Object.keys(c).length>0?Object.keys(c).forEach(h=>{let[g]=Eo(h),x=a[g];x&&(x.signatureKey=c[h],u.push(x))}):u=o;let f={};t.library!=null&&t.library.function!=null&&(f=t.library.function.reduce((h,g)=>(h[g.signature.name]=this.mapFunction(g),h),{}));let d={nodes:a,inputs:u,outputs:l,weights:s,placeholders:o,signature:e,functions:f};return i.length>0&&(d.initNodes=i),d}mapSignatureEntries(t){return Object.keys(t||{}).reduce((e,n)=>(e[t[n].name]=n,e),{})}mapNode(t){let e=wb(t.op)||this.opMappers[t.op]||{};t.attr==null&&(t.attr={});let n={name:t.name,op:t.op,category:e.category,inputNames:(t.input||[]).map(o=>o.startsWith("^")?o.slice(1):o),inputs:[],children:[],inputParams:{},attrParams:{},rawAttrs:t.attr,outputs:e.outputs};return e.inputs!=null&&(n.inputParams=e.inputs.reduce((o,s)=>(o[s.name]={type:s.type,inputIndexStart:s.start,inputIndexEnd:s.end},o),{})),e.attrs!=null&&(n.attrParams=e.attrs.reduce((o,s)=>{let i=s.type,a;switch(s.type){case"string":a=Ib(t.attr,s.tfName,s.defaultValue),a===void 0&&!!s.tfDeprecatedName&&(a=Ib(t.attr,s.tfDeprecatedName,s.defaultValue));break;case"string[]":a=_b(t.attr,s.tfName,s.defaultValue),a===void 0&&!!s.tfDeprecatedName&&(a=_b(t.attr,s.tfDeprecatedName,s.defaultValue));break;case"number":a=Sb(t.attr,s.tfName,s.defaultValue||0),a===void 0&&!!s.tfDeprecatedName&&(a=Sb(t.attr,s.tfDeprecatedName,s.defaultValue));break;case"number[]":a=Eb(t.attr,s.tfName,s.defaultValue),a===void 0&&!!s.tfDeprecatedName&&(a=Eb(t.attr,s.tfDeprecatedName,s.defaultValue));break;case"bool":a=vb(t.attr,s.tfName,s.defaultValue),a===void 0&&!!s.tfDeprecatedName&&(a=vb(t.attr,s.tfDeprecatedName,s.defaultValue));break;case"bool[]":a=$b(t.attr,s.tfName,s.defaultValue),a===void 0&&!!s.tfDeprecatedName&&(a=$b(t.attr,s.tfDeprecatedName,s.defaultValue));break;case"shape":a=Tb(t.attr,s.tfName,s.defaultValue),a===void 0&&!!s.tfDeprecatedName&&(a=Tb(t.attr,s.tfDeprecatedName,s.defaultValue));break;case"shape[]":a=Ab(t.attr,s.tfName,s.defaultValue),a===void 0&&!!s.tfDeprecatedName&&(a=Ab(t.attr,s.tfDeprecatedName,s.defaultValue));break;case"dtype":a=Nb(t.attr,s.tfName,s.defaultValue),a===void 0&&!!s.tfDeprecatedName&&(a=Nb(t.attr,s.tfDeprecatedName,s.defaultValue));break;case"dtype[]":a=kb(t.attr,s.tfName,s.defaultValue),a===void 0&&!!s.tfDeprecatedName&&(a=kb(t.attr,s.tfDeprecatedName,s.defaultValue));break;case"func":a=ED(t.attr,s.tfName,s.defaultValue),a===void 0&&!!s.tfDeprecatedName&&(a=ED(t.attr,s.tfDeprecatedName,s.defaultValue));break;case"tensor":case"tensors":break;default:throw new Error(`Unsupported param type: ${s.type} for op: ${t.op}`)}return o[s.name]={value:a,type:i},o},{})),n}mapFunction(t){let e=t.nodeDef,n=[],o=[],s={};e!=null&&(s=e.reduce((p,m)=>(p[m.name]=this.mapNode(m),m.op==="Const"&&o.push(p[m.name]),p),{}));let i=[],a=[];t.signature.inputArg.forEach(p=>{let[m]=Eo(p.name),f={name:m,op:"Placeholder",inputs:[],inputNames:[],category:"graph",inputParams:{},attrParams:{dtype:{value:iN(p.type),type:"dtype"}},children:[]};f.signatureKey=p.name,i.push(f),s[m]=f}),Object.keys(s).forEach(p=>{let m=s[p];m.inputNames.forEach((f,d)=>{let[h,,g]=Eo(f),x=s[h];if(x.outputs!=null){let b=x.outputs.indexOf(g);if(b!==-1){let w=`${h}:${b}`;m.inputNames[d]=w}}m.inputs.push(x),x.children.push(m)})});let l=t.ret;t.signature.outputArg.forEach(p=>{let[m,f]=Eo(l[p.name]),d=s[m];d!=null&&(d.defaultOutput=f,a.push(d))});let c=this.mapArgsToSignature(t);return{nodes:s,inputs:i,outputs:a,weights:o,placeholders:n,signature:c}}mapArgsToSignature(t){return{methodName:t.signature.name,inputs:t.signature.inputArg.reduce((e,n)=>(e[n.name]=this.mapArgToTensorInfo(n),e),{}),outputs:t.signature.outputArg.reduce((e,n)=>(e[n.name]=this.mapArgToTensorInfo(n,t.ret),e),{})}}mapArgToTensorInfo(t,e){let n=t.name;return e!=null&&(n=e[n]),{name:n,dtype:t.type}}};function XZ(r){let t=M().global;if(typeof t.atob!="undefined")return t.atob(r);if(typeof Buffer!="undefined")return new Buffer(r,"base64").toString();throw new Error("Unable to decode base64 in this environment. Missing built-in atob() or Buffer()")}function _D(r,t){let e=Array.isArray(r)?String.fromCharCode.apply(null,r):XZ(r);return t?e:e.toLowerCase()}function Ib(r,t,e,n=!1){let o=r[t];return o!=null?_D(o.s,n):e}function vb(r,t,e){let n=r[t];return n?n.b:e}function Sb(r,t,e){let n=r[t]||{},o=n.i!=null?n.i:n.f!=null?n.f:e;return typeof o=="number"?o:parseInt(o,10)}function iN(r){switch(typeof r=="string"&&(r=ro[r]),r){case ro.DT_FLOAT:case ro.DT_HALF:return"float32";case ro.DT_INT32:case ro.DT_INT64:case ro.DT_INT8:case ro.DT_UINT8:return"int32";case ro.DT_BOOL:return"bool";case ro.DT_DOUBLE:return"float32";case ro.DT_STRING:return"string";default:return null}}function ED(r,t,e){let n=r[t];return n&&n.func?n.func.name:e}function Nb(r,t,e){let n=r[t];return n&&n.type?iN(n.type):e}function kb(r,t,e){let n=r[t];return n&&n.list&&n.list.type?n.list.type.map(o=>iN(o)):e}function AD(r){if(!r.unknownRank)return r.dim!=null?r.dim.map(t=>typeof t.size=="number"?t.size:parseInt(t.size,10)):[]}function Tb(r,t,e){let n=r[t];return n&&n.shape?AD(n.shape):e}function Eb(r,t,e){let n=r[t];return n?((n.list.f&&n.list.f.length?n.list.f:n.list.i)||[]).map(o=>typeof o=="number"?o:parseInt(o,10)):e}function _b(r,t,e,n=!1){let o=r[t];return o&&o.list&&o.list.s?o.list.s.map(s=>_D(s,n)):e}function Ab(r,t,e){let n=r[t];return n&&n.list&&n.list.shape?n.list.shape.map(o=>AD(o)):e}function $b(r,t,e){let n=r[t];return n&&n.list&&n.list.b?n.list.b:e}var Db=class{constructor(t,e,n){this.node=t,this.tensorMap=e,this.context=n,this.inputs=[],this.attrs={},this.inputs=t.inputNames.map(o=>this.getInput(o)),t.rawAttrs!=null&&(this.attrs=Object.keys(t.rawAttrs).reduce((o,s)=>(o[s]=this.getAttr(s),o),{}))}getInput(t){return yr(t,this.tensorMap,this.context)}getAttr(t,e){let n=this.node.rawAttrs[t];if(n.tensor!=null)return yr(t,this.tensorMap,this.context);if(n.i!=null||n.f!=null)return Sb(this.node.rawAttrs,t,e);if(n.s!=null)return Ib(this.node.rawAttrs,t,e);if(n.b!=null)return vb(this.node.rawAttrs,t,e);if(n.shape!=null)return Tb(this.node.rawAttrs,t,e);if(n.type!=null)return Nb(this.node.rawAttrs,t,e);if(n.list!=null){if(n.list.i!=null||n.list.f!=null)return Eb(this.node.rawAttrs,t,e);if(n.list.s!=null)return _b(this.node.rawAttrs,t,e);if(n.list.shape!=null)return Ab(this.node.rawAttrs,t,e);if(n.list.b!=null)return $b(this.node.rawAttrs,t,e);if(n.list.type!=null)return kb(this.node.rawAttrs,t,e)}return e}};var ae={};Gt(ae,{OP_SCOPE_SUFFIX:()=>IS,abs:()=>Ee,acos:()=>rx,acosh:()=>nx,add:()=>X,addN:()=>DE,all:()=>Yp,any:()=>Hu,argMax:()=>Ei,argMin:()=>ox,asin:()=>sx,asinh:()=>ix,atan:()=>ax,atan2:()=>lx,atanh:()=>ux,avgPool:()=>jl,avgPool3d:()=>px,basicLSTMCell:()=>OE,batchNorm:()=>Ai,batchNorm2d:()=>mx,batchNorm3d:()=>fx,batchNorm4d:()=>dx,batchToSpaceND:()=>Xl,bincount:()=>hx,booleanMaskAsync:()=>Uj,broadcastArgs:()=>LE,broadcastTo:()=>$i,buffer:()=>wt,cast:()=>J,ceil:()=>gx,clipByValue:()=>Cr,clone:()=>sn,complex:()=>bn,concat:()=>ne,concat1d:()=>xx,concat2d:()=>yx,concat3d:()=>bx,concat4d:()=>wx,conv1d:()=>Jp,conv2d:()=>Cn,conv2dTranspose:()=>tm,conv3d:()=>Cx,conv3dTranspose:()=>vx,cos:()=>Yl,cosh:()=>em,cosineWindow:()=>ch,cumprod:()=>ju,cumsum:()=>rm,denseBincount:()=>ME,depthToSpace:()=>Sx,depthwiseConv2d:()=>Di,diag:()=>zE,dilation2d:()=>Nx,div:()=>pt,divNoNan:()=>kx,dot:()=>Tx,dropout:()=>n0,einsum:()=>BE,elu:()=>Ri,enclosingPowerOfTwo:()=>o0,equal:()=>Ar,erf:()=>Ex,euclideanNorm:()=>_x,exp:()=>er,expandDims:()=>gr,expm1:()=>Ax,eye:()=>Yu,fft:()=>su,fill:()=>go,floor:()=>Fi,floorDiv:()=>Xp,fused:()=>au,gather:()=>Oi,gatherND:()=>Qj,greater:()=>He,greaterEqual:()=>Fn,ifft:()=>Za,imag:()=>Kl,image:()=>lu,inTopKAsync:()=>r6,irfft:()=>gm,isFinite:()=>$x,isInf:()=>Dx,isNaN:()=>Rx,leakyRelu:()=>Zl,less:()=>nm,lessEqual:()=>On,linalg:()=>i0,linspace:()=>WE,localResponseNormalization:()=>Fx,log:()=>Ir,log1p:()=>Jl,logSigmoid:()=>Lx,logSoftmax:()=>om,logSumExp:()=>sm,logicalAnd:()=>Dr,logicalNot:()=>Ql,logicalOr:()=>im,logicalXor:()=>Mx,losses:()=>rX,lowerBound:()=>UE,matMul:()=>Lt,max:()=>Br,maxPool:()=>tu,maxPool3d:()=>Bx,maxPoolWithArgmax:()=>HE,maximum:()=>In,mean:()=>Se,meshgrid:()=>qE,min:()=>Xu,minimum:()=>Pi,mirrorPad:()=>Vx,mod:()=>Gx,moments:()=>Zu,movingAverage:()=>qj,mul:()=>R,multiRNNCell:()=>KE,multinomial:()=>jE,neg:()=>Ut,norm:()=>Ya,notEqual:()=>zs,oneHot:()=>ki,ones:()=>lr,onesLike:()=>xr,op:()=>k,outerProduct:()=>XE,pad:()=>un,pad1d:()=>YE,pad2d:()=>ZE,pad3d:()=>JE,pad4d:()=>QE,pool:()=>Wx,pow:()=>an,prelu:()=>ru,print:()=>Kg,prod:()=>Ux,raggedGather:()=>t_,raggedTensorToTensor:()=>e_,rand:()=>r_,randomGamma:()=>b_,randomNormal:()=>tc,randomStandardNormal:()=>w_,randomUniform:()=>Li,range:()=>nu,real:()=>Xa,reciprocal:()=>Xx,relu:()=>Rr,relu6:()=>am,reshape:()=>D,reverse:()=>ur,reverse1d:()=>C_,reverse2d:()=>I_,reverse3d:()=>v_,reverse4d:()=>S_,rfft:()=>iu,round:()=>lm,rsqrt:()=>um,scalar:()=>mt,scatterND:()=>jj,searchSorted:()=>ah,selu:()=>cm,separableConv2d:()=>pm,setdiff1dAsync:()=>N_,sigmoid:()=>Xr,sign:()=>Yx,signal:()=>eX,sin:()=>mm,sinh:()=>fm,slice:()=>Dt,slice1d:()=>dm,slice2d:()=>uh,slice3d:()=>hm,slice4d:()=>ec,softmax:()=>ou,softplus:()=>Ms,spaceToBatchND:()=>eu,sparse:()=>nX,sparseToDense:()=>Zj,spectral:()=>tX,split:()=>cr,sqrt:()=>ve,square:()=>Mt,squaredDifference:()=>xm,squeeze:()=>Pn,stack:()=>rr,step:()=>yo,stridedSlice:()=>Zx,string:()=>oX,sub:()=>ct,sum:()=>ft,tan:()=>Jx,tanh:()=>_i,tensor:()=>wr,tensor1d:()=>Le,tensor2d:()=>Bs,tensor3d:()=>Zg,tensor4d:()=>k_,tensor5d:()=>T_,tensor6d:()=>E_,tile:()=>$r,topk:()=>Qx,transpose:()=>Ot,truncatedNormal:()=>ym,unique:()=>ty,unsortedSegmentSum:()=>bm,unstack:()=>vr,upperBound:()=>__,variable:()=>ey,where:()=>_e,whereAsync:()=>ny,zeros:()=>Ne,zerosLike:()=>It});var $D=(r,t,e,n=ae)=>{switch(r.op){case"BiasAdd":case"AddV2":case"Add":return[n.add(v("a",r,t,e),v("b",r,t,e))];case"AddN":return[n.addN(v("tensors",r,t,e))];case"FloorMod":case"Mod":return[n.mod(v("a",r,t,e),v("b",r,t,e))];case"Mul":return[n.mul(v("a",r,t,e),v("b",r,t,e))];case"RealDiv":case"Div":return[n.div(v("a",r,t,e),v("b",r,t,e))];case"DivNoNan":return[n.divNoNan(v("a",r,t,e),v("b",r,t,e))];case"FloorDiv":return[n.floorDiv(v("a",r,t,e),v("b",r,t,e))];case"Sub":return[n.sub(v("a",r,t,e),v("b",r,t,e))];case"Minimum":return[n.minimum(v("a",r,t,e),v("b",r,t,e))];case"Maximum":return[n.maximum(v("a",r,t,e),v("b",r,t,e))];case"Pow":return[n.pow(v("a",r,t,e),v("b",r,t,e))];case"SquaredDifference":return[n.squaredDifference(v("a",r,t,e),v("b",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var DD=(r,t,e,n=ae)=>{switch(r.op){case"Abs":case"ComplexAbs":return[n.abs(v("x",r,t,e))];case"Acos":return[n.acos(v("x",r,t,e))];case"Acosh":return[n.acosh(v("x",r,t,e))];case"Asin":return[n.asin(v("x",r,t,e))];case"Asinh":return[n.asinh(v("x",r,t,e))];case"Atan":return[n.atan(v("x",r,t,e))];case"Atan2":return[n.atan2(v("x",r,t,e),v("y",r,t,e))];case"Atanh":return[n.atanh(v("x",r,t,e))];case"Ceil":return[n.ceil(v("x",r,t,e))];case"Complex":return[n.complex(v("real",r,t,e),v("imag",r,t,e))];case"Cos":return[n.cos(v("x",r,t,e))];case"Cosh":return[n.cosh(v("x",r,t,e))];case"Elu":return[n.elu(v("x",r,t,e))];case"Erf":return[n.erf(v("x",r,t,e))];case"Exp":return[n.exp(v("x",r,t,e))];case"Expm1":return[n.expm1(v("x",r,t,e))];case"Floor":return[n.floor(v("x",r,t,e))];case"Log":return[n.log(v("x",r,t,e))];case"Log1p":return[n.log1p(v("x",r,t,e))];case"Imag":return[n.imag(v("x",r,t,e))];case"Neg":return[n.neg(v("x",r,t,e))];case"Reciprocal":return[n.reciprocal(v("x",r,t,e))];case"Real":return[n.real(v("x",r,t,e))];case"Relu":return[n.relu(v("x",r,t,e))];case"Round":return[n.round(v("x",r,t,e))];case"Selu":return[n.selu(v("x",r,t,e))];case"Sigmoid":return[n.sigmoid(v("x",r,t,e))];case"Sin":return[n.sin(v("x",r,t,e))];case"Sign":return[n.sign(v("x",r,t,e))];case"Sinh":return[n.sinh(v("x",r,t,e))];case"Softplus":return[n.softplus(v("x",r,t,e))];case"Sqrt":return[n.sqrt(v("x",r,t,e))];case"Square":return[n.square(v("x",r,t,e))];case"Tanh":return[n.tanh(v("x",r,t,e))];case"Tan":return[n.tan(v("x",r,t,e))];case"ClipByValue":return[n.clipByValue(v("x",r,t,e),v("clipValueMin",r,t,e),v("clipValueMax",r,t,e))];case"Relu6":return[n.relu6(v("x",r,t,e))];case"Rsqrt":return[n.rsqrt(yr(r.inputNames[0],t,e))];case"Prod":return[n.prod(v("x",r,t,e),v("axes",r,t,e))];case"LeakyRelu":return[n.leakyRelu(v("x",r,t,e),v("alpha",r,t,e))];case"Prelu":return[n.prelu(v("x",r,t,e),v("alpha",r,t,e))];case"IsNan":return[n.isNaN(yr(r.inputNames[0],t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function zn(r,t,e=""){if(!(typeof r=="number"||typeof t=="number")){y.assert(r.length===t.length,()=>e+` Shapes ${r} and ${t} must match`);for(let n=0;n<r.length;n++){let o=r[n],s=t[n];y.assert(o<0||s<0||o===s,()=>e+` Shapes ${r} and ${t} must match`)}}}function RD(r){return!(typeof r=="number"||r.some(t=>t<0))}function Uf(r,t,e){let n=Rb(r,e),o=!RD(n);if(o&&t.length===0)throw new Error(`Tried to calculate elements of an empty list with non-fully-defined elementShape: ${n}`);if(o&&t.forEach(s=>{n=Rb(s.shape,n)}),!RD(n))throw new Error(`Non-fully-defined elementShape: ${n}`);return n}function Rb(r,t){if(typeof r=="number")return t;if(typeof t=="number")return r;if(r.length!==t.length)throw new Error(`Incompatible ranks during merge: ${r} vs. ${t}`);let e=[];for(let n=0;n<r.length;++n){let o=r[n],s=t[n];if(o>=0&&s>=0&&o!==s)throw new Error(`Incompatible shape during merge: ${r} vs. ${t}`);e[n]=o>=0?o:s}return e}var Fb=class{constructor(t,e,n,o,s,i,a){this.name=t,this.dtype=e,this.maxSize=n,this.elementShape=o,this.identicalElementShapes=s,this.dynamicSize=i,this.clearAfterRead=a,this.tensors=[],this.closed_=!1,this.idTensor=mt(0),De(this.idTensor)}get id(){return this.idTensor.id}get closed(){return this.closed_}clearAndClose(t){this.tensors.forEach(e=>{(t==null||!t.has(e.tensor.id))&&e.tensor.dispose()}),this.tensors=[],this.closed_=!0,this.idTensor.dispose()}size(){return this.tensors.length}read(t){if(this.closed_)throw new Error(`TensorArray ${this.name} has already been closed.`);if(t<0||t>=this.size())throw new Error(`Tried to read from index ${t}, but array size is: ${this.size()}`);let e=this.tensors[t];if(e.cleared)throw new Error(`TensorArray ${this.name}: Could not read index ${t} twice because it was cleared after a previous read (perhaps try setting clear_after_read = false?).`);return this.clearAfterRead&&(e.cleared=!0),e.read=!0,e.tensor}readMany(t){return t.map(e=>this.read(e))}write(t,e){if(this.closed_)throw new Error(`TensorArray ${this.name} has already been closed.`);if(t<0||!this.dynamicSize&&t>=this.maxSize)throw new Error(`Tried to write to index ${t}, but array is not resizeable and size is: ${this.maxSize}`);let n=this.tensors[t]||{};if(e.dtype!==this.dtype)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${t},
because the value dtype is ${e.dtype}, but TensorArray dtype is ${this.dtype}.`);if(this.size()===0&&(this.elementShape==null||this.elementShape.length===0)&&(this.elementShape=e.shape),zn(this.elementShape,e.shape,`TensorArray ${this.name}: Could not write to TensorArray index ${t}.`),n.read)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${t}, because it has already been read.`);if(n.written)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${t}, because it has already been written.`);n.tensor=e,De(e),n.written=!0,this.tensors[t]=n}writeMany(t,e){if(t.length!==e.length)throw new Error(`TensorArray ${this.name}: could not write multiple tensors,because the index size: ${t.length} is not the same as tensors size: ${e.length}.`);t.forEach((n,o)=>this.write(n,e[o]))}gather(t,e){if(!!e&&e!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but gather requested dtype ${e}`);if(t)t=t.slice(0,this.size());else{t=[];for(let o=0;o<this.size();o++)t.push(o)}if(t.length===0)return wr([],[0].concat(this.elementShape));let n=this.readMany(t);return zn(this.elementShape,n[0].shape,"TensorArray shape mismatch: "),rr(n,0)}concat(t){if(!!t&&t!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but concat requested dtype ${t}`);if(this.size()===0)return wr([],[0].concat(this.elementShape));let e=[];for(let o=0;o<this.size();o++)e.push(o);let n=this.readMany(e);return zn(this.elementShape,n[0].shape,`TensorArray shape mismatch: tensor array shape (${this.elementShape}) vs first tensor shape (${n[0].shape})`),ne(n,0)}scatter(t,e){if(e.dtype!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but tensor has dtype ${e.dtype}`);if(t.length!==e.shape[0])throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${t.length} vs. ${e.shape[0]}`);let n=Math.max(...t);if(!this.dynamicSize&&n>=this.maxSize)throw new Error(`Max index must be < array size (${n} vs. ${this.maxSize})`);this.writeMany(t,vr(e,0))}split(t,e){if(e.dtype!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but tensor has dtype ${e.dtype}`);let n=0,o=t.map(u=>(n+=u,n));if(n!==e.shape[0])throw new Error(`Expected sum of lengths to be equal to
tensor.shape[0], but sum of lengths is
${n}, and tensor's shape is: ${e.shape}`);if(!this.dynamicSize&&t.length!==this.maxSize)throw new Error(`TensorArray's size is not equal to the size of lengths (${this.maxSize} vs. ${t.length}), and the TensorArray is not marked as dynamically resizeable`);let s=n===0?0:e.size/n,i=[];B(()=>{e=D(e,[1,n,s]);for(let u=0;u<t.length;++u){let l=u===0?0:o[u-1],c=[0,l,0],p=[1,t[u],s];i[u]=D(Dt(e,c,p),this.elementShape)}return i});let a=[];for(let u=0;u<t.length;u++)a[u]=u;this.writeMany(a,i)}};var cl=class{constructor(t,e,n,o=-1){this.tensors=t,this.elementShape=e,this.elementDtype=n,t!=null&&t.forEach(s=>{if(n!==s.dtype)throw new Error(`Invalid data types; op elements ${n}, but list elements ${s.dtype}`);zn(e,s.shape,"TensorList shape mismatch: "),De(s)}),this.idTensor=mt(0),this.maxNumElements=o,De(this.idTensor)}get id(){return this.idTensor.id}copy(){return new cl([...this.tensors],this.elementShape,this.elementDtype)}clearAndClose(t){this.tensors.forEach(e=>{(t==null||!t.has(e.id))&&e.dispose()}),this.tensors.length=0,this.idTensor.dispose()}size(){return this.tensors.length}stack(t,e,n=-1){if(e!==this.elementDtype)throw new Error(`Invalid data types; op elements ${e}, but list elements ${this.elementDtype}`);if(n!==-1&&this.tensors.length!==n)throw new Error(`Operation expected a list with ${n} elements but got a list with ${this.tensors.length} elements.`);zn(t,this.elementShape,"TensorList shape mismatch: ");let o=Uf(this.elementShape,this.tensors,t);return B(()=>{let s=this.tensors.map(i=>D(i,o));return rr(s,0)})}popBack(t,e){if(e!==this.elementDtype)throw new Error(`Invalid data types; op elements ${e}, but list elements ${this.elementDtype}`);if(this.size()===0)throw new Error("Trying to pop from an empty list.");let n=Uf(this.elementShape,this.tensors,t),o=this.tensors.pop();return o.kept=!1,zn(o.shape,t,"TensorList shape mismatch: "),D(o,n)}pushBack(t){if(t.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t.dtype}, but list elements ${this.elementDtype}`);if(zn(t.shape,this.elementShape,"TensorList shape mismatch: "),this.maxNumElements===this.size())throw new Error("Trying to push element into a full list.");De(t),this.tensors.push(t)}resize(t){if(t<0)throw new Error(`TensorListResize expects size to be non-negative. Got: ${t}`);if(this.maxNumElements!==-1&&t>this.maxNumElements)throw new Error(`TensorListResize input size ${t} is greater maxNumElement ${this.maxNumElements}.`);let e=new cl([],this.elementShape,this.elementDtype,this.maxNumElements);e.tensors.length=t;for(let n=0;n<Math.min(this.tensors.length,t);++n)e.tensors[n]=this.tensors[n];return e}getItem(t,e,n){if(n!==this.elementDtype)throw new Error(`Invalid data types; op elements ${n}, but list elements ${this.elementDtype}`);if(t<0||t>this.tensors.length)throw new Error(`Trying to access element ${t} in a list with ${this.tensors.length} elements.`);if(this.tensors[t]==null)throw new Error(`element at index ${t} is null.`);zn(this.tensors[t].shape,e,"TensorList shape mismatch: ");let o=Uf(this.elementShape,this.tensors,e);return D(this.tensors[t],o)}setItem(t,e){if(e.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${e.dtype}, but list elements ${this.elementDtype}`);if(t<0||this.maxNumElements!==-1&&t>=this.maxNumElements)throw new Error(`Trying to set element ${t} in a list with max ${this.maxNumElements} elements.`);zn(this.elementShape,e.shape,"TensorList shape mismatch: "),De(e),this.tensors[t]!=null&&(this.tensors[t].kept=!1),this.tensors[t]=e}gather(t,e,n){if(e!==this.elementDtype)throw new Error(`Invalid data types; op elements ${e}, but list elements ${this.elementDtype}`);zn(this.elementShape,n,"TensorList shape mismatch: "),t=t.slice(0,this.size());let o=Uf(this.elementShape,this.tensors,n);return t.length===0?wr([],[0].concat(o)):B(()=>{let s=t.map(i=>D(this.tensors[i],o));return rr(s,0)})}concat(t,e){if(!!t&&t!==this.elementDtype)throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${t}`);zn(this.elementShape,e,"TensorList shape mismatch: ");let n=Uf(this.elementShape,this.tensors,e);return this.size()===0?wr([],[0].concat(n)):B(()=>{let o=this.tensors.map(s=>D(s,n));return ne(o,0)})}};function FD(r,t,e){let n=r.dtype;if(r.shape.length<1)throw new Error(`Tensor must be at least a vector, but saw shape: ${r.shape}`);if(r.dtype!==e)throw new Error(`Invalid data types; op elements ${r.dtype}, but list elements ${e}`);let o=r.shape.slice(1);zn(o,t,"TensorList shape mismatch: ");let s=vr(r);return new cl(s,t,n)}function OD(r,t,e,n){return new cl([],r,t,n)}function PD(r,t,e,n){if(t.length!==r.shape[0])throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${t.length} vs. ${r.shape[0]}`);let o=Math.max(...t);if(n!=null&&n!==-1&&o>=n)throw new Error(`Max index must be < array size (${o} vs. ${n})`);let s=new cl([],e,r.dtype,n),i=vr(r,0);return t.forEach((a,u)=>{s.setItem(a,i[u])}),s}function LD(r,t,e){let n=0,o=t.map(c=>(n+=c,n));if(n!==r.shape[0])throw new Error(`Expected sum of lengths to be equal to
tensor.shape[0], but sum of lengths is
${n}, and tensor's shape is: ${r.shape}`);let s=r.shape.slice(1),i=Rb(s,e),a=n===0?0:r.size/n,u=B(()=>{let c=[];r=D(r,[1,n,a]);for(let p=0;p<t.length;++p){let m=p===0?0:o[p-1],f=[0,m,0],d=[1,t[p],a];c[p]=D(Dt(r,f,d),i)}return r.dispose(),c}),l=new cl([],e,r.dtype,t.length);for(let c=0;c<u.length;c++)l.setItem(c,u[c]);return l}var MD=async(r,t,e)=>{switch(r.op){case"If":case"StatelessIf":{let n=v("thenBranch",r,t,e),o=v("elseBranch",r,t,e),s=v("cond",r,t,e),i=v("args",r,t,e);return(await s.data())[0]?e.functionMap[n].executeFunctionAsync(i,e.tensorArrayMap,e.tensorListMap):e.functionMap[o].executeFunctionAsync(i,e.tensorArrayMap,e.tensorListMap)}case"While":case"StatelessWhile":{let n=v("body",r,t,e),o=v("cond",r,t,e),s=v("args",r,t,e),i=await e.functionMap[o].executeFunctionAsync(s,e.tensorArrayMap,e.tensorListMap),a=s.map(c=>c.id),u=await i[0].data();i.forEach(c=>{!c.kept&&a.indexOf(c.id)===-1&&c.dispose()});let l=s;for(;u[0];){let c=l;l=await e.functionMap[n].executeFunctionAsync(l,e.tensorArrayMap,e.tensorListMap);let p=l.map(f=>f.id);c.forEach(f=>{!f.kept&&a.indexOf(f.id)===-1&&p.indexOf(f.id)===-1&&f.dispose()});let m=await e.functionMap[o].executeFunctionAsync(l,e.tensorArrayMap,e.tensorListMap);u=await m[0].data(),m.forEach(f=>{!f.kept&&a.indexOf(f.id)===-1&&p.indexOf(f.id)===-1&&f.dispose()})}return l}case"LoopCond":{let n=v("pred",r,t,e);return[Xs(n)]}case"Switch":{let n=v("pred",r,t,e),o=v("data",r,t,e);return o.kept||(o=Xs(o)),(await n.data())[0]?[void 0,o]:[o,void 0]}case"Merge":{let n=r.inputNames.find(o=>yr(o,t,e)!==void 0);if(n){let o=yr(n,t,e);return[Xs(o)]}return}case"Enter":{let n=v("frameName",r,t,e),o=v("tensor",r,t,e);return e.enterFrame(n),[Xs(o)]}case"Exit":{let n=v("tensor",r,t,e);return e.exitFrame(),[Xs(n)]}case"NextIteration":{let n=v("tensor",r,t,e);return e.nextIteration(),[Xs(n)]}case"TensorArrayV3":{let n=v("size",r,t,e),o=v("dtype",r,t,e),s=v("elementShape",r,t,e),i=v("dynamicSize",r,t,e),a=v("clearAfterRead",r,t,e),u=v("identicalElementShapes",r,t,e),l=v("name",r,t,e),c=new Fb(l,o,n,s,u,i,a);return e.addTensorArray(c),[c.idTensor,mt(1)]}case"TensorArrayWriteV3":{let n=v("tensorArrayId",r,t,e),o=v("index",r,t,e),s=v("tensor",r,t,e),i=e.getTensorArray(n.id);return i.write(o,s),[i.idTensor]}case"TensorArrayReadV3":{let n=v("tensorArrayId",r,t,e),o=v("index",r,t,e);return[e.getTensorArray(n.id).read(o)]}case"TensorArrayGatherV3":{let n=v("tensorArrayId",r,t,e),o=v("indices",r,t,e),s=v("dtype",r,t,e);return[e.getTensorArray(n.id).gather(o,s)]}case"TensorArrayScatterV3":{let n=v("tensorArrayId",r,t,e),o=v("indices",r,t,e),s=v("tensor",r,t,e),i=e.getTensorArray(n.id);return i.scatter(o,s),[i.idTensor]}case"TensorArrayConcatV3":{let n=v("tensorArrayId",r,t,e),o=e.getTensorArray(n.id),s=v("dtype",r,t,e);return[o.concat(s)]}case"TensorArraySplitV3":{let n=v("tensorArrayId",r,t,e),o=v("tensor",r,t,e),s=v("lengths",r,t,e),i=e.getTensorArray(n.id);return i.split(s,o),[i.idTensor]}case"TensorArraySizeV3":{let n=v("tensorArrayId",r,t,e),o=e.getTensorArray(n.id);return[mt(o.size(),"int32")]}case"TensorArrayCloseV3":{let n=v("tensorArrayId",r,t,e),o=e.getTensorArray(n.id);return o.clearAndClose(),[o.idTensor]}case"TensorListSetItem":{let n=v("tensorListId",r,t,e),o=v("index",r,t,e),s=v("tensor",r,t,e),i=e.getTensorList(n.id);return i.setItem(o,s),[i.idTensor]}case"TensorListGetItem":{let n=v("tensorListId",r,t,e),o=v("index",r,t,e),s=v("elementShape",r,t,e),i=v("elementDType",r,t,e);return[e.getTensorList(n.id).getItem(o,s,i)]}case"TensorListScatterV2":case"TensorListScatter":{let n=v("indices",r,t,e),o=v("tensor",r,t,e),s=v("elementShape",r,t,e),i=v("numElements",r,t,e),a=PD(o,n,s,i);return e.addTensorList(a),[a.idTensor]}case"TensorListReserve":case"EmptyTensorList":{let n=v("elementShape",r,t,e),o=v("elementDType",r,t,e),s;r.op==="TensorListReserve"?s="numElements":s="maxNumElements";let i=v(s,r,t,e),a=r.op==="TensorListReserve"?-1:i,u=OD(n,o,i,a);return e.addTensorList(u),[u.idTensor]}case"TensorListGather":{let n=v("tensorListId",r,t,e),o=v("indices",r,t,e),s=v("elementShape",r,t,e),i=v("elementDType",r,t,e);return[e.getTensorList(n.id).gather(o,i,s)]}case"TensorListStack":{let n=v("tensorListId",r,t,e),o=v("elementShape",r,t,e),s=v("elementDType",r,t,e),i=v("numElements",r,t,e);return[e.getTensorList(n.id).stack(o,s,i)]}case"TensorListFromTensor":{let n=v("tensor",r,t,e),o=v("elementShape",r,t,e),s=v("elementDType",r,t,e),i=FD(n,o,s);return e.addTensorList(i),[i.idTensor]}case"TensorListConcat":case"TensorListConcatV2":{let n=v("tensorListId",r,t,e),o=e.getTensorList(n.id),s=v("dtype",r,t,e),i=v("elementShape",r,t,e);return[o.concat(s,i)]}case"TensorListPushBack":{let n=v("tensorListId",r,t,e),o=v("tensor",r,t,e),s=e.getTensorList(n.id);return s.pushBack(o),[s.idTensor]}case"TensorListPopBack":{let n=v("tensorListId",r,t,e),o=v("elementShape",r,t,e),s=v("elementDType",r,t,e);return[e.getTensorList(n.id).popBack(o,s)]}case"TensorListSplit":{let n=v("tensor",r,t,e),o=v("elementShape",r,t,e),s=v("lengths",r,t,e),i=LD(n,s,o);return e.addTensorList(i),[i.idTensor]}case"TensorListLength":{let n=v("tensorListId",r,t,e),o=e.getTensorList(n.id);return[mt(o.size(),"int32")]}case"TensorListResize":{let n=v("tensorListId",r,t,e),o=v("size",r,t,e),i=e.getTensorList(n.id).resize(o);return e.addTensorList(i),[i.idTensor]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};function zD(r,t,e){let[n,o]=v("fusedOps",r,t,e),s=n==="biasadd",i=!s,a=o==="prelu",u=n==="fusedbatchnorm",l=v("numArgs",r,t,e);if(s){if(a&&l!==2)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!a&&s&&l!==1)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd must have one extra argument: bias.")}if(u)throw new Error("FusedConv2d and DepthwiseConv2d with FusedBatchNorm is not supported");let c=v("strides",r,t,e),p=Eh(r,t,e),m=v("dataFormat",r,t,e).toUpperCase(),f=v("dilations",r,t,e),[d,h]=v("args",r,t,e);i&&(h=d,d=void 0);let g=v("leakyreluAlpha",r,t,e);return{stride:c,pad:p,dataFormat:m,dilations:f,biasArg:d,preluArg:h,activationFunc:o,leakyreluAlpha:g}}var BD=(r,t,e,n=ae)=>{switch(r.op){case"Conv1D":{let o=v("stride",r,t,e),s=v("pad",r,t,e),i=v("dataFormat",r,t,e).toUpperCase(),a=v("dilation",r,t,e);return[n.conv1d(v("x",r,t,e),v("filter",r,t,e),o,s,i,a)]}case"Conv2D":{let o=v("strides",r,t,e),s=Eh(r,t,e),i=v("dataFormat",r,t,e).toUpperCase(),a=v("dilations",r,t,e);return[n.conv2d(v("x",r,t,e),v("filter",r,t,e),[o[1],o[2]],s,i,[a[1],a[2]])]}case"_FusedConv2D":{let{stride:o,pad:s,dataFormat:i,dilations:a,biasArg:u,preluArg:l,activationFunc:c,leakyreluAlpha:p}=zD(r,t,e);return[n.fused.conv2d({x:v("x",r,t,e),filter:v("filter",r,t,e),strides:[o[1],o[2]],pad:s,dataFormat:i,dilations:[a[1],a[2]],bias:u,activation:c,preluActivationWeights:l,leakyreluAlpha:p})]}case"FusedDepthwiseConv2dNative":{let{stride:o,pad:s,dataFormat:i,dilations:a,biasArg:u,preluArg:l,activationFunc:c,leakyreluAlpha:p}=zD(r,t,e);return[n.fused.depthwiseConv2d({x:v("x",r,t,e),filter:v("filter",r,t,e),strides:[o[1],o[2]],pad:s,dataFormat:i,dilations:[a[1],a[2]],bias:u,activation:c,preluActivationWeights:l,leakyreluAlpha:p})]}case"Conv2DBackpropInput":case"Conv2dTranspose":{let o=v("outputShape",r,t,e),s=v("strides",r,t,e),i=Eh(r,t,e);return[n.conv2dTranspose(v("x",r,t,e),v("filter",r,t,e),o,[s[1],s[2]],i)]}case"DepthwiseConv2dNative":case"DepthwiseConv2d":{let o=v("strides",r,t,e),s=Eh(r,t,e),i=v("dilations",r,t,e),a=v("dataFormat",r,t,e).toUpperCase();return[n.depthwiseConv2d(v("input",r,t,e),v("filter",r,t,e),[o[1],o[2]],s,a,[i[1],i[2]])]}case"Conv3D":{let o=v("strides",r,t,e),s=v("pad",r,t,e),i=v("dataFormat",r,t,e).toUpperCase(),a=v("dilations",r,t,e);return[n.conv3d(v("x",r,t,e),v("filter",r,t,e),[o[1],o[2],o[3]],s,i,[a[1],a[2],a[3]])]}case"AvgPool":{let o=v("strides",r,t,e),s=v("pad",r,t,e),i=v("kernelSize",r,t,e);return[n.avgPool(v("x",r,t,e),[i[1],i[2]],[o[1],o[2]],s)]}case"MaxPool":{let o=v("strides",r,t,e),s=v("pad",r,t,e),i=v("kernelSize",r,t,e);return[n.maxPool(v("x",r,t,e),[i[1],i[2]],[o[1],o[2]],s)]}case"MaxPoolWithArgmax":{let o=v("strides",r,t,e),s=v("pad",r,t,e),i=v("kernelSize",r,t,e),a=v("includeBatchInIndex",r,t,e),{result:u,indexes:l}=n.maxPoolWithArgmax(v("x",r,t,e),[i[1],i[2]],[o[1],o[2]],s,a);return[u,l]}case"AvgPool3D":{let o=v("strides",r,t,e),s=v("pad",r,t,e),i=v("kernelSize",r,t,e);return[n.avgPool3d(v("x",r,t,e),[i[1],i[2],i[3]],[o[1],o[2],o[3]],s)]}case"MaxPool3D":{let o=v("strides",r,t,e),s=v("pad",r,t,e),i=v("kernelSize",r,t,e);return[n.maxPool3d(v("x",r,t,e),[i[1],i[2],i[3]],[o[1],o[2],o[3]],s)]}case"Dilation2D":{let o=v("strides",r,t,e),s=v("pad",r,t,e),i=v("dilations",r,t,e),a=o[1],u=o[2],l=i[1],c=i[2];return[n.dilation2d(v("x",r,t,e),v("filter",r,t,e),[a,u],s,[l,c],"NHWC")]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var VD=(r,t,e,n=ae)=>{switch(r.op){case"Fill":{let o=v("shape",r,t,e),s=v("dtype",r,t,e),i=v("value",r,t,e);return[n.fill(o,i,s)]}case"LinSpace":{let o=v("start",r,t,e),s=v("stop",r,t,e),i=v("num",r,t,e);return[n.linspace(o,s,i)]}case"Multinomial":{let o=v("logits",r,t,e),s=v("numSamples",r,t,e),i=v("seed",r,t,e);return[n.multinomial(o,s,i)]}case"OneHot":{let o=v("indices",r,t,e),s=v("depth",r,t,e),i=v("onValue",r,t,e),a=v("offValue",r,t,e),u=v("dtype",r,t,e);return[n.oneHot(o,s,i,a,u)]}case"Ones":return[n.ones(v("shape",r,t,e),v("dtype",r,t,e))];case"OnesLike":return[n.onesLike(v("x",r,t,e))];case"RandomStandardNormal":return[n.randomStandardNormal(v("shape",r,t,e),v("dtype",r,t,e),v("seed",r,t,e))];case"RandomUniform":return[n.randomUniform(v("shape",r,t,e),v("minval",r,t,e),v("maxval",r,t,e),v("dtype",r,t,e))];case"Range":{let o=v("start",r,t,e),s=v("stop",r,t,e),i=v("step",r,t,e);return[n.range(o,s,i,v("dtype",r,t,e))]}case"TruncatedNormal":{let o=v("shape",r,t,e),s=v("mean",r,t,e),i=v("stdDev",r,t,e),a=v("seed",r,t,e);return[n.truncatedNormal(o,s,i,v("dtype",r,t,e),a)]}case"Zeros":return[n.zeros(v("shape",r,t,e),v("dtype",r,t,e))];case"ZerosLike":return[n.zerosLike(v("x",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function aN(r,t,e){let n=v("boxes",r,t,e),o=v("scores",r,t,e),s=v("maxOutputSize",r,t,e),i=v("iouThreshold",r,t,e),a=v("scoreThreshold",r,t,e),u=v("softNmsSigma",r,t,e);return{boxes:n,scores:o,maxOutputSize:s,iouThreshold:i,scoreThreshold:a,softNmsSigma:u}}var GD=async(r,t,e,n,o=ae)=>{switch(r.op){case"NonMaxSuppressionV5":{let{boxes:s,scores:i,maxOutputSize:a,iouThreshold:u,scoreThreshold:l,softNmsSigma:c}=aN(r,t,e),p=await o.image.nonMaxSuppressionWithScoreAsync(s,i,a,u,l,c);return[p.selectedIndices,p.selectedScores]}case"NonMaxSuppressionV4":{let{boxes:s,scores:i,maxOutputSize:a,iouThreshold:u,scoreThreshold:l}=aN(r,t,e),c=v("padToMaxOutputSize",r,t,e),p=await o.image.nonMaxSuppressionPaddedAsync(s,i,a,u,l,c);return[p.selectedIndices,p.validOutputs]}case"NonMaxSuppressionV3":case"NonMaxSuppressionV2":{let{boxes:s,scores:i,maxOutputSize:a,iouThreshold:u,scoreThreshold:l}=aN(r,t,e);return[await o.image.nonMaxSuppressionAsync(s,i,a,u,l)]}case"Where":{let s=o.cast(v("condition",r,t,e),"bool"),i=[await o.whereAsync(s)];return s.dispose(),i}case"ListDiff":return o.setdiff1dAsync(v("x",r,t,e),v("y",r,t,e));default:throw TypeError(`Node type ${r.op} is not implemented`)}};var WD=(r,t,e,n=ae)=>{switch(r.op){case"LowerBound":{let o=v("sortedSequence",r,t,e),s=v("values",r,t,e);return[n.lowerBound(o,s)]}case"TopKV2":{let o=v("x",r,t,e),s=v("k",r,t,e),i=v("sorted",r,t,e),a=n.topk(o,s,i);return[a.values,a.indices]}case"UpperBound":{let o=v("sortedSequence",r,t,e),s=v("values",r,t,e);return[n.upperBound(o,s)]}case"Unique":{let o=v("x",r,t,e),s=n.unique(o);return[s.values,s.indices]}case"UniqueV2":{let o=v("x",r,t,e),s=v("axis",r,t,e),i=n.unique(o,s);return[i.values,i.indices]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var UD=(r,t,e,n=ae)=>{switch(r.op){case"Const":return t[r.name];case"PlaceholderWithDefault":let o=v("default",r,t,e);return[yr(r.name,t,e)||o];case"Placeholder":return[yr(r.name,t,e)];case"Identity":case"StopGradient":case"FakeQuantWithMinMaxVars":{let c=v("x",r,t,e);return[Xs(c)]}case"IdentityN":return v("x",r,t,e).map(c=>Xs(c));case"Snapshot":let s=v("x",r,t,e);return[Xs(s)];case"Shape":return[n.tensor1d(v("x",r,t,e).shape,"int32")];case"ShapeN":return v("x",r,t,e).map(c=>n.tensor1d(c.shape));case"Size":return[n.scalar(v("x",r,t,e).size,"int32")];case"Rank":return[n.scalar(v("x",r,t,e).rank,"int32")];case"NoOp":return[n.scalar(1)];case"Print":let i=v("x",r,t,e),a=v("data",r,t,e),u=v("message",r,t,e),l=v("summarize",r,t,e);console.warn("The graph has a tf.print() operation,usually used for debugging, which slows down performance."),console.log(u);for(let c=0;c<a.length;c++)console.log(Array.prototype.slice.call(a[c].dataSync()).slice(0,l));return[i];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var Ob=class{constructor(t,e){this.keyDType=t,this.valueDType=e,this.handle=mt(0),this.tensorMap=new Map,De(this.handle)}get id(){return this.handle.id}clearAndClose(){this.tensorMap.forEach(t=>t.dispose()),this.tensorMap.clear(),this.handle.dispose()}size(){return this.tensorMap.size}tensorSize(){return mt(this.size(),"int32")}async import(t,e){this.checkKeyAndValueTensor(t,e);let n=await t.data();return this.tensorMap.forEach(o=>o.dispose()),this.tensorMap.clear(),B(()=>{let o=vr(e),s=n.length,i=o.length;y.assert(s===i,()=>`The number of elements doesn't match, keys has ${s} elements, the values has ${i} elements.`);for(let a=0;a<s;a++){let u=n[a],l=o[a];De(l),this.tensorMap.set(u,l)}return this.handle})}async find(t,e){this.checkKeyAndValueTensor(t,e);let n=await t.data();return B(()=>{let o=[];for(let s=0;s<n.length;s++){let i=n[s],a=this.findWithDefault(i,e);o.push(a)}return rr(o)})}findWithDefault(t,e){let n=this.tensorMap.get(t);return n!=null?n:e}checkKeyAndValueTensor(t,e){if(t.dtype!==this.keyDType)throw new Error(`Expect key dtype ${this.keyDType}, but got ${t.dtype}`);if(e.dtype!==this.valueDType)throw new Error(`Expect value dtype ${this.valueDType}, but got ${e.dtype}`)}};var HD=async(r,t,e,n)=>{switch(r.op){case"HashTable":case"HashTableV2":{let o=v("keyDType",r,t,e),s=v("valueDType",r,t,e),i=new Ob(o,s);return n.addHashTable(r.name,i),[i.handle]}case"LookupTableImport":case"LookupTableImportV2":{let o=v("tableHandle",r,t,e,n),s=v("keys",r,t,e),i=v("values",r,t,e);return[await n.getHashTableById(o.id).import(s,i)]}case"LookupTableFind":case"LookupTableFindV2":{let o=v("tableHandle",r,t,e,n),s=v("keys",r,t,e),i=v("defaultValue",r,t,e);return[await n.getHashTableById(o.id).find(s,i)]}case"LookupTableSize":case"LookupTableSizeV2":{let o=v("tableHandle",r,t,e,n);return[n.getHashTableById(o.id).tensorSize()]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var qD=(r,t,e,n=ae)=>{switch(r.op){case"ResizeBilinear":{let o=v("images",r,t,e),s=v("size",r,t,e),i=v("alignCorners",r,t,e),a=v("halfPixelCenters",r,t,e);return[n.image.resizeBilinear(o,[s[0],s[1]],i,a)]}case"ResizeNearestNeighbor":{let o=v("images",r,t,e),s=v("size",r,t,e),i=v("alignCorners",r,t,e),a=v("halfPixelCenters",r,t,e);return[n.image.resizeNearestNeighbor(o,[s[0],s[1]],i,a)]}case"CropAndResize":{let o=v("image",r,t,e),s=v("boxes",r,t,e),i=v("boxInd",r,t,e),a=v("cropSize",r,t,e),u=v("method",r,t,e),l=v("extrapolationValue",r,t,e);return[n.image.cropAndResize(o,s,i,a,u,l)]}case"ImageProjectiveTransformV3":{let o=v("images",r,t,e),s=v("transforms",r,t,e),i=v("outputShape",r,t,e),a=v("fillValue",r,t,e),u=v("interpolation",r,t,e),l=v("fillMode",r,t,e);return[n.image.transform(o,s,u.toLowerCase(),l.toLowerCase(),a,i)]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var KD=(r,t,e,n=ae)=>{switch(r.op){case"Equal":return[n.equal(v("a",r,t,e),v("b",r,t,e))];case"NotEqual":return[n.notEqual(v("a",r,t,e),v("b",r,t,e))];case"Greater":return[n.greater(v("a",r,t,e),v("b",r,t,e))];case"GreaterEqual":return[n.greaterEqual(v("a",r,t,e),v("b",r,t,e))];case"Less":return[n.less(v("a",r,t,e),v("b",r,t,e))];case"LessEqual":return[n.lessEqual(v("a",r,t,e),v("b",r,t,e))];case"LogicalAnd":return[n.logicalAnd(v("a",r,t,e),v("b",r,t,e))];case"LogicalNot":return[n.logicalNot(v("a",r,t,e))];case"LogicalOr":return[n.logicalOr(v("a",r,t,e),v("b",r,t,e))];case"Select":case"SelectV2":return[n.where(v("condition",r,t,e),v("a",r,t,e),v("b",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var jD=(r,t,e,n=ae)=>{switch(r.op){case"BatchMatMul":case"BatchMatMulV2":case"MatMul":return[n.matMul(v("a",r,t,e),v("b",r,t,e),v("transposeA",r,t,e),v("transposeB",r,t,e))];case"Einsum":return[n.einsum(v("equation",r,t,e),...v("tensors",r,t,e))];case"Transpose":return[n.transpose(v("x",r,t,e),v("perm",r,t,e))];case"_FusedMatMul":let[o,s]=v("fusedOps",r,t,e),i=o==="biasadd",a=s==="prelu",u=v("numArgs",r,t,e),l=v("leakyreluAlpha",r,t,e);if(i){if(a&&u!==2)throw new Error("Fused MatMul with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!a&&u!==1)throw new Error("Fused MatMul with BiasAdd must have one extra argument: bias.")}let[c,p]=v("args",r,t,e);return[n.fused.matMul({a:v("a",r,t,e),b:v("b",r,t,e),transposeA:v("transposeA",r,t,e),transposeB:v("transposeB",r,t,e),bias:c,activation:s,preluActivationWeights:p,leakyreluAlpha:l})];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var XD=(r,t,e,n=ae)=>{switch(r.op){case"EuclideanNorm":return[n.euclideanNorm(v("x",r,t,e),v("axis",r,t,e),v("keepDims",r,t,e))];case"FusedBatchNorm":case"FusedBatchNormV2":return[n.batchNorm(v("x",r,t,e),v("mean",r,t,e),v("variance",r,t,e),v("offset",r,t,e),v("scale",r,t,e),v("epsilon",r,t,e))];case"FusedBatchNormV3":return[n.batchNorm(v("x",r,t,e),v("mean",r,t,e),v("variance",r,t,e),v("offset",r,t,e),v("scale",r,t,e),v("epsilon",r,t,e))];case"LRN":return[n.localResponseNormalization(v("x",r,t,e),v("radius",r,t,e),v("bias",r,t,e),v("alpha",r,t,e),v("beta",r,t,e))];case"Softmax":return[n.softmax(v("x",r,t,e))];case"LogSoftmax":return[n.logSoftmax(v("x",r,t,e))];case"SparseToDense":return[n.sparseToDense(v("sparseIndices",r,t,e),v("outputShape",r,t,e),v("sparseValues",r,t,e),v("defaultValue",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var YD=(r,t,e,n=ae)=>{switch(r.op){case"Max":{let a=v("axis",r,t,e),u=v("keepDims",r,t,e);return[n.max(v("x",r,t,e),a,u)]}case"Mean":{let a=v("axis",r,t,e),u=v("keepDims",r,t,e);return[n.mean(v("x",r,t,e),a,u)]}case"Min":{let a=v("axis",r,t,e),u=v("keepDims",r,t,e);return[n.min(v("x",r,t,e),a,u)]}case"Sum":{let a=v("axis",r,t,e),u=v("keepDims",r,t,e);return[n.sum(v("x",r,t,e),a,u)]}case"All":{let a=v("axis",r,t,e),u=v("keepDims",r,t,e);return[n.all(v("x",r,t,e),a,u)]}case"Any":{let a=v("axis",r,t,e),u=v("keepDims",r,t,e);return[n.any(v("x",r,t,e),a,u)]}case"ArgMax":{let a=v("axis",r,t,e);return[n.argMax(v("x",r,t,e),a)]}case"ArgMin":{let a=v("axis",r,t,e);return[n.argMin(v("x",r,t,e),a)]}case"Prod":{let a=v("axis",r,t,e),u=v("keepDims",r,t,e);return[n.prod(v("x",r,t,e),a,u)]}case"Cumprod":{let a=v("axis",r,t,e),u=v("exclusive",r,t,e),l=v("reverse",r,t,e);return[n.cumprod(v("x",r,t,e),a,u,l)]}case"Cumsum":{let a=v("axis",r,t,e),u=v("exclusive",r,t,e),l=v("reverse",r,t,e);return[n.cumsum(v("x",r,t,e),a,u,l)]}case"Bincount":let o=v("x",r,t,e),s=v("weights",r,t,e),i=v("size",r,t,e);return[n.bincount(o,s,i)];case"DenseBincount":{let a=v("x",r,t,e),u=v("weights",r,t,e),l=v("size",r,t,e),c=v("binaryOutput",r,t,e);return[n.denseBincount(a,u,l,c)]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var ZD=(r,t,e,n=ae)=>{switch(r.op){case"ConcatV2":case"Concat":{let o=v("n",r,t,e),s=v("axis",r,t,e),i=v("tensors",r,t,e);return i=i.slice(0,o),[n.concat(i,s)]}case"Gather":{let o=v("x",r,t,e),s=v("indices",r,t,e);return[n.gather(o,n.cast(s,"int32"),0)]}case"GatherV2":{let o=v("axis",r,t,e),s=v("batchDims",r,t,e),i=v("x",r,t,e),a=v("indices",r,t,e);return[n.gather(i,n.cast(a,"int32"),o,s)]}case"Reverse":{let o=v("dims",r,t,e),s=[];for(let a=0;a<o.length;a++)o[a]&&s.push(a);let i=v("x",r,t,e);return[n.reverse(i,s)]}case"ReverseV2":{let o=v("axis",r,t,e),s=v("x",r,t,e);return[n.reverse(s,o)]}case"Slice":{let o=v("begin",r,t,e),s=v("size",r,t,e);return[n.slice(v("x",r,t,e),o,s)]}case"StridedSlice":{let o=v("begin",r,t,e),s=v("end",r,t,e),i=v("strides",r,t,e),a=v("beginMask",r,t,e),u=v("endMask",r,t,e),l=v("ellipsisMask",r,t,e),c=v("newAxisMask",r,t,e),p=v("shrinkAxisMask",r,t,e),m=v("x",r,t,e);return[n.stridedSlice(m,o,s,i,a,u,l,c,p)]}case"Pack":return B(()=>{let o=v("axis",r,t,e),s=v("tensors",r,t,e),i=s[0].shape,a=n.squeeze(s[0]).shape,u=s.map(l=>{let c=y.arraysEqual(l.shape,i);if(!c&&!y.arraysEqual(n.squeeze(l).shape,a))throw new Error("the input tensors shape does not match");return c?l:n.reshape(l,i)});return[n.stack(u,o)]});case"Unpack":{let o=v("axis",r,t,e),s=v("tensor",r,t,e);return n.unstack(s,o)}case"Tile":{let o=v("reps",r,t,e);return[n.tile(v("x",r,t,e),o)]}case"Split":case"SplitV":{let o=v("axis",r,t,e),s=v("numOrSizeSplits",r,t,e),i=v("x",r,t,e);return n.split(i,s,o)}case"ScatterNd":{let o=v("indices",r,t,e),s=v("values",r,t,e),i=v("shape",r,t,e);return[n.scatterND(o,s,i)]}case"GatherNd":{let o=v("x",r,t,e),s=v("indices",r,t,e);return[n.gatherND(o,s)]}case"SparseToDense":{let o=v("sparseIndices",r,t,e),s=v("outputShape",r,t,e),i=v("sparseValues",r,t,e),a=v("defaultValue",r,t,e);return[n.sparseToDense(o,i,s,i.dtype===a.dtype?a:n.cast(a,i.dtype))]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var JD=(r,t,e,n=ae)=>{switch(r.op){case"SparseFillEmptyRows":{let{outputIndices:o,outputValues:s,emptyRowIndicator:i,reverseIndexMap:a}=n.sparse.sparseFillEmptyRows(v("indices",r,t,e),v("values",r,t,e),v("denseShape",r,t,e),v("defaultValue",r,t,e));return[o,s,i,a]}case"SparseReshape":{let{outputIndices:o,outputShape:s}=n.sparse.sparseReshape(v("inputIndices",r,t,e),v("inputShape",r,t,e),v("newShape",r,t,e));return[o,s]}case"SparseSegmentMean":return[n.sparse.sparseSegmentMean(v("data",r,t,e),v("indices",r,t,e),v("segmentIds",r,t,e))];case"SparseSegmentSum":return[n.sparse.sparseSegmentSum(v("data",r,t,e),v("indices",r,t,e),v("segmentIds",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var QD=(r,t,e,n=ae)=>{switch(r.op){case"FFT":return[n.fft(v("x",r,t,e))];case"IFFT":return[n.ifft(v("x",r,t,e))];case"RFFT":return[n.rfft(v("x",r,t,e))];case"IRFFT":return[n.irfft(v("x",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var tR=(r,t,e,n=ae)=>{switch(r.op){case"StringNGrams":{let{nGrams:o,nGramsSplits:s}=n.string.stringNGrams(v("data",r,t,e),v("dataSplits",r,t,e),v("separator",r,t,e),v("nGramWidths",r,t,e),v("leftPad",r,t,e),v("rightPad",r,t,e),v("padWidth",r,t,e),v("preserveShortSequences",r,t,e));return[o,s]}case"StringSplit":{let{indices:o,values:s,shape:i}=n.string.stringSplit(v("input",r,t,e),v("delimiter",r,t,e),v("skipEmpty",r,t,e));return[o,s,i]}case"StringToHashBucketFast":return[n.string.stringToHashBucketFast(v("input",r,t,e),v("numBuckets",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var eR=(r,t,e,n=ae)=>{switch(r.op){case"Cast":return[n.cast(v("x",r,t,e),v("dtype",r,t,e))];case"ExpandDims":{let o=v("axis",r,t,e);return[n.expandDims(v("x",r,t,e),o)]}case"Squeeze":{let o=v("axis",r,t,e);return[n.squeeze(v("x",r,t,e),o)]}case"Reshape":return[n.reshape(v("x",r,t,e),v("shape",r,t,e))];case"MirrorPad":return[n.mirrorPad(v("x",r,t,e),v("padding",r,t,e),v("mode",r,t,e))];case"PadV2":case"Pad":return[n.pad(v("x",r,t,e),v("padding",r,t,e),v("constantValue",r,t,e))];case"SpaceToBatchND":{let o=v("blockShape",r,t,e),s=v("paddings",r,t,e);return[n.spaceToBatchND(v("x",r,t,e),o,s)]}case"BatchToSpaceND":{let o=v("blockShape",r,t,e),s=v("crops",r,t,e);return[n.batchToSpaceND(v("x",r,t,e),o,s)]}case"DepthToSpace":{let o=v("blockSize",r,t,e),s=v("dataFormat",r,t,e).toUpperCase();return[n.depthToSpace(v("x",r,t,e),o,s)]}case"BroadcastTo":return[n.broadcastTo(v("x",r,t,e),v("shape",r,t,e))];case"BroadcastArgs":return[n.broadcastArgs(v("s0",r,t,e),v("s1",r,t,e))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function lN(r,t,e,n,o=B){let s=((i,a,u)=>{switch(i.category){case"arithmetic":return o(()=>$D(i,a,u));case"basic_math":return o(()=>DD(i,a,u));case"control":return MD(i,a,u);case"convolution":return o(()=>BD(i,a,u));case"creation":return o(()=>VD(i,a,u));case"dynamic":return GD(i,a,u);case"evaluation":return o(()=>WD(i,a,u));case"image":return o(()=>qD(i,a,u));case"graph":return o(()=>UD(i,a,u));case"logical":return o(()=>KD(i,a,u));case"matrices":return o(()=>jD(i,a,u));case"normalization":return o(()=>XD(i,a,u));case"reduction":return o(()=>YD(i,a,u));case"slice_join":return o(()=>ZD(i,a,u));case"sparse":return o(()=>JD(i,a,u));case"spectral":return o(()=>QD(i,a,u));case"string":return o(()=>tR(i,a,u));case"transformation":return o(()=>eR(i,a,u));case"hash_table":return HD(i,a,u,n);case"custom":let l=wb(i.op);if(l&&l.customExecutor)return l.customExecutor(new Db(i,a,u));throw TypeError(`Custom op ${i.op} is not registered.`);default:throw TypeError(`Unknown op '${i.op}'. File an issue at https://github.com/tensorflow/tfjs/issues so we can add it, or register a custom execution with tf.registerOp()`)}})(r,t,e);return y.isPromise(s)?s.then(i=>[].concat(i)):[].concat(s)}var Ah=class{constructor(t={},e={},n={},o={}){this.weightMap=t,this.tensorArrayMap=e,this.tensorListMap=n,this.functionMap=o,this.rootContext={id:0,frameName:"",iterationId:0},this.contexts=[this.rootContext],this.lastId=0,this.generateCurrentContextIds()}newFrame(t,e){return{id:t,frameName:e,iterationId:0}}set currentContext(t){this.contexts!==t&&(this.contexts=t,this.generateCurrentContextIds())}get currentContext(){return this.contexts}get currentContextId(){return this._currentContextIds[0]}get currentContextIds(){return this._currentContextIds}generateCurrentContextIds(){let t=[];for(let e=0;e<this.contexts.length-1;e++){let n=this.contexts.slice(0,this.contexts.length-e);t.push(this.contextIdforContexts(n))}t.push(""),this._currentContextIds=t}contextIdforContexts(t){return t?t.map(e=>e.id===0&&e.iterationId===0?"":`${e.frameName}-${e.iterationId}`).join("/"):""}enterFrame(t){this.contexts&&(this.lastId++,this.contexts=this.contexts.slice(),this.contexts.push(this.newFrame(this.lastId,t)),this._currentContextIds.unshift(this.contextIdforContexts(this.contexts)))}exitFrame(){if(this.contexts&&this.contexts.length>1)this.contexts=this.contexts.slice(),this.contexts.splice(-1),this.currentContextIds.shift();else throw new Error("Cannot exit frame, the context is empty")}nextIteration(){if(this.contexts&&this.contexts.length>0){this.contexts=this.contexts.slice(),this.lastId++;let t=Object.assign({},this.contexts[this.contexts.length-1]);t.iterationId+=1,t.id=this.lastId,this.contexts.splice(-1,1,t),this._currentContextIds.splice(0,1,this.contextIdforContexts(this.contexts))}else throw new Error("Cannot increase frame iteration, the context is empty")}getWeight(t){return this.weightMap[t]}addTensorArray(t){this.tensorArrayMap[t.id]=t}getTensorArray(t){return this.tensorArrayMap[t]}addTensorList(t){this.tensorListMap[t.id]=t}getTensorList(t){return this.tensorListMap[t]}dispose(t){for(let e in this.tensorArrayMap)this.tensorArrayMap[e].clearAndClose(t);for(let e in this.tensorListMap)this.tensorListMap[e].clearAndClose(t)}};function uN(r,t,e,n){let o=new Set,s=[],i=null,a=null,u=new Set,l=Object.keys(r).map(m=>gn(m)[0]),c=[];n!=null&&(c=n.map(m=>gn(m.name)[0]));let p=[...t];for(;p.length>0;){let m=p.pop();if((cN(m)||y7(m)||b7(m))&&i==null&&(i=m,a=i.children.map(f=>f.name).filter(f=>o.has(f))),o.add(m.name),e[m.name]==null&&l.indexOf(m.name)===-1&&c.indexOf(m.name)===-1){if(m.inputs.length===0){s.push(m.name);continue}m.inputs.forEach(f=>{u.has(f.name)||(u.add(f.name),p.push(f))})}}return{inputs:r,outputs:t,usedNodes:o,missingInputs:s,dynamicNode:i,syncInputs:a}}function rR(r,t,e){let{usedNodes:n,inputs:o}=e,s=[],i=Object.keys(o).map(c=>gn(c)[0]).map(c=>r.nodes[c]),a=r.initNodes;i.forEach(c=>{n.has(c.name)&&s.push(c)}),r.weights.forEach(c=>{n.has(c.name)&&s.push(c)}),a!=null&&a.forEach(c=>{n.has(c.name)&&s.push(c)});let u=new Set,l=[];for(;s.length>0;){let c=s.pop();u.add(c.name),t[c.name]||l.push(c),c.children.forEach(p=>{!u.has(p.name)&&n.has(p.name)&&p.inputs.every(m=>u.has(m.name))&&s.push(p)})}return l}var h7=["Switch","Merge","Enter","Exit","NextIteration","StatelessIf","StatelessWhile","if","While"],g7=["NonMaxSuppressionV2","NonMaxSuppressionV3","NonMaxSuppressionV5","Where"],x7=["HashTable","HashTableV2","LookupTableImport","LookupTableImportV2","LookupTableFind","LookupTableFindV2","LookupTableSize","LookupTableSizeV2"];function cN(r){return h7.indexOf(r.op)>=0}function y7(r){return g7.indexOf(r.op)>=0}function b7(r){return x7.indexOf(r.op)>=0}var Nc=class{constructor(t,e){this.graph=t,this.parent=e,this.compiledMap=new Map,this._weightMap={},this.SEPERATOR=",",this._functions={},this._functionExecutorMap={},this.intermediateTensors={},this.keepTensorForDebug=!1,this._outputs=t.outputs,this._inputs=t.inputs,this._initNodes=t.initNodes,this._signature=t.signature,this._functions=t.functions,t.functions!=null&&Object.keys(t.functions).forEach(n=>{this._functionExecutorMap[n]=new Nc(t.functions[n],this)})}get weightIds(){return this.parent?this.parent.weightIds:this._weightIds}get functionExecutorMap(){return this.parent?this.parent.functionExecutorMap:this._functionExecutorMap}get weightMap(){return this.parent?this.parent.weightMap:this._weightMap}set weightMap(t){let e=Object.keys(t).map(n=>t[n].map(o=>o.id));this._weightIds=[].concat(...e),this._weightMap=t}set resourceManager(t){this._resourceManager=t}get inputs(){return this._inputs.map(t=>({name:t.name,shape:t.attrParams.shape?t.attrParams.shape.value:void 0,dtype:t.attrParams.dtype?t.attrParams.dtype.value:void 0}))}get outputs(){return this._outputs.map(t=>({name:t.name,shape:t.attrParams.shape?t.attrParams.shape.value:void 0,dtype:t.attrParams.dtype?t.attrParams.dtype.value:void 0}))}get inputNodes(){return this._inputs.map(t=>t.signatureKey||t.name)}get outputNodes(){return this._outputs.map(t=>{let e=t.signatureKey||t.name;return t.defaultOutput?`${e}:${t.defaultOutput}`:e})}get functions(){return Object.keys(this._functions).reduce((t,e)=>(t[e]=this._functions[e].signature,t),{})}getCompilationKey(t,e){let n=t.map(s=>s.name).sort(),o=e.map(s=>s.name).sort();return n.join(this.SEPERATOR)+"--"+o.join(this.SEPERATOR)}compile(t,e){let n=uN(t,e,this.weightMap,this._initNodes),{missingInputs:o,dynamicNode:s,syncInputs:i}=n;if(s!=null)throw new Error(`This execution contains the node '${s.name}', which has the dynamic op '${s.op}'. Please use model.executeAsync() instead. Alternatively, to avoid the dynamic ops, specify the inputs [${i}]`);if(o.length>0){let a=e.map(l=>l.name),u=Object.keys(t);throw new Error(`Cannot compute the outputs [${a}] from the provided inputs [${u}]. Missing the following inputs: [${o}]`)}return rR(this.graph,this.weightMap,n)}execute(t,e){t=this.mapInputs(t);let n=Object.keys(t).sort();this.checkInputs(t),this.checkInputShapeAndType(t),e=this.mapOutputs(e),this.checkOutputs(e);let o=n.map(p=>this.graph.nodes[gn(p)[0]]),s=e.map(p=>gn(p)[0]),i=s.map(p=>this.graph.nodes[p]);this.resetIntermediateTensors(),i.length===0&&(i=this._outputs);let a=this.getCompilationKey(o,i),u=this.compiledMap.get(a);u==null&&(u=this.compile(t,i),this.compiledMap.set(a,u));let l={},c={};return B(()=>{let p=new Ah(this.weightMap,l,c,this.functionExecutorMap),m=Object.assign({},this.weightMap);Object.keys(t).forEach(h=>{let[g,x]=gn(h),b=[];b[x]=t[h],m[g]=b});let f=this.getFrozenTensorIds(m),d={};for(let h=0;h<u.length;h++){let g=u[h];if(!m[g.name]){let x=lN(g,m,p,this._resourceManager);if(y.isPromise(x))throw new Error(`The execution of the op '${g.op}' returned a promise. Please use model.executeAsync() instead.`);m[g.name]=x,this.checkTensorForDisposal(g.name,g,m,p,f,s,d)}}return this.parent==null&&p.dispose(f),e.map(h=>yr(h,m,p))})}getFrozenTensorIds(t){let e=[].concat.apply([],Object.keys(t).map(n=>t[n]).map(n=>n.map(o=>o.id)));return new Set(e)}checkTensorForDisposal(t,e,n,o,s,i,a){e.category==="control"||i.indexOf(t)!==-1||(n[t].forEach(u=>{u!=null&&(a[u.id]=(a[u.id]||0)+e.children.length)}),e.inputs.forEach(u=>{if(u.category!=="control"){let l=TD(u.name,n,o);l!=null&&l.forEach(c=>{if(c&&!c.kept&&!s.has(c.id)){let p=a[c.id];if(p===1){if(!this.keepTensorForDebug)c.dispose();else{let[m,f]=Eo(e.name,o);this.intermediateTensors[m]?this.intermediateTensors[m][f]=c:(this.intermediateTensors[m]=[],this.intermediateTensors[m][f]=c)}delete a[c.id]}else p!=null&&a[c.id]--}})}}))}async executeAsync(t,e){return this._executeAsync(t,e)}disposeIntermediateTensors(){!this.intermediateTensors||(Object.keys(this.intermediateTensors).forEach(t=>this.intermediateTensors[t].forEach(e=>e.dispose())),this.disposeTensorsMap())}disposeTensorsMap(){!this.tensorsMap||Object.keys(this.tensorsMap).forEach(t=>{this.tensorsMap[t].forEach(n=>{n&&!n.kept&&!n.isDisposed&&!this.keepIds.has(n.id)&&n.dispose()})})}getIntermediateTensors(){return this.tensorsMap}resetIntermediateTensors(){for(let t in this.intermediateTensors)this.intermediateTensors[t].forEach(e=>e.dispose()),delete this.intermediateTensors[t]}async _executeAsync(t,e,n=!1,o={},s={}){n||(t=this.mapInputs(t),this.checkInputs(t),this.checkInputShapeAndType(t),e=this.mapOutputs(e),this.checkOutputs(e));try{this.keepTensorForDebug=M().getBool("KEEP_INTERMEDIATE_TENSORS")}catch(c){console.warn(c.message)}this.resetIntermediateTensors();let i=new Ah(this.weightMap,o,s,this.functionExecutorMap);this.tensorsMap=await this.executeWithControlFlow(t,i,e,n);let a=e.map(c=>yr(c,this.tensorsMap,i)),u=a.map(c=>c.id),l=Object.keys(t).map(c=>t[c].id);return this.keepIds=new Set([...u,...l,...this.weightIds]),this.keepTensorForDebug||this.disposeTensorsMap(),this.parent==null&&i.dispose(this.keepIds),a}async executeFunctionAsync(t,e,n){let o=t.reduce((s,i,a)=>(s[this.inputs[a].name]=i,s),{});return this._executeAsync(o,this.outputNodes,!0,e,n)}async executeWithControlFlow(t,e,n,o){let s=Object.keys(t),i=s.map(w=>this.graph.nodes[gn(w)[0]]),a=n.map(w=>gn(w)[0]),u=a.map(w=>this.graph.nodes[w]);u.length===0&&(u=this._outputs);let{usedNodes:l,missingInputs:c,dynamicNode:p,syncInputs:m}=uN(t,u,this.weightMap,this._initNodes),f=[...i,...this.graph.weights,...this._initNodes||[]].map(w=>({node:w,contexts:e.currentContext})),d=Object.assign({},this.weightMap);Object.keys(t).forEach(w=>{let[C,N]=gn(w),_=[];_[N]=t[w],d[C]=_});let h={},g=this.getFrozenTensorIds(d),x={};for(;f.length>0;){let w=this.processStack(i,f,e,d,x,g,a,h,l);await Promise.all(w)}p==null&&!o&&console.warn("This model execution did not contain any nodes with control flow or dynamic output shapes. You can use model.execute() instead.");let b=u.filter(w=>!cN(w)&&!yr(w.name,d,e)).map(w=>w.name);if(b.length>0){let w="";throw p!=null&&(w=`Alternatively, to avoid the dynamic ops, use model.execute() and specify the inputs [${m}]`),new Error(`Cannot compute the outputs [${b}] from the provided inputs [${s}]. Consider providing the following inputs: [${c}]. ${w}`)}return d}processStack(t,e,n,o,s,i,a,u,l){let c=[];for(;e.length>0;){let p=e.pop();n.currentContext=p.contexts;let m="";if(p.node.op==="Enter"&&v("isConstant",p.node,o,n)&&([m]=Eo(p.node.name,n)),o[p.node.name]==null){let f=lN(p.node,o,n,this._resourceManager);m||([m]=Eo(p.node.name,n));let d=n.currentContext;y.isPromise(f)?c.push(f.then(h=>(o[m]=h,n.currentContext=d,this.checkTensorForDisposal(m,p.node,o,n,i,a,u),this.processChildNodes(p.node,e,n,o,s,l),h))):(o[m]=f,this.checkTensorForDisposal(m,p.node,o,n,i,a,u),this.processChildNodes(p.node,e,n,o,s,l))}else this.processChildNodes(p.node,e,n,o,s,l)}return c}processChildNodes(t,e,n,o,s,i){t.children.forEach(a=>{let[u]=Eo(a.name,n);s[u]||!i.has(a.name)||(a.op==="Merge"?a.inputNames.some(l=>!!yr(l,o,n))&&(s[u]=!0,e.push({contexts:n.currentContext,node:a})):a.inputNames.every(l=>!!yr(l,o,n))&&(s[u]=!0,e.push({contexts:n.currentContext,node:a})))})}dispose(){Object.keys(this.weightMap).forEach(t=>this.weightMap[t].forEach(e=>e.dispose()))}checkInputShapeAndType(t){Object.keys(t).forEach(e=>{let n=t[e],[o]=gn(e),s=this.graph.nodes[o];if(s.attrParams.shape&&s.attrParams.shape.value){let i=s.attrParams.shape.value,a=i.length===n.shape.length&&n.shape.every((u,l)=>i[l]===-1||i[l]===u);y.assert(a,()=>`The shape of dict['${s.name}'] provided in model.execute(dict) must be [${i}], but was [${n.shape}]`)}s.attrParams.dtype&&s.attrParams.dtype.value&&y.assert(n.dtype===s.attrParams.dtype.value,()=>`The dtype of dict['${s.name}'] provided in model.execute(dict) must be ${s.attrParams.dtype.value}, but was ${n.dtype}`)})}mapInputs(t){let e={};for(let n in t)if(this._signature!=null&&this._signature.inputs!=null&&this._signature.inputs[n]!=null){let o=this._signature.inputs[n];e[o.name]=t[n]}else e[n]=t[n];return e}checkInputs(t){let e=Object.keys(t).filter(n=>{let[o]=gn(n);return this.graph.nodes[o]==null});if(e.length>0)throw new Error(`The dict provided in model.execute(dict) has keys: [${e}] that are not part of graph`)}mapOutputs(t){return t.map(e=>this._signature!=null&&this._signature.outputs!=null&&this._signature.outputs[e]!=null?this._signature.outputs[e].name:e,{})}checkOutputs(t){t.forEach(e=>{let[n]=gn(e);if(!this.graph.nodes[n])throw new Error(`The output '${e}' is not found in the graph`)})}};var Pb=class{constructor(t={},e={}){this.hashTableNameToHandle=t,this.hashTableMap=e}addHashTable(t,e){this.hashTableNameToHandle[t]=e.handle,this.hashTableMap[e.id]=e}getHashTableHandleByName(t){return this.hashTableNameToHandle[t]}getHashTableById(t){return this.hashTableMap[t]}dispose(){for(let t in this.hashTableMap)this.hashTableMap[t].clearAndClose(),delete this.hashTableMap[t];for(let t in this.hashTableNameToHandle)this.hashTableNameToHandle[t].dispose(),delete this.hashTableNameToHandle[t]}};var w7="?tfjs-format=file",C7="model.json",$h=class{constructor(t,e={},n=Er){this.modelUrl=t,this.loadOptions=e,this.version="n/a",this.io=n,e==null&&(this.loadOptions={}),this.resourceManager=new Pb}get modelVersion(){return this.version}get inputNodes(){return this.executor.inputNodes}get outputNodes(){return this.executor.outputNodes}get inputs(){return this.executor.inputs}get outputs(){return this.executor.outputs}get weights(){return this.executor.weightMap}get metadata(){return this.artifacts.userDefinedMetadata}get modelSignature(){return this.signature}get modelStructuredOutputKeys(){return this.structuredOutputKeys}findIOHandler(){let t=this.modelUrl;if(t.load!=null)this.handler=t;else if(this.loadOptions.requestInit!=null)this.handler=this.io.browserHTTPRequest(t,this.loadOptions);else{let e=this.io.getLoadHandlers(t,this.loadOptions);if(e.length===0)e.push(this.io.browserHTTPRequest(t,this.loadOptions));else if(e.length>1)throw new Error(`Found more than one (${e.length}) load handlers for URL '${[t]}'`);this.handler=e[0]}}load(){if(this.findIOHandler(),this.handler.load==null)throw new Error("Cannot proceed with model loading because the IOHandler provided does not have the `load` method implemented.");let t=this.handler.load();return y.isPromise(t)?t.then(e=>this.loadSync(e)):this.loadSync(t)}loadSync(t){this.artifacts=t;let e=this.artifacts.modelTopology,n=this.artifacts.signature;if(this.artifacts.userDefinedMetadata!=null){let s=this.artifacts.userDefinedMetadata;s.signature!=null&&(n=s.signature),s.structuredOutputKeys!=null&&(this.structuredOutputKeys=s.structuredOutputKeys)}this.signature=n,this.version=`${e.versions.producer}.${e.versions.minConsumer}`;let o=this.io.decodeWeights(this.artifacts.weightData,this.artifacts.weightSpecs);if(this.executor=new Nc(_h.Instance.transformGraph(e,this.signature)),this.executor.weightMap=this.convertTensorMapToTensorsMap(o),this.executor.resourceManager=this.resourceManager,t.modelInitializer!=null&&t.modelInitializer.node!=null){let s=_h.Instance.transformGraph(t.modelInitializer);this.initializer=new Nc(s),this.initializer.weightMap=this.executor.weightMap,this.initializer.resourceManager=this.resourceManager,this.initializer.executeAsync({},[])}return!0}async save(t,e){if(typeof t=="string"){let n=this.io.getSaveHandlers(t);if(n.length===0)throw new Error(`Cannot find any save handlers for URL '${t}'`);if(n.length>1)throw new Error(`Found more than one (${n.length}) save handlers for URL '${t}'`);t=n[0]}if(t.save==null)throw new Error("GraphModel.save() cannot proceed because the IOHandler provided does not have the `save` attribute defined.");return t.save(this.artifacts)}predict(t,e){let n=this.execute(t,this.outputNodes);if(this.structuredOutputKeys){let o=n instanceof Ft?[n]:n,s={};return o.forEach((i,a)=>s[this.structuredOutputKeys[a]]=i),s}return n}normalizeInputs(t){if(!(t instanceof Ft)&&!Array.isArray(t))return t;if(t=Array.isArray(t)?t:[t],t.length!==this.inputNodes.length)throw new Error(`Input tensor count mismatch,the graph model has ${this.inputNodes.length} placeholders, while there are ${t.length} input tensors.`);return this.inputNodes.reduce((e,n,o)=>(e[n]=t[o],e),{})}normalizeOutputs(t){return t=t||this.outputNodes,Array.isArray(t)?t:[t]}execute(t,e){t=this.normalizeInputs(t),e=this.normalizeOutputs(e);let n=this.executor.execute(t,e);return n.length>1?n:n[0]}async executeAsync(t,e){t=this.normalizeInputs(t),e=this.normalizeOutputs(e);let n=await this.executor.executeAsync(t,e);return n.length>1?n:n[0]}getIntermediateTensors(){return this.executor.getIntermediateTensors()}disposeIntermediateTensors(){this.executor.disposeIntermediateTensors()}convertTensorMapToTensorsMap(t){return Object.keys(t).reduce((e,n)=>(e[n]=[t[n]],e),{})}dispose(){this.executor.dispose(),this.initializer&&this.initializer.dispose(),this.resourceManager.dispose()}};async function I7(r,t={},e=Er){if(r==null)throw new Error("modelUrl in loadGraphModel() cannot be null. Please provide a url or an IOHandler that loads the model");t==null&&(t={}),t.fromTFHub&&typeof r=="string"&&(r=S7(r));let n=new $h(r,t,e);return await n.load(),n}function v7(r){if(r==null)throw new Error("modelUrl in loadGraphModelSync() cannot be null. Please provide model artifacts or an IOHandler that loads the model");let t;if(r instanceof Array){let[n,o]=r;if(!n)throw new Error("modelJSON must be the first element of the array");if(!o||!(o instanceof ArrayBuffer))throw new Error("An ArrayBuffer of weights must be the second element of the array");if(!("modelTopology"in n))throw new Error("Model JSON is missing 'modelTopology'");if(!("weightsManifest"in n))throw new Error("Model JSON is missing 'weightsManifest'");let s=Er.getWeightSpecs(n.weightsManifest),i=Er.getModelArtifactsForJSONSync(n,s,o);t=Er.fromMemorySync(i)}else if("load"in r)t=r;else if("modelTopology"in r&&"weightSpecs"in r&&"weightData"in r)t=Er.fromMemorySync(r);else throw new Error("Unknown model format");let e=new $h(t);return e.load(),e}function S7(r){return r.endsWith("/")||(r=r+"/"),`${r}${C7}${w7}`}var nR="3.21.0";var vR={};Gt(vR,{CSVDataset:()=>Kf,Dataset:()=>Ys,FileDataSource:()=>Jf,TextLineDataset:()=>qf,URLDataSource:()=>Qf,array:()=>fR,csv:()=>yR,func:()=>bR,generator:()=>wR,microphone:()=>IR,version_data:()=>$N,webcam:()=>CR,zip:()=>dR});var mR=Sl(lh());var uR=Sl(lh());function oR(r,t){return Lb(r,t)}function Lb(r,t,e=new Map,n=new Set){if(r==null)return null;if(typeof Blob=="function"&&r instanceof Blob)return r.slice();if(n.has(r))throw new Error("Circular references are not supported.");if(e.has(r))return e.get(r);let o=t(r);if(o.recurse&&o.value!==null)throw new Error("A deep map function may not return both a value and recurse=true.");if(o.recurse)if(vu(r)){let s=Array.isArray(r)?[]:{};n.add(r);for(let i in r){let a=r[i],u=Lb(a,t,e,n);s[i]=u}return n.delete(r),r.__proto__&&(s.__proto__=r.__proto__),s}else throw new Error(`Can't recurse into non-iterable type: ${r}`);else return e.set(r,o.value),o.value}function sR(r,t=mN){return iR(r,t)}function iR(r,t,e=new Set){let n=r[0];if(e.has(n))throw new Error("Circular references are not supported.");let o=t(r);if(o.recurse&&o.value!==null)throw new Error("A deep zip function may not return both a value and recurse=true.");if(o.recurse)if(vu(n)){let s=Array.isArray(n)?[]:{};e.add(n);for(let i in n){let a=r.map(l=>l[i]),u=iR(a,t,e);s[i]=u}return e.delete(n),s}else throw new Error(`Can't recurse into non-iterable type: ${n}`);else return o.value}function mN(r){return r===null?null:vu(r[0])?{value:null,recurse:!0}:{value:r,recurse:!1}}async function Mb(r,t){let e=new Map;Lb(r,t,e);for(let o of Array.from(e.keys())){let s=e.get(o);if(y.isPromise(s)){let i=await s;e.set(o,i)}}return Lb(r,t,e)}function vu(r){let t=!1;if(M().get("IS_BROWSER"))t=r instanceof TextDecoder;else{let{StringDecoder:e}=pN();t=r instanceof e}return r!=null&&!ArrayBuffer.isView(r)&&(Array.isArray(r)||typeof r=="object"&&!(r instanceof Ft)&&!(r instanceof Promise)&&!t)}function aR(r){return r==null||N7(r)||Array.isArray(r)||typeof r=="object"&&r instanceof Ft||y.isTypedArray(r)}function N7(r){return r===null||typeof r!="object"&&typeof r!="function"}function lR(r){return oR(r,k7)}function k7(r){return r instanceof Ft?{value:r.clone(),recurse:!1}:vu(r)?{value:null,recurse:!0}:{value:r,recurse:!1}}var Hf=class{constructor(t){if(this.capacity=t,this.begin=0,this.end=0,t==null)throw new RangeError("Can't create a ring buffer of unknown capacity.");if(t<1)throw new RangeError("Can't create ring buffer of capacity < 1.");this.data=new Array(t),this.doubledCapacity=2*t}wrap(t){for(;t<0;)t+=this.doubledCapacity;return t%this.doubledCapacity}get(t){if(t<0)throw new RangeError("Can't get item at a negative index.");return this.data[t%this.capacity]}set(t,e){if(t<0)throw new RangeError("Can't set item at a negative index.");this.data[t%this.capacity]=e}length(){let t=this.end-this.begin;return t<0&&(t=this.doubledCapacity+t),t}isFull(){return this.length()===this.capacity}isEmpty(){return this.length()===0}push(t){if(this.isFull())throw new RangeError("Ring buffer is full.");this.set(this.end,t),this.end=this.wrap(this.end+1)}pushAll(t){for(let e of t)this.push(e)}pop(){if(this.isEmpty())throw new RangeError("Ring buffer is empty.");this.end=this.wrap(this.end-1);let t=this.get(this.end);return this.set(this.end,void 0),t}unshift(t){if(this.isFull())throw new RangeError("Ring buffer is full.");this.begin=this.wrap(this.begin-1),this.set(this.begin,t)}shift(){if(this.isEmpty())throw new RangeError("Ring buffer is empty.");let t=this.get(this.begin);return this.set(this.begin,void 0),this.begin=this.wrap(this.begin+1),t}shuffleExcise(t){if(this.isEmpty())throw new RangeError("Ring buffer is empty.");let e=this.wrap(this.begin+t),n=this.get(e);return this.set(e,this.pop()),n}};var kc=class extends Hf{constructor(){super(kc.INITIAL_CAPACITY)}isFull(){return!1}push(t){super.isFull()&&this.expand(),super.push(t)}unshift(t){super.isFull()&&this.expand(),super.unshift(t)}expand(){let t=this.capacity*2,e=new Array(t),n=this.length();for(let o=0;o<n;o++)e[o]=this.get(this.wrap(this.begin+o));this.data=e,this.capacity=t,this.doubledCapacity=2*this.capacity,this.begin=0,this.end=n}};kc.INITIAL_CAPACITY=32;function NN(r){return new fN(r)}function Dh(r){return new dN(r)}function cR(r,t){return new Bb(r,t)}function pR(r,t=pl.FAIL){return new vN(r,t)}var Je=class{async toArray(){let t=[],e=await this.next();for(;!e.done;)t.push(e.value),e=await this.next();return t}async toArrayForTest(){let t=this.prefetch(100),e=[],n=await t.next();for(;!n.done;)e.push(n.value),n=await t.next();return e}async resolveFully(){let t=await this.next();for(;!t.done;)t=await this.next()}async resolveWhile(t){let e=await this.next(),n=t(e.value);for(;!e.done&&n;)e=await this.next(),n=t(e.value)}handleErrors(t){return new CN(this,t)}filter(t){return new bN(this,t)}map(t){return new wN(this,t)}mapAsync(t){return new zb(this,t)}serialMapAsync(t){return new zb(this,t).serial()}flatmap(t){return new IN(this,t)}async forEachAsync(t){return this.map(t).resolveFully()}async serialForEach(t){return this.serialMapAsync(t).resolveWhile(e=>e===!0)}rowMajorBatch(t,e=!0){return new yN(this,t,e)}columnMajorBatch(t,e=!0,n=mN){return this.rowMajorBatch(t,e).map(s=>sR(s,n))}concatenate(t,e){return new Bb(NN([this,t]),e)}take(t){return t<0||t==null?this:new xN(this,t)}skip(t){return t<0||t==null?this:new gN(this,t)}prefetch(t){return new Vb(this,t)}shuffle(t,e){return new SN(this,t,e)}serial(){return new hN(this)}},fN=class extends Je{constructor(t){super(),this.items=t,this.trav=0}summary(){return`Array of ${this.items.length} items`}async next(){if(this.trav>=this.items.length)return{value:null,done:!0};let t=this.items[this.trav];return this.trav++,{value:lR(t),done:!1}}},dN=class extends Je{constructor(t){super(),this.nextFn=t}summary(){return"Function call"}async next(){try{return this.nextFn()}catch(t){throw t.message=`Error thrown while iterating through a dataset: ${t.message}`,t}}},hN=class extends Je{constructor(t){super(),this.upstream=t,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> Serial`}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){return this.upstream.next()}},gN=class extends Je{constructor(t,e){super(),this.upstream=t,this.maxCount=e,this.count=0,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> Skip`}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){for(;this.count++<this.maxCount;){let t=await this.upstream.next();if(t.done)return t;St(t.value)}return this.upstream.next()}},xN=class extends Je{constructor(t,e){super(),this.upstream=t,this.maxCount=e,this.count=0}summary(){return`${this.upstream.summary()} -> Take`}async next(){return this.count++>=this.maxCount?{value:null,done:!0}:this.upstream.next()}},yN=class extends Je{constructor(t,e,n=!0){super(),this.upstream=t,this.batchSize=e,this.enableSmallLastBatch=n,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> RowMajorBatch`}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){let t=[];for(;t.length<this.batchSize;){let e=await this.upstream.next();if(e.done)return this.enableSmallLastBatch&&t.length>0?{value:t,done:!1}:{value:null,done:!0};t.push(e.value)}return{value:t,done:!1}}},bN=class extends Je{constructor(t,e){super(),this.upstream=t,this.predicate=e,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> Filter`}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){for(;;){let t=await this.upstream.next();if(t.done||this.predicate(t.value))return t;St(t.value)}}},wN=class extends Je{constructor(t,e){super(),this.upstream=t,this.transform=e}summary(){return`${this.upstream.summary()} -> Map`}async next(){let t=await this.upstream.next();if(t.done)return{value:null,done:!0};let e=fo.getTensorsInContainer(t.value),n=this.transform(t.value),o=fo.getTensorsInContainer(n);for(let s of e)fo.isTensorInList(s,o)||s.dispose();return{value:n,done:!1}}},CN=class extends Je{constructor(t,e){super(),this.upstream=t,this.handler=e,this.count=0,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> handleErrors`}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){for(;;)try{return await this.upstream.next()}catch(t){if(!this.handler(t))return{value:null,done:!0}}}},zb=class extends Je{constructor(t,e){super(),this.upstream=t,this.transform=e}summary(){return`${this.upstream.summary()} -> AsyncMap`}async next(){let t=await this.upstream.next();if(t.done)return{value:null,done:!0};let e=fo.getTensorsInContainer(t.value),n=await this.transform(t.value),o=fo.getTensorsInContainer(n);for(let s of e)fo.isTensorInList(s,o)||s.dispose();return{value:n,done:!1}}},Tc=class extends Je{constructor(){super(),this.outputQueue=new kc,this.lastRead=Promise.resolve({value:null,done:!1})}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){for(;this.outputQueue.length()===0;)if(!await this.pump())return{value:null,done:!0};return{value:this.outputQueue.shift(),done:!1}}},IN=class extends Tc{constructor(t,e){super(),this.upstream=t,this.transform=e}summary(){return`${this.upstream.summary()} -> Flatmap`}async pump(){let t=await this.upstream.next();if(t.done)return!1;let e=fo.getTensorsInContainer(t.value),n=this.transform(t.value),o=fo.getTensorsInContainer(n);this.outputQueue.pushAll(n);for(let s of e)fo.isTensorInList(s,o)||s.dispose();return!0}},Bb=class extends Je{constructor(t,e){super(),this.baseErrorHandler=e,this.lastRead=null,this.iterator=null,this.moreIterators=t}summary(){return"TODO: fill in upstream of chained summaries -> Chained"}async next(){return this.lastRead=this.readFromChain(this.lastRead),this.lastRead}async readFromChain(t){if(await t,this.iterator==null){let n=await this.moreIterators.next();if(n.done)return{value:null,done:!0};this.iterator=n.value,this.baseErrorHandler!=null&&(this.iterator=this.iterator.handleErrors(this.baseErrorHandler))}let e=await this.iterator.next();return e.done?(this.iterator=null,this.readFromChain(t)):e}},pl;(function(r){r[r.FAIL=0]="FAIL",r[r.SHORTEST=1]="SHORTEST",r[r.LONGEST=2]="LONGEST"})(pl||(pl={}));var vN=class extends Je{constructor(t,e=pl.FAIL){super(),this.iterators=t,this.mismatchMode=e,this.count=0,this.currentPromise=null}summary(){return"{TODO: fill in upstream of zip summaries} -> Zip"}async nextState(t){await t;let e=0,n=0;function o(i){return i instanceof Je?{value:i.next().then(u=>(e++,u.done&&n++,u.value)),recurse:!1}:{value:null,recurse:!0}}let s=await Mb(this.iterators,o);if(e===n)return{value:null,done:!0};if(n>0)switch(this.mismatchMode){case pl.FAIL:throw new Error(`Zipped streams should have the same length. Mismatched at element ${this.count}.`);case pl.SHORTEST:return{value:null,done:!0};case pl.LONGEST:default:}return this.count++,{value:s,done:!1}}async next(){return this.currentPromise=this.nextState(this.currentPromise),this.currentPromise}},Vb=class extends Je{constructor(t,e){super(),this.upstream=t,this.bufferSize=e,this.buffer=new Hf(e)}summary(){return`${this.upstream.summary()} -> Prefetch`}refill(){for(;!this.buffer.isFull();){let t=this.upstream.next();this.buffer.push(t)}}next(){return this.refill(),this.buffer.shift()}},SN=class extends Vb{constructor(t,e,n){super(t,e),this.upstream=t,this.windowSize=e,this.upstreamExhausted=!1,this.random=uR.alea(n||y.now().toString()),this.lastRead=Promise.resolve({value:null,done:!1})}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}randomInt(t){return Math.floor(this.random()*t)}chooseIndex(){return this.randomInt(this.buffer.length())}async serialNext(){for(this.upstreamExhausted||this.refill();!this.buffer.isEmpty();){let t=this.chooseIndex(),e=await this.buffer.shuffleExcise(t);if(e.done)this.upstreamExhausted=!0;else return this.refill(),e}return{value:null,done:!0}}};var Ys=class{constructor(){this.size=null}batch(t,e=!0){let n=this;y.assert(t>0,()=>`batchSize needs to be positive, but it is
${t}`);let o;return this.size===1/0||this.size==null?o=this.size:e?o=Math.ceil(this.size/t):o=Math.floor(this.size/t),kn(async()=>(await n.iterator()).columnMajorBatch(t,e,T7),o)}concatenate(t){let e=this,n;return this.size===1/0||t.size===1/0?n=1/0:this.size!=null&&t.size!=null?n=this.size+t.size:n=null,kn(async()=>(await e.iterator()).concatenate(await t.iterator()),n)}filter(t){let e=this,n;return this.size===1/0?n=1/0:n=null,kn(async()=>(await e.iterator()).filter(o=>B(()=>t(o))),n)}async forEachAsync(t){return(await this.iterator()).forEachAsync(t)}map(t){let e=this;return kn(async()=>(await e.iterator()).map(n=>B(()=>t(n))),this.size)}mapAsync(t){let e=this;return kn(async()=>(await e.iterator()).mapAsync(t),this.size)}prefetch(t){if(t==null)throw new RangeError("`Dataset.prefetch()` requires bufferSize to be specified.");let e=this;return kn(async()=>(await e.iterator()).prefetch(t),this.size)}repeat(t){let e=this,n;return this.size!=null&&t>0?n=this.size*t:t===0?n=0:this.size!=null&&(t===void 0||t<0)?n=1/0:n=null,kn(async()=>{let o=Dh(async()=>({value:await e.iterator(),done:!1}));return cR(o.take(t))},n)}skip(t){let e=this,n;return this.size!=null&&t>=0&&this.size>=t?n=this.size-t:this.size!=null&&(this.size<t||t===void 0||t<0)?n=0:n=null,kn(async()=>(await e.iterator()).skip(t),n)}shuffle(t,e,n=!0){if(t==null||t<0)throw this.size==null?new RangeError("`Dataset.shuffle()` requires bufferSize to be specified."):new RangeError(`\`Dataset.shuffle()\` requires bufferSize to be specified. If your data fits in main memory (for regular JS objects), and/or GPU memory (for \`tf.Tensor\`s), consider setting bufferSize to the dataset size (${this.size} elements)`);let o=this,s=mR.alea(e||y.now().toString());return kn(async()=>{let i=s.int32();return n&&(i+=s.int32()),(await o.iterator()).shuffle(t,i.toString())},this.size)}take(t){let e=this,n;return this.size!=null&&this.size>t?n=t:this.size!=null&&this.size<=t?n=this.size:n=null,kn(async()=>(await e.iterator()).take(t),n)}async toArray(){if(this.size===1/0)throw new Error("Can not convert infinite data stream to array.");return(await this.iterator()).toArray()}async toArrayForTest(){if(this.size===1/0)throw new Error("Can not convert infinite data stream to array.");return(await this.iterator()).toArrayForTest()}};Ys.MAX_BUFFER_SIZE=1e4;function kn(r,t=null){return new class extends Ys{constructor(){super(...arguments),this.size=t}async iterator(){return r()}}}function fR(r){return kn(async()=>NN(r),r.length)}function dR(r){if(!vu(r))throw new Error("The argument to zip() must be an object or array.");let t;if(Array.isArray(r))for(let e=0;e<r.length;e++)t=t==null?r[e].size:Math.min(t,r[e].size);else if(r instanceof Object)for(let e in r)t=t==null?r[e].size:Math.min(t,r[e].size);return kn(async()=>{let e=await Mb(r,n=>{if(n instanceof Ys)return{value:n.iterator(),recurse:!1};if(vu(n))return{value:null,recurse:!0};throw new Error("Leaves of the structure passed to zip() must be Datasets, not primitives.")});return pR(e,pl.SHORTEST)},t)}function T7(r){if(r===null)return null;let t=r[0];return aR(t)?{value:E7(r),recurse:!1}:{value:null,recurse:!0}}function E7(r){if(r.length===0)throw new Error("Can't make a batch of zero elements.");return r[0]instanceof Ft?rr(r):wr(r)}var qf=class extends Ys{constructor(t){super(),this.input=t}async iterator(){return(await this.input.iterator()).decodeUTF8().split(`
`).map(o=>(o.endsWith("\r")&&(o=o.slice(0,-1)),o))}};var Gb='"',Rh=Symbol("out"),hR=Symbol("field"),Wb=Symbol("quote"),kN=Symbol("quoteafterquote"),gR=Symbol("quoteinquote"),Kf=class extends Ys{constructor(t,e){super(),this.input=t,this.hasHeader=!0,this.fullColumnNames=null,this.columnNamesValidated=!1,this.columnConfigs=null,this.configuredColumnsOnly=!1,this.delimiter=",",this.delimWhitespace=!1,this.base=new qf(t),e||(e={}),this.hasHeader=e.hasHeader!==!1,this.fullColumnNames=e.columnNames,this.columnConfigs=e.columnConfigs,this.configuredColumnsOnly=e.configuredColumnsOnly,e.delimWhitespace?(y.assert(e.delimiter==null,()=>"Delimiter should not be provided when delimWhitespace is true."),this.delimWhitespace=!0,this.delimiter=" "):this.delimiter=e.delimiter?e.delimiter:","}async columnNames(){return this.columnNamesValidated||await this.setColumnNames(),this.configuredColumnsOnly?Object.keys(this.columnConfigs):this.fullColumnNames}async setColumnNames(){let t=await this.maybeReadHeaderLine();if(!this.fullColumnNames&&!t)throw new Error("Column names must be provided if there is no header line.");this.fullColumnNames&&t&&y.assert(t.length===this.fullColumnNames.length,()=>"The length of provided columnNames ("+this.fullColumnNames.length.toString()+") does not match the length of the header line read from file ("+t.length.toString()+")."),this.fullColumnNames||(this.fullColumnNames=t);let e=this.fullColumnNames.reduce((o,s)=>(o[s]=o[s]+1||1,o),{}),n=Object.keys(e).filter(o=>e[o]>1);if(y.assert(n.length===0,()=>"Duplicate column names found: "+n.toString()),this.columnConfigs){for(let o of Object.keys(this.columnConfigs))if(this.fullColumnNames.indexOf(o)===-1)throw new Error('The key "'+o+'" provided in columnConfigs does not match any of the column names ('+this.fullColumnNames.toString()+").")}this.columnNamesValidated=!0}async maybeReadHeaderLine(){if(this.hasHeader){let e=await(await this.base.iterator()).next();if(e.done)throw new Error("No data was found for CSV parsing.");let n=e.value;return this.parseRow(n,!1)}else return null}async iterator(){this.columnNamesValidated||await this.setColumnNames();let t=await this.base.iterator();return this.hasHeader&&(t=t.skip(1)),t.map(e=>this.makeDataElement(e))}makeDataElement(t){let e=this.parseRow(t),n={},o={};for(let s=0;s<this.fullColumnNames.length;s++){let i=this.fullColumnNames[s],a=this.columnConfigs?this.columnConfigs[i]:null;if(!(this.configuredColumnsOnly&&!a)){let u=e[s],l=null;if(u==="")if(a&&a.default!==void 0)l=a.default;else{if(a&&(a.required||a.isLabel))throw new Error(`Required column ${i} is empty in this line: ${t}`);l=void 0}else{let c=Number(u);if(isNaN(c))a&&a.dtype==="bool"?l=this.getBoolean(u):l=u;else if(!a||!a.dtype)l=c;else switch(a.dtype){case"float32":l=c;break;case"int32":l=Math.floor(c);break;case"bool":l=this.getBoolean(u);break;default:l=c}}a&&a.isLabel?o[i]=l:n[i]=l}}return Object.keys(o).length===0?n:{xs:n,ys:o}}getBoolean(t){return t==="1"||t.toLowerCase()==="true"?1:0}parseRow(t,e=!0){let n=[],o=0,s=t.length,i=Rh;for(let a=0;a<s;a++)switch(i){case Rh:switch(t.charAt(a)){case Gb:o=a+1,i=Wb;break;case this.delimiter:if(o=a+1,this.delimiter===" "&&this.delimWhitespace)break;n.push(""),i=Rh;break;default:i=hR,o=a;break}break;case hR:switch(t.charAt(a)){case this.delimiter:n.push(t.substring(o,a)),i=Rh,o=a+1;break;default:}break;case Wb:switch(t.charAt(a)){case Gb:i=kN;break;default:}break;case kN:switch(t.charAt(a)){case this.delimiter:n.push(t.substring(o,a-1)),i=Rh,o=a+1;break;case Gb:i=Wb;break;default:i=gR;break}break;case gR:switch(t.charAt(a)){case Gb:i=Wb;break;default:}break;default:}if(i===kN?n.push(t.substring(o,s-1)):n.push(t.substring(o)),e&&n.length!==this.fullColumnNames.length)throw new Error(`Invalid row in csv file. Should have ${this.fullColumnNames.length} elements in a row, but got ${n}`);return n}};var jf=class extends Je{constructor(t){super(),this.microphoneConfig=t,this.isClosed=!1,this.fftSize=t.fftSize||1024;let e=Math.log2(this.fftSize);if(this.fftSize<0||e<4||e>14||!Number.isInteger(e))throw new Error(`Invalid fftSize: it must be a power of 2 between 2 to 4 and 2 to 14, but got ${this.fftSize}`);if(this.numFrames=t.numFramesPerSpectrogram||43,this.sampleRateHz=t.sampleRateHz,this.columnTruncateLength=t.columnTruncateLength||this.fftSize,this.audioTrackConstraints=t.audioTrackConstraints,this.smoothingTimeConstant=t.smoothingTimeConstant||0,this.includeSpectrogram=t.includeSpectrogram!==!1,this.includeWaveform=t.includeWaveform===!0,!this.includeSpectrogram&&!this.includeWaveform)throw new Error("Both includeSpectrogram and includeWaveform are false. At least one type of data should be returned.")}summary(){return"microphone"}static async create(t={}){if(!M().get("IS_BROWSER"))throw new Error("microphone API is only supported in browser environment.");let e=new jf(t);return await e.start(),e}async start(){try{this.stream=await navigator.mediaDevices.getUserMedia({audio:this.audioTrackConstraints==null?!0:this.audioTrackConstraints,video:!1})}catch(n){throw new Error(`Error thrown while initializing video stream: ${n.message}`)}if(!this.stream)throw new Error("Could not obtain audio from microphone.");let t=window.AudioContext||window.webkitAudioContext;if(this.audioContext=new t,!this.sampleRateHz)this.sampleRateHz=this.audioContext.sampleRate;else if(this.audioContext.sampleRate!==this.sampleRateHz)throw new Error(`Mismatch in sampling rate: Expected: ${this.sampleRateHz}; Actual: ${this.audioContext.sampleRate}`);let e=this.audioContext.createMediaStreamSource(this.stream);this.analyser=this.audioContext.createAnalyser(),this.analyser.fftSize=this.fftSize*2,this.analyser.smoothingTimeConstant=this.smoothingTimeConstant,e.connect(this.analyser),this.freqData=new Float32Array(this.fftSize),this.timeData=new Float32Array(this.fftSize)}async next(){if(this.isClosed)return{value:null,done:!0};let t,e,n=await this.getAudioData();if(this.includeSpectrogram){let o=this.flattenQueue(n.freqDataQueue);t=this.getTensorFromAudioDataArray(o,[this.numFrames,this.columnTruncateLength,1])}if(this.includeWaveform){let o=this.flattenQueue(n.timeDataQueue);e=this.getTensorFromAudioDataArray(o,[this.numFrames*this.fftSize,1])}return{value:{spectrogram:t,waveform:e},done:!1}}async capture(){return(await this.next()).value}async getAudioData(){let t=[],e=[],n=0;return new Promise(o=>{let s=setInterval(()=>{this.includeSpectrogram&&(this.analyser.getFloatFrequencyData(this.freqData),this.freqData[0]===-1/0&&o({freqDataQueue:t,timeDataQueue:e}),t.push(this.freqData.slice(0,this.columnTruncateLength))),this.includeWaveform&&(this.analyser.getFloatTimeDomainData(this.timeData),e.push(this.timeData.slice())),++n===this.numFrames&&(clearInterval(s),o({freqDataQueue:t,timeDataQueue:e}))},this.fftSize/this.sampleRateHz*1e3)})}stop(){this.isClosed||(this.isClosed=!0,this.analyser.disconnect(),this.audioContext.close(),this.stream!=null&&this.stream.getTracks().length>0&&this.stream.getTracks()[0].stop())}toArray(){throw new Error("Can not convert infinite audio stream to array.")}getSampleRate(){return this.sampleRateHz}flattenQueue(t){let e=t[0].length,n=new Float32Array(t.length*e);return t.forEach((o,s)=>n.set(o,s*e)),n}getTensorFromAudioDataArray(t,e){let n=new Float32Array(y.sizeFromShape(e));return n.set(t,n.length-t.length),wr(n,e)}};var Xf=class extends Je{constructor(t,e){if(super(),this.webcamVideoElement=t,this.webcamConfig=e,this.isClosed=!0,this.resize=!1,this.needToResize())if(this.resize=!0,this.cropSize=[this.webcamConfig.resizeHeight,this.webcamConfig.resizeWidth],this.cropBoxInd=Le([0],"int32"),this.webcamConfig.centerCrop){let n=this.webcamConfig.resizeWidth*1/this.webcamVideoElement.width,o=this.webcamConfig.resizeHeight*1/this.webcamVideoElement.height,s=(1-n)/2,i=(1-o)/2,a=s+n,u=o+i;this.cropBox=Bs([i,s,u,a],[1,4])}else this.cropBox=Bs([0,0,1,1],[1,4])}summary(){return"webcam"}static async create(t,e={}){if(!M().get("IS_BROWSER"))throw new Error("tf.data.webcam is only supported in browser environment.");if(!t){if(t=document.createElement("video"),!e.resizeWidth||!e.resizeHeight)throw new Error("Please provide webcam video element, or resizeWidth and resizeHeight to create a hidden video element.");t.width=e.resizeWidth,t.height=e.resizeHeight}let n=new Xf(t,e);return await n.start(),n}async start(){this.webcamConfig.facingMode&&y.assert(this.webcamConfig.facingMode==="user"||this.webcamConfig.facingMode==="environment",()=>`Invalid webcam facing mode: ${this.webcamConfig.facingMode}. Please provide 'user' or 'environment'`);try{this.stream=await navigator.mediaDevices.getUserMedia({video:{deviceId:this.webcamConfig.deviceId,facingMode:this.webcamConfig.facingMode?this.webcamConfig.facingMode:"user",width:this.webcamVideoElement.width,height:this.webcamVideoElement.height}})}catch(t){throw t.message=`Error thrown while initializing video stream: ${t.message}`,t}if(!this.stream)throw new Error("Could not obtain video from webcam.");try{this.webcamVideoElement.srcObject=this.stream}catch(t){console.log(t),this.webcamVideoElement.src=window.URL.createObjectURL(this.stream)}return this.webcamVideoElement.play(),this.isClosed=!1,new Promise(t=>{this.webcamVideoElement.onloadedmetadata=()=>{t()}})}async next(){if(this.isClosed)return{value:null,done:!0};let t;try{t=Jg.fromPixels(this.webcamVideoElement)}catch(e){throw new Error(`Error thrown converting video to pixels: ${JSON.stringify(e)}`)}if(this.resize)try{return{value:this.cropAndResizeFrame(t),done:!1}}catch(e){throw new Error(`Error thrown cropping the video: ${e.message}`)}finally{t.dispose()}else return{value:t,done:!1}}needToResize(){return!!(this.webcamConfig.resizeWidth&&this.webcamConfig.resizeHeight&&(this.webcamVideoElement.width!==this.webcamConfig.resizeWidth||this.webcamVideoElement.height!==this.webcamConfig.resizeHeight))}cropAndResizeFrame(t){return B(()=>{let e=gr(J(t,"float32"),0),n;n=lu.cropAndResize(e,this.cropBox,this.cropBoxInd,this.cropSize,"bilinear");let o=n.shape;return D(n,o.slice(1))})}async capture(){return(await this.next()).value}stop(){this.stream.getTracks().forEach(e=>e.stop());try{this.webcamVideoElement.srcObject=null}catch(e){console.log(e),this.webcamVideoElement.src=null}this.isClosed=!0}toArray(){throw new Error("Can not convert infinite video stream to array.")}};var Yf=class{};var Fh=class extends Je{split(t){return new TN(this,t)}},TN=class extends Fh{constructor(t,e){super(),this.upstream=t,this.impl=new EN(t,e)}summary(){return this.impl.summary()}async next(){return this.impl.next()}},EN=class extends Tc{constructor(t,e){super(),this.upstream=t,this.separator=e,this.carryover=""}summary(){return`${this.upstream.summary()} -> Split('${this.separator}')`}async pump(){let t=await this.upstream.next();if(t.done)return this.carryover===""?!1:(this.outputQueue.push(this.carryover),this.carryover="",!0);let e=t.value.split(this.separator);e[0]=this.carryover+e[0];for(let n of e.slice(0,-1))this.outputQueue.push(n);return this.carryover=e[e.length-1],!0}};var Ub=class extends Je{decodeUTF8(){return new _N(this)}},_N=class extends Fh{constructor(t){super(),this.upstream=t,this.impl=new AN(t)}summary(){return this.impl.summary()}async next(){return this.impl.next()}},AN=class extends Tc{constructor(t){if(super(),this.upstream=t,M().get("IS_BROWSER"))this.decoder=new TextDecoder("utf-8");else{let{StringDecoder:e}=pN();this.decoder=new e("utf8")}}summary(){return`${this.upstream.summary()} -> Utf8`}async pump(){let t=await this.upstream.next(),e;if(t.done)return!1;e=t.value;let n;return M().get("IS_BROWSER")?n=this.decoder.decode(e,{stream:!0}):n=this.decoder.write(Buffer.from(e.buffer)),this.outputQueue.push(n),!0}};var Zf=class extends Ub{constructor(t,e={}){super(),this.file=t,this.options=e,y.assert(t instanceof Uint8Array||(M().get("IS_BROWSER")?t instanceof File||t instanceof Blob:!1),()=>"FileChunkIterator only supports File, Blob and Uint8Array right now."),this.offset=e.offset||0,this.chunkSize=e.chunkSize||1024*1024}summary(){return`FileChunks ${this.file}`}async next(){return this.offset>=(this.file instanceof Uint8Array?this.file.byteLength:this.file.size)?{value:null,done:!0}:{value:await new Promise((e,n)=>{let o=this.offset+this.chunkSize;if(this.file instanceof Uint8Array)e(new Uint8Array(this.file.slice(this.offset,o)));else{let s=new FileReader;s.onload=a=>{let u=s.result;if(u instanceof ArrayBuffer&&(u=new Uint8Array(u)),!(u instanceof Uint8Array))return n(new TypeError("FileReader returned unknown type."));e(u)},s.onabort=a=>n(new Error("Aborted")),s.onerror=a=>n(new Error(a.type));let i=this.file.slice(this.offset,o);s.readAsArrayBuffer(i)}this.offset=o}),done:!1}}};async function xR(r,t={},e){let n,o;typeof r=="string"?n=r:(n=r.url,o=_7(r));let s=await(e||y.fetch)(n,o);if(s.ok){let i=new Uint8Array(await s.arrayBuffer());return new Zf(i,t)}else throw new Error(s.statusText)}var _7=r=>({method:r.method,headers:r.headers,body:r.body,mode:r.mode,credentials:r.credentials,cache:r.cache,redirect:r.redirect,referrer:r.referrer,integrity:r.integrity});function Hb(r){return typeof r=="string"&&r.slice(0,7)==="file://"}var Jf=class extends Yf{constructor(t,e={}){super(),this.input=t,this.options=e}async iterator(){if(Hb(this.input)&&M().get("IS_NODE")){let t=qb();this.input=t.readFileSync(this.input.slice(7))}return new Zf(this.input,this.options)}};var Qf=class extends Yf{constructor(t,e={}){super(),this.url=t,this.fileOptions=e}async iterator(){return Hb(this.url)?new Jf(this.url,this.fileOptions).iterator():xR(this.url,this.fileOptions)}};function yR(r,t={}){return new Kf(new Qf(r),t)}function bR(r){let t=Dh(r);return kn(async()=>t)}function wR(r){return kn(async()=>{let t=await r();return Dh(()=>t.next())})}async function CR(r,t){return Xf.create(r,t)}async function IR(r){return jf.create(r)}var $N="3.21.0";function tt(r,t){Array.isArray(r)||(r=[r]),r.forEach(e=>{e!=null&&y.assert(e.dtype!=="complex64",()=>`${t} does not support complex64 tensors in the CPU backend.`)})}var A7=Wr.whereImpl,Su=class extends Mo{constructor(){super(),this.blockSize=48,this.firstUse=!0,this.data=new ta(this,ho())}nextDataId(){return Su.nextDataId++}write(t,e,n){this.firstUse&&(this.firstUse=!1,M().get("IS_NODE")&&S.warn(`
============================
Hi, looks like you are running TensorFlow.js in Node.js. To speed things up dramatically, install our node backend, visit https://github.com/tensorflow/tfjs-node for more details.
============================`));let o={id:this.nextDataId()};return this.data.set(o,{values:t,dtype:n,refCount:1}),o}makeTensorInfo(t,e,n){let o;if(e==="string"&&n!=null&&n.length>0&&y.isString(n[0])){let s=n.map(i=>y.encodeString(i));o=this.write(s,t,e)}else o=this.write(n,t,e);return{dataId:o,shape:t,dtype:e}}refCount(t){return this.data.has(t)?this.data.get(t).refCount:0}incRef(t){let e=this.data.get(t);e.refCount++}decRef(t){if(this.data.has(t)){let e=this.data.get(t);e.refCount--}}move(t,e,n,o,s){this.data.set(t,{values:e,dtype:o,refCount:s})}numDataIds(){return this.data.numDataIds()}async read(t){return this.readSync(t)}readSync(t){let{dtype:e,complexTensorInfos:n}=this.data.get(t);if(e==="complex64"){let o=this.readSync(n.real.dataId),s=this.readSync(n.imag.dataId);return S.mergeRealAndImagArrays(o,s)}return this.data.get(t).values}bufferSync(t){let e=this.readSync(t.dataId);if(t.dtype==="string")try{let n=e.map(o=>y.decodeString(o));return wt(t.shape,t.dtype,n)}catch(n){throw new Error("Failed to decode encoded string bytes into utf-8")}return wt(t.shape,t.dtype,e)}makeOutput(t,e,n){return ho().makeTensorFromTensorInfo(this.makeTensorInfo(e,n,t),this)}disposeData(t,e=!1){if(this.data.has(t)){if(this.data.get(t).refCount--,!e&&this.data.get(t).refCount>0)return!1;let{complexTensorInfos:n}=this.data.get(t);n!=null&&(this.disposeData(n.real.dataId,!0),this.disposeData(n.imag.dataId,!0)),this.data.delete(t)}return!0}disposeIntermediateTensorInfo(t){this.disposeData(t.dataId)}async time(t){let e=y.now();return t(),{kernelMs:y.now()-e}}memory(){return{unreliable:!0,reasons:["The reported memory is an upper bound. Due to automatic garbage collection, the true allocated memory may be less."]}}where(t){tt([t],"where");let e=this.readSync(t.dataId);return A7(t.shape,e)}dispose(){}floatPrecision(){return 32}epsilon(){return super.epsilon()}};Su.nextDataId=0;var iw={};Gt(iw,{addImpl:()=>FN,bincountImpl:()=>rd,bincountReduceImpl:()=>Kb,castImpl:()=>RN,ceilImpl:()=>ON,concatImpl:()=>Ec,equalImpl:()=>PN,expImpl:()=>MN,expm1Impl:()=>BN,floorImpl:()=>VN,gatherNdImpl:()=>jb,gatherV2Impl:()=>Xb,greaterEqualImpl:()=>WN,greaterImpl:()=>GN,lessEqualImpl:()=>HN,lessImpl:()=>UN,linSpaceImpl:()=>Yb,logImpl:()=>qN,maxImpl:()=>Zb,maximumImpl:()=>KN,minimumImpl:()=>jN,multiplyImpl:()=>Oh,negImpl:()=>XN,notEqualImpl:()=>YN,prodImpl:()=>ZN,raggedGatherImpl:()=>Jb,raggedTensorToTensorImpl:()=>Qb,rangeImpl:()=>Ac,rsqrtImpl:()=>JN,scatterImpl:()=>ml,sigmoidImpl:()=>ZR,simpleAbsImpl:()=>DN,sliceImpl:()=>$c,sparseFillEmptyRowsImpl:()=>tw,sparseReshapeImpl:()=>ew,sparseSegmentReductionImpl:()=>sd,sqrtImpl:()=>tF,squaredDifferenceImpl:()=>tk,stridedSliceImpl:()=>rw,stringNGramsImpl:()=>Dc,stringSplitImpl:()=>Rc,stringToHashBucketFastImpl:()=>Fc,subImpl:()=>rk,tileImpl:()=>nw,topKImpl:()=>ow,transposeImpl:()=>nd,uniqueImpl:()=>sw});function DN(r){let t=new Float32Array(r.length);for(let e=0;e<r.length;++e)t[e]=Math.abs(r[e]);return t}var $7=r=>{let{x:t}=r.inputs,e=r.backend;tt(t,"abs");let n=new Float32Array(y.sizeFromShape(t.shape)),o=e.data.get(t.dataId).values;return n=DN(o),e.makeOutput(n,t.shape,t.dtype)},SR={kernelName:oi,backendName:"cpu",kernelFunc:$7};function Qt(r){return(t,e,n,o,s)=>{let i=S.assertAndGetBroadcastShape(t,e),a=i.length,u=y.computeStrides(i),l=y.sizeFromShape(i),c=y.getTypedArrayFromDType(s,l),p=t.length,m=e.length,f=y.computeStrides(t),d=y.computeStrides(e),h=S.getBroadcastDims(t,i),g=S.getBroadcastDims(e,i);if(h.length+g.length===0)for(let x=0;x<c.length;++x)c[x]=r(n[x%n.length],o[x%o.length]);else for(let x=0;x<c.length;++x){let b=y.indexToLoc(x,a,u),w=b.slice(-p);h.forEach(A=>w[A]=0);let C=y.locToIndex(w,p,f),N=b.slice(-m);g.forEach(A=>N[A]=0);let _=y.locToIndex(N,m,d);c[x]=r(n[C],o[_])}return[c,i]}}function br(r){let{inputs:t,backend:e}=r,{real:n,imag:o}=t,s=e.data.get(n.dataId).values,i=e.data.get(o.dataId).values,a=e.makeTensorInfo(n.shape,"complex64"),u=e.data.get(a.dataId);return u.complexTensorInfos={real:e.makeTensorInfo(n.shape,"float32",s),imag:e.makeTensorInfo(o.shape,"float32",i)},a}var NR={kernelName:pp,backendName:"cpu",kernelFunc:br};function td(r,t,e="float32"){if(e==="complex64"){let o=td(r,t,"float32"),s=td(r,t,"float32");return br({inputs:{real:o,imag:s},backend:r})}let n=y.makeZerosTypedArray(y.sizeFromShape(t),e);return r.makeTensorInfo(t,e,n)}function qr(r){let{inputs:t,backend:e}=r,{x:n}=t;return e.incRef(n.dataId),{dataId:n.dataId,shape:n.shape,dtype:n.dtype}}var kR={kernelName:lo,backendName:"cpu",kernelFunc:qr};function _o(r){let{inputs:t,backend:e}=r,{input:n}=t,o=e.data.get(n.dataId).complexTensorInfos.real,s=e.data.get(o.dataId).values;return e.makeTensorInfo(o.shape,o.dtype,s)}var TR={kernelName:Dp,backendName:"cpu",kernelFunc:_o};function RN(r,t,e,n){if(n==="int32"){let o=Int32Array.from(r);return[t,"int32",o]}if(n==="bool"){let o=y.toTypedArray([0],e),[s,i]=Qt((a,u)=>a!==u?1:0)(t,[],r,o,"bool");return[i,"bool",s]}throw new Error(`Error in Cast: failed to cast ${e} to ${n}`)}function Ao(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{dtype:s}=n;if(s==="complex64"){if(o.dtype==="complex64")return qr({inputs:{x:o},backend:e});let c=td(e,o.shape,o.dtype),p=Ao({inputs:{x:o},backend:e,attrs:{dtype:"float32"}}),m=br({inputs:{real:p,imag:c},backend:e});return e.disposeIntermediateTensorInfo(c),e.disposeIntermediateTensorInfo(p),m}if(o.dtype==="complex64"){let c=_o({inputs:{input:o},backend:e}),p=Ao({inputs:{x:c},backend:e,attrs:{dtype:s}});return e.disposeIntermediateTensorInfo(c),p}if(!y.hasEncodingLoss(o.dtype,s)){let c=qr({inputs:{x:o},backend:e});return{dataId:c.dataId,shape:c.shape,dtype:s}}let i=e.data.get(o.dataId).values,[a,u,l]=RN(i,o.shape,o.dtype,s);return e.makeTensorInfo(a,u,l)}var ER={kernelName:io,backendName:"cpu",kernelFunc:Ao};function oe(r,t,e,n){return e==null?({inputs:o,backend:s})=>{let{a:i,b:a}=o,u=s;tt([i,a],r);let l=u.data.get(i.dataId).values,c=u.data.get(a.dataId).values,p=i.dtype==="string"?S.fromUint8ToStringArray(l):l,m=i.dtype==="string"?S.fromUint8ToStringArray(c):c,f=n||i.dtype,[d,h]=t(i.shape,a.shape,p,m,f);return u.makeTensorInfo(h,f,d)}:({inputs:o,backend:s})=>{let{a:i,b:a}=o,u=s;if(i.dtype==="complex64"||a.dtype==="complex64"){let l=Ao({inputs:{x:i},backend:u,attrs:{dtype:"complex64"}}),c=u.data.get(l.dataId),p=c.complexTensorInfos.real,m=c.complexTensorInfos.imag,f=u.data.get(p.dataId).values,d=u.data.get(m.dataId).values,h=Ao({inputs:{x:a},backend:u,attrs:{dtype:"complex64"}}),g=u.data.get(h.dataId),x=g.complexTensorInfos.real,b=g.complexTensorInfos.imag,w=u.data.get(x.dataId).values,C=u.data.get(b.dataId).values,[N,_,A]=e(i.shape,a.shape,f,d,w,C),$=u.makeTensorInfo(A,"float32",N),F=u.makeTensorInfo(A,"float32",_),P=br({inputs:{real:$,imag:F},backend:u});return u.disposeIntermediateTensorInfo(l),u.disposeIntermediateTensorInfo(h),u.disposeIntermediateTensorInfo($),u.disposeIntermediateTensorInfo(F),P}else{let l=u.data.get(i.dataId).values,c=u.data.get(a.dataId).values,p=n||i.dtype,[m,f]=t(i.shape,a.shape,l,c,p);return u.makeTensorInfo(f,p,m)}}}function ed(r){return(t,e,n,o,s,i)=>{let a=S.assertAndGetBroadcastShape(t,e),u=y.sizeFromShape(a),l=a.length,c=y.computeStrides(a),p=y.getTypedArrayFromDType("float32",u),m=y.getTypedArrayFromDType("float32",u),f=S.getBroadcastDims(t,a),d=S.getBroadcastDims(e,a),h=S.mergeRealAndImagArrays(n,o),g=S.mergeRealAndImagArrays(s,i),x=t.length,b=y.computeStrides(t),w=e.length,C=y.computeStrides(e);if(f.length+d.length===0)for(let N=0;N<p.length;N++){let _=N%h.length,A=N%g.length,$=r(h[_*2],h[_*2+1],g[A*2],g[A*2+1]);p[N]=$.real,m[N]=$.imag}else for(let N=0;N<p.length;N++){let _=y.indexToLoc(N,l,c),A=_.slice(-x);f.forEach(G=>A[G]=0);let $=y.locToIndex(A,x,b),F=_.slice(-w);d.forEach(G=>F[G]=0);let P=y.locToIndex(F,w,C),V=r(h[$*2],h[$*2+1],g[P*2],g[P*2+1]);p[N]=V.real,m[N]=V.imag}return[p,m,a]}}var FN=Qt((r,t)=>r+t),D7=ed((r,t,e,n)=>({real:r+e,imag:t+n})),Hi=oe(Yn,FN,D7),_R={kernelName:Yn,backendName:"cpu",kernelFunc:Hi};function rd(r,t,e,n,o){let s=y.sizeFromShape(n),i=y.makeZerosTypedArray(o,e);for(let a=0;a<r.length;a++){let u=r[a];if(u<0)throw new Error("Input x must be non-negative!");u>=o||(s>0?i[u]+=t[a]:i[u]+=1)}return i}function Kb(r,t,e,n=!1){let o=r.shape[0],s=r.shape[1],i=wt([o,e],t.dtype);for(let a=0;a<o;a++)for(let u=0;u<s;u++){let l=r.get(a,u);if(l<0)throw new Error("Input x must be non-negative!");l>=e||(n?i.set(1,a,l):t.size>0?i.set(i.get(a,l)+t.get(a,u),a,l):i.set(i.get(a,l)+1,a,l))}return i}function xn(r){return(t,e,n)=>{let o=y.getTypedArrayFromDType(e,t.length);for(let s=0;s<t.length;++s)o[s]=r(t[s],n);return o}}function kt(r,t,e){return({inputs:n,attrs:o,backend:s})=>{let{x:i}=n;if(tt(i,r),i.dtype==="string"||e==="string")throw new Error("unaryKernelFunc does not support string input/output");let a=s,u=a.data.get(i.dataId).values,l=y.sizeFromShape(i.shape),c=e||i.dtype,p=y.getArrayFromDType(c,l);for(let m=0;m<l;++m)p[m]=t(u[m],o);return a.makeTensorInfo(i.shape,c,p)}}function $o(r,t,e){return({inputs:n,attrs:o,backend:s})=>{let{x:i}=n;if(tt(i,r),i.dtype==="string"||e==="string")throw new Error("unaryKernelFunc does not support string input/output");let a=s,u=a.data.get(i.dataId).values,l=e||i.dtype,c=t(u,l,o);return a.makeTensorInfo(i.shape,l,c)}}var ON=xn(r=>Math.ceil(r)),R7=$o(Ho,ON),AR={kernelName:Ho,backendName:"cpu",kernelFunc:R7};function Ec(r,t,e,n){let o=y.getArrayFromDType(e,y.sizeFromShape(t));if(n&&e!=="string"){let s=0;r.forEach(i=>{let a=y.sizeFromShape(i.shape);o.set(i.vals,s),s+=a})}else{let s=0;r.forEach(i=>{let a=e==="string"?S.fromUint8ToStringArray(i.vals):i.vals,u=0;for(let l=0;l<i.shape[0];++l){let c=l*t[1]+s;for(let p=0;p<i.shape[1];++p)o[c+p]=a[u++]}s+=i.shape[1]})}return o}var PN=Qt((r,t)=>r===t?1:0),LN=oe(ha,PN,null,"bool"),$R={kernelName:ha,backendName:"cpu",kernelFunc:LN};var MN=xn(r=>Math.exp(r)),zN=$o(ts,MN,"float32"),DR={kernelName:ts,backendName:"cpu",kernelFunc:zN};var BN=xn(r=>Math.expm1(r)),F7=$o(ga,BN),RR={kernelName:ga,backendName:"cpu",kernelFunc:F7};var VN=xn(r=>Math.floor(r)),O7=$o(es,VN),FR={kernelName:es,backendName:"cpu",kernelFunc:O7};function jb(r,t,e,n,o,s,i,a,u){let l=wt([n,s],e);for(let c=0;c<n;c++){let p=[],m=0;for(let f=0;f<o;f++){let d=r[c*o+f];m+=d*i[f],p.push(d)}if(m<0||m>=u/s)throw new Error(`Invalid indices: ${p} does not index into ${a}`);for(let f=0;f<s;f++)l.values[c*s+f]=t.get(...t.indexToLoc(m*s+f))}return l}function Xb(r,t,e){let n=wt(e,r.dtype);for(let o=0;o<n.size;++o){let i=n.indexToLoc(o).slice(),a=i[0],u=i[2],l=t.locToIndex([a,u]);i[2]=t.values[l];let c=r.locToIndex(i);0<=c&&c<r.values.length&&(n.values[o]=r.values[c])}return n}var GN=Qt((r,t)=>r>t?1:0),P7=oe(ba,GN,null,"bool"),OR={kernelName:ba,backendName:"cpu",kernelFunc:P7};var WN=Qt((r,t)=>r>=t?1:0),L7=oe(os,WN,null,"bool"),PR={kernelName:os,backendName:"cpu",kernelFunc:L7};var UN=Qt((r,t)=>r<t?1:0),M7=oe(va,UN,null,"bool"),LR={kernelName:va,backendName:"cpu",kernelFunc:M7};var HN=Qt((r,t)=>r<=t?1:0),z7=oe(Sa,HN,null,"bool"),MR={kernelName:Sa,backendName:"cpu",kernelFunc:z7};function Yb(r,t,e){let n=(t-r)/(e-1),o=y.makeZerosTypedArray(e,"float32");o[0]=r;for(let s=1;s<o.length;s++)o[s]=o[s-1]+n;return o}var qN=xn(r=>Math.log(r)),B7=$o(is,qN),zR={kernelName:is,backendName:"cpu",kernelFunc:B7};function Zb(r,t,e,n){let o=y.getTypedArrayFromDType(n,y.sizeFromShape(e));for(let s=0;s<o.length;++s){let i=s*t,a=r[i];for(let u=0;u<t;++u){let l=r[i+u];(Number.isNaN(l)||l>a)&&(a=l)}o[s]=a}return o}var KN=Qt((r,t)=>Math.max(r,t)),V7=oe(ls,KN),BR={kernelName:ls,backendName:"cpu",kernelFunc:V7};var jN=Qt((r,t)=>Math.min(r,t)),G7=oe(ms,jN),VR={kernelName:ms,backendName:"cpu",kernelFunc:G7};var Oh=Qt((r,t)=>r*t),W7=ed((r,t,e,n)=>({real:r*e-t*n,imag:r*n+t*e})),_c=oe(ds,Oh,W7),GR={kernelName:ds,backendName:"cpu",kernelFunc:_c};function XN(r,t,e){let n=y.createScalarValue(-1,e);return Oh([],t,n,r,e)}function U7(r){let{inputs:t,backend:e}=r,{x:n}=t;tt(n,"neg");let o=e.data.get(n.dataId).values,[s,i]=XN(o,n.shape,n.dtype);return e.makeTensorInfo(i,n.dtype,s)}var WR={kernelName:ui,backendName:"cpu",kernelFunc:U7};var YN=Qt((r,t)=>r!==t?1:0),H7=oe(Aa,YN,null,"bool"),UR={kernelName:Aa,backendName:"cpu",kernelFunc:H7};function nd(r,t,e,n,o){let s=t.length,i=y.sizeFromShape(t),a=y.computeStrides(t),u=y.computeStrides(o),l=y.getTypedArrayFromDType(e,y.sizeFromShape(o));for(let c=0;c<i;++c){let p=y.indexToLoc(c,s,a),m=new Array(p.length);for(let d=0;d<m.length;d++)m[d]=p[n[d]];let f=y.locToIndex(m,s,u);l[f]=r[c]}return l}function Be(r){let{inputs:t,attrs:e,backend:n}=r,{x:o}=t,{perm:s}=e;tt(o,"transpose");let i=o.shape.length,a=new Array(i);for(let p=0;p<a.length;p++)a[p]=o.shape[s[p]];let u=n.data.get(o.dataId).values,l=nd(u,o.shape,o.dtype,s,a);return{dataId:n.write(l,a,o.dtype),shape:a,dtype:o.dtype}}var HR={kernelName:Jn,backendName:"cpu",kernelFunc:Be};function ZN(r,t,e,n){let[o,s]=S.computeOutAndReduceShapes(r,n),i=or(t,"int32"),a=y.makeZerosTypedArray(y.sizeFromShape(o),i),u=y.sizeFromShape(s);for(let l=0;l<a.length;++l){let c=l*u,p=1;for(let m=0;m<u;++m)p*=e[c+m];a[l]=p}return{outVals:a,outShape:o,outDtype:i}}function q7(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{axis:s,keepDims:i}=n;tt(o,"prod");let a=o.shape.length,u=y.parseAxisParam(s,o.shape),l=S.getAxesPermutation(u,a),c=u,p=o,m=[];l!=null&&(p=Be({inputs:{x:o},backend:e,attrs:{perm:l}}),m.push(p),c=S.getInnerMostAxes(c.length,a));let f=e.data.get(p.dataId).values,{outVals:d,outShape:h,outDtype:g}=ZN(p.shape,p.dtype,f,c),x=h;return i&&(x=S.expandShapeToKeepDim(h,u)),m.forEach(b=>e.disposeIntermediateTensorInfo(b)),e.makeTensorInfo(x,g,d)}var qR={kernelName:bs,backendName:"cpu",kernelFunc:q7};function K7(r,t,e){r.forEach((n,o)=>{if(n<0||n>=e){let s=y.indexToLoc(o,t.length,y.computeStrides(t)).join(",");throw new Error(`indices[${s}] = ${n} is not in [0, ${e})`)}})}function j7(r,t){for(let e=0;e<r.length;++e){let n=r[e],o=e===r.length-1?t:r[e+1].length;if(n.length===0)throw new Error("Ragged splits may not be empty");if(n[0]<0)throw new Error("Ragged splits must be non-negative");if(n[n.length-1]>o)throw new Error("Ragged splits must not point past values");for(let s=1;s<n.length;++s)if(n[s-1]>n[s])throw new Error("Ragged splits must be sorted in ascending order")}}function X7(r,t,e,n){let o=[],s=0,i=t.length-1+e.length,a=new Array(i).fill(null).map(()=>[0]);j7(e,n);let u=1;for(let l=0;l<t.length-1;++l){u*=t[l];let c=t[l+1];for(let p=1;p<u+1;++p)a[l].push(p*c)}for(let l=0;l<r.length;++l){let c=r[l],p=r[l]+1;for(let m=0;m<e.length;++m){let f=e[m],d=m+t.length-1;if(d>=0){let h=a[d],g=h[h.length-1]-f[c];for(let x=c;x<p;++x)a[d].push(f[x+1]+g)}c=f[c],p=f[p]}p!==c&&(o.push([c,p]),s+=p-c)}return{outSplits:a,valueSlices:o,numValues:s}}function Y7(r){let t=[];for(let e=0;e<r.length;++e){let n=r[e].length,o=y.getArrayFromDType("int32",n);t.push(o),r[e].forEach((s,i)=>o[i]=s)}return t}function KR(r,t){let e=r.slice(0,t);for(;e.length<t;)e.push(1);for(let n=t;n<r.length;n++)e[t-1]*=r[n];return e}function Z7(r,t,e,n,o,s){let i=KR(t,2)[1],a=KR(s,2)[1],u=0;for(let l of e)for(let c=l[0];c<l[1];++c){for(let p=0;p<n;++p)o[u*a+p]=r[c*i+p];++u}}function J7(r,t,e,n,o){let s=t.slice();s[0]=o;let i=y.getArrayFromDType(e,y.sizeFromShape(s)),a=r.length,u=a===0?0:a/t[0];return Z7(r,t,n,u,i,s),[i,s]}function Jb(r,t,e,n,o,s,i,a){if(r.length===0)throw new Error("paramsNestedSplits must be non empty");if(t[0].length===0)throw new Error("Split tensors must not be scalars");let u=t[0][0]-1;if(K7(s,i,u),n.length===0)throw new Error("params.rank must be nonzero");let l=n[0],{outSplits:c,valueSlices:p,numValues:m}=X7(s,i,r,l),f=Y7(c),d=J7(e,n,o,p,m);return[f,d[0],d[1]]}var Do=S.RowPartitionType,od=class{constructor(t,e,n,o,s,i,a,u,l,c){this.shape=t,this.shapeShape=e,this.values=n,this.valuesShape=o,this.valuesDType=s,this.defaultValue=i,this.defaultValueShape=a,this.rowPartitionValues=u,this.rowPartitionValuesShapes=l,this.rowPartitionTypes=S.getRowPartitionTypesHelper(c),this.raggedRank=S.getRaggedRank(this.rowPartitionTypes)}getRowPartitionTypeByDimension(t){return this.rowPartitionTypes[0]===Do.FIRST_DIM_SIZE?this.rowPartitionTypes[t+1]:this.rowPartitionTypes[t]}getRowPartitionTensor(t){return this.rowPartitionTypes[0]===Do.FIRST_DIM_SIZE?this.rowPartitionValues[t+1]:this.rowPartitionValues[t]}getMaxWidth(t){let e=this.getRowPartitionTensor(t-1);switch(this.getRowPartitionTypeByDimension(t-1)){case Do.VALUE_ROWIDS:return od.getMaxWidthValueRowID(e);case Do.ROW_SPLITS:return od.getMaxWidthRowSplit(e);default:throw new Error(`Cannot handle partition type ${Do[this.getRowPartitionTypeByDimension(t-1)]}`)}}static getMaxWidthRowSplit(t){let e=t.length;if(e===0||e===1)return 0;let n=0;for(let o=0;o<e-1;++o){let s=t[o+1]-t[o];s>n&&(n=s)}return n}static getMaxWidthValueRowID(t){let e=t.length;if(e===0)return 0;let n=0,o=t[0],s=0;for(let i=1;i<e;++i){let a=t[i];a!==o&&(o=a,s=Math.max(i-n,s),n=i)}return Math.max(e-n,s)}tensorShapeFromTensor(t,e,n=!0){if(e.length===0){if(t[0]===-1)return[];throw new Error("The only valid scalar shape tensor is the fully unknown shape specified as -1.")}return XR(t,n)}calculateOutputSize(t){let e=this.valuesShape,n=this.defaultValueShape;S.validateDefaultValueShape(n,e);let o=this.tensorShapeFromTensor(this.shape,this.shapeShape),i=S.combineRaggedTensorToTensorShapes(this.raggedRank,o,e);i[0]<0&&(i[0]=t);for(let a=1;a<=this.raggedRank;++a)i[a]<0&&(i[a]=this.getMaxWidth(a));return i}calculateFirstParentOutputIndex(t,e,n){let o=Math.min(t,n),s=[],i=0;for(let a=0;a<o;++a,i+=e)s.push(i);for(let a=o;a<t;++a)s.push(-1);return y.assert(s.length===t,()=>"Final length of result must be equal to firstDimension."),s}calculateOutputIndexRowSplit(t,e,n,o){let s=t.length,i=[];for(let a=0;a<s-1;++a){let u=t[a+1]-t[a],l=Math.min(o,u),c=e[a];c===-1&&(l=0);for(let p=0;p<l;++p)i.push(c),c+=n;for(let p=0;p<u-l;++p)i.push(-1)}if(s>0&&i.length!==t[s-1])throw new Error("Invalid row split size.");return i}calculateOutputIndexValueRowID(t,e,n,o){let s=t.length,i=[];if(s===0)return[];let a=0,u=t[0];if(u>=e.length)throw new Error(`Got currentValueRowId=${u}, which is not less than ${e.length}`);let l=e[u];i.push(l);for(let c=1;c<s;++c){let p=t[c];if(p===u)l>=0&&(++a,a<o?l+=n:l=-1);else{if(a=0,u=p,p>=e.length)throw new Error(`Got nextValueRowId=${p} which is not less than ${e.length}`);l=e[p]}i.push(l)}if(i.length!==t.length)throw new Error("Invalid row ids.");return i}calculateOutputIndex(t,e,n,o){let s=this.getRowPartitionTensor(t),i=this.getRowPartitionTypeByDimension(t);switch(i){case Do.VALUE_ROWIDS:return this.calculateOutputIndexValueRowID(s,e,n,o);case Do.ROW_SPLITS:if(s.length-1>e.length)throw new Error(`Row partition size is greater than output size: ${s.length-1} > ${e.length}`);return this.calculateOutputIndexRowSplit(s,e,n,o);default:throw new Error(`Unsupported partition type: ${Do[i]}`)}}getFirstDimensionSize(){let t=this.rowPartitionValues[0];if(this.rowPartitionTypes.length===0)throw new Error("No row_partition_types given.");let e=this.rowPartitionTypes[0];switch(e){case Do.FIRST_DIM_SIZE:return t[0];case Do.VALUE_ROWIDS:throw new Error("Cannot handle VALUE_ROWIDS in first dimension.");case Do.ROW_SPLITS:return this.rowPartitionValuesShapes[0][0]-1;default:throw new Error(`Cannot handle type ${Do[e]}`)}}compute(){if(this.rowPartitionValues[0].length<=0)throw new Error("Invalid first partition input. Tensor requires at least one element.");let e=this.getFirstDimensionSize(),n=this.calculateOutputSize(e),o=new Array(this.raggedRank+1);o[o.length-1]=1;for(let u=o.length-2;u>=0;--u)o[u]=o[u+1]*n[u+1];let s=XR(n,!1),i=y.getArrayFromDType(this.valuesDType,y.sizeFromShape(s));if(o[0]*n[0]>0){let u=this.calculateFirstParentOutputIndex(e,o[0],n[0]);for(let l=1;l<=this.raggedRank;++l)u=this.calculateOutputIndex(l-1,u,o[l],n[l]);this.setOutput(this.raggedRank,u,i,s)}return[s,i]}setOutput(t,e,n,o){if(n.length===0)return;let s=this.values,i=n,a=o.slice();a=a.slice(t+1);let u=y.sizeFromShape(a),l=e.length,c=this.defaultValue;if(c.length!==u&&c.length!==1){let d=this.defaultValueShape;B(()=>{let h=D(c,d);c=$i(h,a).dataSync()})}let p=0,m=0,f=0;for(let d=0;d<=l;++d){let h=d<l?e[d]:-1;if(h===f){++f;continue}if(m<f){let g=s.subarray(p*u),x=i.subarray(m*u),b=(f-m)*u;jR(x,g,b)}if(d>=l){let g=n.length;h=Math.floor(g/u)}if(h>f)if(this.defaultValue.length===1)i.subarray(f*u,h*u).fill(this.defaultValue[0]),f=h;else for(;h>f;){let g=i.slice(f*u);jR(g,c,u),++f}h<0?(p=d+1,m=f):(p=d,m=f,f=m+1)}}};function jR(r,t,e){for(let n=0;n<e;n++)r[n]=t[n]}function XR(r,t){let e=[];for(let n of r){if(n<0){if(!t)throw new Error(`Dimension ${n} must be >= 0`);if(n<-1)throw new Error(`Dimension ${n} must be >= -1`);n=-1}e.push(n)}return e}function Qb(r,t,e,n,o,s,i,a,u,l){return new od(r,t,e,n,o,s,i,a,u,l).compute()}function Ac(r,t,e,n){let o=r===t,s=r<t&&e<0,i=t<r&&e>1;if(o||s||i)return y.makeZerosTypedArray(0,n);let a=Math.abs(Math.ceil((t-r)/e)),u=y.makeZerosTypedArray(a,n);t<r&&e===1&&(e=-1),u[0]=r;for(let l=1;l<u.length;l++)u[l]=u[l-1]+e;return u}var JN=xn(r=>1/Math.sqrt(r)),Q7=$o(ks,JN),YR={kernelName:ks,backendName:"cpu",kernelFunc:Q7};function ml(r,t,e,n,o,s,i,a,u,l){let c=[n/o,o],p=r.values,m=t.values;if(n===0)return wt(e,t.dtype);let f=wt(c,t.dtype);typeof u=="string"||typeof u=="number"?f.values.fill(u):typeof u=="boolean"&&f.values.fill(+u);for(let d=0;d<s;d++){let h=[],g=0;for(let x=0;x<i;x++){let b=p[d*i+x];h.push(b),g+=b*a[x]}if(g<0||g>=n/o)throw new Error(`Invalid indices: ${h} does not index into ${e}`);for(let x=0;x<o;x++)l?f.values[g*o+x]+=m[d*o+x]:f.values[g*o+x]=t.rank===0?m[0]:m[d*o+x]}return f}var ZR=xn(r=>1/(1+Math.exp(-r))),QN=kt(Es,r=>1/(1+Math.exp(-r))),JR={kernelName:Es,backendName:"cpu",kernelFunc:QN};function $c(r,t,e,n,o){let s=Pe.isSliceContinous(n,t,e),i=y.sizeFromShape(e),a=y.computeStrides(n);if(s){let p=Pe.computeFlatOffset(t,a);return o==="string"?r.slice(p,p+i):r.subarray(p,p+i)}let u=o==="string"?S.fromUint8ToStringArray(r):r,l=wt(n,o,u),c=wt(e,o);for(let p=0;p<c.size;++p){let m=c.indexToLoc(p),f=m.map((d,h)=>d+t[h]);c.set(l.get(...f),...m)}return o==="string"?S.fromStringArrayToUint8(c.values):c.values}function Ro(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{begin:s,size:i}=n;tt(o,"slice");let[a,u]=Pe.parseSliceParams(o,s,i);Pe.assertParamsValid(o,a,u);let l=e.data.get(o.dataId).values,c=$c(l,a,u,o.shape,o.dtype);return e.makeTensorInfo(u,o.dtype,c)}var QR={kernelName:di,backendName:"cpu",kernelFunc:Ro};function tw(r,t,e,n,o,s,i){let a=t[0],u=s[0],l=new Array(u),c=new Array(a),p=t[1];if(u===0){if(a!==0)throw new Error(S.getSparseFillEmptyRowsIndicesDenseShapeMismatch(a));let g=y.getArrayFromDType(e,0),x=y.getArrayFromDType(o,0);return[g,[0,p],x,l,c]}let m=!0,f=0,d=new Array(u).fill(0);for(let g=0;g<a;++g){let x=r[g*p];if(x<0)throw new Error(S.getSparseFillEmptyRowsNegativeIndexErrorMessage(g,x));if(x>=u)throw new Error(S.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(g,x,u));++d[x],m=m&&x>=f,f=x}let h=!0;for(let g=0;g<u;++g){let x=d[g]===0;l[g]=x,h=h&&!x,d[g]=Math.max(d[g],1),g>0&&(d[g]+=d[g-1])}if(h&&m){let g=r,x=n;for(let b=0;b<a;++b)c[b]=b;return[g,[a,p],x,l,c]}else{let g=d[u-1],x=y.getArrayFromDType(e,g*p),b=y.getArrayFromDType(o,g),w=new Array(u).fill(0);for(let C=0;C<a;++C){let N=r[C*p],_=w[N],A=(N===0?0:d[N-1])+_;w[N]++;for(let $=0;$<p;++$)x[A*p+$]=r[C*p+$];b[A]=n[C],c[C]=A}for(let C=0;C<u;++C)if(w[C]===0){let _=C===0?0:d[C-1];x[_*p+0]=C;for(let A=1;A<p;++A)x[_*p+A]=0;b[_]=i}return[x,[g,p],b,l,c]}}function ew(r,t,e,n,o){let s=y.sizeFromShape(n),i=t[0],a=o.length,u=[],l=1,c=-1;for(let g=0;g<a;++g){let x=o[g];if(x===-1){if(c!==-1)throw new Error(S.getSparseReshapeMultipleNegativeOneOutputDimErrorMessage(c,g));c=g,u.push(1)}else{if(x<0)throw new Error(S.getSparseReshapeNegativeOutputDimErrorMessage(g,x));l*=x,u.push(x)}}if(c!==-1){if(l<=0)throw new Error(S.getSparseReshapeEmptyTensorZeroOutputDimErrorMessage());let g=Math.trunc(s/l);if(l*g!==s)throw new Error(S.getSparseReshapeInputOutputMultipleErrorMessage(n,u));u[c]=g}if(y.sizeFromShape(u)!==s)throw new Error(S.getSparseReshapeInputOutputMismatchErrorMessage(n,u));let m=n.length,f=[];if(m>0){f[m-1]=1;for(let g=m-2;g>=0;--g)f[g]=f[g+1]*n[g+1]}let d=[];if(a>0){d[a-1]=1;for(let g=a-2;g>=0;--g)d[g]=d[g+1]*u[g+1]}let h=y.getArrayFromDType(e,i*a);for(let g=0;g<i;++g){let x=0;for(let b=0;b<m;++b)x+=r[g*m+b]*f[b];for(let b=0;b<a;++b)h[g*a+b]=Math.trunc(x/d[b]),x%=d[b]}return[h,[i,a],u]}function sd(r,t,e,n,o,s=!1,i=0){let a=n.length,u=[t[0],r.length/t[0]],l=u[1],p=a>0?o[a-1]+1:0;if(p<0)throw new Error(S.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let m=t.slice();m[0]=p;let f=m.reduce((w,C)=>w*C,1),d=y.getArrayFromDType(e,f);if(a===0)return p>0&&d.fill(i),[d,m];if(p<=0)throw new Error(S.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let h=0,g=1,x=0,b=o[h];for(;;){let w=0;if(g<a){if(w=o[g],b===w){++g;continue}if(b>=w)throw new Error(S.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage())}if(b<0||b>=p)throw new Error(S.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(b,p));b>x&&d.fill(i,x*l,b*l);for(let C=h;C<g;++C){let N=n[C];if(N<0||N>=u[0])throw new Error(S.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(C,n[C],u[0]));for(let _=0;_<l;_++)d[b*l+_]+=r[N*l+_]}if(s)for(let C=0;C<l;C++)d[b*l+C]/=g-h;if(h=g,++g,x=b+1,b=w,g>a)break}return x<p&&d.fill(i,x*l,p*l),[d,m]}var tF=xn(r=>Math.sqrt(r)),tJ=kt(_s,r=>Math.sqrt(r)),eF={kernelName:_s,backendName:"cpu",kernelFunc:tJ};var tk=Qt((r,t)=>{let e=r-t;return e*e}),eJ=oe(Ds,tk),rF={kernelName:Ds,backendName:"cpu",kernelFunc:eJ};function rw(r,t,e,n){let o=wt(r,t.dtype);for(let s=0;s<o.size;s++){let i=o.indexToLoc(s),a=new Array(i.length);for(let u=0;u<a.length;u++)a[u]=i[u]*e[u]+n[u];o.set(t.get(...a),...i)}return o}var ek=class{constructor(t,e,n,o,s,i){this.separator=y.encodeString(t),this.nGramWidths=e,this.leftPad=y.encodeString(n),this.rightPad=y.encodeString(o),this.padWidth=s,this.preserveShort=i}getPadWidth(t){return Math.min(this.padWidth<0?t-1:this.padWidth,t-1)}getNumNGrams(t,e){let n=this.getPadWidth(e);return Math.max(0,t+2*n-e+1)}createNGrams(t,e,n,o,s,i){for(let a=0;a<s;++a){let u=this.getPadWidth(i),l=Math.max(0,u-a),c=Math.max(0,u-(s-(a+1))),p=i-(l+c),m=e+(l>0?0:a-u),f=0;f+=l*this.leftPad.length;for(let b=0;b<p;++b)f+=t[m+b].length;f+=c*this.rightPad.length,f+=(l+c+p-1)*this.separator.length,n[o+a]=new Uint8Array(f);let h=n[o+a],g=0,x=b=>b.forEach(w=>h[g++]=w);for(let b=0;b<l;++b)x(this.leftPad),x(this.separator);for(let b=0;b<p-1;++b)x(t[m+b]),x(this.separator);if(p>0){x(t[m+p-1]);for(let b=0;b<c;++b)x(this.separator),x(this.rightPad)}else{for(let b=0;b<c-1;++b)x(this.rightPad),x(this.separator);x(this.rightPad)}}}compute(t,e){let n=t.length,o=e.length;if(o>0){let u=e[0];if(u!==0)throw new Error(`First split value must be 0, got ${u}`);for(let l=1;l<o;++l){let c=e[l]>=u;if(c=c&&e[l]<=n,!c)throw new Error(`Invalid split value ${e[l]}, must be in [${u}, ${n}]`);u=e[l]}if(u!==n)throw new Error(`Last split value must be data size. Expected ${n}, got ${u}`)}let s=o-1,i=y.getArrayFromDType("int32",o);if(n===0||o===0){let u=new Array(n);for(let l=0;l<=s;++l)i[l]=0;return[u,i]}i[0]=0;for(let u=1;u<=s;++u){let l=e[u]-e[u-1],c=0;this.nGramWidths.forEach(p=>{c+=this.getNumNGrams(l,p)}),this.preserveShort&&l>0&&c===0&&(c=1),i[u]=i[u-1]+c}let a=new Array(i[s]);for(let u=0;u<s;++u){let l=e[u],c=i[u];if(this.nGramWidths.forEach(p=>{let m=e[u+1]-e[u],f=this.getNumNGrams(m,p);this.createNGrams(t,l,a,c,f,p),c+=f}),this.preserveShort&&c===i[u]){let p=e[u+1]-e[u];if(p===0)continue;let m=p+2*this.padWidth,f=1;this.createNGrams(t,l,a,c,f,m)}}return[a,i]}};function Dc(r,t,e,n,o,s,i,a){return new ek(e,n,o,s,i,a).compute(r,t)}function rJ(r,t,e,n){if(!r.length)return;if(t.length===0){for(let s=0;s<r.length;++s)n.push(r.subarray(s,s+1));return}if(t.length===1){let s=t[0],i=r.indexOf(s);for(;i!==-1;){let a=r.subarray(0,i);(!e||a.length!==0)&&n.push(a),r=r.subarray(i+1),i=r.indexOf(s)}(!e||r.length!==0)&&n.push(r);return}let o=0;for(let s=0;s<r.length+1;s++)if(s===r.length||t.indexOf(r[s])!==-1){let i=r.subarray(o,s);(!e||i.length!==0)&&n.push(i),o=s+1}}function Rc(r,t,e){let n=r.length,o=[],s=0,i=0,a=new Array(n);for(let m=0;m<n;++m){let f=o.length;rJ(r[m],t,e,o);let d=o.length-f;a[m]=d,s+=d,i=Math.max(i,d)}let u=y.getArrayFromDType("int32",s*2),l=new Array(s),c=[n,i],p=0;for(let m=0;m<n;++m)for(let f=0;f<a[m];++f)u[p*2]=m,u[p*2+1]=f,l[p]=o[p],++p;return[u,l,c]}function Fc(r,t){let e=y.getArrayFromDType("int32",r.length);for(let n=0;n<r.length;++n)e[n]=y.fingerPrint64(r[n]).modulo(t).getLowBitsUnsigned();return e}var rk=Qt((r,t)=>r-t),nJ=ed((r,t,e,n)=>({real:r-e,imag:t-n})),Ph=oe(Rs,rk,nJ),nF={kernelName:Rs,backendName:"cpu",kernelFunc:Ph};function nw(r,t){let e=new Array(r.rank);for(let o=0;o<e.length;o++)e[o]=r.shape[o]*t[o];let n=wt(e,r.dtype);for(let o=0;o<n.values.length;++o){let s=n.indexToLoc(o),i=new Array(r.rank);for(let u=0;u<i.length;u++)i[u]=s[u]%r.shape[u];let a=r.locToIndex(i);n.values[o]=r.values[a]}return n}var Lh=(r,t)=>{let e=t.value-r.value;return e===0?r.index-t.index:e};function oF(r,t,e=0,n=r.length-1){for(;n>e;){if(n-e>600){let a=n-e+1,u=t-e+1,l=Math.log(a),c=.5*Math.exp(2*l/3),p=.5*Math.sqrt(l*c*(a-c)/a)*Math.sign(u-a/2),m=Math.max(e,Math.floor(t-u*c/a+p)),f=Math.min(n,Math.floor(t+(a-u)*c/a+p));oF(r,t,m,f)}let o=r[t],s=e,i=n;for(y.swap(r,e,t),Lh(r[n],o)>0&&y.swap(r,e,n);s<i;){for(y.swap(r,s,i),s++,i--;Lh(r[s],o)<0;)s=s+1;for(;Lh(r[i],o)>0;)i=i-1}Lh(r[e],o)===0?y.swap(r,e,i):(i=i+1,y.swap(r,i,n)),i<=t&&(e=i+1),t<=i&&(n=i-1)}}function ow(r,t,e,n,o){let s=t[t.length-1],[i,a]=[r.length/s,s],u=y.getTypedArrayFromDType(e,i*n),l=y.getTypedArrayFromDType("int32",i*n);for(let p=0;p<i;p++){let m=p*a,f=r.subarray(m,m+a),d=new Array(f.length);f.forEach((b,w)=>d[w]={value:b,index:w}),n<d.length&&(oF(d,n),d=d.slice(0,n)),o&&d.sort(Lh);let h=p*n,g=u.subarray(h,h+n),x=l.subarray(h,h+n);for(let b=0;b<n;b++)g[b]=d[b].value,x[b]=d[b].index}let c=t.slice();return c[c.length-1]=n,[wt(c,e,u),wt(c,"int32",l)]}function sw(r,t,e,n){let o=y.parseAxisParam(t,e)[0],s=[1,e[0],1];for(let d=0;d<o;d++)s[0]*=e[d];s[1]=e[o];for(let d=o+1;d<e.length;d++)s[2]*=e[d];let i={},a=new Int32Array(e[o]),u=new pe(s,n,r),l=[],c=s[0]===1&&s[2]===1;for(let d=0;d<e[o];d++){let h;if(c)h=r[d].toString();else{let g=[];for(let x=0;x<s[0];x++)for(let b=0;b<s[2];b++)g.push(u.get(x,d,b));h=g.join(",")}if(i[h]!==void 0)a[d]=i[h];else{let g=Object.keys(i).length;i[h]=g,a[d]=g,l.push(d)}}let p=s.slice();p[1]=Object.keys(i).length;let m=new pe(p,n);l.forEach((d,h)=>{for(let g=0;g<s[0];g++)for(let x=0;x<s[2];x++)m.set(u.get(g,d,x),g,h,x)});let f=e.slice();return f[o]=p[1],{outputValues:m.values,outputShape:f,indices:a}}jp("cpu",()=>new Su,1);var nk=kt(Qo,r=>r>=0?r:Math.exp(r)-1),sF={kernelName:Qo,backendName:"cpu",kernelFunc:nk};function ok(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{alpha:s}=n;tt([o],"leakyRelu");let i=y.sizeFromShape(o.shape),a=e.data.get(o.dataId).values,u=y.getTypedArrayFromDType("float32",i);for(let l=0;l<a.length;l++)u[l]=a[l]<0?s*a[l]:a[l];return e.makeTensorInfo(o.shape,"float32",u)}var iF={kernelName:ss,backendName:"cpu",kernelFunc:ok};var sJ=Qt((r,t)=>r<0?t*r:r);function sk(r){let{inputs:t,backend:e}=r,{x:n,alpha:o}=t;tt([n,o],"prelu");let s=e.data.get(n.dataId).values,i=e.data.get(o.dataId).values,[a,u]=sJ(n.shape,o.shape,s,i,"float32");return e.makeTensorInfo(u,"float32",a)}var aF={kernelName:ys,backendName:"cpu",kernelFunc:sk};var ik=kt(ws,r=>Math.max(0,r)),lF={kernelName:ws,backendName:"cpu",kernelFunc:ik};var ak=kt(vs,r=>Math.min(Math.max(0,r),6)),uF={kernelName:vs,backendName:"cpu",kernelFunc:ak};function Oc(r,t,e,n,o){if(e==="linear")return qr({inputs:{x:t},backend:r});if(e==="relu")return ik({inputs:{x:t},backend:r});if(e==="elu")return nk({inputs:{x:t},backend:r});if(e==="relu6")return ak({inputs:{x:t},backend:r});if(e==="prelu")return sk({inputs:{x:t,alpha:n},backend:r});if(e==="leakyrelu")return ok({inputs:{x:t},backend:r,attrs:{alpha:o}});if(e==="sigmoid")return QN({inputs:{x:t},backend:r});throw new Error(`Activation ${e} has not been implemented for the CPU backend.`)}function Xt(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{shape:s}=n,i=y.sizeFromShape(o.shape),a=y.inferFromImplicitShape(s,i),u=y.sizeFromShape(a);y.assert(i===u,()=>`The new shape (${a}) has ${u} elements and the old shape (${o.shape}) has ${i} elements. The new shape and old shape must have the same number of elements.`),e.incRef(o.dataId);let l=e.data.get(o.dataId);if(l.complexTensorInfos!=null){let c=l.complexTensorInfos.real,p=l.complexTensorInfos.imag;c.shape=a,p.shape=a}return{dataId:o.dataId,shape:a,dtype:o.dtype}}var cF={kernelName:mi,backendName:"cpu",kernelFunc:Xt};function lk(r){let{inputs:t,backend:e,attrs:n}=r,{a:o,b:s}=t,{transposeA:i,transposeB:a}=n;tt([o,s],"matMul");let u=o.shape.length,l=s.shape.length,c=i?o.shape[u-2]:o.shape[u-1],p=a?s.shape[l-1]:s.shape[l-2],m=i?o.shape[u-1]:o.shape[u-2],f=a?s.shape[l-2]:s.shape[l-1],d=o.shape.slice(0,-2),h=s.shape.slice(0,-2),g=y.sizeFromShape(d),x=y.sizeFromShape(h),w=zr.assertAndGetBroadcastShape(o.shape.slice(0,-2),s.shape.slice(0,-2)).concat([m,f]);y.assert(c===p,()=>`Error in matMul: inner shapes (${c}) and (${p}) of Tensors with shapes ${o.shape} and ${s.shape} and transposeA=${i} and transposeB=${a} must match.`);let C=i?[g,c,m]:[g,m,c],N=a?[x,f,p]:[x,p,f],_=Xt({inputs:{x:o},backend:e,attrs:{shape:C}}),A=Xt({inputs:{x:s},backend:e,attrs:{shape:N}}),$=i?_.shape[1]:_.shape[2],F=i?_.shape[2]:_.shape[1],P=a?A.shape[1]:A.shape[2],V=Math.max(g,x),G=e.data.get(_.dataId).values,W=e.data.get(A.dataId).values,q=y.computeStrides(_.shape),H=y.computeStrides(A.shape),[j,Y,Z]=i?[q[0],1,q[1]]:[q[0],q[1],1],[et,rt,ot]=a?[1,H[1],H[0]]:[H[1],1,H[0]],at=F*P,nt=wt([V,F,P],_.dtype),it=nt.values,dt=e.blockSize;for(let ht=0;ht<V;ht++)for(let bt=0;bt<F;bt+=dt)for(let Tt=0;Tt<P;Tt+=dt)for(let _t=0;_t<$;_t+=dt){let Bt=Math.min(bt+dt,F),Yt=Math.min(Tt+dt,P),ce=Math.min(_t+dt,$);for(let he=bt;he<Bt;he++)for(let Kt=Tt;Kt<Yt;Kt++){let Te=0;for(let fe=_t;fe<ce;fe++){let Ae=Math.min(ht,g-1)*j,Ge=Math.min(ht,x-1)*ot,En=G[Ae+he*Y+fe*Z],nr=W[fe*et+Kt*rt+Ge];Te+=En*nr}it[ht*at+(he*P+Kt)]+=Te}}return e.disposeIntermediateTensorInfo(_),e.disposeIntermediateTensorInfo(A),e.makeTensorInfo(w,nt.dtype,nt.values)}var pF={kernelName:Uo,backendName:"cpu",kernelFunc:lk};function iJ(r){let{inputs:t,backend:e,attrs:n}=r,{a:o,b:s,bias:i,preluActivationWeights:a}=t,{transposeA:u,transposeB:l,activation:c,leakyreluAlpha:p}=n,m,f,d,h=[];m=lk({inputs:{a:o,b:s},attrs:{transposeA:u,transposeB:l},backend:e}),i&&(f=Hi({inputs:{a:m,b:i},backend:e}),h.push(m),m=f),c&&(d=Oc(e,m,c,a,p),h.push(m),m=d);for(let x of h)e.disposeIntermediateTensorInfo(x);return m}var mF={kernelName:bi,backendName:"cpu",kernelFunc:iJ};var aJ=kt(ra,r=>Math.acos(r)),fF={kernelName:ra,backendName:"cpu",kernelFunc:aJ};var lJ=kt(na,r=>Math.acosh(r)),dF={kernelName:na,backendName:"cpu",kernelFunc:lJ};function uJ(r){let{inputs:t,backend:e}=r,n=t;tt(t,"addN");let o=n.map(a=>e.data.get(a.dataId).values),s=wt(n[0].shape,n[0].dtype),i=s.values;for(let a=0;a<n.length;a++){let u=o[a];for(let l=0;l<i.length;l++)i[l]+=u[l]}return e.makeTensorInfo(s.shape,s.dtype,s.values)}var hF={kernelName:Vo,backendName:"cpu",kernelFunc:uJ};function cJ(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{axis:s,keepDims:i}=n;tt(o,"all");let a=y.parseAxisParam(s,o.shape),u=a,l=S.getAxesPermutation(u,o.shape.length),c=o;l!=null&&(c=Be({inputs:{x:o},backend:e,attrs:{perm:l}}),u=S.getInnerMostAxes(u.length,o.shape.length)),S.assertAxesAreInnerMostDims("all",u,c.shape.length);let[p,m]=S.computeOutAndReduceShapes(c.shape,u),f=y.sizeFromShape(m),d=y.makeZerosTypedArray(y.sizeFromShape(p),c.dtype),h=e.data.get(c.dataId).values;for(let x=0;x<d.length;++x){let b=x*f,w=h[b];for(let C=0;C<f;++C){let N=h[b+C];w=w&&N}d[x]=w}l!=null&&e.disposeIntermediateTensorInfo(c);let g=e.makeTensorInfo(p,c.dtype,d);if(i){let x=S.expandShapeToKeepDim(p,a),b=Xt({inputs:{x:g},backend:e,attrs:{shape:x}});return e.disposeIntermediateTensorInfo(g),b}return g}var gF={kernelName:oa,backendName:"cpu",kernelFunc:cJ};function pJ(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{axis:s,keepDims:i}=n;tt(o,"any");let a=y.parseAxisParam(s,o.shape),u=a,l=S.getAxesPermutation(u,o.shape.length),c=o;l!=null&&(c=Be({inputs:{x:o},backend:e,attrs:{perm:l}}),u=S.getInnerMostAxes(u.length,o.shape.length)),S.assertAxesAreInnerMostDims("any",u,c.shape.length);let[p,m]=S.computeOutAndReduceShapes(c.shape,u),f=y.sizeFromShape(m),d=y.makeZerosTypedArray(y.sizeFromShape(p),c.dtype),h=e.data.get(c.dataId).values;for(let x=0;x<d.length;++x){let b=x*f,w=h[b];for(let C=0;C<f;++C){let N=h[b+C];w=w||N}d[x]=w}l!=null&&e.disposeIntermediateTensorInfo(c);let g=e.makeTensorInfo(p,c.dtype,d);if(i){let x=S.expandShapeToKeepDim(p,a),b=Xt({inputs:{x:g},backend:e,attrs:{shape:x}});return e.disposeIntermediateTensorInfo(g),b}return g}var xF={kernelName:sa,backendName:"cpu",kernelFunc:pJ};function mJ(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{axis:s}=n;tt(o,"argMax");let i=y.parseAxisParam(s,o.shape),a=S.getAxesPermutation(i,o.shape.length),u=o,l=[];a!=null&&(u=Be({inputs:{x:o},backend:e,attrs:{perm:a}}),l.push(u),i=S.getInnerMostAxes(i.length,u.shape.length)),i=[i[0]],S.assertAxesAreInnerMostDims("argMax",i,u.shape.length);let[c,p]=S.computeOutAndReduceShapes(u.shape,i),m=y.sizeFromShape(c),f=y.makeZerosTypedArray(m,"int32"),d=y.sizeFromShape(p),h=e.data.get(u.dataId).values;for(let g=0;g<f.length;++g){let x=g*d,b=h[x],w=0;for(let C=0;C<d;++C){let N=h[x+C];N>b&&(b=N,w=C)}f[g]=w}return l.forEach(g=>e.disposeIntermediateTensorInfo(g)),e.makeTensorInfo(c,"int32",f)}var yF={kernelName:Go,backendName:"cpu",kernelFunc:mJ};function fJ(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{axis:s}=n;tt(o,"argMin");let i=y.parseAxisParam(s,o.shape),a=S.getAxesPermutation(i,o.shape.length),u=o,l=[];a!=null&&(u=Be({inputs:{x:o},backend:e,attrs:{perm:a}}),l.push(u),i=S.getInnerMostAxes(i.length,u.shape.length)),i=[i[0]],S.assertAxesAreInnerMostDims("argMin",i,u.shape.length);let[c,p]=S.computeOutAndReduceShapes(u.shape,i),m=y.sizeFromShape(c),f=y.makeZerosTypedArray(m,"int32"),d=y.sizeFromShape(p),h=e.data.get(u.dataId).values;for(let g=0;g<f.length;++g){let x=g*d,b=h[x],w=0;for(let C=0;C<d;++C){let N=h[x+C];N<b&&(b=N,w=C)}f[g]=w}return l.forEach(g=>e.disposeIntermediateTensorInfo(g)),e.makeTensorInfo(c,"int32",f)}var bF={kernelName:Nl,backendName:"cpu",kernelFunc:fJ};var dJ=kt(ia,r=>Math.asin(r)),wF={kernelName:ia,backendName:"cpu",kernelFunc:dJ};var hJ=kt(aa,r=>Math.asinh(r)),CF={kernelName:aa,backendName:"cpu",kernelFunc:hJ};var gJ=kt(la,r=>Math.atan(r)),IF={kernelName:la,backendName:"cpu",kernelFunc:gJ};var xJ=Qt((r,t)=>Math.atan2(r,t)),yJ=oe(ca,xJ),vF={kernelName:ca,backendName:"cpu",kernelFunc:yJ};var bJ=kt(ua,r=>Math.atanh(r)),SF={kernelName:ua,backendName:"cpu",kernelFunc:bJ};function id(r,t,e,n,o,s){let i=o.strideHeight,a=o.strideWidth,u=o.dilationHeight,l=o.dilationWidth,c=o.effectiveFilterHeight,p=o.effectiveFilterWidth,m=o.padInfo.top,f=o.padInfo.left,d=s==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,h=wt(o.outShape,e),g=h.values,x=o.outShape[1]*o.outShape[2]*o.outShape[3],b=o.outShape[2]*o.outShape[3],w=o.outShape[3];for(let C=0;C<o.batchSize;++C){let N=C*x,_=C*n[0];for(let A=0;A<o.inChannels;++A)for(let $=0;$<o.outHeight;++$){let F=$*i-m,P=Math.max(0,F),V=Math.min(o.inHeight,c+F),G=N+$*b;for(let W=0;W<o.outWidth;++W){let q=W*a-f,H=Math.max(0,q),j=Math.min(o.inWidth,p+q),Y=d,Z=0,et=0;for(let ot=P;ot<V;ot+=u){let at=_+ot*n[1];for(let nt=H;nt<j;nt+=l){let it=at+nt*n[2],dt=r[it+A];s==="max"&&dt>Y?Y=dt:s==="avg"&&(Z+=dt,et++)}if(isNaN(Y))break}let rt=G+W*w+A;g[rt]=s==="avg"?Z/et:Y}}}return h}function aw(r,t,e,n,o=!1,s=!1){let i=wt(n.outShape,"int32"),a=n.strideHeight,u=n.strideWidth,l=n.dilationHeight,c=n.dilationWidth,p=n.effectiveFilterHeight,m=n.effectiveFilterWidth,f=n.padInfo.top,d=n.padInfo.left,h=wt(t,e,r);for(let g=0;g<n.batchSize;++g)for(let x=0;x<n.inChannels;++x)for(let b=0;b<n.outHeight;++b){let w=b*a-f,C=w;for(;C<0;)C+=l;let N=Math.min(n.inHeight,p+w);for(let _=0;_<n.outWidth;++_){let A=_*u-d,$=A;for(;$<0;)$+=c;let F=Math.min(n.inWidth,m+A),P=Number.NEGATIVE_INFINITY,V=-1;for(let G=C;G<N;G+=l){let W=G-w;for(let q=$;q<F;q+=c){let H=q-A,j=h.get(g,G,q,x);j>P&&(P=j,o?V=s?((g*n.inHeight+G)*n.inWidth+q)*n.inChannels+x:(G*n.inWidth+q)*n.inChannels+x:V=W*m+H)}}i.set(V,g,b,_,x)}}return i}function lw(r,t,e,n,o,s){let i=o.strideDepth,a=o.strideHeight,u=o.strideWidth,l=o.dilationDepth,c=o.dilationHeight,p=o.dilationWidth,m=o.effectiveFilterDepth,f=o.effectiveFilterHeight,d=o.effectiveFilterWidth,h=o.padInfo.front,g=o.padInfo.top,x=o.padInfo.left,b=s==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,w=wt(o.outShape,e),C=w.values,N=o.outShape[1]*o.outShape[2]*o.outShape[3]*o.outShape[4],_=o.outShape[2]*o.outShape[3]*o.outShape[4],A=o.outShape[3]*o.outShape[4],$=o.outShape[4];for(let F=0;F<o.batchSize;++F){let P=F*N,V=F*n[0];for(let G=0;G<o.inChannels;++G)for(let W=0;W<o.outDepth;++W){let q=W*i-h,H=q;for(;H<0;)H+=l;let j=Math.min(o.inDepth,m+q),Y=P+W*_;for(let Z=0;Z<o.outHeight;++Z){let et=Z*a-g,rt=et;for(;rt<0;)rt+=c;let ot=Math.min(o.inHeight,f+et),at=Y+Z*A;for(let nt=0;nt<o.outWidth;++nt){let it=nt*u-x,dt=it;for(;dt<0;)dt+=p;let ht=Math.min(o.inWidth,d+it),bt=at+nt*$,Tt=b,_t=0,Bt=0;for(let ce=H;ce<j;ce+=l){let he=V+ce*n[1];for(let Kt=rt;Kt<ot;Kt+=c){let Te=he+Kt*n[2];for(let fe=dt;fe<ht;fe+=p){let Ae=Te+fe*n[3],Ge=r[Ae+G];if(s==="max"&&Ge>Tt?Tt=Ge:s==="avg"&&(_t+=Ge,Bt++),isNaN(Tt))break}if(isNaN(Tt))break}if(isNaN(Tt))break}let Yt=bt+G;C[Yt]=s==="avg"?_t/Bt:Tt}}}}return w}function NF(r,t){let e=wt(t.outShape,"int32"),n=t.strideDepth,o=t.strideHeight,s=t.strideWidth,i=t.dilationDepth,a=t.dilationHeight,u=t.dilationWidth,l=t.effectiveFilterDepth,c=t.effectiveFilterHeight,p=t.effectiveFilterWidth,m=t.padInfo.front,f=t.padInfo.top,d=t.padInfo.left;for(let h=0;h<t.batchSize;++h)for(let g=0;g<t.inChannels;++g)for(let x=0;x<t.outDepth;++x){let b=x*n-m,w=b;for(;w<0;)w+=i;let C=Math.min(t.inDepth,l+b);for(let N=0;N<t.outHeight;++N){let _=N*o-f,A=_;for(;A<0;)A+=a;let $=Math.min(t.inHeight,c+_);for(let F=0;F<t.outWidth;++F){let P=F*s-d,V=P;for(;V<0;)V+=u;let G=Math.min(t.inWidth,p+P),W=Number.NEGATIVE_INFINITY,q=-1;for(let H=w;H<C;H+=i){let j=H-b;for(let Y=A;Y<$;Y+=a){let Z=Y-_;for(let et=V;et<G;et+=u){let rt=et-P,ot=r.get(h,H,Y,et,g);ot>=W&&(W=ot,q=j*c*p+Z*c+rt)}}}e.set(q,h,x,N,F,g)}}}return e}function wJ(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t;tt(o,"avgPool");let{filterSize:s,strides:i,pad:a,dimRoundingMode:u}=n,l=1;y.assert(S.eitherStridesOrDilationsAreOne(i,l),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${l}'`);let c=S.computePool2DInfo(o.shape,s,i,l,a,u),p;if(c.filterWidth===1&&c.filterHeight===1&&y.arraysEqual(c.inShape,c.outShape))p=qr({inputs:{x:o},backend:e});else{let m=e.data.get(o.dataId).values,f=y.computeStrides(o.shape),d=id(m,o.shape,o.dtype,f,c,"avg");p=e.makeTensorInfo(c.outShape,o.dtype,d.values)}return p}var kF={kernelName:Wo,backendName:"cpu",kernelFunc:wJ};function CJ(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{filterSize:s,strides:i,pad:a,dimRoundingMode:u,dataFormat:l}=n;tt(o,"avgPool3d");let c=S.computePool3DInfo(o.shape,s,i,1,a,u,l),p=e.data.get(o.dataId).values,m=lw(p,o.shape,o.dtype,y.computeStrides(o.shape),c,"avg");return e.makeTensorInfo(m.shape,"float32",m.values)}var TF={kernelName:kl,backendName:"cpu",kernelFunc:CJ};function IJ(r){let{inputs:t,backend:e,attrs:n}=r,{dy:o,input:s}=t,{filterSize:i,strides:a,pad:u,dimRoundingMode:l}=n;tt([o,s],"avgPool3DGrad");let c=S.computePool3DInfo(s.shape,i,a,1,u,l),p=c.strideDepth,m=c.strideHeight,f=c.strideWidth,d=c.filterDepth,h=c.filterHeight,g=c.filterWidth,x=c.dilationDepth,b=c.dilationHeight,w=c.dilationWidth,C=c.effectiveFilterDepth,N=c.effectiveFilterHeight,_=c.effectiveFilterWidth,A=C-1-c.padInfo.front,$=_-1-c.padInfo.left,F=N-1-c.padInfo.top,P=wt(s.shape,"float32"),V=1/(d*h*g),G=e.bufferSync(o);for(let W=0;W<c.batchSize;++W)for(let q=0;q<c.inChannels;++q)for(let H=0;H<c.inDepth;++H)for(let j=0;j<c.inHeight;++j)for(let Y=0;Y<c.inWidth;++Y){let Z=H-A,et=j-F,rt=Y-$,ot=0;for(let at=0;at<C;at+=x){let nt=(Z+at)/p;if(!(nt<0||nt>=c.outDepth||Math.floor(nt)!==nt))for(let it=0;it<N;it+=b){let dt=(et+it)/m;if(!(dt<0||dt>=c.outHeight||Math.floor(dt)!==dt))for(let ht=0;ht<_;ht+=w){let bt=(rt+ht)/f;if(bt<0||bt>=c.outWidth||Math.floor(bt)!==bt)continue;ot+=G.get(W,nt,dt,bt,q)}}}P.set(ot*V,W,H,j,Y,q)}return e.makeTensorInfo(P.shape,P.dtype,P.values)}var EF={kernelName:lp,backendName:"cpu",kernelFunc:IJ};function vJ(r){let{inputs:t,backend:e,attrs:n}=r,{dy:o,input:s}=t,i=s;tt([o,s],"avgPoolGrad");let{filterSize:a,strides:u,pad:l}=n,c=S.computePool2DInfo(i.shape,a,u,1,l),p=c.strideHeight,m=c.strideWidth,f=c.filterHeight,d=c.filterWidth,h=c.dilationHeight,g=c.dilationWidth,x=c.effectiveFilterHeight,b=c.effectiveFilterWidth,w=b-1-c.padInfo.left,C=x-1-c.padInfo.top,N=wt(i.shape,"float32"),_=1/(f*d),A=e.data.get(o.dataId).values,$=wt(o.shape,"float32",A);for(let F=0;F<c.batchSize;++F)for(let P=0;P<c.inChannels;++P)for(let V=0;V<c.inHeight;++V)for(let G=0;G<c.inWidth;++G){let W=V-C,q=G-w,H=0;for(let j=0;j<x;j+=h){let Y=(W+j)/p;if(!(Y<0||Y>=c.outHeight||Math.floor(Y)!==Y))for(let Z=0;Z<b;Z+=g){let et=(q+Z)/m;if(et<0||et>=c.outWidth||Math.floor(et)!==et)continue;H+=$.get(F,Y,et,P)}}N.set(H*_,F,V,G,P)}return e.makeTensorInfo(N.shape,N.dtype,N.values)}var _F={kernelName:ap,backendName:"cpu",kernelFunc:vJ};function SJ(r){let{inputs:t,backend:e,attrs:n}=r,{x:o,scale:s,offset:i,mean:a,variance:u}=t;y.assert(a.shape.length===u.shape.length,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),y.assert(i==null||a.shape.length===i.shape.length,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),y.assert(s==null||a.shape.length===s.shape.length,()=>"Batch normalization gradient requires mean and scale to have equal ranks."),tt([o,a,u,s,i],"batchNorm");let{varianceEpsilon:l}=n;l==null&&(l=.001);let c=e.data.get(o.dataId).values,p=e.data.get(a.dataId).values,m=e.data.get(u.dataId).values,f=s?e.data.get(s.dataId).values:new Float32Array([1]),d=i?e.data.get(i.dataId).values:new Float32Array([0]),h=new Float32Array(c.length),g=d.length,x=f.length,b=m.length,w=p.length,C=0,N=0,_=0,A=0;for(let $=0;$<c.length;++$)h[$]=d[C++]+(c[$]-p[N++])*f[_++]/Math.sqrt(m[A++]+l),C>=g&&(C=0),N>=w&&(N=0),_>=x&&(_=0),A>=b&&(A=0);return e.makeTensorInfo(o.shape,o.dtype,h)}var AF={kernelName:ns,backendName:"cpu",kernelFunc:SJ};function NJ(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{blockShape:s,crops:i}=n;tt([o],"batchToSpaceND");let a=s.reduce((x,b)=>x*b),u=S.getReshaped(o.shape,s,a),l=S.getPermuted(u.length,s.length),c=S.getReshapedPermuted(o.shape,s,a),p=S.getSliceBeginCoords(i,s.length),m=S.getSliceSize(c,i,s.length),f=Xt({inputs:{x:o},backend:e,attrs:{shape:u}}),d=Be({inputs:{x:f},backend:e,attrs:{perm:l}}),h=Xt({inputs:{x:d},backend:e,attrs:{shape:c}}),g=Ro({inputs:{x:h},backend:e,attrs:{begin:p,size:m}});return e.disposeIntermediateTensorInfo(f),e.disposeIntermediateTensorInfo(d),e.disposeIntermediateTensorInfo(h),g}var $F={kernelName:si,backendName:"cpu",kernelFunc:NJ};function kJ(r){let{inputs:t,backend:e,attrs:n}=r,{x:o,weights:s}=t,{size:i}=n,a=e.data.get(o.dataId).values,u=e.data.get(s.dataId).values,l=rd(a,u,s.dtype,s.shape,i);return e.makeTensorInfo([i],s.dtype,l)}var DF={kernelName:up,backendName:"cpu",kernelFunc:kJ};function TJ(r){let{inputs:t,backend:e}=r,{s0:n,s1:o}=t,s=e.data.get(n.dataId).values,i=e.data.get(o.dataId).values,a=S.assertAndGetBroadcastShape(Array.from(s),Array.from(i));return e.makeTensorInfo([a.length],"int32",Int32Array.from(a))}var RF={kernelName:cp,backendName:"cpu",kernelFunc:TJ};var EJ=kt(ao,(r,t)=>{let e=t;return r>e.clipValueMax?e.clipValueMax:r<e.clipValueMin?e.clipValueMin:r}),FF={kernelName:ao,backendName:"cpu",kernelFunc:EJ};var _J=r=>{let{x:t}=r.inputs,e=r.backend,n=new Float32Array(y.sizeFromShape(t.shape)),o=e.data.get(t.dataId),s=o.complexTensorInfos.real,i=o.complexTensorInfos.imag,a=e.data.get(s.dataId).values,u=e.data.get(i.dataId).values;for(let l=0;l<a.length;l++){let c=a[l],p=u[l];n[l]=Math.hypot(c,p)}return e.makeOutput(n,t.shape,"float32")},OF={kernelName:Tl,backendName:"cpu",kernelFunc:_J};function qi(r){let{inputs:t,backend:e}=r,{input:n}=t,o=e.data.get(n.dataId).complexTensorInfos.imag,s=e.data.get(o.dataId).values;return e.makeTensorInfo(o.shape,o.dtype,s)}var PF={kernelName:vp,backendName:"cpu",kernelFunc:qi};function Nu(r){let{inputs:t,backend:e,attrs:n}=r,{axis:o}=n,s=y.parseAxisParam(o,t[0].shape)[0],i=t.map(h=>h.shape);S.assertParamsConsistent(i,s);let a=S.computeOutShape(t.map(h=>h.shape),s);if(y.sizeFromShape(a)===0)return e.makeTensorInfo(a,t[0].dtype,[]);let u=t.filter(h=>y.sizeFromShape(h.shape)>0);if(u.length===1)return qr({inputs:{x:u[0]},backend:e});if(u[0].dtype==="complex64"){let h=u.map(C=>_o({inputs:{input:C},backend:e})),g=u.map(C=>qi({inputs:{input:C},backend:e})),x=Nu({inputs:h,backend:e,attrs:{axis:s}}),b=Nu({inputs:g,backend:e,attrs:{axis:s}}),w=br({inputs:{real:x,imag:b},backend:e});return h.forEach(C=>e.disposeIntermediateTensorInfo(C)),g.forEach(C=>e.disposeIntermediateTensorInfo(C)),e.disposeIntermediateTensorInfo(x),e.disposeIntermediateTensorInfo(b),w}let l=u.map(h=>{let g=y.sizeFromShape(h.shape.slice(s));return Xt({inputs:{x:h},backend:e,attrs:{shape:[-1,g]}})}),c=l.map(h=>({vals:e.data.get(h.dataId).values,shape:h.shape}));a=S.computeOutShape(l.map(h=>h.shape),1);let p=l[0].shape[0]===1,m=Ec(c,a,t[0].dtype,p),f=S.computeOutShape(u.map(h=>h.shape),s),d=e.makeTensorInfo(f,t[0].dtype,m);return l.forEach(h=>e.disposeIntermediateTensorInfo(h)),d}var LF={kernelName:ii,backendName:"cpu",kernelFunc:Nu};function uk(r){let{inputs:t,backend:e,attrs:n}=r,{x:o,filter:s}=t,{strides:i,pad:a,dataFormat:u,dilations:l,dimRoundingMode:c}=n;tt([o,s],"conv2d");let p=S.convertConv2DDataFormat(u),m=S.computeConv2DInfo(o.shape,s.shape,i,l,a,c,!1,p),f=m.filterHeight,d=m.filterWidth,h=m.dilationHeight,g=m.dilationWidth,x=m.padInfo.left,b=m.padInfo.top,w=m.dataFormat==="channelsLast",C=new pe(m.outShape,o.dtype),N=y.computeStrides(o.shape),_=y.computeStrides(s.shape),A=N[0],$=w?N[1]:N[2],F=w?N[2]:1,P=w?1:N[1],V=C.strides[0],G=w?C.strides[1]:C.strides[2],W=w?C.strides[2]:1,q=w?1:C.strides[1],H=e.data.get(o.dataId).values,j=e.data.get(s.dataId).values,Y=C.values;for(let Z=0;Z<m.batchSize;++Z){let et=Z*A,rt=Z*V;for(let ot=0;ot<m.outHeight;++ot){let at=rt+ot*G,nt=ot*m.strideHeight-b;for(let it=0;it<f;++it){let dt=nt+it*h;if(dt<0||dt>=m.inHeight)continue;let ht=it*_[0],bt=et+dt*$;for(let Tt=0;Tt<m.outWidth;++Tt){let _t=at+Tt*W,Bt=Tt*m.strideWidth-x;for(let Yt=0;Yt<d;++Yt){let ce=Bt+Yt*g;if(ce<0||ce>=m.inWidth)continue;let he=ht+Yt*_[1],Kt=bt+ce*F,Te=he;for(let fe=0;fe<m.inChannels;++fe){let Ae=H[Kt+fe*P];for(let Ge=0;Ge<m.outChannels;++Ge)Y[_t+Ge*q]+=Ae*j[Te+Ge];Te+=m.outChannels}}}}}}return e.makeTensorInfo(C.shape,C.dtype,Y)}var MF={kernelName:qo,backendName:"cpu",kernelFunc:uk};function AJ(r){let{inputs:t,backend:e,attrs:n}=r,{x:o,dy:s}=t,{strides:i,pad:a,dataFormat:u,dimRoundingMode:l,filterShape:c}=n;tt([o,s],"conv2dBackpropFilter");let p=S.convertConv2DDataFormat(u),m=S.computeConv2DInfo(o.shape,c,i,1,a,l,!1,p),{strideHeight:f,strideWidth:d,filterHeight:h,filterWidth:g}=m,x=m.dataFormat==="channelsLast",b=new pe(m.filterShape,"float32"),w=m.padInfo.left,C=m.padInfo.top,N=e.data.get(o.dataId).values,_=e.data.get(s.dataId).values,A=new pe(o.shape,o.dtype,N),$=new pe(s.shape,s.dtype,_);for(let F=0;F<h;++F){let P=Math.max(0,Math.ceil((C-F)/f)),V=Math.min(m.outHeight,(m.inHeight+C-F)/f);for(let G=0;G<g;++G){let W=Math.max(0,Math.ceil((w-G)/d)),q=Math.min(m.outWidth,(m.inWidth+w-G)/d);for(let H=0;H<m.inChannels;++H)for(let j=0;j<m.outChannels;++j){let Y=0;for(let Z=0;Z<m.batchSize;++Z)for(let et=P;et<V;++et){let rt=F+et*f-C;for(let ot=W;ot<q;++ot){let at=G+ot*d-w;x?Y+=A.get(Z,rt,at,H)*$.get(Z,et,ot,j):Y+=A.get(Z,H,rt,at)*$.get(Z,j,et,ot)}}b.set(Y,F,G,H,j)}}}return e.makeTensorInfo(b.shape,b.dtype,b.values)}var zF={kernelName:mp,backendName:"cpu",kernelFunc:AJ};function $J(r){let{inputs:t,backend:e,attrs:n}=r,{dy:o,filter:s}=t,{inputShape:i,strides:a,pad:u,dataFormat:l,dimRoundingMode:c}=n;tt([o,s],"conv2dBackpropInput");let p=y.computeStrides(s.shape),m=y.computeStrides(o.shape),f=S.convertConv2DDataFormat(l),d=S.computeConv2DInfo(i,s.shape,a,1,u,c,!1,f),h=new pe(d.inShape,"float32"),g=h.values,x=e.data.get(o.dataId).values,b=e.data.get(s.dataId).values,[w,C,N]=p,{batchSize:_,filterHeight:A,filterWidth:$,inChannels:F,inHeight:P,inWidth:V,outChannels:G,outHeight:W,outWidth:q,strideHeight:H,strideWidth:j}=d;f=d.dataFormat;let Y=A-1-d.padInfo.top,Z=$-1-d.padInfo.left,et=f==="channelsLast",rt=h.strides[0],ot=et?h.strides[1]:h.strides[2],at=et?h.strides[2]:1,nt=et?1:h.strides[1],it=m[0],dt=et?m[1]:m[2],ht=et?m[2]:1,bt=et?1:m[1];for(let Tt=0;Tt<_;++Tt)for(let _t=0;_t<F;++_t)for(let Bt=0;Bt<P;++Bt){let Yt=Bt-Y,ce=Math.max(0,Math.ceil(Yt/H)),he=Math.min(W,(A+Yt)/H);for(let Kt=0;Kt<V;++Kt){let Te=Kt-Z,fe=Math.max(0,Math.ceil(Te/j)),Ae=Math.min(q,($+Te)/j),Ge=0;for(let nr=ce;nr<he;++nr){let Wn=nr*H-Yt;for(let Or=fe;Or<Ae;++Or){let qe=Or*j-Te,Pr=it*Tt+dt*nr+ht*Or,Lr=w*(A-1-Wn)+C*($-1-qe)+N*_t;for(let Un=0;Un<G;++Un){let Hn=x[Pr+bt*Un],jr=b[Lr+Un];Ge+=Hn*jr}}}let En=rt*Tt+ot*Bt+at*Kt+nt*_t;g[En]=Ge}}return e.makeTensorInfo(h.shape,h.dtype,h.values)}var BF={kernelName:Ko,backendName:"cpu",kernelFunc:$J};function DJ(r){let{inputs:t,backend:e,attrs:n}=r,{x:o,filter:s}=t,{strides:i,pad:a,dilations:u}=n;tt([o,s],"conv3d");let l=S.computeConv3DInfo(o.shape,s.shape,i,u,a),{filterDepth:c,filterHeight:p,filterWidth:m,dilationDepth:f,dilationHeight:d,dilationWidth:h,padInfo:g}=l,x=g.front,b=g.left,w=g.top,C=new pe(l.outShape,o.dtype),N=e.data.get(o.dataId).values,_=e.data.get(s.dataId).values,A=C.values,$=y.computeStrides(o.shape),F=y.computeStrides(s.shape);for(let P=0;P<l.batchSize;++P){let V=P*$[0],G=P*C.strides[0];for(let W=0;W<l.outDepth;++W){let q=G+W*C.strides[1],H=W*l.strideDepth-x;for(let j=0;j<c;++j){let Y=H+j*f;if(Y<0||Y>=l.inDepth)continue;let Z=j*F[0],et=V+Y*$[1];for(let rt=0;rt<l.outHeight;++rt){let ot=q+rt*C.strides[2],at=rt*l.strideHeight-w;for(let nt=0;nt<p;++nt){let it=at+nt*d;if(it<0||it>=l.inHeight)continue;let dt=Z+nt*F[1],ht=et+it*$[2];for(let bt=0;bt<l.outWidth;++bt){let Tt=ot+bt*l.outChannels,_t=bt*l.strideWidth-b;for(let Bt=0;Bt<m;++Bt){let Yt=_t+Bt*h;if(Yt<0||Yt>=l.inWidth)continue;let ce=dt+Bt*F[2],he=ht+Yt*l.inChannels,Kt=ce;for(let Te=0;Te<l.inChannels;++Te){let fe=N[he+Te];for(let Ae=0;Ae<l.outChannels;++Ae)A[Tt+Ae]+=fe*_[Kt+Ae];Kt+=l.outChannels}}}}}}}}return e.makeTensorInfo(C.shape,C.dtype,C.values)}var VF={kernelName:El,backendName:"cpu",kernelFunc:DJ};function RJ(r){let{inputs:t,backend:e,attrs:n}=r,{x:o,dy:s}=t,{strides:i,pad:a,filterShape:u}=n;tt([o,s],"conv3dBackpropFilterV2");let l=y.computeStrides(o.shape),c=y.computeStrides(s.shape),p=S.computeConv3DInfo(o.shape,u,i,1,a),m=p.strideDepth,f=p.strideHeight,d=p.strideWidth,h=p.filterDepth,g=p.filterHeight,x=p.filterWidth,b=new pe(p.filterShape,"float32"),w=b.values,[C,N,_,A]=b.strides,$=e.data.get(s.dataId).values,[F,P,V,G]=c,W=e.data.get(o.dataId).values,[q,H,j,Y]=l,Z=p.padInfo.front,et=p.padInfo.left,rt=p.padInfo.top;for(let ot=0;ot<h;++ot){let at=Math.max(0,Math.ceil((Z-ot)/m)),nt=Math.min(p.outDepth,(p.inDepth+Z-ot)/m),it=ot*C;for(let dt=0;dt<g;++dt){let ht=Math.max(0,Math.ceil((rt-dt)/f)),bt=Math.min(p.outHeight,(p.inHeight+rt-dt)/f),Tt=dt*N+it;for(let _t=0;_t<x;++_t){let Bt=Math.max(0,Math.ceil((et-_t)/d)),Yt=Math.min(p.outWidth,(p.inWidth+et-_t)/d),ce=_t*_+Tt;for(let he=0;he<p.inChannels;++he){let Kt=he*A+ce;for(let Te=0;Te<p.outChannels;++Te){let fe=0;for(let Ae=0;Ae<p.batchSize;++Ae){let Ge=Ae*q,En=Ae*F;for(let nr=at;nr<nt;++nr){let Or=(ot+nr*m-Z)*H+Ge,qe=nr*P+En;for(let Pr=ht;Pr<bt;++Pr){let Un=(dt+Pr*f-rt)*j+Or,Hn=Pr*V+qe;for(let jr=Bt;jr<Yt;++jr){let Lo=(_t+jr*d-et)*Y+Un,wl=jr*G+Hn;fe+=W[Lo+he]*$[wl+Te]}}}}w[Kt+Te]=fe}}}}}return e.makeTensorInfo(b.shape,b.dtype,b.values)}var GF={kernelName:fp,backendName:"cpu",kernelFunc:RJ};function FJ(r){let{inputs:t,backend:e,attrs:n}=r,{dy:o,filter:s}=t,{pad:i,strides:a,inputShape:u}=n;tt([o],"conv3dBackpropInputV2");let l=y.computeStrides(o.shape),c=y.computeStrides(s.shape),p=S.computeConv3DInfo(u,s.shape,a,1,i),m=new pe(p.inShape,"float32"),f=m.values,[d,h,g,x]=m.strides,b=e.data.get(o.dataId).values,[w,C,N,_]=l,A=e.data.get(s.dataId).values,[$,F,P,V]=c,{batchSize:G,filterDepth:W,filterHeight:q,filterWidth:H,inChannels:j,inDepth:Y,inHeight:Z,inWidth:et,outChannels:rt,outDepth:ot,outHeight:at,outWidth:nt,strideDepth:it,strideHeight:dt,strideWidth:ht}=p,bt=W-1-p.padInfo.front,Tt=q-1-p.padInfo.top,_t=H-1-p.padInfo.left;for(let Bt=0;Bt<G;++Bt)for(let Yt=0;Yt<j;++Yt)for(let ce=0;ce<Y;++ce){let he=ce-bt,Kt=Math.max(0,Math.ceil(he/it)),Te=Math.min(ot,(W+he)/it);for(let fe=0;fe<Z;++fe){let Ae=fe-Tt,Ge=Math.max(0,Math.ceil(Ae/dt)),En=Math.min(at,(q+Ae)/dt);for(let nr=0;nr<et;++nr){let Wn=nr-_t,Or=Math.max(0,Math.ceil(Wn/ht)),qe=Math.min(nt,(H+Wn)/ht),Pr=0;for(let Lr=Kt;Lr<Te;++Lr){let Un=Lr*it-he;for(let Hn=Ge;Hn<En;++Hn){let jr=Hn*dt-Ae;for(let Xi=Or;Xi<qe;++Xi){let Lo=Xi*ht-Wn,wl=w*Bt+C*Lr+N*Hn+_*Xi,Nr=$*(W-1-Un)+F*(q-1-jr)+P*(H-1-Lo)+V*Yt;for(let Yi=0;Yi<rt;++Yi){let _d=b[wl+Yi],Ad=A[Nr+Yi];Pr+=_d*Ad}}}}f[d*Bt+h*ce+g*fe+x*nr+Yt]=Pr}}}return e.makeTensorInfo(m.shape,m.dtype,m.values)}var WF={kernelName:dp,backendName:"cpu",kernelFunc:FJ};var OJ=kt(jo,r=>Math.cos(r)),UF={kernelName:jo,backendName:"cpu",kernelFunc:OJ};var PJ=kt(Xo,r=>Math.cosh(r)),HF={kernelName:Xo,backendName:"cpu",kernelFunc:PJ};function LJ(r){let{inputs:t,backend:e,attrs:n}=r,{image:o,boxes:s,boxInd:i}=t,{cropSize:a,method:u,extrapolationValue:l}=n,[c,p,m,f]=o.shape,d=s.shape[0],[h,g]=a,x=wt([d,h,g,f],"float32"),b=e.data.get(s.dataId).values,w=e.data.get(i.dataId).values,C=e.data.get(o.dataId).values,N=y.computeStrides(o.shape),_=y.computeStrides(x.shape);for(let A=0;A<d;A++){let $=A*4,F=b[$],P=b[$+1],V=b[$+2],G=b[$+3],W=w[A];if(W>=c)continue;let q=h>1?(V-F)*(p-1)/(h-1):0,H=g>1?(G-P)*(m-1)/(g-1):0;for(let j=0;j<h;j++){let Y=h>1?F*(p-1)+j*q:.5*(F+V)*(p-1);if(Y<0||Y>p-1){for(let Z=0;Z<g;Z++)for(let et=0;et<f;et++){let rt=et+Z*_[2]+j*_[1]+A*_[0];x.values[rt]=l}continue}if(u==="bilinear"){let Z=Math.floor(Y),et=Math.ceil(Y),rt=Y-Z;for(let ot=0;ot<g;ot++){let at=g>1?P*(m-1)+ot*H:.5*(P+G)*(m-1);if(at<0||at>m-1){for(let ht=0;ht<f;ht++){let bt=ht+ot*_[2]+j*_[1]+A*_[0];x.values[bt]=l}continue}let nt=Math.floor(at),it=Math.ceil(at),dt=at-nt;for(let ht=0;ht<f;ht++){let bt=ht+nt*N[2]+Z*N[1]+W*N[0],Tt=C[bt];bt=ht+it*N[2]+Z*N[1]+W*N[0];let _t=C[bt];bt=ht+nt*N[2]+et*N[1]+W*N[0];let Bt=C[bt];bt=ht+it*N[2]+et*N[1]+W*N[0];let Yt=C[bt],ce=Tt+(_t-Tt)*dt,he=Bt+(Yt-Bt)*dt;bt=ht+ot*_[2]+j*_[1]+A*_[0],x.values[bt]=ce+(he-ce)*rt}}}else for(let Z=0;Z<g;++Z){let et=g>1?P*(m-1)+Z*H:.5*(P+G)*(m-1);if(et<0||et>m-1){for(let at=0;at<f;at++){let nt=at+Z*_[2]+j*_[1]+A*_[0];x.values[nt]=l}continue}let rt=Math.round(et),ot=Math.round(Y);for(let at=0;at<f;at++){let nt=at+rt*N[2]+ot*N[1]+W*N[0],it=at+Z*_[2]+j*_[1]+A*_[0];x.values[it]=C[nt]}}}}return e.makeTensorInfo(x.shape,x.dtype,x.values)}var qF={kernelName:ma,backendName:"cpu",kernelFunc:LJ};function MJ(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{axis:s,exclusive:i,reverse:a}=n;tt(o,"cumprod");let u=S.getAxesPermutation([s],o.shape.length),l=o;u!=null&&(l=Be({inputs:{x:o},backend:e,attrs:{perm:u}}));let c=S.getInnerMostAxes(1,o.shape.length)[0];if(c!==l.shape.length-1)throw new Error(`backend.cumprod in CPU expects an inner-most axis=${l.shape.length-1} but got axis=${c}`);let p=or(l.dtype,"int32"),m=y.makeOnesTypedArray(y.sizeFromShape(l.shape),p),f=e.data.get(l.dataId).values,d=l.shape[l.shape.length-1],h=a?(x,b)=>x+d-b-1:(x,b)=>x+b;for(let x=0;x<f.length;x+=d)for(let b=0;b<d;b++){let w=h(x,b);if(b===0)m[w]=i?1:f[w];else{let C=h(x,b-1);m[w]=i?f[C]*m[C]:f[w]*m[C]}}let g=e.makeTensorInfo(l.shape,p,m);if(u!=null){let x=S.getUndoAxesPermutation(u),b=Be({inputs:{x:g},backend:e,attrs:{perm:x}});return e.disposeIntermediateTensorInfo(g),e.disposeIntermediateTensorInfo(l),b}return g}var KF={kernelName:pa,backendName:"cpu",kernelFunc:MJ};function zJ(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{axis:s,exclusive:i,reverse:a}=n;tt(o,"cumsum");let u=S.getAxesPermutation([s],o.shape.length),l=o;u!=null&&(l=Be({inputs:{x:o},backend:e,attrs:{perm:u}}));let c=S.getInnerMostAxes(1,o.shape.length)[0];if(c!==l.shape.length-1)throw new Error(`backend.cumsum in CPU expects an inner-most axis=${l.shape.length-1} but got axis=${c}`);let p=or(l.dtype,"int32"),m=y.makeZerosTypedArray(y.sizeFromShape(l.shape),p),f=e.data.get(l.dataId).values,d=l.shape[l.shape.length-1],h=a?(x,b)=>x+d-b-1:(x,b)=>x+b;for(let x=0;x<f.length;x+=d)for(let b=0;b<d;b++){let w=h(x,b);if(b===0)m[w]=i?0:f[w];else{let C=h(x,b-1);m[w]=i?f[C]+m[C]:f[w]+m[C]}}let g=e.makeTensorInfo(l.shape,p,m);if(u!=null){let x=S.getUndoAxesPermutation(u),b=Be({inputs:{x:g},backend:e,attrs:{perm:x}});return e.disposeIntermediateTensorInfo(g),e.disposeIntermediateTensorInfo(l),b}return g}var jF={kernelName:Yo,backendName:"cpu",kernelFunc:zJ};function BJ(r){let{inputs:t,backend:e,attrs:n}=r,{x:o,weights:s}=t,{size:i,binaryOutput:a}=n;if(o.shape.length===1){let u=e.data.get(o.dataId).values,l=e.data.get(s.dataId).values,c=rd(u,l,s.dtype,s.shape,i);return e.makeTensorInfo([i],s.dtype,c)}else if(o.shape.length===2){let u=e.bufferSync(o),l=e.bufferSync(s),c=Kb(u,l,i,a);return e.makeTensorInfo(c.shape,s.dtype,c.values)}throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank${o.shape.length}.`)}var XF={kernelName:hp,backendName:"cpu",kernelFunc:BJ};function VJ(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{blockSize:s,dataFormat:i}=n;y.assert(i==="NHWC",()=>`Only NHWC dataFormat supported on CPU for depthToSpace. Got ${i}`);let a=o.shape[0],u=o.shape[1],l=o.shape[2],c=o.shape[3],p=u*s,m=l*s,f=c/(s*s),d=e.data.get(o.dataId).values,h=new Float32Array(a*p*m*f),g=0;for(let x=0;x<a;++x)for(let b=0;b<p;++b){let w=Math.floor(b/s),C=b%s;for(let N=0;N<m;++N){let _=Math.floor(N/s),A=N%s,$=(C*s+A)*f;for(let F=0;F<f;++F){let V=F+$+c*(_+l*(w+u*x));h[g++]=d[V]}}}return e.makeTensorInfo([a,p,m,f],o.dtype,h)}var YF={kernelName:fa,backendName:"cpu",kernelFunc:VJ};function ck(r){let{inputs:t,backend:e,attrs:n}=r,{x:o,filter:s}=t,{strides:i,pad:a,dilations:u,dimRoundingMode:l}=n;tt([o,s],"depthwiseConv2DNative");let c=y.computeStrides(o.shape),p=y.computeStrides(s.shape),m=u;m==null&&(m=[1,1]),y.assert(S.eitherStridesOrDilationsAreOne(i,m),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${i} and dilations '${m}'`);let f=S.computeConv2DInfo(o.shape,s.shape,i,m,a,l,!0),{filterHeight:d,filterWidth:h,dilationHeight:g,dilationWidth:x,padInfo:b}=f,w=b.left,C=b.top,N=f.outChannels/f.inChannels,_=new pe(f.outShape,o.dtype),A=e.data.get(o.dataId).values,$=e.data.get(s.dataId).values,F=_.values;for(let P=0;P<f.batchSize;++P){let V=P*c[0],G=P*_.strides[0];for(let W=0;W<f.outHeight;++W){let q=G+W*_.strides[1],H=W*f.strideHeight-C;for(let j=0;j<d;++j){let Y=H+j*g;if(Y<0||Y>=f.inHeight)continue;let Z=j*p[0],et=V+Y*c[1];for(let rt=0;rt<f.outWidth;++rt){let ot=q+rt*_.strides[2],at=rt*f.strideWidth-w;for(let nt=0;nt<h;++nt){let it=at+nt*x;if(it<0||it>=f.inWidth)continue;let dt=Z+nt*p[1],ht=et+it*f.inChannels,bt=ot,Tt=dt;for(let _t=0;_t<f.inChannels;++_t){let Bt=A[ht+_t];for(let Yt=0;Yt<N;++Yt)F[bt+Yt]+=Bt*$[Tt+Yt];bt+=N,Tt+=N}}}}}}return e.makeTensorInfo(_.shape,_.dtype,_.values)}var ZF={kernelName:Zo,backendName:"cpu",kernelFunc:ck};function GJ(r){let{inputs:t,backend:e,attrs:n}=r,{x:o,dy:s}=t,{strides:i,dilations:a,pad:u,dimRoundingMode:l,filterShape:c}=n;tt([o,s],"depthwiseConv2dNativeBackpropFilter");let p=S.computeConv2DInfo(o.shape,c,i,a,u,l,!0),{strideHeight:m,strideWidth:f,filterHeight:d,filterWidth:h}=p,g=new pe(p.filterShape,"float32"),x=p.padInfo.left,b=p.padInfo.top,w=p.outChannels/p.inChannels,C=e.data.get(o.dataId).values,N=new pe(o.shape,o.dtype,C),_=e.data.get(s.dataId).values,A=new pe(s.shape,s.dtype,_);for(let $=0;$<d;++$){let F=Math.max(0,Math.ceil((b-$)/m)),P=Math.min(p.outHeight,(p.inHeight+b-$)/m);for(let V=0;V<h;++V){let G=Math.max(0,Math.ceil((x-V)/f)),W=Math.min(p.outWidth,(p.inWidth+x-V)/f);for(let q=0;q<p.outChannels;++q){let H=Math.trunc(q/w),j=q%w,Y=0;for(let Z=0;Z<p.batchSize;++Z)for(let et=F;et<P;++et){let rt=$+et*m-b;for(let ot=G;ot<W;++ot){let at=V+ot*f-x;Y+=N.get(Z,rt,at,H)*A.get(Z,et,ot,q)}}g.set(Y,$,V,H,j)}}}return e.makeTensorInfo(g.shape,g.dtype,g.values)}var JF={kernelName:gp,backendName:"cpu",kernelFunc:GJ};function WJ(r){let{inputs:t,backend:e,attrs:n}=r,{dy:o,filter:s}=t,{strides:i,dilations:a,pad:u,dimRoundingMode:l,inputShape:c}=n;tt([o,s],"depthwiseConv2DNativeBackpropInput");let p=y.computeStrides(o.shape),m=y.computeStrides(s.shape),f=S.computeConv2DInfo(c,s.shape,i,a,u,l,!0),d=new pe(f.inShape,"float32"),h=d.values,[g,x,b]=d.strides,w=e.data.get(o.dataId).values,[C,N,_]=p,A=e.data.get(s.dataId).values,[$,F,P]=m,{batchSize:V,filterHeight:G,filterWidth:W,inChannels:q,inHeight:H,inWidth:j,outChannels:Y,outHeight:Z,outWidth:et,strideHeight:rt,strideWidth:ot}=f,at=G-1-f.padInfo.top,nt=W-1-f.padInfo.left,it=Y/q;for(let dt=0;dt<V;++dt)for(let ht=0;ht<q;++ht)for(let bt=0;bt<H;++bt){let Tt=bt-at,_t=Math.max(0,Math.ceil(Tt/rt)),Bt=Math.min(Z,(G+Tt)/rt);for(let Yt=0;Yt<j;++Yt){let ce=Yt-nt,he=Math.max(0,Math.ceil(ce/ot)),Kt=Math.min(et,(W+ce)/ot),Te=0;for(let fe=_t;fe<Bt;++fe){let Ae=fe*rt-Tt;for(let Ge=he;Ge<Kt;++Ge){let En=Ge*ot-ce,nr=C*dt+N*fe+_*Ge,Wn=$*(G-1-Ae)+F*(W-1-En)+P*ht;for(let Or=0;Or<it;++Or){let qe=ht*it+Or,Pr=w[nr+qe],Lr=A[Wn+Or];Te+=Pr*Lr}}}h[g*dt+x*bt+b*Yt+ht]=Te}}return e.makeTensorInfo(d.shape,d.dtype,d.values)}var QF={kernelName:xp,backendName:"cpu",kernelFunc:WJ};function UJ(r){let{inputs:t,backend:e}=r,{x:n}=t,o=y.sizeFromShape(n.shape),s=e.data.get(n.dataId).values,i=wt([o,o],n.dtype),a=i.values;for(let l=0;l<s.length;l++)a[l*o+l]=s[l];let u=[...n.shape,...n.shape];return e.makeTensorInfo(u,i.dtype,i.values)}var tO={kernelName:yp,backendName:"cpu",kernelFunc:UJ};var eO={kernelName:_l,backendName:"cpu",kernelFunc:({inputs:r,backend:t,attrs:e})=>{let{x:n,filter:o}=r,{strides:s,pad:i,dilations:a}=e,u=t,l=u.data.get(n.dataId).values,c=n.shape.length,p=u.data.get(o.dataId).values,m=o.shape.length,{batchSize:f,inHeight:d,inWidth:h,inChannels:g,outHeight:x,outWidth:b,padInfo:w,strideHeight:C,strideWidth:N,filterHeight:_,filterWidth:A,dilationHeight:$,dilationWidth:F,outShape:P}=S.computeDilation2DInfo(n.shape,o.shape,s,i,"NHWC",a),V=y.sizeFromShape(P),G=P.length,W=y.getArrayFromDType(n.dtype,V);for(let H=0;H<f;++H)for(let j=0;j<x;++j){let Y=j*C-w.top;for(let Z=0;Z<b;++Z){let et=Z*N-w.left;for(let rt=0;rt<g;++rt){let ot=Number.MIN_SAFE_INTEGER;for(let nt=0;nt<_;++nt){let it=Y+nt*$;if(it>=0&&it<d)for(let dt=0;dt<A;++dt){let ht=et+dt*F;if(ht>=0&&ht<h){let bt=y.locToIndex([H,it,ht,rt],c,y.computeStrides(n.shape)),Tt=y.locToIndex([nt,dt,rt],m,y.computeStrides(o.shape)),_t=l[bt]+p[Tt];_t>ot&&(ot=_t)}}}let at=y.locToIndex([H,j,Z,rt],G,y.computeStrides(P));W[at]=ot}}}return{dataId:u.write(y.toTypedArray(W,n.dtype),P,n.dtype),shape:P,dtype:n.dtype}}};var rO={kernelName:Hd,backendName:"cpu",kernelFunc:({inputs:r,backend:t,attrs:e})=>{let{x:n,filter:o,dy:s}=r,{strides:i,pad:a,dilations:u}=e,l=t,c=y.toNestedArray(n.shape,l.data.get(n.dataId).values),p=y.toNestedArray(o.shape,l.data.get(o.dataId).values),{batchSize:m,inHeight:f,inWidth:d,inChannels:h,outHeight:g,outWidth:x,padInfo:b,strideHeight:w,strideWidth:C,filterHeight:N,filterWidth:_,dilationHeight:A,dilationWidth:$,outShape:F}=S.computeDilation2DInfo(n.shape,o.shape,i,a,"NHWC",u);y.assert(s.rank===F.length,()=>`Error in ${Hd}, dy must have the same rank as output ${F.length}, but got ${s.rank}`);let P=y.toNestedArray(F,l.data.get(s.dataId).values),V=y.makeZerosNestedTypedArray(o.shape,o.dtype);for(let W=0;W<m;++W)for(let q=0;q<g;++q){let H=q*w-b.top;for(let j=0;j<x;++j){let Y=j*C-b.left;for(let Z=0;Z<h;++Z){let et=Number.MIN_SAFE_INTEGER,rt=0,ot=0;for(let at=0;at<N;++at){let nt=H+at*A;if(nt>=0&&nt<f)for(let it=0;it<_;++it){let dt=Y+it*$;if(dt>=0&&dt<d){let ht=c[W][nt][dt][Z]+p[at][it][Z];ht>et&&(et=ht,rt=at,ot=it)}}}V[rt][ot][Z]+=P[W][q][j][Z]}}}return{dataId:l.write(y.toTypedArray(V,n.dtype),o.shape,o.dtype),shape:o.shape,dtype:o.dtype}}};var nO={kernelName:Ud,backendName:"cpu",kernelFunc:({inputs:r,backend:t,attrs:e})=>{let{x:n,filter:o,dy:s}=r,{strides:i,pad:a,dilations:u}=e,l=t,c=y.toNestedArray(n.shape,l.data.get(n.dataId).values),p=y.toNestedArray(o.shape,l.data.get(o.dataId).values),{batchSize:m,inHeight:f,inWidth:d,inChannels:h,outHeight:g,outWidth:x,padInfo:b,strideHeight:w,strideWidth:C,filterHeight:N,filterWidth:_,dilationHeight:A,dilationWidth:$,outShape:F}=S.computeDilation2DInfo(n.shape,o.shape,i,a,"NHWC",u);y.assert(s.rank===F.length,()=>`Error in ${Ud}, dy must have the same rank as output ${F.length}, but got ${s.rank}`);let P=y.toNestedArray(F,l.data.get(s.dataId).values),V=y.makeZerosNestedTypedArray(n.shape,n.dtype);for(let W=0;W<m;++W)for(let q=0;q<g;++q){let H=q*w-b.top;for(let j=0;j<x;++j){let Y=j*C-b.left;for(let Z=0;Z<h;++Z){let et=Number.MIN_SAFE_INTEGER,rt=H<0?0:H,ot=Y<0?0:Y;for(let at=0;at<N;++at){let nt=H+at*A;if(nt>=0&&nt<f)for(let it=0;it<_;++it){let dt=Y+it*$;if(dt>=0&&dt<d){let ht=c[W][nt][dt][Z]+p[at][it][Z];ht>et&&(et=ht,rt=nt,ot=dt)}}}V[W][rt][ot][Z]+=P[W][q][j][Z]}}}return{dataId:l.write(y.toTypedArray(V,n.dtype),n.shape,n.dtype),shape:n.shape,dtype:n.dtype}}};function fl(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{axis:s,keepDims:i}=n;tt(o,"sum");let a;o.dtype==="bool"?a=Ao({inputs:{x:o},backend:e,attrs:{dtype:"int32"}}):a=qr({inputs:{x:o},backend:e});let u=a.shape.length,l=y.parseAxisParam(s,a.shape),c=S.getAxesPermutation(l,u),p=l,m=a;c!=null&&(m=Be({inputs:{x:a},backend:e,attrs:{perm:c}}),p=S.getInnerMostAxes(p.length,u)),S.assertAxesAreInnerMostDims("sum",p,m.shape.length);let[f,d]=S.computeOutAndReduceShapes(m.shape,p),h=S.upcastType(m.dtype,"int32"),g=td(e,f,h),x=y.sizeFromShape(d),b=e.data.get(g.dataId).values,w=e.data.get(m.dataId).values;for(let C=0;C<b.length;++C){let N=C*x,_=0;for(let A=0;A<x;++A)_+=w[N+A];b[C]=_}if(i){let C=S.expandShapeToKeepDim(g.shape,l),N=g;g=Xt({inputs:{x:g},backend:e,attrs:{shape:C}}),e.disposeIntermediateTensorInfo(N)}return e.disposeIntermediateTensorInfo(a),c!=null&&e.disposeIntermediateTensorInfo(m),g}var oO={kernelName:As,backendName:"cpu",kernelFunc:fl};function HJ(r){let{inputs:t,backend:e,attrs:n}=r,{equation:o}=n,s=t,{allDims:i,summedDims:a,idDims:u}=S.decodeEinsumEquation(o,s.length);S.checkEinsumDimSizes(i.length,u,s);let{path:l,steps:c}=S.getEinsumComputePath(a,u),p=c.length,m=null,f=i.length,d=[];for(let h=0;h<p;++h){for(let g of c[h]){let{permutationIndices:x,expandDims:b}=S.getEinsumPermutation(f,u[g]),w;S.isIdentityPermutation(x)?w=s[g]:(w=Be({inputs:{x:s[g]},backend:e,attrs:{perm:x}}),d.push(w));let C=w.shape.slice();for(let N=0;N<b.length;++N)C.splice(b[N],0,1);y.arraysEqual(w.shape,C)||(w=Xt({inputs:{x:w},backend:e,attrs:{shape:C}}),d.push(w)),m===null?m=w:(m=_c({inputs:{a:w,b:m},backend:e}),d.push(m))}h<p-1&&(l[h]>=0&&(m=fl({inputs:{x:m},backend:e,attrs:{axis:l[h]-(i.length-f),keepDims:!1}}),d.push(m)),f--)}for(let h of d)h!==m&&e.disposeIntermediateTensorInfo(h);return m}var sO={kernelName:bp,backendName:"cpu",kernelFunc:HJ};function qJ(r){let{inputs:t,backend:e}=r,{dy:n,y:o}=t;tt([n,o],"eluGrad");let s=new Float32Array(y.sizeFromShape(o.shape)),i=e.data.get(o.dataId).values,a=e.data.get(n.dataId).values;for(let u=0;u<i.length;++u){let l=i[u];l>=1?s[u]=a[u]:s[u]=a[u]*(l+1)}return e.makeTensorInfo(o.shape,"float32",s)}var iO={kernelName:wp,backendName:"cpu",kernelFunc:qJ};var KJ=S.ERF_P,jJ=S.ERF_A1,XJ=S.ERF_A2,YJ=S.ERF_A3,ZJ=S.ERF_A4,JJ=S.ERF_A5,QJ=kt(da,r=>{let t=Math.sign(r),e=Math.abs(r),n=1/(1+KJ*e);return t*(1-((((JJ*n+ZJ)*n+YJ)*n+XJ)*n+jJ)*n*Math.exp(-e*e))}),aO={kernelName:da,backendName:"cpu",kernelFunc:QJ};function ad(r){let{inputs:t,backend:e,attrs:n}=r,{input:o}=t,{dim:s}=n,i=o.shape.length,a=o.shape.slice(),u=s;return s<0&&(y.assert(-(i+1)<=s,()=>`Axis must be in the interval [${-(i+1)}, ${i}]`),u=i+s+1),a.splice(u,0,1),Xt({inputs:{x:o},backend:e,attrs:{shape:a}})}var lO={kernelName:ai,backendName:"cpu",kernelFunc:ad};var tQ=Qt((r,t)=>r/t),Mh=oe(Jo,tQ),zh={kernelName:Jo,backendName:"cpu",kernelFunc:Mh};function uw(r,t,e){let n=r.shape,o=n[0],s=n[1],i=e.data.get(r.dataId),a=i.complexTensorInfos.real,u=i.complexTensorInfos.imag,l=[o,s],c=y.sizeFromShape(l),p=y.getTypedArrayFromDType("float32",c),m=y.getTypedArrayFromDType("float32",c);for(let g=0;g<o;g++){let x=Ro({inputs:{x:a},backend:e,attrs:{begin:[g,0],size:[1,s]}}),b=Ro({inputs:{x:u},backend:e,attrs:{begin:[g,0],size:[1,s]}}),w=br({inputs:{real:x,imag:b},backend:e}),{real:C,imag:N}=eQ(w,t,e),_=S.mergeRealAndImagArrays(C,N);for(let A=0;A<s;A++){let $=S.getComplexWithIndex(_,A);p[g*s+A]=$.real,m[g*s+A]=$.imag}e.disposeIntermediateTensorInfo(x),e.disposeIntermediateTensorInfo(b),e.disposeIntermediateTensorInfo(w)}let f=e.makeTensorInfo(l,"float32",p),d=e.makeTensorInfo(l,"float32",m),h=br({inputs:{real:f,imag:d},backend:e});return e.disposeIntermediateTensorInfo(f),e.disposeIntermediateTensorInfo(d),h}function eQ(r,t,e){let n=y.sizeFromShape(r.shape),o=e.data.get(r.dataId),s=e.data.get(o.complexTensorInfos.real.dataId).values,i=e.data.get(o.complexTensorInfos.imag.dataId).values;if(rQ(n)){let a=pk(s,i,n,t,e),u=[r.shape[0],r.shape[1]];if(t){let l=e.makeTensorInfo(u,"float32",a.real),c=e.makeTensorInfo(u,"float32",a.imag),p=e.makeTensorInfo([],"float32",y.createScalarValue(n,"float32")),m=qr({inputs:{x:p},backend:e}),f=zh.kernelFunc({inputs:{a:l,b:p},backend:e}),d=zh.kernelFunc({inputs:{a:c,b:m},backend:e}),h=e.data.get(f.dataId).values,g=e.data.get(d.dataId).values;return e.disposeIntermediateTensorInfo(l),e.disposeIntermediateTensorInfo(c),e.disposeIntermediateTensorInfo(p),e.disposeIntermediateTensorInfo(m),e.disposeIntermediateTensorInfo(f),e.disposeIntermediateTensorInfo(d),{real:h,imag:g}}return a}else{let a=S.mergeRealAndImagArrays(s,i),u=nQ(a,n,t);return S.splitRealAndImagArrays(u)}}function rQ(r){return(r&r-1)===0}function pk(r,t,e,n,o){if(e===1)return{real:r,imag:t};let s=S.mergeRealAndImagArrays(r,t),i=e/2,a=S.complexWithEvenIndex(s),u=a.real,l=a.imag,c=[u.length],p=o.makeTensorInfo(c,"float32",u),m=o.makeTensorInfo(c,"float32",l),f=br({inputs:{real:p,imag:m},backend:o}),d=S.complexWithOddIndex(s),h=d.real,g=d.imag,x=[h.length],b=o.makeTensorInfo(x,"float32",h),w=o.makeTensorInfo(x,"float32",g),C=br({inputs:{real:b,imag:w},backend:o}),N=pk(u,l,i,n,o),_=N.real,A=N.imag,$=[_.length],F=o.makeTensorInfo($,"float32",_),P=o.makeTensorInfo($,"float32",A),V=br({inputs:{real:F,imag:P},backend:o}),G=pk(h,g,i,n,o),W=G.real,q=G.imag,H=[W.length],j=o.makeTensorInfo(H,"float32",W),Y=o.makeTensorInfo(H,"float32",q),Z=br({inputs:{real:j,imag:Y},backend:o}),et=S.exponents(e,n),rt=[et.real.length],ot=o.makeTensorInfo(rt,"float32",et.real),at=o.makeTensorInfo(rt,"float32",et.imag),nt=br({inputs:{real:ot,imag:at},backend:o}),it=_c({inputs:{a:nt,b:Z},backend:o}),dt=Hi({inputs:{a:V,b:it},backend:o}),ht=Ph({inputs:{a:V,b:it},backend:o}),bt=_o({inputs:{input:dt},backend:o}),Tt=_o({inputs:{input:ht},backend:o}),_t=qi({inputs:{input:dt},backend:o}),Bt=qi({inputs:{input:ht},backend:o}),Yt=Nu({inputs:[bt,Tt],backend:o,attrs:{axis:0}}),ce=Nu({inputs:[_t,Bt],backend:o,attrs:{axis:0}}),he=o.data.get(Yt.dataId).values,Kt=o.data.get(ce.dataId).values;return o.disposeIntermediateTensorInfo(p),o.disposeIntermediateTensorInfo(m),o.disposeIntermediateTensorInfo(f),o.disposeIntermediateTensorInfo(b),o.disposeIntermediateTensorInfo(w),o.disposeIntermediateTensorInfo(C),o.disposeIntermediateTensorInfo(F),o.disposeIntermediateTensorInfo(P),o.disposeIntermediateTensorInfo(V),o.disposeIntermediateTensorInfo(j),o.disposeIntermediateTensorInfo(Y),o.disposeIntermediateTensorInfo(Z),o.disposeIntermediateTensorInfo(ot),o.disposeIntermediateTensorInfo(at),o.disposeIntermediateTensorInfo(nt),o.disposeIntermediateTensorInfo(it),o.disposeIntermediateTensorInfo(dt),o.disposeIntermediateTensorInfo(ht),o.disposeIntermediateTensorInfo(bt),o.disposeIntermediateTensorInfo(_t),o.disposeIntermediateTensorInfo(Tt),o.disposeIntermediateTensorInfo(Bt),o.disposeIntermediateTensorInfo(Yt),o.disposeIntermediateTensorInfo(ce),{real:he,imag:Kt}}function nQ(r,t,e){let n=new Float32Array(t*2);for(let o=0;o<t;o++){let s=0,i=0;for(let a=0;a<t;a++){let u=S.exponent(o*a,t,e),l=S.getComplexWithIndex(r,a);s+=l.real*u.real-l.imag*u.imag,i+=l.real*u.imag+l.imag*u.real}e&&(s/=t,i/=t),S.assignToTypedArray(n,s,i,o)}return n}function oQ(r){let{inputs:t,backend:e}=r,{input:n}=t,o=y.sizeFromShape(n.shape),s=n.shape[n.shape.length-1],i=o/s,a=Xt({inputs:{x:n},backend:e,attrs:{shape:[i,s]}}),u=uw(a,!1,e),l=Xt({inputs:{x:u},backend:e,attrs:{shape:n.shape}});return e.disposeIntermediateTensorInfo(a),e.disposeIntermediateTensorInfo(u),l}var uO={kernelName:Cp,backendName:"cpu",kernelFunc:oQ};function Bh(r){let{backend:t,attrs:e}=r,{shape:n,value:o,dtype:s}=e,i=s||y.inferDtype(o),a=y.getArrayFromDType(i,y.sizeFromShape(n));return sQ(a,o,i),t.makeTensorInfo(n,i,a)}var cO={kernelName:Al,backendName:"cpu",kernelFunc:Bh};function sQ(r,t,e){r.fill(t)}var pO={kernelName:xa,backendName:"cpu",kernelFunc:({inputs:r,attrs:t,backend:e})=>{let{image:n}=r,o=e,s=y.getTypedArrayFromDType(n.dtype,y.sizeFromShape(n.shape)),[i,a,u,l]=n.shape,c=o.data.get(n.dataId).values;for(let m=0;m<i;m++){let f=m*u*a*l;for(let d=0;d<a;d++){let h=d*(u*l);for(let g=0;g<u;g++){let x=g*l;for(let b=0;b<l;b++){let w=Math.round(u-g-1),C=f+h+x+b,N=c[C];if(w>=0&&w<u){let _=w*l,A=f+h+_+b;N=c[A]}s[C]=N}}}}return{dataId:o.write(s,n.shape,n.dtype),shape:n.shape,dtype:n.dtype}}};var iQ=Qt((r,t)=>Math.floor(r/t)),aQ=oe(rs,iQ,null,"int32"),mO={kernelName:rs,backendName:"cpu",kernelFunc:aQ};function lQ(r){let{inputs:t,backend:e,attrs:n}=r,{x:o,filter:s,bias:i,preluActivationWeights:a}=t,{strides:u,pad:l,dataFormat:c,dilations:p,dimRoundingMode:m,activation:f,leakyreluAlpha:d}=n,h=uk({inputs:{x:o,filter:s},backend:e,attrs:{strides:u,pad:l,dataFormat:c,dilations:p,dimRoundingMode:m}});if(i){let g=h;if(c==="NCHW"&&i.shape.length===1&&i.shape[0]!==1){let x=Xt({inputs:{x:i},backend:e,attrs:{shape:[i.shape[0],1,1]}});h=Hi({inputs:{a:h,b:x},backend:e}),e.disposeIntermediateTensorInfo(x)}else h=Hi({inputs:{a:h,b:i},backend:e});e.disposeIntermediateTensorInfo(g)}if(f){let g=h;if(c==="NCHW"&&f==="prelu"&&a.shape.length===1&&a.shape[0]!==1){let x=Xt({inputs:{x:a},backend:e,attrs:{shape:[a.shape[0],1,1]}});h=Oc(e,h,f,x,d),e.disposeIntermediateTensorInfo(x)}else h=Oc(e,h,f,a,d);e.disposeIntermediateTensorInfo(g)}return h}var fO={kernelName:wi,backendName:"cpu",kernelFunc:lQ};function uQ(r){let{inputs:t,backend:e,attrs:n}=r,{x:o,filter:s,bias:i,preluActivationWeights:a}=t,{strides:u,pad:l,dataFormat:c,dilations:p,dimRoundingMode:m,activation:f,leakyreluAlpha:d}=n,h=ck({inputs:{x:o,filter:s},backend:e,attrs:{strides:u,pad:l,dataFormat:c,dilations:p,dimRoundingMode:m}});if(i){let g=h;h=Hi({inputs:{a:h,b:i},backend:e}),e.disposeIntermediateTensorInfo(g)}if(f){let g=h;h=Oc(e,h,f,a,d),e.disposeIntermediateTensorInfo(g)}return h}var dO={kernelName:Ci,backendName:"cpu",kernelFunc:uQ};function cQ(r){let{inputs:t,backend:e}=r,{params:n,indices:o}=t,s=y.sizeFromShape(n.shape),i=o.shape,a=i[i.length-1],[u,l,c,p]=S.prepareAndValidate(n,o);if(l===0)return e.makeTensorInfo(u,n.dtype,[]);let m=e.data.get(o.dataId).values,f=e.bufferSync(n),d=jb(m,f,n.dtype,l,a,c,p,n.shape,s);return e.makeTensorInfo(u,n.dtype,d.values)}var hO={kernelName:ya,backendName:"cpu",kernelFunc:cQ};function pQ(r){let{inputs:t,backend:e,attrs:n}=r,{x:o,indices:s}=t,{axis:i,batchDims:a}=n;tt([o,s],"gatherV2");let u=y.parseAxisParam(i,o.shape)[0],l=e.data.get(s.dataId).values,c=o.shape[u];for(let C=0;C<l.length;++C){let N=l[C];y.assert(N<=c-1&&N>=0,()=>`GatherV2: the index value ${N} is not in [0, ${c-1}]`)}let p=a;a==null&&(p=0);let m=y.sizeFromShape(s.shape),f=S.segment_util.collectGatherOpShapeInfo(o,s,u,p),d=Xt({inputs:{x:o},backend:e,attrs:{shape:[f.batchSize,f.outerSize,f.dimSize,f.sliceSize]}}),h=Xt({inputs:{x:s},backend:e,attrs:{shape:[f.batchSize,m/f.batchSize]}}),g=[f.batchSize,f.outerSize,m/f.batchSize,f.sliceSize],x=e.bufferSync(h),b=e.bufferSync(d),w=Xb(b,x,g);return e.disposeIntermediateTensorInfo(d),e.disposeIntermediateTensorInfo(h),e.makeTensorInfo(f.outputShape,w.dtype,w.values)}var gO={kernelName:li,backendName:"cpu",kernelFunc:pQ};function mQ(r){let{inputs:t,backend:e}=r,{input:n}=t,o=y.sizeFromShape(n.shape),s=n.shape[n.shape.length-1],i=o/s,a=Xt({inputs:{x:n},backend:e,attrs:{shape:[i,s]}}),u=uw(a,!0,e),l=Xt({inputs:{x:u},backend:e,attrs:{shape:n.shape}});return e.disposeIntermediateTensorInfo(a),e.disposeIntermediateTensorInfo(u),l}var xO={kernelName:Ip,backendName:"cpu",kernelFunc:mQ};var fQ=kt(wa,r=>Number.isFinite(r)?1:0,"bool"),yO={kernelName:wa,backendName:"cpu",kernelFunc:fQ};var dQ=kt(Ca,r=>Math.abs(r)===1/0?1:0,"bool"),bO={kernelName:Ca,backendName:"cpu",kernelFunc:dQ};var hQ=kt(Ia,r=>Number.isNaN(r)?1:0,"bool"),wO={kernelName:Ia,backendName:"cpu",kernelFunc:hQ};function gQ(r){let{backend:t,attrs:e}=r,{start:n,stop:o,num:s}=e,i=Yb(n,o,s);return t.makeTensorInfo([i.length],"float32",i)}var CO={kernelName:Sp,backendName:"cpu",kernelFunc:gQ};var xQ=kt(Na,r=>Math.log1p(r)),IO={kernelName:Na,backendName:"cpu",kernelFunc:xQ};var yQ=Qt((r,t)=>r&&t),bQ=oe(ka,yQ,null,"bool"),vO={kernelName:ka,backendName:"cpu",kernelFunc:bQ};var wQ=kt(Ta,r=>r?0:1,"bool"),SO={kernelName:Ta,backendName:"cpu",kernelFunc:wQ};var CQ=Qt((r,t)=>r||t),IQ=oe(Ea,CQ,null,"bool"),NO={kernelName:Ea,backendName:"cpu",kernelFunc:IQ};function vQ(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{depthRadius:s,bias:i,alpha:a,beta:u}=n;tt(o,"LRN");let l=o.shape[3],c=l-1,p=e.data.get(o.dataId).values,m=y.sizeFromShape(o.shape),f=new Float32Array(m);function d(h){let g=h%l,x=h-g+Math.max(0,g-s),b=h-g+Math.min(g+s,c),w=0;for(;x<=b;x++){let C=p[x];w+=C*C}return w}for(let h=0;h<m;h++){let g=d(h),x=p[h]*Math.pow(i+a*g,-u);f[h]=x}return e.makeTensorInfo(o.shape,o.dtype,f)}var kO={kernelName:$l,backendName:"cpu",kernelFunc:vQ};function SQ(r){let{inputs:t,backend:e,attrs:n}=r,{x:o,y:s,dy:i}=t,{depthRadius:a,bias:u,alpha:l,beta:c}=n;tt(i,"LRNGrad");let p=y.sizeFromShape(i.shape),m=i.shape[3],f=e.data.get(i.dataId).values,d=e.data.get(o.dataId).values,h=e.data.get(s.dataId).values,g=new Float32Array(p),x=p;for(let b=0;b<x;b++){let w=b%m,C=b-w+Math.max(0,w-a),N=b-w+Math.min(m,w+a+1),_=0;for(let A=C;A<N;A++)_+=Math.pow(d[A],2);_=l*_+u;for(let A=C;A<N;A++){let $=-2*l*c*d[A]*h[b]/_;b===A&&($+=Math.pow(_,-c)),$*=f[b],g[A]+=$}}return e.makeTensorInfo(i.shape,o.dtype,g)}var TO={kernelName:Np,backendName:"cpu",kernelFunc:SQ};function mk(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{reductionIndices:s,keepDims:i}=n,a=e,u=o.shape,l=u.length,c=y.parseAxisParam(s,u),p=c,m=S.getAxesPermutation(p,l),f=a.data.get(o.dataId).values;if(m!=null){let C=new Array(l);for(let N=0;N<C.length;N++)C[N]=u[m[N]];f=nd(f,u,o.dtype,m,C),p=S.getInnerMostAxes(p.length,l),u=C}tt(o,"max"),S.assertAxesAreInnerMostDims("max",p,l);let[d,h]=S.computeOutAndReduceShapes(u,p),g=y.sizeFromShape(h),x=Zb(f,g,d,o.dtype),b=a.write(x,d,o.dtype),w=d;return i&&(w=S.expandShapeToKeepDim(d,c)),{dataId:b,shape:w,dtype:o.dtype}}var EO={kernelName:as,backendName:"cpu",kernelFunc:mk};function NQ(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t;tt(o,"maxPool");let{filterSize:s,strides:i,pad:a,dimRoundingMode:u}=n,l=1;y.assert(S.eitherStridesOrDilationsAreOne(i,l),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${l}'`);let c=S.computePool2DInfo(o.shape,s,i,l,a,u),p;if(c.filterWidth===1&&c.filterHeight===1&&y.arraysEqual(c.inShape,c.outShape))p=qr({inputs:{x:o},backend:e});else{let m=e.data.get(o.dataId).values,f=y.computeStrides(o.shape),d=id(m,o.shape,o.dtype,f,c,"max");p=e.makeTensorInfo(c.outShape,o.dtype,d.values)}return p}var _O={kernelName:us,backendName:"cpu",kernelFunc:NQ};function kQ(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{filterSize:s,strides:i,pad:a,dimRoundingMode:u,dataFormat:l}=n;tt(o,"maxPool3d");let c=S.computePool3DInfo(o.shape,s,i,1,a,u,l),p=e.data.get(o.dataId).values,m=lw(p,o.shape,o.dtype,y.computeStrides(o.shape),c,"max");return e.makeTensorInfo(m.shape,"float32",m.values)}var AO={kernelName:Dl,backendName:"cpu",kernelFunc:kQ};function TQ(r){let{inputs:t,backend:e,attrs:n}=r,{dy:o,input:s}=t,{filterSize:i,strides:a,pad:u,dimRoundingMode:l}=n;tt([o,s],"maxPool3DGrad");let c=S.computePool3DInfo(s.shape,i,a,1,u,l),p=e.bufferSync(s),m=NF(p,c),f=c.strideDepth,d=c.strideHeight,h=c.strideWidth,g=c.dilationDepth,x=c.dilationHeight,b=c.dilationWidth,w=c.effectiveFilterDepth,C=c.effectiveFilterHeight,N=c.effectiveFilterWidth,_=w-1-c.padInfo.front,A=N-1-c.padInfo.left,$=C-1-c.padInfo.top,F=wt(s.shape,"float32"),P=e.bufferSync(o);for(let V=0;V<c.batchSize;++V)for(let G=0;G<c.inChannels;++G)for(let W=0;W<c.inDepth;++W)for(let q=0;q<c.inHeight;++q)for(let H=0;H<c.inWidth;++H){let j=W-_,Y=q-$,Z=H-A,et=0;for(let rt=0;rt<w;rt+=g){let ot=(j+rt)/f;if(!(ot<0||ot>=c.outDepth||Math.floor(ot)!==ot))for(let at=0;at<C;at+=x){let nt=(Y+at)/d;if(!(nt<0||nt>=c.outHeight||Math.floor(nt)!==nt))for(let it=0;it<N;it+=b){let dt=(Z+it)/h;if(dt<0||dt>=c.outWidth||Math.floor(dt)!==dt)continue;let ht=w*C*N-1-m.get(V,ot,nt,dt,G),bt=rt*C*N+at*N+it,Tt=ht===bt?1:0;if(Tt===0)continue;et+=P.get(V,ot,nt,dt,G)*Tt}}}F.set(et,V,W,q,H,G)}return e.makeTensorInfo(F.shape,F.dtype,F.values)}var $O={kernelName:Tp,backendName:"cpu",kernelFunc:TQ};function EQ(r){let{inputs:t,backend:e,attrs:n}=r,{dy:o,input:s,output:i}=t,a=s;tt([s,i],"maxPoolGrad");let{filterSize:u,strides:l,pad:c,dimRoundingMode:p}=n,m=S.computePool2DInfo(a.shape,u,l,1,c,p),f=e.data.get(a.dataId).values,d=wt(m.outShape,a.dtype,aw(f,a.shape,a.dtype,m).values),h=m.strideHeight,g=m.strideWidth,x=m.dilationHeight,b=m.dilationWidth,w=m.effectiveFilterHeight,C=m.effectiveFilterWidth,N=C-1-m.padInfo.left,_=w-1-m.padInfo.top,A=wt(a.shape,"float32"),$=e.data.get(o.dataId).values,F=wt(o.shape,"float32",$);for(let P=0;P<m.batchSize;++P)for(let V=0;V<m.inChannels;++V)for(let G=0;G<m.inHeight;++G)for(let W=0;W<m.inWidth;++W){let q=G-_,H=W-N,j=0;for(let Y=0;Y<w;Y+=x){let Z=(q+Y)/h;if(!(Z<0||Z>=m.outHeight||Math.floor(Z)!==Z))for(let et=0;et<C;et+=b){let rt=(H+et)/g;if(rt<0||rt>=m.outWidth||Math.floor(rt)!==rt)continue;let ot=w*C-1-d.get(P,Z,rt,V),at=Y*C+et,nt=ot===at?1:0;if(nt===0)continue;j+=F.get(P,Z,rt,V)*nt}}A.set(j,P,G,W,V)}return e.makeTensorInfo(A.shape,A.dtype,A.values)}var DO={kernelName:kp,backendName:"cpu",kernelFunc:EQ};function RO(r,t,e,n,o){let s=y.computeStrides(t),i=id(r,t,e,s,o,"max"),a=aw(r,t,e,o,!0,n);return[i.values,a.values]}var FO={kernelName:Ep,backendName:"cpu",kernelFunc:({inputs:r,attrs:t,backend:e})=>{let{x:n}=r,{filterSize:o,strides:s,pad:i,includeBatchInIndex:a}=t,u=e;tt(n,"MaxPoolWithArgmax");let l=u.data.get(n.dataId).values,c=S.computePool2DInfo(n.shape,o,s,[1,1],i),[p,m]=RO(l,n.shape,n.dtype,a,c),f=u.write(p,c.outShape,n.dtype),d=u.write(m,c.outShape,n.dtype);return[{dataId:f,shape:c.outShape,dtype:n.dtype},{dataId:d,shape:c.outShape,dtype:"int32"}]}};function _Q(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{axis:s,keepDims:i}=n,a=y.parseAxisParam(s,o.shape),l=S.computeOutAndReduceShapes(o.shape,a)[1],c=y.sizeFromShape(l),p=[],m=e.makeTensorInfo([],"float32",new Float32Array([c]));p.push(m);let f=Ao({inputs:{x:o},backend:e,attrs:{dtype:"float32"}});p.push(f);let d=Mh({inputs:{a:f,b:m},backend:e});p.push(d);let h=fl({inputs:{x:d},backend:e,attrs:{axis:s,keepDims:i}});return p.forEach(g=>e.disposeIntermediateTensorInfo(g)),h}var OO={kernelName:cs,backendName:"cpu",kernelFunc:_Q};function AQ(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{axis:s,keepDims:i}=n;tt(o,"min");let a=y.parseAxisParam(s,o.shape),u=a,l=S.getAxesPermutation(u,o.shape.length),c=o;l!=null&&(c=Be({inputs:{x:o},backend:e,attrs:{perm:l}}),u=S.getInnerMostAxes(u.length,o.shape.length)),S.assertAxesAreInnerMostDims("min",u,c.shape.length);let[p,m]=S.computeOutAndReduceShapes(c.shape,u),f=y.sizeFromShape(m),d=y.makeZerosTypedArray(y.sizeFromShape(p),c.dtype),h=e.data.get(c.dataId).values;for(let x=0;x<d.length;++x){let b=x*f,w=h[b];for(let C=0;C<f;++C){let N=h[b+C];(Number.isNaN(N)||N<w)&&(w=N)}d[x]=w}l!=null&&e.disposeIntermediateTensorInfo(c);let g=e.makeTensorInfo(p,c.dtype,d);if(i){let x=S.expandShapeToKeepDim(p,a),b=Xt({inputs:{x:g},backend:e,attrs:{shape:x}});return e.disposeIntermediateTensorInfo(g),b}return g}var PO={kernelName:ps,backendName:"cpu",kernelFunc:AQ};function $Q(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{paddings:s,mode:i}=n;tt(o,"mirrorPad");let a=s.map((w,C)=>w[0]+o.shape[C]+w[1]),u=s.map(w=>w[0]),l=s.map((w,C)=>w[0]+o.shape[C]),c=i==="reflect"?0:1,p=e.data.get(o.dataId).values,m=o.shape.length,f=y.computeStrides(o.shape),d=y.sizeFromShape(a),h=a.length,g=y.computeStrides(a),x=y.getTypedArrayFromDType(o.dtype,d);for(let w=0;w<d;w++){let C=y.indexToLoc(w,h,g);for(let _=0;_<h;_++)C[_]<u[_]?C[_]=u[_]*2-C[_]-c:C[_]>=l[_]&&(C[_]=(l[_]-1)*2-C[_]+c);C=C.map((_,A)=>_-u[A]);let N=y.locToIndex(C,m,f);x[w]=p[N]}return{dataId:e.write(x,a,o.dtype),shape:a,dtype:o.dtype}}var LO={kernelName:fs,backendName:"cpu",kernelFunc:$Q};var DQ=Qt((r,t)=>{let e=r%t;return r<0&&t<0||r>=0&&t>=0?e:(e+t)%t}),RQ=oe(_a,DQ),MO={kernelName:_a,backendName:"cpu",kernelFunc:RQ};var BO=Sl(lh());function fk(r){let{inputs:t,backend:e,attrs:n}=r,{logits:o}=t,{dim:s}=n,i=o.shape.length,a=s;if(a===-1&&(a=i-1),a!==i-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${i} and dim was ${a}`);let u=y.parseAxisParam([a],o.shape),l=mk({inputs:{x:o},backend:e,attrs:{reductionIndices:u,keepDims:!1}}),c=S.expandShapeToKeepDim(l.shape,u),p=Xt({inputs:{x:l},backend:e,attrs:{shape:c}}),m=Ph({inputs:{a:o,b:p},backend:e}),f=zN({inputs:{x:m},backend:e}),d=fl({inputs:{x:f},backend:e,attrs:{axis:u,keepDims:!1}}),h=Xt({inputs:{x:d},backend:e,attrs:{shape:c}}),g=Mh({inputs:{a:f,b:h},backend:e});return e.disposeIntermediateTensorInfo(l),e.disposeIntermediateTensorInfo(p),e.disposeIntermediateTensorInfo(m),e.disposeIntermediateTensorInfo(f),e.disposeIntermediateTensorInfo(d),e.disposeIntermediateTensorInfo(h),g}var zO={kernelName:$s,backendName:"cpu",kernelFunc:fk};function FQ(r){let{inputs:t,backend:e,attrs:n}=r,{logits:o}=t,{numSamples:s,seed:i,normalized:a}=n;tt(o,"multinomial");let u=a?o:fk({inputs:{logits:o},backend:e,attrs:{dim:-1}}),l=u.shape[0],c=u.shape[1],p=e.data.get(u.dataId).values,m=[l,s],f=y.makeZerosTypedArray(y.sizeFromShape(m),"int32");for(let d=0;d<l;++d){let h=d*c,g=new Float32Array(c-1);g[0]=p[h];for(let w=1;w<g.length;++w)g[w]=g[w-1]+p[h+w];let x=BO.alea(i.toString()),b=d*s;for(let w=0;w<s;++w){let C=x();f[b+w]=g.length;for(let N=0;N<g.length;N++)if(C<g[N]){f[b+w]=N;break}}}return a||e.disposeIntermediateTensorInfo(u),e.makeTensorInfo(m,"int32",f)}var VO={kernelName:_p,backendName:"cpu",kernelFunc:FQ};var OQ=Wr.nonMaxSuppressionV3Impl;function PQ(r){let{inputs:t,backend:e,attrs:n}=r,{boxes:o,scores:s}=t,{maxOutputSize:i,iouThreshold:a,scoreThreshold:u}=n;tt(o,"NonMaxSuppression");let l=e.data.get(o.dataId).values,c=e.data.get(s.dataId).values,{selectedIndices:p}=OQ(l,c,i,a,u);return e.makeTensorInfo([p.length],"int32",new Int32Array(p))}var GO={kernelName:$a,backendName:"cpu",kernelFunc:PQ};var LQ=Wr.nonMaxSuppressionV4Impl;function MQ(r){let{inputs:t,backend:e,attrs:n}=r,{boxes:o,scores:s}=t,{maxOutputSize:i,iouThreshold:a,scoreThreshold:u,padToMaxOutputSize:l}=n;tt(o,"NonMaxSuppressionPadded");let c=e.data.get(o.dataId).values,p=e.data.get(s.dataId).values,{selectedIndices:m,validOutputs:f}=LQ(c,p,i,a,u,l);return[e.makeTensorInfo([m.length],"int32",new Int32Array(m)),e.makeTensorInfo([],"int32",new Int32Array([f]))]}var WO={kernelName:Da,backendName:"cpu",kernelFunc:MQ};var zQ=Wr.nonMaxSuppressionV5Impl;function BQ(r){let{inputs:t,backend:e,attrs:n}=r,{boxes:o,scores:s}=t,{maxOutputSize:i,iouThreshold:a,scoreThreshold:u,softNmsSigma:l}=n;tt(o,"NonMaxSuppressionWithScore");let c=e.data.get(o.dataId).values,p=e.data.get(s.dataId).values,m=i,f=a,d=u,h=l,{selectedIndices:g,selectedScores:x}=zQ(c,p,m,f,d,h);return[e.makeTensorInfo([g.length],"int32",new Int32Array(g)),e.makeTensorInfo([x.length],"float32",new Float32Array(x))]}var UO={kernelName:Ra,backendName:"cpu",kernelFunc:BQ};function VQ(r){let{inputs:t,backend:e,attrs:n}=r,{indices:o}=t,{dtype:s,depth:i,onValue:a,offValue:u}=n;tt(o,"oneHot");let l=y.sizeFromShape(o.shape),c=new Float32Array(l*i);c.fill(u);let p=e.data.get(o.dataId).values;for(let m=0;m<l;++m)p[m]>=0&&p[m]<i&&(c[m*i+p[m]]=a);return e.makeTensorInfo([...o.shape,i],s,c)}var HO={kernelName:hs,backendName:"cpu",kernelFunc:VQ};function Vh(r){let{inputs:t,backend:e}=r,{x:n}=t;if(n.dtype==="string")throw new Error("zerosLike is not supported for string tensors");if(n.dtype==="complex64"){let o=_o({inputs:{input:n},backend:e}),s=Vh({inputs:{x:o},backend:e}),i=qi({inputs:{input:n},backend:e}),a=Vh({inputs:{x:i},backend:e}),u=br({inputs:{real:s,imag:a},backend:e});return e.disposeIntermediateTensorInfo(o),e.disposeIntermediateTensorInfo(s),e.disposeIntermediateTensorInfo(i),e.disposeIntermediateTensorInfo(a),u}else return Bh({backend:e,attrs:{shape:n.shape,value:0,dtype:n.dtype}})}var qO={kernelName:yi,backendName:"cpu",kernelFunc:Vh};function KO(r){let{inputs:t,backend:e}=r,{x:n}=t;if(n.dtype==="string")throw new Error("onesLike is not supported for string tensors");if(n.dtype==="complex64"){let o=_o({inputs:{input:n},backend:e}),s=KO({inputs:{x:o},backend:e}),i=qi({inputs:{input:n},backend:e}),a=Vh({inputs:{x:i},backend:e}),u=br({inputs:{real:s,imag:a},backend:e});return e.disposeIntermediateTensorInfo(o),e.disposeIntermediateTensorInfo(s),e.disposeIntermediateTensorInfo(i),e.disposeIntermediateTensorInfo(a),u}else return Bh({backend:e,attrs:{shape:n.shape,value:1,dtype:n.dtype}})}var jO={kernelName:ci,backendName:"cpu",kernelFunc:KO};function dk(r){let{inputs:t,backend:e,attrs:n}=r,{axis:o}=n;if(t.length===1)return ad({inputs:{input:t[0]},backend:e,attrs:{dim:o}});let s=t[0].shape,i=t[0].dtype;t.forEach(c=>{y.assertShapesMatch(s,c.shape,"All tensors passed to stack must have matching shapes"),y.assert(i===c.dtype,()=>"All tensors passed to stack must have matching dtypes")});let a=[],u=t.map(c=>{let p=ad({inputs:{input:c},backend:e,attrs:{dim:o}});return a.push(p),p}),l=Nu({inputs:u,backend:e,attrs:{axis:o}});return a.forEach(c=>e.disposeIntermediateTensorInfo(c)),l}var XO={kernelName:pi,backendName:"cpu",kernelFunc:dk};function GQ(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{paddings:s,constantValue:i}=n;tt(o,"pad");let a=s.map((b,w)=>b[0]+o.shape[w]+b[1]),u=s.map(b=>b[0]),l=e.data.get(o.dataId).values,c=y.sizeFromShape(o.shape),p=o.shape.length,m=y.computeStrides(o.shape),f=y.sizeFromShape(a),d=a.length,h=y.computeStrides(a),g=y.getTypedArrayFromDType(o.dtype,f);i!==0&&g.fill(i);for(let b=0;b<c;b++){let C=y.indexToLoc(b,p,m).map((_,A)=>_+u[A]),N=y.locToIndex(C,d,h);g[N]=l[b]}return{dataId:e.write(g,a,o.dtype),shape:a,dtype:o.dtype}}var cw={kernelName:gs,backendName:"cpu",kernelFunc:GQ};var WQ=Qt((r,t)=>Math.pow(r,t)),UQ=oe(xs,WQ),YO={kernelName:xs,backendName:"cpu",kernelFunc:UQ};function HQ(r){let{inputs:t,backend:e,attrs:n}=r,{paramsNestedSplits:o,paramsDenseValues:s,indices:i}=t,{outputRaggedRank:a}=n,u=o.map(x=>e.data.get(x.dataId).values),l=o.map(x=>x.shape),c=e.data.get(s.dataId).values,p=e.data.get(i.dataId).values,[m,f,d]=Jb(u,l,c,s.shape,s.dtype,p,i.shape,a),h=m.map(x=>e.makeTensorInfo([x.length],"int32",x)),g=e.makeTensorInfo(d,s.dtype,f);return h.concat([g])}var ZO={kernelName:Ap,backendName:"cpu",kernelFunc:HQ};function qQ(r){let{inputs:t,backend:e,attrs:n}=r,{shape:o,values:s,defaultValue:i,rowPartitionTensors:a}=t,{rowPartitionTypes:u}=n,l=e.data.get(o.dataId).values,c=e.data.get(s.dataId).values,p=e.data.get(i.dataId).values,m=a.map(g=>e.data.get(g.dataId).values),f=a.map(g=>g.shape),[d,h]=Qb(l,o.shape,c,s.shape,s.dtype,p,i.shape,m,f,u);return e.makeTensorInfo(d,s.dtype,h)}var JO={kernelName:$p,backendName:"cpu",kernelFunc:qQ};function KQ(r){let{backend:t,attrs:e}=r,{start:n,stop:o,dtype:s,step:i}=e,a=Ac(n,o,i,s);return t.makeTensorInfo([a.length],s,a)}var QO={kernelName:Rl,backendName:"cpu",kernelFunc:KQ};var jQ=kt(Fa,r=>1/r),tP={kernelName:Fa,backendName:"cpu",kernelFunc:jQ};function XQ(r){let{inputs:t,backend:e,attrs:n}=r,{images:o}=t,{alignCorners:s,halfPixelCenters:i,size:a}=n;tt(o,"resizeBilinear");let u=y.computeStrides(o.shape),[l,c]=a,[p,m,f,d]=o.shape,h=e.data.get(o.dataId).values,g=new Float32Array(y.sizeFromShape([p,l,c,d])),x=[s&&l>1?m-1:m,s&&c>1?f-1:f],b=[s&&l>1?l-1:l,s&&c>1?c-1:c],w=0,C=x[0]/b[0],N=x[1]/b[1];for(let _=0;_<p;_++)for(let A=0;A<l;A++){let $;i?$=C*(A+.5)-.5:$=C*A;let F=Math.max(0,Math.floor($)),P=$-F,V=Math.min(m-1,Math.ceil($)),G=_*u[0]+F*u[1],W=_*u[0]+V*u[1];for(let q=0;q<c;q++){let H;i?H=N*(q+.5)-.5:H=N*q;let j=Math.max(0,Math.floor(H)),Y=H-j,Z=Math.min(f-1,Math.ceil(H)),et=G+j*u[2],rt=W+j*u[2],ot=G+Z*u[2],at=W+Z*u[2];for(let nt=0;nt<d;nt++){let it=h[et+nt],dt=h[rt+nt],ht=h[ot+nt],bt=h[at+nt],Tt=it+(ht-it)*Y,_t=dt+(bt-dt)*Y,Bt=Tt+(_t-Tt)*P;g[w++]=Bt}}}return e.makeTensorInfo([p,l,c,d],"float32",g)}var eP={kernelName:Is,backendName:"cpu",kernelFunc:XQ};function YQ(r){let{inputs:t,backend:e,attrs:n}=r,{images:o,dy:s}=t,{alignCorners:i}=n;tt([s,o],"resizeBilinearGrad");let a=y.computeStrides(o.shape),[u,l,c,p]=o.shape,[,m,f]=s.shape,d=new Float32Array(u*l*c*p),h=[i&&m>1?l-1:l,i&&f>1?c-1:c],g=[i&&m>1?m-1:m,i&&f>1?f-1:f],x=h[0]/g[0],b=h[1]/g[1],w=e.data.get(s.dataId).values,C=0;for(let N=0;N<u;N++){let _=N*a[0];for(let A=0;A<m;A++){let $=A*x,F=Math.floor($),P=Math.min(Math.ceil($),l-1),V=_+F*a[1],G=_+P*a[1],W=$-F,q=1-W;for(let H=0;H<f;H++){let j=H*b,Y=Math.floor(j),Z=Math.min(Math.ceil(j),c-1),et=j-Y,rt=1-et,ot=V+Y*a[2],at=V+Z*a[2],nt=G+Y*a[2],it=G+Z*a[2],dt=q*rt,ht=q*et,bt=W*rt,Tt=W*et;for(let _t=0;_t<p;_t++){let Bt=w[C++];d[ot+_t]+=Bt*dt,d[at+_t]+=Bt*ht,d[nt+_t]+=Bt*bt,d[it+_t]+=Bt*Tt}}}}return e.makeTensorInfo([u,c,l,p],"float32",d)}var rP={kernelName:Fp,backendName:"cpu",kernelFunc:YQ};function ZQ(r){let{inputs:t,backend:e,attrs:n}=r,{images:o}=t,{alignCorners:s,halfPixelCenters:i,size:a}=n;tt(o,"resizeNearestNeighbor");let u=y.computeStrides(o.shape),[l,c]=a,[p,m,f,d]=o.shape,h=e.data.get(o.dataId).values,g=new Float32Array(p*l*c*d),x=[s&&l>1?m-1:m,s&&c>1?f-1:f],b=[s&&l>1?l-1:l,s&&c>1?c-1:c],w=x[0]/b[0],C=x[1]/b[1],N=0;for(let _=0;_<p;_++){let A=_*u[0];for(let $=0;$<l;$++){let F=i?w*($+.5):w*$,P=Math.min(m-1,s?Math.round(F):Math.floor(F));i&&(P=Math.max(0,P));let V=A+P*u[1];for(let G=0;G<c;G++){let W=i?C*(G+.5):C*G,q=Math.min(f-1,s?Math.round(W):Math.floor(W));i&&(q=Math.max(0,q));let H=V+q*u[2];for(let j=0;j<d;j++){let Y=h[H+j];g[N++]=Y}}}}return e.makeTensorInfo([p,l,c,d],o.dtype,g)}var nP={kernelName:Cs,backendName:"cpu",kernelFunc:ZQ};function JQ(r){let{inputs:t,backend:e,attrs:n}=r,{images:o,dy:s}=t,{alignCorners:i}=n;tt([s,o],"resizeNearestNeighborGrad");let a=y.computeStrides(o.shape),u=y.computeStrides(s.shape),[l,c,p,m]=o.shape,[,f,d]=s.shape,h=new Float32Array(l*c*p*m),g=e.data.get(s.dataId).values,x=[i&&f>1?c-1:c,i&&d>1?p-1:p],b=[i&&f>1?f-1:f,i&&d>1?d-1:d],w=x[0]/b[0],C=x[1]/b[1],N=1/w,_=1/C,A=Math.ceil(N)*2+2,$=Math.ceil(_)*2+2;for(let F=0;F<l;F++){let P=F*a[0];for(let V=0;V<c;V++){let G=P+V*a[1],W=Math.floor(V*N),q=Math.floor(W-A/2);for(let H=0;H<p;H++){let j=G+H*a[2],Y=Math.floor(H*_),Z=Math.floor(Y-$/2);for(let et=0;et<m;et++){let rt=0;for(let ot=0;ot<A;ot++){let at=ot+q;if(at<0||at>=f)continue;let nt=P+at*u[1],it=at*w,dt=Math.min(c-1,i?Math.round(it):Math.floor(it));if(V===dt)for(let ht=0;ht<$;ht++){let bt=ht+Z;if(bt<0||bt>=d)continue;let Tt=nt+bt*u[2],_t=bt*C,Bt=Math.min(p-1,i?Math.round(_t):Math.floor(_t));H===Bt&&(rt+=g[Tt+et])}}h[j+et]=rt}}}}return e.makeTensorInfo(o.shape,o.dtype,h)}var oP={kernelName:Rp,backendName:"cpu",kernelFunc:JQ};function QQ(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{dims:s}=n;tt(o,"reverse");let i=o.shape.length,a=y.parseAxisParam(s,o.shape);if(i===0)return qr({inputs:{x:o},backend:e});let u=new pe(o.shape,o.dtype),l=e.bufferSync(o);for(let c=0;c<u.size;c++){let p=u.indexToLoc(c),m=p.slice();a.forEach(f=>m[f]=o.shape[f]-1-m[f]),u.set(l.get(...m),...p)}return e.makeTensorInfo(u.shape,u.dtype,u.values)}var sP={kernelName:Ss,backendName:"cpu",kernelFunc:QQ};var iP={kernelName:Ua,backendName:"cpu",kernelFunc:({inputs:r,attrs:t,backend:e})=>{let{image:n}=r,{radians:o,fillValue:s,center:i}=t,a=e,u=y.getTypedArrayFromDType(n.dtype,y.sizeFromShape(n.shape)),[l,c,p,m]=n.shape,[f,d]=S.getImageCenter(i,c,p),h=255,g=Math.sin(o),x=Math.cos(o),b=a.data.get(n.dataId).values;for(let C=0;C<l;C++){let N=C*p*c*m;for(let _=0;_<c;_++){let A=_*(p*m);for(let $=0;$<p;$++){let F=$*m;for(let P=0;P<m;P++){let V=[l,_,$,P],G=V[2],W=V[1],q=(G-f)*x-(W-d)*g,H=(G-f)*g+(W-d)*x;q=Math.round(q+f),H=Math.round(H+d);let j=s;if(typeof s!="number"&&(P===3?j=h:j=s[P]),q>=0&&q<p&&H>=0&&H<c){let Z=H*(p*m),et=q*m,rt=N+Z+et+P;j=b[rt]}let Y=N+A+F+P;u[Y]=j}}}}return{dataId:a.write(u,n.shape,n.dtype),shape:n.shape,dtype:n.dtype}}};var t9=kt(Ns,r=>{let t=Math.floor(r);return r-t<.5?Math.floor(r):r-t>.5?Math.ceil(r):t%2===0?t:t+1}),aP={kernelName:Ns,backendName:"cpu",kernelFunc:t9};function e9(r){let{inputs:t,backend:e,attrs:n}=r,{indices:o,updates:s}=t,{shape:i}=n,{sliceRank:a,numUpdates:u,sliceSize:l,strides:c,outputSize:p}=S.calculateShapes(s,o,i),m=!0,f=e.bufferSync(o),d=e.bufferSync(s),h=ml(f,d,i,p,l,u,a,c,0,m);return e.makeTensorInfo(i,h.dtype,h.values)}var lP={kernelName:Oa,backendName:"cpu",kernelFunc:e9};function r9(r,t){let e=0,n=r.length,o=0;for(;e<n;)o=Math.floor((e+n)/2),r[o]<t?e=o+1:n=o;return n}function n9(r,t){let e=0,n=r.length,o=0;for(;e<n;)o=Math.floor((e+n)/2),r[o]<=t?e=o+1:n=o;return n}function uP(r,t,e,n,o,s){let i=y.getArrayFromDType("int32",e*o);for(let a=0;a<e;++a){let u=r.slice(a*n,(a+1)*n),l=a*o;for(let c=0;c<o;++c)i[l+c]=s==="left"?r9(u,t[c+l]):n9(u,t[c+l])}return i}function o9(r){let{inputs:t,backend:e,attrs:n}=r,{sortedSequence:o,values:s}=t,{side:i}=n,a=e.data.get(o.dataId).values,u=e.data.get(s.dataId).values,l=uP(a,u,o.shape[0],o.shape[1],s.shape[1],i);return e.makeTensorInfo(s.shape,"int32",l)}var cP={kernelName:Op,backendName:"cpu",kernelFunc:o9};function s9(r){let{inputs:t,backend:e}=r,{condition:n,t:o,e:s}=t;tt([n,o,s],"select");let i=n.shape.length,a=e.data.get(n.dataId).values,u=e.data.get(o.dataId).values,l=e.data.get(s.dataId).values,c=or(o.dtype,s.dtype),p=y.makeZerosTypedArray(y.sizeFromShape(o.shape),c),m=0,f=i===0||i>1||o.shape.length===1?1:y.sizeFromShape(o.shape.slice(1));for(let d=0;d<a.length;d++)for(let h=0;h<f;h++)a[d]===1?p[m++]=u[d]:p[m++]=l[d];return e.makeTensorInfo(o.shape,c,p)}var pP={kernelName:fi,backendName:"cpu",kernelFunc:s9};var i9=S.SELU_SCALEALPHA,a9=S.SELU_SCALE,l9=kt(Pa,r=>r>=0?a9*r:i9*(Math.exp(r)-1)),mP={kernelName:Pa,backendName:"cpu",kernelFunc:l9};var u9=kt(Ma,r=>r<0?-1:r>0?1:0),fP={kernelName:Ma,backendName:"cpu",kernelFunc:u9};var c9=kt(Ts,r=>Math.sin(r)),dP={kernelName:Ts,backendName:"cpu",kernelFunc:c9};var p9=kt(La,r=>Math.sinh(r)),hP={kernelName:La,backendName:"cpu",kernelFunc:p9};var m9=11920928955078125e-23,gP=Math.log(m9)+2,f9=kt(za,r=>{let t=r>-gP,e=r<gP,n=Math.exp(r),o;return e?o=n:t?o=r:o=Math.log(1+n),o}),xP={kernelName:za,backendName:"cpu",kernelFunc:f9};function d9(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{blockShape:s,paddings:i}=n;tt([o],"spaceToBatchND");let a=y.sizeFromShape(s),u=[[0,0]];u.push(...i);for(let _=1+s.length;_<o.shape.length;++_)u.push([0,0]);let l=cw.kernelFunc({inputs:{x:o},backend:e,attrs:{paddings:u,constantValue:0}}),c=S.getReshaped(l.shape,s,a,!1),p=S.getPermuted(c.length,s.length,!1),m=S.getReshapedPermuted(l.shape,s,a,!1),h=Xt({inputs:{x:l},backend:e,attrs:{shape:c}}),b=Be({inputs:{x:h},backend:e,attrs:{perm:p}}),N=Xt({inputs:{x:b},backend:e,attrs:{shape:m}});return e.disposeIntermediateTensorInfo(l),e.disposeIntermediateTensorInfo(h),e.disposeIntermediateTensorInfo(b),N}var yP={kernelName:hi,backendName:"cpu",kernelFunc:d9};function h9(r){let{inputs:t,backend:e}=r,{indices:n,values:o,denseShape:s,defaultValue:i}=t;if(s.shape.length!==1)throw new Error(`Dense shape must be a vector, saw:
${s.shape}`);if(n.shape.length!==2)throw new Error(`Indices must be a matrix, saw:
${n.shape}`);if(o.shape.length!==1)throw new Error(`Values must be a vector, saw:
${o.shape}`);if(i.shape.length!==0)throw new Error(`Default value must be a scalar, saw:
${i.shape}`);let a=e.data.get(n.dataId).values,u=e.data.get(o.dataId).values,l=e.data.get(s.dataId).values,c=e.data.get(i.dataId).values[0],[p,m,f,d,h]=tw(a,n.shape,n.dtype,u,o.dtype,l,c);return[e.makeTensorInfo(m,n.dtype,p),e.makeTensorInfo([m[0]],o.dtype,f),e.makeTensorInfo([d.length],"bool",new Uint8Array(d.map(g=>Number(g)))),e.makeTensorInfo([h.length],n.dtype,new Int32Array(h))]}var bP={kernelName:Fl,backendName:"cpu",kernelFunc:h9};function g9(r){let{inputs:t,backend:e}=r,{inputIndices:n,inputShape:o,newShape:s}=t;if(n.shape.length!==2)throw new Error(`Input indices should be a matrix but received shape
${n.shape}`);if(o.shape.length!==1)throw new Error(`Input shape should be a vector but received shape
${o.shape}`);if(s.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${s.shape}`);let i=Array.from(e.data.get(o.dataId).values),a=e.data.get(n.dataId).values,u=Array.from(e.data.get(s.dataId).values),[l,c,p]=ew(a,n.shape,n.dtype,i,u);return[e.makeTensorInfo(c,n.dtype,l),e.makeTensorInfo([p.length],s.dtype,new Int32Array(p))]}var wP={kernelName:Ba,backendName:"cpu",kernelFunc:g9};function x9(r){let{inputs:t,backend:e}=r,{data:n,indices:o,segmentIds:s}=t;if(n.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(o.shape.length!==1)throw new Error(`Indices should be a vector but received shape
${o.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape
${s.shape}`);if(o.shape[0]!==s.shape[0])throw new Error("segmentIds and indices should have same size.");let i=e.data.get(n.dataId).values,a=e.data.get(o.dataId).values,u=e.data.get(s.dataId).values,[l,c]=sd(i,n.shape,n.dtype,a,u,!0);return e.makeTensorInfo(c,n.dtype,l)}var CP={kernelName:Ol,backendName:"cpu",kernelFunc:x9};function y9(r){let{inputs:t,backend:e}=r,{data:n,indices:o,segmentIds:s}=t;if(n.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(o.shape.length!==1)throw new Error(`Indices should be a vector but received shape
${o.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape
${s.shape}`);if(o.shape[0]!==s.shape[0])throw new Error("segmentIds and indices should have same size.");let i=e.data.get(n.dataId).values,a=e.data.get(o.dataId).values,u=e.data.get(s.dataId).values,[l,c]=sd(i,n.shape,n.dtype,a,u);return e.makeTensorInfo(c,n.dtype,l)}var IP={kernelName:Pl,backendName:"cpu",kernelFunc:y9};function b9(r){let{inputs:t,backend:e,attrs:n}=r,{sparseIndices:o,sparseValues:s,defaultValue:i}=t,{outputShape:a}=n,{sliceRank:u,numUpdates:l,sliceSize:c,strides:p,outputSize:m}=S.calculateShapes(s,o,a),f=!1,d=e.bufferSync(o),h;switch(s.dtype){case"bool":{let g=e.bufferSync(s),x=Boolean(e.data.get(i.dataId).values[0]);h=ml(d,g,a,m,c,l,u,p,x,f);break}case"float32":{let g=e.bufferSync(s),x=e.data.get(i.dataId).values[0];h=ml(d,g,a,m,c,l,u,p,x,f);break}case"int32":{let g=e.bufferSync(s),x=e.data.get(i.dataId).values[0];h=ml(d,g,a,m,c,l,u,p,x,f);break}case"string":{let g=e.bufferSync(s),x=y.decodeString(e.data.get(i.dataId).values[0]);h=ml(d,g,a,m,c,l,u,p,x,f);break}default:throw new Error(`Unsupported type ${s.dtype}`)}return e.makeTensorInfo(a,h.dtype,h.values)}var vP={kernelName:Pp,backendName:"cpu",kernelFunc:b9};function w9(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{numOrSizeSplits:s,axis:i}=n,a=y.parseAxisParam(i,o.shape)[0],u=S.prepareSplitSize(o,s,a),l=new Array(o.shape.length).fill(0),c=o.shape.slice();return u.map(p=>{let m=[...c];m[a]=p;let f=Ro({inputs:{x:o},backend:e,attrs:{begin:l,size:m}});return l[a]+=p,f})}var SP={kernelName:gi,backendName:"cpu",kernelFunc:w9};var NP={kernelName:Ll,backendName:"cpu",kernelFunc:({inputs:r,backend:t})=>{let{x:e}=r,n=t;tt(e,"square");let o=n.data.get(e.dataId).values,s=new Float32Array(o.length);for(let a=0;a<o.length;++a){let u=o[a];s[a]=u*u}return{dataId:n.write(s,e.shape,e.dtype),shape:e.shape,dtype:e.dtype}}};var C9=kt(uo,(r,t)=>{let e=t;return isNaN(r)?NaN:r>0?1:e.alpha}),kP={kernelName:uo,backendName:"cpu",kernelFunc:C9};function I9(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{begin:s,end:i,strides:a,beginMask:u,endMask:l,ellipsisMask:c,newAxisMask:p,shrinkAxisMask:m}=n;tt(o,"stridedSlice");let{finalShapeSparse:f,finalShape:d,isIdentity:h,sliceDim0:g,isSimpleSlice:x,begin:b,end:w,strides:C}=Pe.sliceInfo(o.shape,s,i,a,u,l,c,p,m),N;if(h)N=Xt({inputs:{x:o},backend:e,attrs:{shape:d}});else if(g||x){y.assert(o.shape.length>=1,()=>`Input must have rank at least 1, got: ${o.shape.length}`);let _=Pe.computeOutShape(b,w,C),A=Ro({inputs:{x:o},backend:e,attrs:{begin:b,size:_}});N=Xt({inputs:{x:A},backend:e,attrs:{shape:d}}),e.disposeIntermediateTensorInfo(A)}else{let _=e.bufferSync(o),A=rw(f,_,C,b);N=e.makeTensorInfo(d,A.dtype,A.values)}return N}var TP={kernelName:Va,backendName:"cpu",kernelFunc:I9};function v9(r){let{inputs:t,backend:e,attrs:n}=r,{separator:o,nGramWidths:s,leftPad:i,rightPad:a,padWidth:u,preserveShortSequences:l}=n,{data:c,dataSplits:p}=t,m=e.data.get(c.dataId).values,f=e.data.get(p.dataId).values,[d,h]=Dc(m,f,o,s,i,a,u,l);return[e.makeTensorInfo([d.length],"string",d),e.makeTensorInfo(p.shape,"int32",h)]}var EP={kernelName:Ml,backendName:"cpu",kernelFunc:v9};function S9(r){let{inputs:t,backend:e,attrs:n}=r,{skipEmpty:o}=n,{input:s,delimiter:i}=t;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(s.shape.length!==1)throw new Error(`Input must be a vector, got shape: ${s.shape}`);if(i.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${i.shape}`);let a=e.data.get(s.dataId).values,u=e.data.get(i.dataId).values[0],[l,c,p]=Rc(a,u,o),m=c.length;return[e.makeTensorInfo([m,2],"int32",l),e.makeTensorInfo([m],"string",c),e.makeTensorInfo([2],"int32",new Int32Array(p))]}var _P={kernelName:zl,backendName:"cpu",kernelFunc:S9};function N9(r){let{inputs:t,backend:e,attrs:n}=r,{numBuckets:o}=n,{input:s}=t;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(o<=0)throw new Error("Number of buckets must be at least 1");let i=e.data.get(s.dataId).values,a=Fc(i,o);return e.makeTensorInfo(s.shape,"int32",a)}var AP={kernelName:Bl,backendName:"cpu",kernelFunc:N9};var k9=kt(Fs,r=>Math.tan(r)),$P={kernelName:Fs,backendName:"cpu",kernelFunc:k9};var T9=kt(Os,r=>Math.tanh(r)),DP={kernelName:Os,backendName:"cpu",kernelFunc:T9};function E9(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{reps:s}=n;tt(o,"tile");let i=nw(e.bufferSync(o),s);return e.makeTensorInfo(i.shape,i.dtype,i.values)}var RP={kernelName:Zn,backendName:"cpu",kernelFunc:E9};function _9(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{k:s,sorted:i}=n;tt(o,"topk");let a=e.data.get(o.dataId).values,[u,l]=ow(a,o.shape,o.dtype,s,i);return[e.makeTensorInfo(u.shape,u.dtype,u.values),e.makeTensorInfo(l.shape,l.dtype,l.values)]}var FP={kernelName:Ga,backendName:"cpu",kernelFunc:_9};function A9(r){let{inputs:t,attrs:e,backend:n}=r,{image:o,transforms:s}=t,{interpolation:i,fillMode:a,fillValue:u,outputShape:l}=e,[c,p,m,f]=o.shape,[d,h]=l!=null?l:[p,m],g=[c,d,h,f],x=y.computeStrides(o.shape),b=x[0],w=x[1],C=x[2],N=y.computeStrides(g),_=N[0],A=N[1],$=N[2],F=y.getTypedArrayFromDType(o.dtype,y.sizeFromShape(g));F.fill(u);let P=n.data.get(o.dataId).values,V=n.data.get(s.dataId).values;for(let W=0;W<c;++W){let q=s.shape[0]===1?V:V.subarray(W*8,W*8+8);for(let H=0;H<d;++H)for(let j=0;j<h;++j)for(let Y=0;Y<f;++Y){let Z,et=q[6]*j+q[7]*H+1;if(et===0)continue;let rt=(q[0]*j+q[1]*H+q[2])/et,ot=(q[3]*j+q[4]*H+q[5])/et,at=OP(rt,m,a),nt=OP(ot,p,a);switch(i){case"nearest":Z=O9(P,p,m,b,w,C,W,nt,at,Y,u);break;case"bilinear":Z=P9(P,p,m,b,w,C,W,nt,at,Y,u);break;default:throw new Error(`Error in Transform: Expect 'nearest' or 'bilinear', but got ${i}`)}let it=W*_+H*A+j*$+Y;F[it]=Z}return n.makeTensorInfo(g,o.dtype,F)}return{dataId:n.write(F,g,o.dtype),shape:o.shape,dtype:o.dtype}}var PP={kernelName:Wa,backendName:"cpu",kernelFunc:A9};function OP(r,t,e){switch(e){case"reflect":return $9(r,t);case"wrap":return D9(r,t);case"nearest":return F9(r,t);case"constant":default:return R9(r,t)}}function $9(r,t){let e=r;if(e<0)if(t<=1)e=0;else{let n=2*t;e<n&&(e=n*Math.trunc(-e/n)+e),e=e<-t?e+n:-e-1}else if(e>t-1)if(t<=1)e=0;else{let n=2*t;e-=n*Math.trunc(e/n),e>=t&&(e=n-e-1)}return y.clamp(0,e,t-1)}function D9(r,t){let e=r;if(e<0)if(t<=1)e=0;else{let n=t-1;e+=t*(Math.trunc(-e/n)+1)}else if(e>t-1)if(t<=1)e=0;else{let n=t-1;e-=t*Math.trunc(e/n)}return y.clamp(0,e,t-1)}function R9(r,t){return r}function F9(r,t){return y.clamp(0,r,t-1)}function Gh(r,t,e,n,o,s,i,a,u,l,c){let p=i*n+a*o+u*s+l;return 0<=a&&a<t&&0<=u&&u<e?r[p]:c}function O9(r,t,e,n,o,s,i,a,u,l,c){let p=Math.round(a),m=Math.round(u);return Gh(r,t,e,n,o,s,i,p,m,l,c)}function P9(r,t,e,n,o,s,i,a,u,l,c){let p=Math.floor(a),m=Math.floor(u),f=p+1,d=m+1,h=(d-u)*Gh(r,t,e,n,o,s,i,p,m,l,c)+(u-m)*Gh(r,t,e,n,o,s,i,p,d,l,c),g=(d-u)*Gh(r,t,e,n,o,s,i,f,m,l,c)+(u-m)*Gh(r,t,e,n,o,s,i,f,d,l,c);return(f-a)*h+(a-p)*g}function L9(r){let{inputs:t,attrs:e,backend:n}=r,{axis:o}=e,{x:s}=t;tt(s,"unique");let i=n.data.get(s.dataId).values,{outputValues:a,outputShape:u,indices:l}=sw(i,o,s.shape,s.dtype);return[n.makeTensorInfo(u,s.dtype,a),n.makeTensorInfo([l.length],"int32",l)]}var LP={kernelName:Lp,backendName:"cpu",kernelFunc:L9};function M9(r){let{inputs:t,backend:e,attrs:n}=r,{value:o}=t,{axis:s}=n;s<0&&(s+=o.shape.length);let i=o.shape.length,a=o.shape[s],u=new Array(i-1),l=0;for(let f=0;f<i;f++)f!==s&&(u[l++]=o.shape[f]);let c=new Array(i).fill(0),p=o.shape.slice();p[s]=1;let m=new Array(a);for(let f=0;f<m.length;f++){c[s]=f;let d=Ro({inputs:{x:o},backend:e,attrs:{begin:c,size:p}});m[f]=Xt({inputs:{x:d},backend:e,attrs:{shape:u}}),e.disposeIntermediateTensorInfo(d)}return m}var MP={kernelName:xi,backendName:"cpu",kernelFunc:M9};function z9(r){let{inputs:t,backend:e,attrs:n}=r,{x:o,segmentIds:s}=t,{numSegments:i}=n;tt(o,"unsortedSegmentSum");let a=o.shape.length,u=s.shape.length,l=[],c=[],p=a-u,m=s;for(let d=0;d<p;++d){let h=ad({inputs:{input:m},backend:e,attrs:{dim:d+1}});m=h,c.push(h)}for(let d=0;d<i;++d){let h=y.createScalarValue(d,"int32"),g=e.makeTensorInfo([],"int32",h),x=LN({inputs:{a:g,b:m},backend:e}),b=Ao({inputs:{x},backend:e,attrs:{dtype:"float32"}}),w=_c({inputs:{a:b,b:o},backend:e}),C=fl({inputs:{x:w},backend:e,attrs:{axis:0,keepDims:!1}});l.push(C),c.push(g),c.push(x),c.push(b),c.push(w),c.push(C)}let f=dk({inputs:l,backend:e,attrs:{axis:0}});return c.forEach(d=>e.disposeIntermediateTensorInfo(d)),f}var zP={kernelName:Vl,backendName:"cpu",kernelFunc:z9};var B9=[mF,SR,fF,dF,_R,hF,gF,xF,yF,bF,wF,CF,IF,vF,SF,kF,TF,EF,_F,pF,AF,$F,DF,RF,ER,AR,FF,NR,OF,LF,MF,zF,BF,VF,GF,WF,UF,HF,qF,KF,jF,XF,YF,ZF,JF,QF,tO,eO,rO,nO,sO,sF,iO,$R,aO,DR,lO,RR,uO,cO,pO,FR,mO,fO,dO,hO,gO,OR,PR,kR,xO,PF,yO,bO,wO,iF,LR,MR,CO,zR,IO,vO,SO,NO,kO,TO,EO,BR,_O,AO,$O,DO,FO,OO,PO,VR,LO,MO,VO,GR,WR,GO,WO,UO,UR,HO,jO,XO,cw,YO,aF,qR,ZO,JO,QO,TR,zh,tP,lF,uF,cF,eP,rP,nP,oP,sP,iP,aP,YR,lP,cP,pP,mP,JR,fP,dP,hP,QR,zO,xP,yP,bP,wP,CP,IP,vP,SP,eF,NP,rF,kP,TP,EP,_P,AP,nF,oO,$P,DP,RP,FP,PP,HR,LP,MP,zP,qO];for(let r of B9)Pu(r);var cd={};Gt(cd,{assertNotComplex:()=>Zs,bindCanvasToFramebuffer:()=>X9,bindColorTextureToFramebuffer:()=>qh,bindTextureToProgramUniformSampler:()=>Ak,bindTextureUnit:()=>WP,bindVertexBufferToProgramAttribute:()=>gw,callAndCheck:()=>yt,canBeRepresented:()=>yk,createFragmentShader:()=>wk,createFramebuffer:()=>Tk,createProgram:()=>Ck,createStaticIndexBuffer:()=>Sk,createStaticVertexBuffer:()=>vk,createTexture:()=>Nk,createVertexShader:()=>bk,getBatchDim:()=>hl,getExtensionOrThrow:()=>ld,getFramebufferErrorMessage:()=>UP,getMaxTexturesInShader:()=>Rk,getNumChannels:()=>K9,getProgramUniformLocation:()=>_k,getProgramUniformLocationOrThrow:()=>Ek,getRowsCols:()=>gl,getShapeAs3D:()=>Kh,getTextureShapeFromLogicalShape:()=>$k,getWebGLDisjointQueryTimerVersion:()=>Fk,getWebGLErrorMessage:()=>GP,getWebGLMaxTextureSize:()=>Dk,hasExtension:()=>Vn,isCapableOfRenderingToFloatTexture:()=>Ok,isDownloadFloatTextureEnabled:()=>Pk,isReshapeFree:()=>Tu,isWebGLFenceEnabled:()=>Lk,isWebGLVersionEnabled:()=>yw,linkProgram:()=>Ik,logShaderSourceAndInfoLog:()=>hw,resetMaxTextureSize:()=>Y9,resetMaxTexturesInShader:()=>Z9,unbindColorTextureFromFramebuffer:()=>xw,unbindTextureUnit:()=>j9,validateFramebuffer:()=>ud,validateProgram:()=>Hh,validateTextureSize:()=>kk});var Pc={},pw={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function hk(r,t){Pc[r]=t}function Bn(r,t){if(!(r in Pc)||t!=null){let n=G9(r,t);if(n!==null)Pc[r]=n;else return console.log("Could not get context for WebGL version",r),null}let e=Pc[r];return e==null||e.isContextLost()?(delete Pc[r],Bn(r)):(e.disable(e.DEPTH_TEST),e.disable(e.STENCIL_TEST),e.disable(e.BLEND),e.disable(e.DITHER),e.disable(e.POLYGON_OFFSET_FILL),e.disable(e.SAMPLE_COVERAGE),e.enable(e.SCISSOR_TEST),e.enable(e.CULL_FACE),e.cullFace(e.BACK),Pc[r])}function V9(r){if(typeof OffscreenCanvas!="undefined"&&r===2)return new OffscreenCanvas(300,150);if(typeof document!="undefined")return document.createElement("canvas");throw new Error("Cannot create a canvas in this context")}function G9(r,t){if(r!==1&&r!==2)throw new Error("Cannot get WebGL rendering context, WebGL is disabled.");let e=t==null?V9(r):t;return e.addEventListener("webglcontextlost",n=>{n.preventDefault(),delete Pc[r]},!1),M().getBool("SOFTWARE_WEBGL_ENABLED")&&(pw.failIfMajorPerformanceCaveat=!1),r===1?e.getContext("webgl",pw)||e.getContext("experimental-webgl",pw):e.getContext("webgl2",pw)}var ku;(function(r){r[r.DENSE=0]="DENSE",r[r.SHARED_BATCH=1]="SHARED_BATCH"})(ku||(ku={}));var Kr;(function(r){r[r.RENDER=0]="RENDER",r[r.UPLOAD=1]="UPLOAD",r[r.PIXELS=2]="PIXELS",r[r.DOWNLOAD=3]="DOWNLOAD"})(Kr||(Kr={}));var Fr;(function(r){r[r.UNPACKED_FLOAT16=0]="UNPACKED_FLOAT16",r[r.UNPACKED_FLOAT32=1]="UNPACKED_FLOAT32",r[r.PACKED_4X1_UNSIGNED_BYTE=2]="PACKED_4X1_UNSIGNED_BYTE",r[r.PACKED_2X2_FLOAT32=3]="PACKED_2X2_FLOAT32",r[r.PACKED_2X2_FLOAT16=4]="PACKED_2X2_FLOAT16"})(Fr||(Fr={}));function Lc(r,t){return[t,r]}function BP(r,t){return r*t}function Wh(r){let t=y.sizeFromShape(r),e=Math.ceil(t/4);return y.sizeToSquarishShape(e)}function Ki(r,t){return[Math.max(1,Math.ceil(t/2)),Math.max(1,Math.ceil(r/2))]}function VP(r,t){let[e,n]=Ki(r,t);return e*n*4}function Uh(r,t){let e=r,n,o,s,i,a,u,l,c,p,m;return M().getNumber("WEBGL_VERSION")===2?(n=e.R32F,o=e.R16F,s=e.RGBA16F,i=e.RGBA32F,a=e.RED,l=4,c=1,p=e.HALF_FLOAT,m=e.FLOAT,u=e.RGBA8):(n=r.RGBA,o=r.RGBA,s=r.RGBA,i=e.RGBA,a=r.RGBA,l=4,c=4,p=t!=null?t.HALF_FLOAT_OES:null,m=r.FLOAT,u=r.RGBA),{internalFormatFloat:n,internalFormatHalfFloat:o,internalFormatPackedHalfFloat:s,internalFormatPackedFloat:i,textureFormatFloat:a,downloadTextureFormat:u,downloadUnpackNumChannels:l,defaultNumChannels:c,textureTypeHalfFloat:p,textureTypeFloat:m}}function yt(r,t){let e=t();return M().getBool("DEBUG")&&W9(r),e}function W9(r){let t=r.getError();if(t!==r.NO_ERROR)throw new Error("WebGL Error: "+GP(r,t))}var U9=596e-10,H9=65504;function yk(r){return!!(M().getBool("WEBGL_RENDER_FLOAT32_ENABLED")||r===0||U9<Math.abs(r)&&Math.abs(r)<H9)}function GP(r,t){switch(t){case r.NO_ERROR:return"NO_ERROR";case r.INVALID_ENUM:return"INVALID_ENUM";case r.INVALID_VALUE:return"INVALID_VALUE";case r.INVALID_OPERATION:return"INVALID_OPERATION";case r.INVALID_FRAMEBUFFER_OPERATION:return"INVALID_FRAMEBUFFER_OPERATION";case r.OUT_OF_MEMORY:return"OUT_OF_MEMORY";case r.CONTEXT_LOST_WEBGL:return"CONTEXT_LOST_WEBGL";default:return`Unknown error code ${t}`}}function ld(r,t){return dl(r,()=>r.getExtension(t),'Extension "'+t+'" not supported on this browser.')}function bk(r,t){let e=dl(r,()=>r.createShader(r.VERTEX_SHADER),"Unable to create vertex WebGLShader.");if(yt(r,()=>r.shaderSource(e,t)),yt(r,()=>r.compileShader(e)),r.getShaderParameter(e,r.COMPILE_STATUS)===!1)throw console.log(r.getShaderInfoLog(e)),new Error("Failed to compile vertex shader.");return e}function wk(r,t){let e=dl(r,()=>r.createShader(r.FRAGMENT_SHADER),"Unable to create fragment WebGLShader.");if(yt(r,()=>r.shaderSource(e,t)),yt(r,()=>r.compileShader(e)),M().get("ENGINE_COMPILE_ONLY"))return e;if(r.getShaderParameter(e,r.COMPILE_STATUS)===!1)throw hw(t,r.getShaderInfoLog(e)),new Error("Failed to compile fragment shader.");return e}var q9=/ERROR: [0-9]+:([0-9]+):/g;function hw(r,t){let e=q9.exec(t);if(e==null){console.log(`Couldn't parse line number in error: ${t}`),console.log(r);return}let n=+e[1],o=r.split(`
`),s=o.length.toString().length+2,i=o.map((p,m)=>y.rightPad((m+1).toString(),s)+p),a=0;for(let p=0;p<i.length;p++)a=Math.max(i[p].length,a);let u=i.slice(0,n-1),l=i.slice(n-1,n),c=i.slice(n);console.log(u.join(`
`)),console.log(t.split(`
`)[0]),console.log(`%c ${y.rightPad(l[0],a)}`,"border:1px solid red; background-color:#e3d2d2; color:#a61717"),console.log(c.join(`
`))}function Ck(r){return dl(r,()=>r.createProgram(),"Unable to create WebGLProgram.")}function Ik(r,t){if(yt(r,()=>r.linkProgram(t)),!M().get("ENGINE_COMPILE_ONLY")&&r.getProgramParameter(t,r.LINK_STATUS)===!1)throw console.log(r.getProgramInfoLog(t)),new Error("Failed to link vertex and fragment shaders.")}function Hh(r,t){if(yt(r,()=>r.validateProgram(t)),r.getProgramParameter(t,r.VALIDATE_STATUS)===!1)throw console.log(r.getProgramInfoLog(t)),new Error("Shader program validation failed.")}function vk(r,t){let e=dl(r,()=>r.createBuffer(),"Unable to create WebGLBuffer");return yt(r,()=>r.bindBuffer(r.ARRAY_BUFFER,e)),yt(r,()=>r.bufferData(r.ARRAY_BUFFER,t,r.STATIC_DRAW)),e}function Sk(r,t){let e=dl(r,()=>r.createBuffer(),"Unable to create WebGLBuffer");return yt(r,()=>r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,e)),yt(r,()=>r.bufferData(r.ELEMENT_ARRAY_BUFFER,t,r.STATIC_DRAW)),e}function K9(){return M().getNumber("WEBGL_VERSION")===2?1:4}function Nk(r){return dl(r,()=>r.createTexture(),"Unable to create WebGLTexture.")}function kk(r,t){let e=M().getNumber("WEBGL_MAX_TEXTURE_SIZE");if(r<=0||t<=0){let n=`[${r}x${t}]`;throw new Error("Requested texture size "+n+" is invalid.")}if(r>e||t>e){let n=`[${r}x${t}]`,o=`[${e}x${e}]`;throw new Error("Requested texture size "+n+" greater than WebGL maximum on this browser / GPU "+o+".")}}function Tk(r){return dl(r,()=>r.createFramebuffer(),"Unable to create WebGLFramebuffer.")}function gw(r,t,e,n,o,s,i){let a=r.getAttribLocation(t,e);return a===-1?!1:(yt(r,()=>r.bindBuffer(r.ARRAY_BUFFER,n)),yt(r,()=>r.vertexAttribPointer(a,o,r.FLOAT,!1,s,i)),yt(r,()=>r.enableVertexAttribArray(a)),!0)}function WP(r,t,e){HP(r,e),yt(r,()=>r.activeTexture(r.TEXTURE0+e)),yt(r,()=>r.bindTexture(r.TEXTURE_2D,t))}function j9(r,t){HP(r,t),yt(r,()=>r.activeTexture(r.TEXTURE0+t)),yt(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function Ek(r,t,e){return dl(r,()=>r.getUniformLocation(t,e),'uniform "'+e+'" not present in program.')}function _k(r,t,e){return r.getUniformLocation(t,e)}function Ak(r,t,e,n){yt(r,()=>WP(r,t,n)),yt(r,()=>r.uniform1i(e,n))}function X9(r){yt(r,()=>r.bindFramebuffer(r.FRAMEBUFFER,null)),yt(r,()=>r.viewport(0,0,r.canvas.width,r.canvas.height)),yt(r,()=>r.scissor(0,0,r.canvas.width,r.canvas.height))}function qh(r,t,e){yt(r,()=>r.bindFramebuffer(r.FRAMEBUFFER,e)),yt(r,()=>r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,t,0))}function xw(r,t){yt(r,()=>r.bindFramebuffer(r.FRAMEBUFFER,t)),yt(r,()=>r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,null,0))}function ud(r){let t=r.checkFramebufferStatus(r.FRAMEBUFFER);if(t!==r.FRAMEBUFFER_COMPLETE)throw new Error("Error binding framebuffer: "+UP(r,t))}function UP(r,t){switch(t){case r.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_ATTACHMENT";case r.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT";case r.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:return"FRAMEBUFFER_INCOMPLETE_DIMENSIONS";case r.FRAMEBUFFER_UNSUPPORTED:return"FRAMEBUFFER_UNSUPPORTED";default:return`unknown error ${t}`}}function dl(r,t,e){let n=yt(r,()=>t());if(n==null)throw new Error(e);return n}function HP(r,t){let e=r.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,n=t+r.TEXTURE0;if(n<r.TEXTURE0||n>e){let o=`[gl.TEXTURE0, gl.TEXTURE${e}]`;throw new Error(`textureUnit must be in ${o}.`)}}function hl(r,t=2){return y.sizeFromShape(r.slice(0,r.length-t))}function gl(r){if(r.length===0)throw Error("Cannot get rows and columns of an empty shape array.");return[r.length>1?r[r.length-2]:1,r[r.length-1]]}function Kh(r){let t=[1,1,1];return r.length===0||r.length===1&&r[0]===1||(t=[hl(r),...gl(r)]),t}function $k(r,t=!1){let e=M().getNumber("WEBGL_MAX_TEXTURE_SIZE"),n=M().getNumber("WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE");n===1/0&&M().getBool("WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE")&&(n=e/2),t&&(e=e*2,n=n*2,r=r.map((a,u)=>u>=r.length-2?y.nearestLargerEven(r[u]):r[u]),r.length===1&&(r=[2,r[0]])),r.length!==2&&(r=y.squeezeShape(r).newShape);let o=y.sizeFromShape(r),s=null;r.length<=1&&o<=e?s=[1,o]:r.length===2&&r[0]<=e&&r[1]<=e?s=r:r.length===3&&r[0]*r[1]<=e&&r[2]<=e?s=[r[0]*r[1],r[2]]:r.length===3&&r[0]<=e&&r[1]*r[2]<=e?s=[r[0],r[1]*r[2]]:r.length===4&&r[0]*r[1]*r[2]<=e&&r[3]<=e?s=[r[0]*r[1]*r[2],r[3]]:r.length===4&&r[0]<=e&&r[1]*r[2]*r[3]<=e&&(s=[r[0],r[1]*r[2]*r[3]]);let i=s!=null&&Math.max(...s)>n&&Math.min(...s)<=(t?2:1)&&Math.min(...s)>0;if(s==null||i)if(t){let a=hl(r),u=2,l=2;r.length&&([u,l]=gl(r)),o=a*(u/2)*(l/2),s=y.sizeToSquarishShape(o).map(c=>c*2)}else s=y.sizeToSquarishShape(o);return s}function mw(r){return r%2===0}function Tu(r,t){if(r=r.slice(-2),t=t.slice(-2),y.arraysEqual(r,t)||!r.length||!t.length||r[0]===0||r[1]===0||t[0]===0||t[1]===0)return!0;if(r.length!==t.length){let e=r.slice(-1)[0],n=t.slice(-1)[0];if(e===n||mw(e)&&mw(n)&&(r[0]===1||t[0]===1))return!0}return r[1]===t[1]&&mw(r[0])&&mw(t[0])}var fw,dw;function Dk(r){if(fw==null){let t=Bn(r);fw=t.getParameter(t.MAX_TEXTURE_SIZE)}return fw}function Y9(){fw=null}function Z9(){dw=null}function Rk(r){if(dw==null){let t=Bn(r);dw=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,dw)}function Fk(r){if(r===0)return 0;let t,e=Bn(r);return Vn(e,"EXT_disjoint_timer_query_webgl2")&&r===2?t=2:Vn(e,"EXT_disjoint_timer_query")?t=1:t=0,t}function Vn(r,t){return r.getExtension(t)!=null}function yw(r){try{if(Bn(r)!=null)return!0}catch(t){return console.log("Error when getting WebGL context: ",t),!1}return!1}function Ok(r){if(r===0)return!1;let t=Bn(r);if(r===1){if(!Vn(t,"OES_texture_float"))return!1}else if(!Vn(t,"EXT_color_buffer_float"))return!1;return xk(t)}function Pk(r){if(r===0)return!1;let t=Bn(r);if(r===1){if(!Vn(t,"OES_texture_float")||!Vn(t,"WEBGL_color_buffer_float"))return!1}else{if(Vn(t,"EXT_color_buffer_float"))return xk(t);let n="EXT_color_buffer_half_float";if(Vn(t,n)){let o=t.getExtension(n);return J9(t,o)}return!1}return xk(t)}function xk(r){let t=Uh(r),e=r.createTexture();r.bindTexture(r.TEXTURE_2D,e);let n=1,o=1;r.texImage2D(r.TEXTURE_2D,0,t.internalFormatFloat,n,o,0,t.textureFormatFloat,t.textureTypeFloat,null);let s=r.createFramebuffer();r.bindFramebuffer(r.FRAMEBUFFER,s),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,e,0);let i=r.checkFramebufferStatus(r.FRAMEBUFFER)===r.FRAMEBUFFER_COMPLETE;return r.bindTexture(r.TEXTURE_2D,null),r.bindFramebuffer(r.FRAMEBUFFER,null),r.deleteTexture(e),r.deleteFramebuffer(s),i}function J9(r,t){let e=Uh(r,t),n=r.createTexture();r.bindTexture(r.TEXTURE_2D,n);let o=1,s=1;r.texImage2D(r.TEXTURE_2D,0,e.internalFormatHalfFloat,o,s,0,e.textureFormatFloat,e.textureTypeHalfFloat,null);let i=r.createFramebuffer();r.bindFramebuffer(r.FRAMEBUFFER,i),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,n,0);let a=r.checkFramebufferStatus(r.FRAMEBUFFER)===r.FRAMEBUFFER_COMPLETE;return r.bindTexture(r.TEXTURE_2D,null),r.bindFramebuffer(r.FRAMEBUFFER,null),r.deleteTexture(n),r.deleteFramebuffer(i),a}function Lk(r){return r!==2?!1:Bn(r).fenceSync!=null}function Zs(r,t){Array.isArray(r)||(r=[r]),r.forEach(e=>{e!=null&&y.assert(e.dtype!=="complex64",()=>`${t} does not support complex64 tensors in the WebGL backend.`)})}var Nt=M();Nt.registerFlag("HAS_WEBGL",()=>Nt.getNumber("WEBGL_VERSION")>0);Nt.registerFlag("WEBGL_VERSION",()=>yw(2)?2:yw(1)?1:0);Nt.registerFlag("WEBGL_CHECK_NUMERICAL_PROBLEMS",()=>!1);Nt.registerFlag("WEBGL_BUFFER_SUPPORTED",()=>Nt.get("WEBGL_VERSION")===2);Nt.registerFlag("WEBGL_CPU_FORWARD",()=>!0);Nt.registerFlag("WEBGL_FORCE_F16_TEXTURES",()=>!1);Nt.registerFlag("WEBGL_PACK",()=>Nt.getBool("HAS_WEBGL"));Nt.registerFlag("WEBGL_PACK_NORMALIZATION",()=>Nt.getBool("WEBGL_PACK"));Nt.registerFlag("WEBGL_PACK_CLIP",()=>Nt.getBool("WEBGL_PACK"));Nt.registerFlag("WEBGL_PACK_DEPTHWISECONV",()=>Nt.getBool("WEBGL_PACK"));Nt.registerFlag("WEBGL_PACK_BINARY_OPERATIONS",()=>Nt.getBool("WEBGL_PACK"));Nt.registerFlag("WEBGL_PACK_UNARY_OPERATIONS",()=>Nt.getBool("WEBGL_PACK"));Nt.registerFlag("WEBGL_PACK_ARRAY_OPERATIONS",()=>Nt.getBool("WEBGL_PACK"));Nt.registerFlag("WEBGL_PACK_IMAGE_OPERATIONS",()=>Nt.getBool("WEBGL_PACK"));Nt.registerFlag("WEBGL_PACK_REDUCE",()=>Nt.getBool("WEBGL_PACK"));Nt.registerFlag("WEBGL_LAZILY_UNPACK",()=>Nt.getBool("WEBGL_PACK"));Nt.registerFlag("WEBGL_CONV_IM2COL",()=>Nt.getBool("WEBGL_PACK"));Nt.registerFlag("WEBGL_MAX_TEXTURE_SIZE",()=>Dk(Nt.getNumber("WEBGL_VERSION")));Nt.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER",()=>Rk(Nt.getNumber("WEBGL_VERSION")));Nt.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION",()=>{let r=Nt.getNumber("WEBGL_VERSION");return r===0?0:Fk(r)});Nt.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE",()=>Nt.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0&&!Hl.isMobile());Nt.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE",()=>Ok(Nt.getNumber("WEBGL_VERSION")));Nt.registerFlag("WEBGL_RENDER_FLOAT32_ENABLED",()=>Nt.getBool("WEBGL_FORCE_F16_TEXTURES")?!1:Nt.getBool("WEBGL_RENDER_FLOAT32_CAPABLE"));Nt.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED",()=>Pk(Nt.getNumber("WEBGL_VERSION")));Nt.registerFlag("WEBGL_FENCE_API_ENABLED",()=>Lk(Nt.getNumber("WEBGL_VERSION")));Nt.registerFlag("WEBGL_SIZE_UPLOAD_UNIFORM",()=>Nt.getBool("WEBGL_RENDER_FLOAT32_ENABLED")?4:0);Nt.registerFlag("WEBGL_DELETE_TEXTURE_THRESHOLD",()=>-1,r=>{if(r<0&&r!==-1)throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be -1 (indicating never delete) or at least 0, but got ${r}.`)});Nt.registerFlag("WEBGL_FLUSH_THRESHOLD",()=>Hl.isMobile()?1:-1,r=>{if(r<0&&r!==-1)throw new Error(`WEBGL_FLUSH_THRESHOLD must be -1 (indicating never manual flush) or at least 0, but got ${r}.`)});Nt.registerFlag("CPU_HANDOFF_SIZE_THRESHOLD",()=>128);Nt.registerFlag("WEBGL_USE_SHAPES_UNIFORMS",()=>!1);Nt.registerFlag("TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD",()=>1e5);Nt.registerFlag("TOPK_K_CPU_HANDOFF_THRESHOLD",()=>128);Nt.registerFlag("WEBGL_EXP_CONV",()=>!1);Nt.registerFlag("SOFTWARE_WEBGL_ENABLED",()=>Nt.getBool("IS_TEST"));Nt.registerFlag("WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE",()=>1/0);Nt.registerFlag("WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE",()=>!1);Nt.registerFlag("WEBGL2_ISNAN_CUSTOM",()=>!1);function Ve(){let r,t,e,n,o,s,i,a,u,l;return M().getNumber("WEBGL_VERSION")===2?(r="#version 300 es",t="in",e="out",n="in",o="texture",s="outputColor",i="out vec4 outputColor;",a=M().getBool("WEBGL2_ISNAN_CUSTOM")?`
bool isnan_custom(float val) {
uint floatToUint = floatBitsToUint(val);
return (floatToUint & 0x7fffffffu) > 0x7f800000u;
}
bvec4 isnan_custom(vec4 val) {
return bvec4(isnan_custom(val.x),
isnan_custom(val.y), isnan_custom(val.z), isnan_custom(val.w));
}
#define isnan(value) isnan_custom(value)
`:"",u="",l=`
#define round(value) newRound(value)
int newRound(float value) {
return int(floor(value + 0.5));
}
ivec4 newRound(vec4 value) {
return ivec4(floor(value + vec4(0.5)));
}
`):(r="",t="attribute",e="varying",n="varying",o="texture2D",s="gl_FragColor",i="",a=`
#define isnan(value) isnan_custom(value)
bool isnan_custom(float val) {
return (val > 0. || val < 1. || val == 0.) ? false : true;
}
bvec4 isnan_custom(vec4 val) {
return bvec4(isnan(val.x), isnan(val.y), isnan(val.z), isnan(val.w));
}
`,u=`
uniform float INFINITY;
bool isinf(float val) {
return abs(val) == INFINITY;
}
bvec4 isinf(vec4 val) {
return equal(abs(val), vec4(INFINITY));
}
`,l=`
int round(float value) {
return int(floor(value + 0.5));
}
ivec4 round(vec4 value) {
return ivec4(floor(value + vec4(0.5)));
}
`),{version:r,attribute:t,varyingVs:e,varyingFs:n,texture2D:o,output:s,defineOutput:i,defineSpecialNaN:a,defineSpecialInf:u,defineRound:l}}function Js(r,t,e="index"){let n=y.computeStrides(t);return n.map((o,s)=>{let i=`int ${r[s]} = ${e} / ${o}`,a=s===n.length-1?`int ${r[s+1]} = ${e} - ${r[s]} * ${o}`:`index -= ${r[s]} * ${o}`;return`${i}; ${a};`}).join("")}function Mc(r,t,e="index"){let n=y.computeStrides(t);return n.map((o,s)=>{let i=`int ${r[s]} = ${e} / outShapeStrides[${s}]`,a=s===n.length-1?`int ${r[s+1]} = ${e} - ${r[s]} * outShapeStrides[${s}]`:`index -= ${r[s]} * outShapeStrides[${s}]`;return`${i}; ${a};`}).join("")}function Q9(r,t){let e=r.length,n=r.map(s=>`${t}[${s}]`),o=new Array(e-1);o[e-2]=n[e-1];for(let s=e-3;s>=0;--s)o[s]=`(${o[s+1]} * ${n[s+1]})`;return o}function qP(r,t,e="index"){let n=r.map((s,i)=>i),o=Q9(n,t);return o.map((s,i)=>{let a=`int ${r[i]} = ${e} / ${o[i]}`,u=i===o.length-1?`int ${r[i+1]} = ${e} - ${r[i]} * ${o[i]}`:`index -= ${r[i]} * ${o[i]}`;return`${a}; ${u};`}).join("")}function pd(r){let t=y.computeStrides(r).map(e=>e.toString());return`
int getFlatIndex(ivec3 coords) {
return coords.x * ${t[0]} + coords.y * ${t[1]} + coords.z;
}
`}function md(){return`
int getFlatIndex(ivec3 coords) {
return coords.x * outShapeStrides[0] + coords.y * outShapeStrides[1] + coords.z;
}
`}var bw=`
const float FLOAT_MAX = 1.70141184e38;
const float FLOAT_MIN = 1.17549435e-38;
lowp vec4 encode_float(highp float v) {
if (isnan(v)) {
return vec4(255, 255, 255, 255);
}
highp float av = abs(v);
if(av < FLOAT_MIN) {
return vec4(0.0, 0.0, 0.0, 0.0);
} else if(v > FLOAT_MAX) {
return vec4(0.0, 0.0, 128.0, 127.0) / 255.0;
} else if(v < -FLOAT_MAX) {
return vec4(0.0, 0.0, 128.0, 255.0) / 255.0;
}
highp vec4 c = vec4(0,0,0,0);
highp float e = floor(log2(av));
highp float m = exp2(fract(log2(av))) - 1.0;
c[2] = floor(128.0 * m);
m -= c[2] / 128.0;
c[1] = floor(32768.0 * m);
m -= c[1] / 32768.0;
c[0] = floor(8388608.0 * m);
highp float ebias = e + 127.0;
c[3] = floor(ebias / 2.0);
ebias -= c[3] * 2.0;
c[2] += floor(ebias) * 128.0;
c[3] += 128.0 * step(0.0, -v);
return c / 255.0;
}
`;var{getBroadcastDims:KP}=S;function jP(r,t,e){let n=[];if(r.forEach(f=>{let d=y.sizeFromShape(f.shapeInfo.logicalShape);if(f.shapeInfo.isUniform?n.push(`uniform float ${f.name}${d>1?`[${d}]`:""};`):(n.push(`uniform sampler2D ${f.name};`),n.push(`uniform int offset${f.name};`)),e.enableShapeUniforms){let{uniformShape:h}=ww(e.packedInputs,f.shapeInfo.logicalShape,f.shapeInfo.texShape);switch(h.length){case 1:n.push(`uniform int ${f.name}Shape;`);break;case 2:n.push(`uniform ivec2 ${f.name}Shape;`);break;case 3:n.push(`uniform ivec3 ${f.name}Shape;`);break;case 4:n.push(`uniform ivec4 ${f.name}Shape;`);break;default:break}n.push(`uniform ivec2 ${f.name}TexShape;`)}}),e.enableShapeUniforms){switch(t.logicalShape.length){case 1:n.push("uniform int outShape;");break;case 2:n.push("uniform ivec2 outShape;"),n.push("uniform int outShapeStrides;");break;case 3:n.push("uniform ivec3 outShape;"),n.push("uniform ivec2 outShapeStrides;");break;case 4:n.push("uniform ivec4 outShape;"),n.push("uniform ivec3 outShapeStrides;");break;default:break}n.push("uniform ivec2 outTexShape;")}e.customUniforms&&e.customUniforms.forEach(f=>{n.push(`uniform ${f.type} ${f.name}${f.arrayIndex?`[${f.arrayIndex}]`:""};`)});let o=n.join(`
`),s=r.map(f=>ttt(f,t,e.packedInputs,e.enableShapeUniforms)).join(`
`),i=t.texShape,a=Ve(),u=ntt(a),l,c,p=itt(a);return t.isPacked?(l=ett(t.logicalShape,i,e.enableShapeUniforms),c=stt(a)):(l=rtt(t.logicalShape,i,e.enableShapeUniforms),c=ott(a)),e.packedInputs&&(p+=ctt),[p,u,c,o,l,s,e.userCode].join(`
`)}function dd(r,t=!1){let e=r.shapeInfo.logicalShape;switch(e.length){case 0:return Itt(r,t);case 1:return Stt(r,t);case 2:return ktt(r,t);case 3:return Ett(r,t);case 4:return Att(r,t);case 5:return $tt(r);case 6:return Dtt(r);default:throw new Error(`${e.length}-D input sampling is not yet supported`)}}function XP(r,t){switch(r.shapeInfo.logicalShape.length){case 0:return Ctt(r);case 1:return vtt(r,t);case 2:return Ntt(r,t);case 3:return Ttt(r,t);default:return _tt(r,t)}}function ttt(r,t,e=!1,n){let o="";e?o+=XP(r,n):o+=dd(r,n);let s=r.shapeInfo.logicalShape,i=t.logicalShape;return s.length<=i.length&&(e?o+=Rtt(r,t):o+=Ftt(r,t)),o}function ett(r,t,e){switch(r.length){case 0:return YP();case 1:return ptt(r,t,e);case 2:return btt(r,t,e);case 3:return ftt(r,t,e);default:return htt(r,t,e)}}function rtt(r,t,e){switch(r.length){case 0:return YP();case 1:return mtt(r,t,e);case 2:return wtt(r,t,e);case 3:return dtt(r,t,e);case 4:return gtt(r,t,e);case 5:return xtt(r,t);case 6:return ytt(r,t);default:throw new Error(`${r.length}-D output sampling is not yet supported`)}}function ntt(r){return`
float sampleTexture(sampler2D textureSampler, vec2 uv) {
return ${r.texture2D}(textureSampler, uv).r;
}
`}function ott(r){return`
void setOutput(float val) {
${r.output} = vec4(val, 0, 0, 0);
}
`}function stt(r){return`
void setOutput(vec4 val) {
${r.output} = val;
}
`}function itt(r){return`${r.version}
precision highp float;
precision highp int;
precision highp sampler2D;
${r.varyingFs} vec2 resultUV;
${r.defineOutput}
const vec2 halfCR = vec2(0.5, 0.5);
struct ivec5
{
int x;
int y;
int z;
int w;
int u;
};
struct ivec6
{
int x;
int y;
int z;
int w;
int u;
int v;
};
uniform float NAN;
${r.defineSpecialNaN}
${r.defineSpecialInf}
${r.defineRound}
int imod(int x, int y) {
return x - y * (x / y);
}
int idiv(int a, int b, float sign) {
int res = a / b;
int mod = imod(a, b);
if (sign < 0. && mod != 0) {
res -= 1;
}
return res;
}
//Based on the work of Dave Hoskins
//https://www.shadertoy.com/view/4djSRW
#define HASHSCALE1 443.8975
float random(float seed){
vec2 p = resultUV * seed;
vec3 p3 = fract(vec3(p.xyx) * HASHSCALE1);
p3 += dot(p3, p3.yzx + 19.19);
return fract((p3.x + p3.y) * p3.z);
}
${att}
${ltt}
${utt}
`}var att=`
vec2 uvFromFlat(int texNumR, int texNumC, int index) {
int texR = index / texNumC;
int texC = index - texR * texNumC;
return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);
}
vec2 packedUVfrom1D(int texNumR, int texNumC, int index) {
int texelIndex = index / 2;
int texR = texelIndex / texNumC;
int texC = texelIndex - texR * texNumC;
return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);
}
`,ltt=`
vec2 packedUVfrom2D(int texelsInLogicalRow, int texNumR,
int texNumC, int row, int col) {
int texelIndex = (row / 2) * texelsInLogicalRow + (col / 2);
int texR = texelIndex / texNumC;
int texC = texelIndex - texR * texNumC;
return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);
}
`,utt=`
vec2 packedUVfrom3D(int texNumR, int texNumC,
int texelsInBatch, int texelsInLogicalRow, int b,
int row, int col) {
int index = b * texelsInBatch + (row / 2) * texelsInLogicalRow + (col / 2);
int texR = index / texNumC;
int texC = index - texR * texNumC;
return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);
}
`,ctt=`
float getChannel(vec4 frag, vec2 innerDims) {
vec2 modCoord = mod(innerDims, 2.);
return modCoord.x == 0. ?
(modCoord.y == 0. ? frag.r : frag.g) :
(modCoord.y == 0. ? frag.b : frag.a);
}
float getChannel(vec4 frag, int dim) {
float modCoord = mod(float(dim), 2.);
return modCoord == 0. ? frag.r : frag.g;
}
`;function YP(){return`
int getOutputCoords() {
return 0;
}
`}function ptt(r,t,e){let n=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)];return n[0]===1?e?`
int getOutputCoords() {
return 2 * int(resultUV.x * ceil(float(outTexShape[1]) / 2.0));
}
`:`
int getOutputCoords() {
return 2 * int(resultUV.x * ${n[1]}.0);
}
`:n[1]===1?e?`
int getOutputCoords() {
return 2 * int(resultUV.y * ceil(float(outTexShape[0]) / 2.0));
}
`:`
int getOutputCoords() {
return 2 * int(resultUV.y * ${n[0]}.0);
}
`:e?`
int getOutputCoords() {
ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0));
ivec2 resTexRC = ivec2(resultUV.yx *
vec2(packedTexShape[0], packedTexShape[1]));
return 2 * (resTexRC.x * packedTexShape[1] + resTexRC.y);
}
`:`
int getOutputCoords() {
ivec2 resTexRC = ivec2(resultUV.yx *
vec2(${n[0]}, ${n[1]}));
return 2 * (resTexRC.x * ${n[1]} + resTexRC.y);
}
`}function mtt(r,t,e){return t[0]===1?e?`
int getOutputCoords() {
return int(resultUV.x * float(outTexShape[1]));
}
`:`
int getOutputCoords() {
return int(resultUV.x * ${t[1]}.0);
}
`:t[1]===1?e?`
int getOutputCoords() {
return int(resultUV.y * float(outTexShape[0]));
}
`:`
int getOutputCoords() {
return int(resultUV.y * ${t[0]}.0);
}
`:e?`
int getOutputCoords() {
ivec2 resTexRC = ivec2(resultUV.yx *
vec2(outTexShape[0], outTexShape[1]));
return resTexRC.x * outTexShape[1] + resTexRC.y;
}
`:`
int getOutputCoords() {
ivec2 resTexRC = ivec2(resultUV.yx *
vec2(${t[0]}, ${t[1]}));
return resTexRC.x * ${t[1]} + resTexRC.y;
}
`}function ftt(r,t,e){if(e)return`
ivec3 getOutputCoords() {
ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0));
int texelsInLogicalRow = int(ceil(float(outShape[2]) / 2.0));
int texelsInBatch = texelsInLogicalRow * int(ceil(float(outShape[1]) / 2.0));
ivec2 resTexRC = ivec2(resultUV.yx *
vec2(packedTexShape[0], packedTexShape[1]));
int index = resTexRC.x * packedTexShape[1] + resTexRC.y;
int b = index / texelsInBatch;
index -= b * texelsInBatch;
int r = 2 * (index / texelsInLogicalRow);
int c = imod(index, texelsInLogicalRow) * 2;
return ivec3(b, r, c);
}
`;let n=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)],o=Math.ceil(r[2]/2),s=o*Math.ceil(r[1]/2);return`
ivec3 getOutputCoords() {
ivec2 resTexRC = ivec2(resultUV.yx *
vec2(${n[0]}, ${n[1]}));
int index = resTexRC.x * ${n[1]} + resTexRC.y;
int b = index / ${s};
index -= b * ${s};
int r = 2 * (index / ${o});
int c = imod(index, ${o}) * 2;
return ivec3(b, r, c);
}
`}function dtt(r,t,e){if(e)return`
ivec3 getOutputCoords() {
ivec2 resTexRC = ivec2(resultUV.yx *
vec2(outTexShape[0], outTexShape[1]));
int index = resTexRC.x * outTexShape[1] + resTexRC.y;
${Mc(["r","c","d"],r)}
return ivec3(r, c, d);
}
`;let n=Js(["r","c","d"],r);return`
ivec3 getOutputCoords() {
ivec2 resTexRC = ivec2(resultUV.yx *
vec2(${t[0]}, ${t[1]}));
int index = resTexRC.x * ${t[1]} + resTexRC.y;
${n}
return ivec3(r, c, d);
}
`}function htt(r,t,e){if(e)return`
ivec4 getOutputCoords() {
ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0));
ivec2 resTexRC = ivec2(resultUV.yx *
vec2(packedTexShape[0], packedTexShape[1]));
int index = resTexRC.x * packedTexShape[1] + resTexRC.y;
int texelsInLogicalRow = int(ceil(float(outShape[3]) / 2.0));
int texelsInBatch = texelsInLogicalRow * int(ceil(float(outShape[2]) / 2.0));
int texelsInBatchN = texelsInBatch * outShape[1];
int b2 = index / texelsInBatchN;
index -= b2 * texelsInBatchN;
int b = index / texelsInBatch;
index -= b * texelsInBatch;
int r = 2 * (index / texelsInLogicalRow);
int c = imod(index, texelsInLogicalRow) * 2;
return ivec4(b2, b, r, c);
}
`;let n=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)],o=Math.ceil(r[r.length-1]/2),s=o*Math.ceil(r[r.length-2]/2),i=s,a="",u="b, r, c";for(let l=2;l<r.length-1;l++)i*=r[r.length-l-1],a=`
int b${l} = index / ${i};
index -= b${l} * ${i};
`+a,u=`b${l}, `+u;return`
ivec${r.length} getOutputCoords() {
ivec2 resTexRC = ivec2(resultUV.yx *
vec2(${n[0]}, ${n[1]}));
int index = resTexRC.x * ${n[1]} + resTexRC.y;
${a}
int b = index / ${s};
index -= b * ${s};
int r = 2 * (index / ${o});
int c = imod(index, ${o}) * 2;
return ivec${r.length}(${u});
}
`}function gtt(r,t,e){if(e)return`
ivec4 getOutputCoords() {
ivec2 resTexRC = ivec2(resultUV.yx *
vec2(outTexShape[0], outTexShape[1]));
int index = resTexRC.x * outTexShape[1] + resTexRC.y;
${Mc(["r","c","d","d2"],r)}
return ivec4(r, c, d, d2);
}
`;let n=Js(["r","c","d","d2"],r);return`
ivec4 getOutputCoords() {
ivec2 resTexRC = ivec2(resultUV.yx *
vec2(${t[0]}, ${t[1]}));
int index = resTexRC.x * ${t[1]} + resTexRC.y;
${n}
return ivec4(r, c, d, d2);
}
`}function xtt(r,t){let e=Js(["r","c","d","d2","d3"],r);return`
ivec5 getOutputCoords() {
ivec2 resTexRC = ivec2(resultUV.yx * vec2(${t[0]},
${t[1]}));
int index = resTexRC.x * ${t[1]} + resTexRC.y;
${e}
ivec5 outShape = ivec5(r, c, d, d2, d3);
return outShape;
}
`}function ytt(r,t){let e=Js(["r","c","d","d2","d3","d4"],r);return`
ivec6 getOutputCoords() {
ivec2 resTexRC = ivec2(resultUV.yx *
vec2(${t[0]}, ${t[1]}));
int index = resTexRC.x * ${t[1]} + resTexRC.y;
${e}
ivec6 result = ivec6(r, c, d, d2, d3, d4);
return result;
}
`}function btt(r,t,e){let n=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)];if(y.arraysEqual(r,t))return e?`
ivec2 getOutputCoords() {
ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0));
return 2 * ivec2(resultUV.yx * vec2(packedTexShape[0], packedTexShape[1]));
}
`:`
ivec2 getOutputCoords() {
return 2 * ivec2(resultUV.yx * vec2(${n[0]}, ${n[1]}));
}
`;let o=Math.ceil(r[1]/2);return e?`
ivec2 getOutputCoords() {
ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0));
int texelsInLogicalRow = int(ceil(float(outShape[1]) / 2.0));
ivec2 resTexRC = ivec2(resultUV.yx *
vec2(packedTexShape[0], packedTexShape[1]));
int index = resTexRC.x * packedTexShape[1] + resTexRC.y;
int r = 2 * (index / texelsInLogicalRow);
int c = imod(index, texelsInLogicalRow) * 2;
return ivec2(r, c);
}
`:`
ivec2 getOutputCoords() {
ivec2 resTexRC = ivec2(resultUV.yx *
vec2(${n[0]}, ${n[1]}));
int index = resTexRC.x * ${n[1]} + resTexRC.y;
int r = 2 * (index / ${o});
int c = imod(index, ${o}) * 2;
return ivec2(r, c);
}
`}function wtt(r,t,e){return y.arraysEqual(r,t)?e?`
ivec2 getOutputCoords() {
return ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1]));
}
`:`
ivec2 getOutputCoords() {
return ivec2(resultUV.yx * vec2(${t[0]}, ${t[1]}));
}
`:r[1]===1?e?`
ivec2 getOutputCoords() {
ivec2 resTexRC = ivec2(resultUV.yx *
vec2(outTexShape[0], outTexShape[1]));
int index = resTexRC.x * outTexShape[1] + resTexRC.y;
return ivec2(index, 0);
}
`:`
ivec2 getOutputCoords() {
ivec2 resTexRC = ivec2(resultUV.yx *
vec2(${t[0]}, ${t[1]}));
int index = resTexRC.x * ${t[1]} + resTexRC.y;
return ivec2(index, 0);
}
`:r[0]===1?e?`
ivec2 getOutputCoords() {
ivec2 resTexRC = ivec2(resultUV.yx *
vec2(outTexShape[0], outTexShape[1]));
int index = resTexRC.x * outTexShape[1] + resTexRC.y;
return ivec2(0, index);
}
`:`
ivec2 getOutputCoords() {
ivec2 resTexRC = ivec2(resultUV.yx *
vec2(${t[0]}, ${t[1]}));
int index = resTexRC.x * ${t[1]} + resTexRC.y;
return ivec2(0, index);
}
`:e?`
ivec2 getOutputCoords() {
ivec2 resTexRC = ivec2(resultUV.yx *
vec2(outTexShape[0], outTexShape[1]));
int index = resTexRC.x * outTexShape[1] + resTexRC.y;
int r = index / outShape[1];
int c = index - r * outShape[1];
return ivec2(r, c);
}
`:`
ivec2 getOutputCoords() {
ivec2 resTexRC = ivec2(resultUV.yx *
vec2(${t[0]}, ${t[1]}));
int index = resTexRC.x * ${t[1]} + resTexRC.y;
int r = index / ${r[1]};
int c = index - r * ${r[1]};
return ivec2(r, c);
}
`}function zc(r){return`offset${r}`}function Ctt(r){let t=r.name,e="get"+t.charAt(0).toUpperCase()+t.slice(1),n=Ve();return`
vec4 ${e}() {
return ${n.texture2D}(${t}, halfCR);
}
`}function Itt(r,t){let e=r.name,n="get"+e.charAt(0).toUpperCase()+e.slice(1);if(r.shapeInfo.isUniform)return`float ${n}() {return ${e};}`;let[o,s]=r.shapeInfo.texShape;if(o===1&&s===1)return`
float ${n}() {
return sampleTexture(${e}, halfCR);
}
`;let i=zc(e);if(t)return`
float ${n}() {
vec2 uv = uvFromFlat(${e}TexShape[0], ${e}TexShape[1], ${i});
return sampleTexture(${e}, uv);
}
`;let[a,u]=r.shapeInfo.texShape;return`
float ${n}() {
vec2 uv = uvFromFlat(${a}, ${u}, ${i});
return sampleTexture(${e}, uv);
}
`}function vtt(r,t){let e=r.name,n="get"+e.charAt(0).toUpperCase()+e.slice(1),o=r.shapeInfo.texShape,s=Ve();if(t)return`
vec4 ${n}(int index) {
ivec2 packedTexShape = ivec2(ceil(float(${e}TexShape[0]) / 2.0), ceil(float(${e}TexShape[1]) / 2.0));
vec2 uv = packedUVfrom1D(
packedTexShape[0], packedTexShape[1], index);
return ${s.texture2D}(${e}, uv);
}
`;let i=[Math.ceil(o[0]/2),Math.ceil(o[1]/2)];return`
vec4 ${n}(int index) {
vec2 uv = packedUVfrom1D(
${i[0]}, ${i[1]}, index);
return ${s.texture2D}(${e}, uv);
}
`}function Stt(r,t){let e=r.name,n="get"+e.charAt(0).toUpperCase()+e.slice(1);if(r.shapeInfo.isUniform)return`
float ${n}(int index) {
${hd(r)}
}
`;let o=r.shapeInfo.texShape,s=o[0],i=o[1];if(i===1&&s===1)return`
float ${n}(int index) {
return sampleTexture(${e}, halfCR);
}
`;let a=zc(e);return i===1?t?`
float ${n}(int index) {
vec2 uv = vec2(0.5, (float(index + ${a}) + 0.5) / float(${e}TexShape[0]));
return sampleTexture(${e}, uv);
}
`:`
float ${n}(int index) {
vec2 uv = vec2(0.5, (float(index + ${a}) + 0.5) / ${s}.0);
return sampleTexture(${e}, uv);
}
`:s===1?t?`
float ${n}(int index) {
vec2 uv = vec2((float(index + ${a}) + 0.5) / float(${e}TexShape[1]), 0.5);
return sampleTexture(${e}, uv);
}
`:`
float ${n}(int index) {
vec2 uv = vec2((float(index + ${a}) + 0.5) / ${i}.0, 0.5);
return sampleTexture(${e}, uv);
}
`:t?`
float ${n}(int index) {
vec2 uv = uvFromFlat(${e}TexShape[0], ${e}TexShape[1], index + ${a});
return sampleTexture(${e}, uv);
}
`:`
float ${n}(int index) {
vec2 uv = uvFromFlat(${s}, ${i}, index + ${a});
return sampleTexture(${e}, uv);
}
`}function Ntt(r,t){let e=r.shapeInfo.logicalShape,n=r.name,o="get"+n.charAt(0).toUpperCase()+n.slice(1),s=r.shapeInfo.texShape,i=s[0],a=s[1],u=Ve();if(s!=null&&y.arraysEqual(e,s))return t?`
vec4 ${o}(int row, int col) {
vec2 uv = (vec2(col, row) + halfCR) / vec2(${n}TexShape[1], ${n}TexShape[0]);
return ${u.texture2D}(${n}, uv);
}
`:`
vec4 ${o}(int row, int col) {
vec2 uv = (vec2(col, row) + halfCR) / vec2(${a}.0, ${i}.0);
return ${u.texture2D}(${n}, uv);
}
`;if(t)return`
vec4 ${o}(int row, int col) {
ivec2 packedTexShape = ivec2(ceil(float(${n}TexShape[0]) / 2.0), ceil(float(${n}TexShape[1]) / 2.0));
int valuesPerRow = int(ceil(float(${n}Shape[1]) / 2.0));
vec2 uv = packedUVfrom2D(valuesPerRow, packedTexShape[0], packedTexShape[1], row, col);
return ${u.texture2D}(${n}, uv);
}
`;let l=[Math.ceil(s[0]/2),Math.ceil(s[1]/2)],c=Math.ceil(e[1]/2);return`
vec4 ${o}(int row, int col) {
vec2 uv = packedUVfrom2D(${c}, ${l[0]}, ${l[1]}, row, col);
return ${u.texture2D}(${n}, uv);
}
`}function ktt(r,t){let e=r.shapeInfo.logicalShape,n=r.name,o="get"+n.charAt(0).toUpperCase()+n.slice(1),s=r.shapeInfo.texShape;if(s!=null&&y.arraysEqual(e,s)){if(t)return`
float ${o}(int row, int col) {
vec2 uv = (vec2(col, row) + halfCR) / vec2(${n}TexShape[1], ${n}TexShape[0]);
return sampleTexture(${n}, uv);
}
`;let m=s[0],f=s[1];return`
float ${o}(int row, int col) {
vec2 uv = (vec2(col, row) + halfCR) / vec2(${f}.0, ${m}.0);
return sampleTexture(${n}, uv);
}
`}let{newShape:i,keptDims:a}=y.squeezeShape(e),u=i;if(u.length<e.length){let m=gd(r,u),f=["row","col"];return`
${dd(m,t)}
float ${o}(int row, int col) {
return ${o}(${xd(f,a)});
}
`}if(r.shapeInfo.isUniform)return`
float ${o}(int row, int col) {
int index = round(dot(vec2(row, col), vec2(${e[1]}, 1)));
${hd(r)}
}
`;let l=s[0],c=s[1],p=zc(n);return c===1?t?`
float ${o}(int row, int col) {
float index = dot(vec3(row, col, ${p}), vec3(${n}Shape[1], 1, 1));
vec2 uv = vec2(0.5, (index + 0.5) / float(${n}TexShape[0]));
return sampleTexture(${n}, uv);
}
`:`
float ${o}(int row, int col) {
float index = dot(vec3(row, col, ${p}), vec3(${e[1]}, 1, 1));
vec2 uv = vec2(0.5, (index + 0.5) / ${l}.0);
return sampleTexture(${n}, uv);
}
`:l===1?t?`
float ${o}(int row, int col) {
float index = dot(vec3(row, col, ${p}), vec3(${n}Shape[1], 1, 1));
vec2 uv = vec2((index + 0.5) / float(${n}TexShape[1]), 0.5);
return sampleTexture(${n}, uv);
}
`:`
float ${o}(int row, int col) {
float index = dot(vec3(row, col, ${p}), vec3(${e[1]}, 1, 1));
vec2 uv = vec2((index + 0.5) / ${c}.0, 0.5);
return sampleTexture(${n}, uv);
}
`:t?`
float ${o}(int row, int col) {
// Explicitly use integer operations as dot() only works on floats.
int index = row * ${n}Shape[1] + col + ${p};
vec2 uv = uvFromFlat(${n}TexShape[0], ${n}TexShape[1], index);
return sampleTexture(${n}, uv);
}
`:`
float ${o}(int row, int col) {
// Explicitly use integer operations as dot() only works on floats.
int index = row * ${e[1]} + col + ${p};
vec2 uv = uvFromFlat(${l}, ${c}, index);
return sampleTexture(${n}, uv);
}
`}function Ttt(r,t){let e=r.shapeInfo.logicalShape,n=r.name,o="get"+n.charAt(0).toUpperCase()+n.slice(1),s=r.shapeInfo.texShape,i=[Math.ceil(s[0]/2),Math.ceil(s[1]/2)];if(e[0]===1){let m=e.slice(1),f=[1,2],d=gd(r,m),h=["b","row","col"];return`
${XP(d,t)}
vec4 ${o}(int b, int row, int col) {
return ${o}(${xd(h,f)});
}
`}let a=Ve();if(t)return`
vec4 ${o}(int b, int row, int col) {
ivec2 packedTexShape = ivec2(ceil(float(${n}TexShape[0]) / 2.0), ceil(float(${n}TexShape[1]) / 2.0));
int valuesPerRow = int(ceil(float(${n}Shape[2]) / 2.0));
int texelsInBatch = valuesPerRow * int(ceil(float(${n}Shape[1]) / 2.0));
vec2 uv = packedUVfrom3D(
packedTexShape[0], packedTexShape[1], texelsInBatch, valuesPerRow, b, row, col);
return ${a.texture2D}(${n}, uv);
}
`;let u=i[0],l=i[1],c=Math.ceil(e[2]/2),p=c*Math.ceil(e[1]/2);return`
vec4 ${o}(int b, int row, int col) {
vec2 uv = packedUVfrom3D(
${u}, ${l}, ${p}, ${c}, b, row, col);
return ${a.texture2D}(${n}, uv);
}
`}function Ett(r,t){let e=r.shapeInfo.logicalShape,n=r.name,o="get"+n.charAt(0).toUpperCase()+n.slice(1),s=e[1]*e[2],i=e[2],{newShape:a,keptDims:u}=y.squeezeShape(e),l=a;if(l.length<e.length){let h=gd(r,l),g=["row","col","depth"];return`
${dd(h,t)}
float ${o}(int row, int col, int depth) {
return ${o}(${xd(g,u)});
}
`}if(r.shapeInfo.isUniform)return`
float ${o}(int row, int col, int depth) {
int index = round(dot(vec3(row, col, depth),
vec3(${s}, ${i}, 1)));
${hd(r)}
}
`;let c=r.shapeInfo.texShape,p=c[0],m=c[1],f=r.shapeInfo.flatOffset;if(m===s&&f==null)return t?`
float ${o}(int row, int col, int depth) {
int stride1 = ${n}Shape[2];
float texR = float(row);
float texC = dot(vec2(col, depth), vec2(stride1, 1));
vec2 uv = (vec2(texC, texR) + halfCR) /
vec2(${n}TexShape[1], ${n}TexShape[0]);
return sampleTexture(${n}, uv);
}
`:`
float ${o}(int row, int col, int depth) {
float texR = float(row);
float texC = dot(vec2(col, depth), vec2(${i}, 1));
vec2 uv = (vec2(texC, texR) + halfCR) /
vec2(${m}.0, ${p}.0);
return sampleTexture(${n}, uv);
}
`;if(m===i&&f==null)return t?`
float ${o}(int row, int col, int depth) {
float texR = dot(vec2(row, col), vec2(${n}Shape[1], 1));
float texC = float(depth);
vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${n}TexShape[1], ${n}TexShape[0]);
return sampleTexture(${n}, uv);
}
`:`
float ${o}(int row, int col, int depth) {
float texR = dot(vec2(row, col), vec2(${e[1]}, 1));
float texC = float(depth);
vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${m}.0, ${p}.0);
return sampleTexture(${n}, uv);
}
`;let d=zc(n);return t?`
float ${o}(int row, int col, int depth) {
// Explicitly use integer operations as dot() only works on floats.
int stride0 = ${n}Shape[1] * ${n}Shape[2];
int stride1 = ${n}Shape[2];
int index = row * stride0 + col * stride1 + depth + ${d};
vec2 uv = uvFromFlat(${n}TexShape[0], ${n}TexShape[1], index);
return sampleTexture(${n}, uv);
}
`:`
float ${o}(int row, int col, int depth) {
// Explicitly use integer operations as dot() only works on floats.
int index = row * ${s} + col * ${i} + depth + ${d};
vec2 uv = uvFromFlat(${p}, ${m}, index);
return sampleTexture(${n}, uv);
}
`}function _tt(r,t){let e=r.name,n="get"+e.charAt(0).toUpperCase()+e.slice(1),o=Ve();if(t)return`
vec4 ${n}(int b2, int b, int row, int col) {
int valuesPerRow = int(ceil(float(${e}Shape[3]) / 2.0));
int texelsInBatch = valuesPerRow * int(ceil(float(${e}Shape[2]) / 2.0));
int index = b * texelsInBatch + (row / 2) * valuesPerRow + (col / 2);
texelsInBatch *= ${e}Shape[1];
index = b2 * texelsInBatch + index;
ivec2 packedTexShape = ivec2(ceil(float(${e}TexShape[0]) / 2.0), ceil(float(${e}TexShape[1]) / 2.0));
int texR = index / packedTexShape[1];
int texC = index - texR * packedTexShape[1];
vec2 uv = (vec2(texC, texR) + halfCR) / vec2(packedTexShape[1], packedTexShape[0]); return ${o.texture2D}(${e}, uv);
}
`;let s=r.shapeInfo.logicalShape,i=s.length,a=r.shapeInfo.texShape,u=[Math.ceil(a[0]/2),Math.ceil(a[1]/2)],l=u[0],c=u[1],p=Math.ceil(s[i-1]/2),m=p*Math.ceil(s[i-2]/2),f="int b, int row, int col",d=`b * ${m} + (row / 2) * ${p} + (col / 2)`;for(let h=2;h<i-1;h++)f=`int b${h}, `+f,m*=s[i-h-1],d=`b${h} * ${m} + `+d;return`
vec4 ${n}(${f}) {
int index = ${d};
int texR = index / ${c};
int texC = index - texR * ${c};
vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${c}, ${l});
return ${o.texture2D}(${e}, uv);
}
`}function Att(r,t){let e=r.shapeInfo.logicalShape,n=r.name,o="get"+n.charAt(0).toUpperCase()+n.slice(1),s=e[3],i=e[2]*s,a=e[1]*i,{newShape:u,keptDims:l}=y.squeezeShape(e);if(u.length<e.length){let b=gd(r,u),w=["row","col","depth","depth2"];return`
${dd(b,t)}
float ${o}(int row, int col, int depth, int depth2) {
return ${o}(${xd(w,l)});
}
`}if(r.shapeInfo.isUniform)return`
float ${o}(int row, int col, int depth, int depth2) {
int index = round(dot(vec4(row, col, depth, depth2),
vec4(${a}, ${i}, ${s}, 1)));
${hd(r)}
}
`;let c=r.shapeInfo.flatOffset,p=r.shapeInfo.texShape,m=p[0],f=p[1],d=`int stride2 = ${n}Shape[3];`,h=`int stride1 = ${n}Shape[2] * stride2;`,g=`int stride0 = ${n}Shape[1] * stride1;`;if(f===a&&c==null)return t?`
float ${o}(int row, int col, int depth, int depth2) {
${d}
${h}
float texR = float(row);
float texC =
dot(vec3(col, depth, depth2),
vec3(stride1, stride2, 1));
vec2 uv = (vec2(texC, texR) + halfCR) /
vec2(${n}TexShape[1], ${n}TexShape[0]);
return sampleTexture(${n}, uv);
}
`:`
float ${o}(int row, int col, int depth, int depth2) {
float texR = float(row);
float texC =
dot(vec3(col, depth, depth2),
vec3(${i}, ${s}, 1));
vec2 uv = (vec2(texC, texR) + halfCR) /
vec2(${f}.0, ${m}.0);
return sampleTexture(${n}, uv);
}
`;if(f===s&&c==null)return t?`
float ${o}(int row, int col, int depth, int depth2) {
float texR = dot(vec3(row, col, depth),
vec3(${n}Shape[1] * ${n}Shape[2], ${n}Shape[2], 1));
float texC = float(depth2);
vec2 uv = (vec2(texC, texR) + halfCR) /
vec2(${n}TexShape[1], ${n}TexShape[0]);
return sampleTexture(${n}, uv);
}
`:`
float ${o}(int row, int col, int depth, int depth2) {
float texR = dot(vec3(row, col, depth),
vec3(${e[1]*e[2]}, ${e[2]}, 1));
float texC = float(depth2);
vec2 uv = (vec2(texC, texR) + halfCR) /
vec2(${f}.0, ${m}.0);
return sampleTexture(${n}, uv);
}
`;let x=zc(n);return t?`
float ${o}(int row, int col, int depth, int depth2) {
// Explicitly use integer operations as dot() only works on floats.
${d}
${h}
${g}
int index = row * stride0 + col * stride1 +
depth * stride2 + depth2;
vec2 uv = uvFromFlat(${n}TexShape[0], ${n}TexShape[1], index + ${x});
return sampleTexture(${n}, uv);
}
`:`
float ${o}(int row, int col, int depth, int depth2) {
// Explicitly use integer operations as dot() only works on floats.
int index = row * ${a} + col * ${i} +
depth * ${s} + depth2;
vec2 uv = uvFromFlat(${m}, ${f}, index + ${x});
return sampleTexture(${n}, uv);
}
`}function $tt(r){let t=r.shapeInfo.logicalShape,e=r.name,n="get"+e.charAt(0).toUpperCase()+e.slice(1),o=t[4],s=t[3]*o,i=t[2]*s,a=t[1]*i,{newShape:u,keptDims:l}=y.squeezeShape(t);if(u.length<t.length){let h=gd(r,u),g=["row","col","depth","depth2","depth3"];return`
${dd(h)}
float ${n}(int row, int col, int depth, int depth2, int depth3) {
return ${n}(${xd(g,l)});
}
`}if(r.shapeInfo.isUniform)return`
float ${n}(int row, int col, int depth, int depth2, int depth3) {
float index = dot(
vec4(row, col, depth, depth2),
vec4(${a}, ${i}, ${s}, ${o})) +
depth3;
${hd(r)}
}
`;let c=r.shapeInfo.flatOffset,p=r.shapeInfo.texShape,m=p[0],f=p[1];if(f===a&&c==null)return`
float ${n}(int row, int col, int depth, int depth2, int depth3) {
int texR = row;
float texC = dot(vec4(col, depth, depth2, depth3),
vec4(${i}, ${s}, ${o}, 1));
vec2 uv = (vec2(texC, texR) + halfCR) /
vec2(${f}.0, ${m}.0);
return sampleTexture(${e}, uv);
}
`;if(f===o&&c==null)return`
float ${n}(int row, int col, int depth, int depth2, int depth3) {
float texR = dot(
vec4(row, col, depth, depth2),
vec4(${t[1]*t[2]*t[3]},
${t[2]*t[3]}, ${t[3]}, 1));
int texC = depth3;
vec2 uv = (vec2(texC, texR) + halfCR) /
vec2(${f}.0, ${m}.0);
return sampleTexture(${e}, uv);
}
`;let d=zc(e);return`
float ${n}(int row, int col, int depth, int depth2, int depth3) {
// Explicitly use integer operations as dot() only works on floats.
int index = row * ${a} + col * ${i} + depth * ${s} +
depth2 * ${o} + depth3 + ${d};
vec2 uv = uvFromFlat(${m}, ${f}, index);
return sampleTexture(${e}, uv);
}
`}function Dtt(r){let t=r.shapeInfo.logicalShape,e=r.name,n="get"+e.charAt(0).toUpperCase()+e.slice(1),{newShape:o,keptDims:s}=y.squeezeShape(t);if(o.length<t.length){let g=gd(r,o),x=["row","col","depth","depth2","depth3","depth4"];return`
${dd(g)}
float ${n}(int row, int col, int depth,
int depth2, int depth3, int depth4) {
return ${n}(${xd(x,s)});
}
`}let i=t[5],a=t[4]*i,u=t[3]*a,l=t[2]*u,c=t[1]*l;if(r.shapeInfo.isUniform)return`
float ${n}(int row, int col, int depth,
int depth2, int depth3, int depth4) {
int index = round(dot(
vec4(row, col, depth, depth2),
vec4(${c}, ${l}, ${u}, ${a})) +
dot(
vec2(depth3, depth4),
vec2(${i}, 1)));
${hd(r)}
}
`;let p=r.shapeInfo.flatOffset,m=r.shapeInfo.texShape,f=m[0],d=m[1];if(d===c&&p==null)return`
float ${n}(int row, int col, int depth,
int depth2, int depth3, int depth4) {
int texR = row;
float texC = dot(vec4(col, depth, depth2, depth3),
vec4(${l}, ${u}, ${a}, ${i})) +
float(depth4);
vec2 uv = (vec2(texC, texR) + halfCR) /
vec2(${d}.0, ${f}.0);
return sampleTexture(${e}, uv);
}
`;if(d===i&&p==null)return`
float ${n}(int row, int col, int depth,
int depth2, int depth3, int depth4) {
float texR = dot(vec4(row, col, depth, depth2),
vec4(${t[1]*t[2]*t[3]*t[4]},
${t[2]*t[3]*t[4]},
${t[3]*t[4]},
${t[4]})) + float(depth3);
int texC = depth4;
vec2 uv = (vec2(texC, texR) + halfCR) /
vec2(${d}.0, ${f}.0);
return sampleTexture(${e}, uv);
}
`;let h=zc(e);return`
float ${n}(int row, int col, int depth,
int depth2, int depth3, int depth4) {
// Explicitly use integer operations as dot() only works on floats.
int index = row * ${c} + col * ${l} + depth * ${u} +
depth2 * ${a} + depth3 * ${i} + depth4 + ${h};
vec2 uv = uvFromFlat(${f}, ${d}, index);
return sampleTexture(${e}, uv);
}
`}function hd(r){let t=r.name,e=y.sizeFromShape(r.shapeInfo.logicalShape);return e<2?`return ${t};`:`
for (int i = 0; i < ${e}; i++) {
if (i == index) {
return ${t}[i];
}
}
`}function Rtt(r,t){let e=r.name,n=e.charAt(0).toUpperCase()+e.slice(1),o="get"+n+"AtOutCoords",s=r.shapeInfo.logicalShape.length,i=t.logicalShape.length,a=KP(r.shapeInfo.logicalShape,t.logicalShape),u=zt(i),l=i-s,c,p=["x","y","z","w","u","v"];s===0?c="":i<2&&a.length>=1?c="coords = 0;":c=a.map(b=>`coords.${p[b+l]} = 0;`).join(`
`);let m="";i<2&&s>0?m="coords":m=r.shapeInfo.logicalShape.map((b,w)=>`coords.${p[w+l]}`).join(", ");let f="return outputValue;",h=y.sizeFromShape(r.shapeInfo.logicalShape)===1,x=y.sizeFromShape(t.logicalShape)===1;if(s===1&&!h&&!x)f=`
return vec4(outputValue.xy, outputValue.xy);
`;else if(h&&!x)i===1?f=`
return vec4(outputValue.x, outputValue.x, 0., 0.);
`:f=`
return vec4(outputValue.x);
`;else if(a.length){let b=s-2,w=s-1;a.indexOf(b)>-1&&a.indexOf(w)>-1?f="return vec4(outputValue.x);":a.indexOf(b)>-1?f="return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);":a.indexOf(w)>-1&&(f="return vec4(outputValue.xx, outputValue.zz);")}return`
vec4 ${o}() {
${u} coords = getOutputCoords();
${c}
vec4 outputValue = get${n}(${m});
${f}
}
`}function Ftt(r,t){let e=r.name,n=e.charAt(0).toUpperCase()+e.slice(1),o="get"+n+"AtOutCoords",s=t.texShape,i=r.shapeInfo.texShape,a=r.shapeInfo.logicalShape.length,u=t.logicalShape.length;if(!r.shapeInfo.isUniform&&a===u&&r.shapeInfo.flatOffset==null&&y.arraysEqual(i,s))return`
float ${o}() {
return sampleTexture(${e}, resultUV);
}
`;let l=zt(u),c=KP(r.shapeInfo.logicalShape,t.logicalShape),p=u-a,m,f=["x","y","z","w","u","v"];a===0?m="":u<2&&c.length>=1?m="coords = 0;":m=c.map(h=>`coords.${f[h+p]} = 0;`).join(`
`);let d="";return u<2&&a>0?d="coords":d=r.shapeInfo.logicalShape.map((h,g)=>`coords.${f[g+p]}`).join(", "),`
float ${o}() {
${l} coords = getOutputCoords();
${m}
return get${n}(${d});
}
`}function zt(r){if(r<=1)return"int";if(r===2)return"ivec2";if(r===3)return"ivec3";if(r===4)return"ivec4";if(r===5)return"ivec5";if(r===6)return"ivec6";throw Error(`GPU for rank ${r} is not yet supported`)}function ww(r,t,e){let{newShape:n,keptDims:o}=y.squeezeShape(t),s=t.length,i=r&&s===3&&t[0]===1,a=i?t.slice(1):n,u=!r&&s>1&&!y.arraysEqual(t,e)&&n.length<s||i;return{useSqueezeShape:u,uniformShape:u?a:t,keptDims:o}}function gd(r,t){let e=JSON.parse(JSON.stringify(r));return e.shapeInfo.logicalShape=t,e}function xd(r,t){return t.map(e=>r[e]).join(", ")}function JP(r,t,e,n){let o=e.map((c,p)=>{let m={logicalShape:c.shape,texShape:c.isUniform?null:c.texData.texShape,isUniform:c.isUniform,isPacked:c.isUniform?!1:c.texData.isPacked,flatOffset:null};return c.texData!=null&&c.texData.slice!=null&&c.texData.slice.flatOffset>0&&(m.flatOffset=c.texData.slice.flatOffset),{name:t.variableNames[p],shapeInfo:m}}),s=o.map(c=>c.shapeInfo),i={logicalShape:n.shape,texShape:n.texData.texShape,isUniform:!1,isPacked:n.texData.isPacked,flatOffset:null},a=jP(o,i,t),u=wk(r.gl,a),l=r.createProgram(u);return M().get("ENGINE_COMPILE_ONLY")?{program:t,fragmentShader:u,source:a,webGLProgram:l,inShapeInfos:s,outShapeInfo:i,uniformLocations:null,customUniformLocations:null,infLoc:null,nanLoc:null,inShapesLocations:null,inTexShapesLocations:null,outShapeLocation:null,outShapeStridesLocation:null,outTexShapeLocation:null}:Object.assign({program:t,fragmentShader:u,source:a,webGLProgram:l,inShapeInfos:s,outShapeInfo:i},Mk(r,t,l))}function Mk(r,t,e){let n={},o={},s={},i=[],a,u,l,c=null,p=null;p=r.getUniformLocation(e,"NAN",!1),M().getNumber("WEBGL_VERSION")===1&&(c=r.getUniformLocation(e,"INFINITY",!1));let m=!1;for(let f=0;f<t.variableNames.length;f++){let d=t.variableNames[f];n[d]=r.getUniformLocation(e,d,m),n[`offset${d}`]=r.getUniformLocation(e,`offset${d}`,m),t.enableShapeUniforms&&(o[`${d}Shape`]=r.getUniformLocation(e,`${d}Shape`,m),s[`${d}TexShape`]=r.getUniformLocation(e,`${d}TexShape`,m))}return t.enableShapeUniforms&&(a=r.getUniformLocation(e,"outShape",m),l=r.getUniformLocation(e,"outShapeStrides",m),u=r.getUniformLocation(e,"outTexShape",m)),t.customUniforms&&t.customUniforms.forEach((f,d)=>{i[d]=r.getUniformLocation(e,f.name,m)}),{uniformLocations:n,customUniformLocations:i,infLoc:c,nanLoc:p,inShapesLocations:o,inTexShapesLocations:s,outShapeLocation:a,outShapeStridesLocation:l,outTexShapeLocation:u}}function ZP(r,t){if(r.length!==t.length)throw Error(`Binary was compiled with ${r.length} inputs, but was executed with ${t.length} inputs`);r.forEach((e,n)=>{let o=e.logicalShape,s=t[n],i=s.shape;if(!y.arraysEqual(o,i))throw Error(`Binary was compiled with different shapes than the current args. Shapes ${o} and ${i} must match`);if(e.isUniform&&s.isUniform)return;let a=e.texShape,u=s.isUniform?null:s.texData.texShape;if(!y.arraysEqual(a,u))throw Error(`Binary was compiled with different texture shapes than the current args. Shape ${a} and ${u} must match`)})}function QP(r,t,e,n,o){t.program.enableShapeUniforms||(ZP(t.inShapeInfos,e),ZP([t.outShapeInfo],[n]));let s=n.texData.texture,i=n.texData.texShape;n.texData.isPacked?r.setOutputPackedMatrixTexture(s.texture,i[0],i[1]):r.setOutputMatrixTexture(s.texture,i[0],i[1]),r.setProgram(t.webGLProgram),M().getNumber("WEBGL_VERSION")===1&&t.infLoc!==null&&r.gl.uniform1f(t.infLoc,1/0),t.nanLoc!==null&&r.gl.uniform1f(t.nanLoc,NaN),e.forEach((u,l)=>{let c=t.program.variableNames[l],p=t.uniformLocations[c],m=t.uniformLocations[`offset${c}`],f=t.inShapesLocations[`${c}Shape`],d=t.inTexShapesLocations[`${c}TexShape`];if(f){let{uniformShape:h}=ww(t.program.packedInputs,u.shape,u.texData.texShape);switch(h.length){case 1:r.gl.uniform1iv(f,new Int32Array(h));break;case 2:r.gl.uniform2iv(f,new Int32Array(h));break;case 3:r.gl.uniform3iv(f,new Int32Array(h));break;case 4:r.gl.uniform4iv(f,new Int32Array(h));break;default:break}}if(d&&r.gl.uniform2i(d,u.texData.texShape[0],u.texData.texShape[1]),p!=null){if(u.isUniform){if(y.sizeFromShape(u.shape)<2)r.gl.uniform1f(p,u.uniformValues[0]);else{let h=u.uniformValues;h instanceof Float32Array||(h=new Float32Array(h)),r.gl.uniform1fv(p,h)}return}u.texData.slice!=null&&m!=null&&r.gl.uniform1i(m,u.texData.slice.flatOffset),r.setInputMatrixTexture(u.texData.texture.texture,p,l)}});let a=t.outShapeLocation;if(a)switch(n.shape.length){case 1:r.gl.uniform1iv(a,new Int32Array(n.shape));break;case 2:r.gl.uniform2iv(a,new Int32Array(n.shape));break;case 3:r.gl.uniform3iv(a,new Int32Array(n.shape));break;case 4:r.gl.uniform4iv(a,new Int32Array(n.shape));break;default:break}if(t.outShapeStridesLocation){let u=y.computeStrides(n.shape);switch(n.shape.length){case 2:r.gl.uniform1iv(t.outShapeStridesLocation,new Int32Array(u));break;case 3:r.gl.uniform2iv(t.outShapeStridesLocation,new Int32Array(u));break;case 4:r.gl.uniform3iv(t.outShapeStridesLocation,new Int32Array(u));break;default:break}}t.outTexShapeLocation&&r.gl.uniform2i(t.outTexShapeLocation,n.texData.texShape[0],n.texData.texShape[1]),t.program.customUniforms&&o&&t.program.customUniforms.forEach((u,l)=>{let c=t.customUniformLocations[l],p=o[l];if(u.type==="float")r.gl.uniform1fv(c,p);else if(u.type==="vec2")r.gl.uniform2fv(c,p);else if(u.type==="vec3")r.gl.uniform3fv(c,p);else if(u.type==="vec4")r.gl.uniform4fv(c,p);else if(u.type==="int")r.gl.uniform1iv(c,p);else if(u.type==="ivec2")r.gl.uniform2iv(c,p);else if(u.type==="ivec3")r.gl.uniform3iv(c,p);else if(u.type==="ivec4")r.gl.uniform4iv(c,p);else throw Error(`uniform type ${u.type} is not supported yet.`)}),r.executeProgram()}function tL(r,t,e){let n="";t.concat(e).forEach(i=>{let a=i.texData!=null&&i.texData.slice!=null&&i.texData.slice.flatOffset>0;if(r.enableShapeUniforms&&!i.isUniform){let u=i.texData.texShape,{useSqueezeShape:l,uniformShape:c,keptDims:p}=ww(r.packedInputs,i.shape,u),m="",f="",d="";if(c.length===1&&r.packedInputs){let N=[Math.ceil(u[0]/2),Math.ceil(u[1]/2)];m=`${N[0]>1}_${N[1]>1}`}else if(c.length===2&&!r.packedInputs)f=`${c[0]>1}_${c[1]>1}`;else if(c.length>2&&!r.packedInputs){let N=y.computeStrides(c);d=`${N[0]===u[1]}_${N[N.length-1]===u[1]}`}let h=i.shape.length,g=c.length===2&&y.arraysEqual(i.shape,u),x=y.sizeFromShape(i.shape)===1,b=S.getBroadcastDims(i.shape,e.shape),w=!r.packedInputs&&h===e.shape.length&&y.arraysEqual(u,e.texData.texShape),C=r.packedInputs||c.length>2?"":`${u[0]>1}_${u[1]>1}`;n+=`${h}_${w}_${l?p:""}_${c.length}_${x}_${b}_${g}_${m}_${f}_${d}_${C}_${a}`}else{let u=i.isUniform?"uniform":i.texData.texShape;n+=`${i.shape}_${u}_${a}`}});let o=r.userCode,s=r.constructor.name;return s+="_"+n+"_"+o+`${M().getNumber("WEBGL_VERSION")}`,s}function we(r){return M().getBool("WEBGL_USE_SHAPES_UNIFORMS")&&r<=4}var Cw=class{constructor(t){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=ku.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let e=Ve();this.outputShape=t,this.enableShapeUniforms=we(this.outputShape.length),this.userCode=`
ivec3 outCoordsFromFlatIndex(int index) {
${this.enableShapeUniforms?Mc(["r","c","d"],t):Js(["r","c","d"],t)}
return ivec3(r, c, d);
}
void main() {
ivec2 resTexRC = ivec2(resultUV.yx * vec2(texShape[0], texShape[1]));
int index = 4 * (resTexRC.x * texShape[1] + resTexRC.y);
vec4 result = vec4(0.);
for (int i=0; i<4; i++) {
int flatIndex = index + i;
ivec3 rc = outCoordsFromFlatIndex(flatIndex);
result[i] = getA(rc.x, rc.y, rc.z);
}
${e.output} = result;
}
`}};var Iw=class{constructor(t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=ku.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let e=Ve();this.outputShape=t,this.enableShapeUniforms=we(this.outputShape.length),this.userCode=`
ivec3 outCoordsFromFlatIndex(int index) {
${this.enableShapeUniforms?Mc(["r","c","d"],t):Js(["r","c","d"],t)}
return ivec3(r, c, d);
}
void main() {
ivec2 resTexRC = ivec2(resultUV.yx * vec2(texShape[0], texShape[1]));
int index = 4 * (resTexRC.x * texShape[1] + resTexRC.y);
vec4 result = vec4(0.);
for (int i=0; i<4; i++) {
int flatIndex = index + i;
ivec3 rc = outCoordsFromFlatIndex(flatIndex);
result[i] = getChannel(getA(rc.x, rc.y, rc.z), vec2(rc.y, rc.z));
}
${e.output} = result;
}
`}};var vw=class{constructor(t){this.variableNames=["A"],this.outTexUsage=Kr.DOWNLOAD;let e=Ve();this.outputShape=t,this.userCode=`
${bw}
void main() {
float x = getAAtOutCoords();
${e.output} = encode_float(x);
}
`}};var Sw=class{constructor(t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=Kr.DOWNLOAD;let e=Ve();this.outputShape=t,this.userCode=`
${bw}
void main() {
ivec3 coords = getOutputCoords();
float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z));
${e.output} = encode_float(x);
}
`}};var Nw=class{constructor(t,e=!1){this.variableNames=["A"],this.customUniforms=[{name:"texShape",type:"ivec2"}];let n=Ve();this.outputShape=t,this.enableShapeUniforms=we(this.outputShape.length);let o="result";e&&(o="floor(result * 255. + 0.5)"),this.userCode=`
${this.enableShapeUniforms?md():pd(t)}
void main() {
ivec3 coords = getOutputCoords();
int flatIndex = getFlatIndex(coords);
int offset = imod(flatIndex, 4);
flatIndex = idiv(flatIndex, 4, 1.);
int r = flatIndex / texShape[1];
int c = imod(flatIndex, texShape[1]);
vec2 uv = (vec2(c, r) + halfCR) / vec2(texShape[1], texShape[0]);
vec4 values = ${n.texture2D}(A, uv);
float result;
if(offset == 0) {
result = values[0];
} else if(offset == 1) {
result = values[1];
} else if(offset == 2) {
result = values[2];
} else {
result = values[3];
}
${n.output} = vec4(${o}, 0., 0., 0.);
}
`}};var kw=class{constructor(t,e=!1){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.customUniforms=[{name:"texShape",type:"ivec2"}];let n=Ve();this.outputShape=t,this.enableShapeUniforms=we(this.outputShape.length);let o="",s="result";e&&(s="floor(result * 255. + 0.5)");for(let i=0;i<=1;i++)for(let a=0;a<=1;a++){let u=i*2+a;o+=`
localCoords = coords;
if(localCoords[2] + ${a} < ${this.enableShapeUniforms?"outShape[2]":`${t[2]}`}) {
localCoords[2] += ${a};
if (localCoords[1] + ${i} < ${this.enableShapeUniforms?"outShape[1]":`${t[1]}`}) {
localCoords[1] += ${i};
flatIndex = getFlatIndex(localCoords);
offset = imod(flatIndex, 4);
flatIndex = idiv(flatIndex, 4, 1.);
int r = flatIndex / texShape[1];
int c = imod(flatIndex, texShape[1]);
vec2 uv = (vec2(c, r) + halfCR) / vec2(texShape[1], texShape[0]);
values = ${n.texture2D}(A, uv);
if (offset == 0) {
result[${u}] = values[0];
} else if (offset == 1) {
result[${u}] = values[1];
} else if (offset == 2) {
result[${u}] = values[2];
} else {
result[${u}] = values[3];
}
}
}
`}this.userCode=`
${this.enableShapeUniforms?md():pd(t)}
void main() {
ivec3 coords = getOutputCoords();
vec4 result = vec4(0.);
int flatIndex, r, c, offset;
ivec3 localCoords;
vec2 uv;
vec4 values;
${o}
${n.output} = ${s};
}
`}};var eT={};Gt(eT,{bindVertexProgramAttributeStreams:()=>Kk,createBufferFromOutputTexture:()=>Yk,createFloat16MatrixTexture:()=>Wk,createFloat16PackedMatrixTexture:()=>qk,createFloat32MatrixTexture:()=>Gk,createIndexBuffer:()=>Vk,createPackedMatrixTexture:()=>Hk,createUnsignedBytesMatrixTexture:()=>Uk,createVertexBuffer:()=>Bk,createVertexShader:()=>zk,downloadByteEncodedFloatMatrixFromOutputTexture:()=>Jk,downloadFloat32MatrixFromBuffer:()=>Zk,downloadMatrixFromPackedOutputTexture:()=>tT,downloadPackedMatrixFromBuffer:()=>Qk,getInternalFormatForFloat16MatrixTexture:()=>Ew,getInternalFormatForFloat16PackedMatrixTexture:()=>$w,getInternalFormatForFloat32MatrixTexture:()=>Tw,getInternalFormatForPackedMatrixTexture:()=>Aw,getInternalFormatForUnsignedBytesMatrixTexture:()=>_w,uploadDenseMatrixToTexture:()=>jk,uploadPixelDataToTexture:()=>Xk});function zk(r){let t=Ve(),e=`${t.version}
precision highp float;
${t.attribute} vec3 clipSpacePos;
${t.attribute} vec2 uv;
${t.varyingVs} vec2 resultUV;
void main() {
gl_Position = vec4(clipSpacePos, 1);
resultUV = uv;
}`;return bk(r,e)}function Bk(r){let t=new Float32Array([-1,1,0,0,1,-1,-1,0,0,0,1,1,0,1,1,1,-1,0,1,0]);return vk(r,t)}function Vk(r){let t=new Uint16Array([0,1,2,2,1,3]);return Sk(r,t)}function jh(r,t,e,n,o,s){kk(t,e);let i=Nk(r),a=r.TEXTURE_2D;return yt(r,()=>r.bindTexture(a,i)),yt(r,()=>r.texParameteri(a,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE)),yt(r,()=>r.texParameteri(a,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE)),yt(r,()=>r.texParameteri(a,r.TEXTURE_MIN_FILTER,r.NEAREST)),yt(r,()=>r.texParameteri(a,r.TEXTURE_MAG_FILTER,r.NEAREST)),M().getNumber("WEBGL_VERSION")===1?yt(r,()=>r.texImage2D(a,0,n,t,e,0,o,s,null)):yt(r,()=>r.texStorage2D(a,1,n,t,e)),yt(r,()=>r.bindTexture(r.TEXTURE_2D,null)),{texture:i,texShape:[e,t]}}function Tw(r){return r.internalFormatFloat}function Gk(r,t,e,n){let[o,s]=Lc(t,e);return jh(r,o,s,Tw(n),n.textureFormatFloat,r.FLOAT)}function Ew(r){return r.internalFormatHalfFloat}function Wk(r,t,e,n){let[o,s]=Lc(t,e);return jh(r,o,s,Ew(n),n.textureFormatFloat,n.textureTypeHalfFloat)}function _w(r){return r.downloadTextureFormat}function Uk(r,t,e,n){let[o,s]=Lc(t,e);return jh(r,o,s,_w(n),r.RGBA,r.UNSIGNED_BYTE)}function Aw(r){return r.internalFormatPackedFloat}function Hk(r,t,e,n){let[o,s]=Ki(t,e);return jh(r,o,s,Aw(n),r.RGBA,r.FLOAT)}function $w(r){return r.internalFormatPackedHalfFloat}function qk(r,t,e,n){let[o,s]=Ki(t,e);return jh(r,o,s,$w(n),r.RGBA,n.textureTypeHalfFloat)}function Kk(r,t,e){return yt(r,()=>r.bindBuffer(r.ARRAY_BUFFER,e)),gw(r,t,"clipSpacePos",e,3,20,0)&&gw(r,t,"uv",e,2,20,12)}function jk(r,t,e,n,o,s){yt(r,()=>r.bindTexture(r.TEXTURE_2D,t));let i,a,u;o instanceof Uint8Array?(i=new Uint8Array(e*n*4),a=r.UNSIGNED_BYTE,u=r.RGBA):(i=new Float32Array(e*n*4),a=r.FLOAT,u=s.internalFormatPackedFloat),i.set(o),M().getNumber("WEBGL_VERSION")===2?yt(r,()=>r.texSubImage2D(r.TEXTURE_2D,0,0,0,e,n,r.RGBA,a,i)):yt(r,()=>r.texImage2D(r.TEXTURE_2D,0,u,e,n,0,r.RGBA,a,i)),yt(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function Xk(r,t,e){yt(r,()=>r.bindTexture(r.TEXTURE_2D,t)),e.data instanceof Uint8Array?M().getNumber("WEBGL_VERSION")===2?yt(r,()=>r.texSubImage2D(r.TEXTURE_2D,0,0,0,e.width,e.height,r.RGBA,r.UNSIGNED_BYTE,e.data)):yt(r,()=>r.texImage2D(r.TEXTURE_2D,0,r.RGBA,e.width,e.height,0,r.RGBA,r.UNSIGNED_BYTE,e.data)):M().getNumber("WEBGL_VERSION")===2?yt(r,()=>r.texSubImage2D(r.TEXTURE_2D,0,0,0,r.RGBA,r.UNSIGNED_BYTE,e)):yt(r,()=>r.texImage2D(r.TEXTURE_2D,0,r.RGBA,r.RGBA,r.UNSIGNED_BYTE,e)),yt(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function Yk(r,t,e,n){let o=r.createBuffer();yt(r,()=>r.bindBuffer(r.PIXEL_PACK_BUFFER,o));let a=4*4*t*e;return yt(r,()=>r.bufferData(r.PIXEL_PACK_BUFFER,a,r.STREAM_READ)),yt(r,()=>r.readPixels(0,0,e,t,r.RGBA,r.FLOAT,0)),yt(r,()=>r.bindBuffer(r.PIXEL_PACK_BUFFER,null)),o}function Zk(r,t,e){let n=r,o=new Float32Array(e);return n.bindBuffer(n.PIXEL_PACK_BUFFER,t),n.getBufferSubData(n.PIXEL_PACK_BUFFER,0,o),n.bindBuffer(n.PIXEL_PACK_BUFFER,null),o}function Jk(r,t,e,n){let[o,s]=Lc(t,e),i=4,a=new Uint8Array(BP(t*e,i));return yt(r,()=>r.readPixels(0,0,o,s,n.downloadTextureFormat,r.UNSIGNED_BYTE,a)),new Float32Array(a.buffer)}function Qk(r,t,e,n,o,s,i,a){let u=r,l=new Float32Array(VP(s,i));return u.bindBuffer(u.PIXEL_PACK_BUFFER,t),u.getBufferSubData(u.PIXEL_PACK_BUFFER,0,l),u.bindBuffer(u.PIXEL_PACK_BUFFER,null),l}function tT(r,t,e){let n=new Float32Array(t*e*4);return yt(r,()=>r.readPixels(0,0,e,t,r.RGBA,r.FLOAT,n)),n}var Bc=class{constructor(t){this.outputTexture=null,this.program=null,this.disposed=!1,this.vertexAttrsAreBound=!1,this.itemsToPoll=[];let e=M().getNumber("WEBGL_VERSION");t!=null?(this.gl=t,hk(e,t)):this.gl=Bn(e);let n="WEBGL_color_buffer_float",o="EXT_color_buffer_half_float";if(this.parallelCompilationExtension=this.gl.getExtension("KHR_parallel_shader_compile"),M().getNumber("WEBGL_VERSION")===1){let s="OES_texture_float",i="OES_texture_half_float";if(this.textureFloatExtension=ld(this.gl,s),Vn(this.gl,i))this.textureHalfFloatExtension=ld(this.gl,i);else if(M().get("WEBGL_FORCE_F16_TEXTURES"))throw new Error("GL context does not support half float textures, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true.");if(this.colorBufferFloatExtension=this.gl.getExtension(n),Vn(this.gl,o))this.colorBufferHalfFloatExtension=ld(this.gl,o);else if(M().get("WEBGL_FORCE_F16_TEXTURES"))throw new Error("GL context does not support color renderable half floats, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true.")}else if(n="EXT_color_buffer_float",Vn(this.gl,n))this.colorBufferFloatExtension=this.gl.getExtension(n);else if(Vn(this.gl,o))this.colorBufferHalfFloatExtension=this.gl.getExtension(o);else throw new Error("GL context does not support color renderable floats");this.vertexBuffer=Bk(this.gl),this.indexBuffer=Vk(this.gl),this.framebuffer=Tk(this.gl),this.textureConfig=Uh(this.gl,this.textureHalfFloatExtension)}get debug(){return M().getBool("DEBUG")}dispose(){if(this.disposed)return;this.program!=null&&console.warn("Disposing a GPGPUContext that still has a bound WebGLProgram. This is probably a resource leak, delete the program with GPGPUContext.deleteProgram before disposing."),this.outputTexture!=null&&console.warn("Disposing a GPGPUContext that still has a bound output matrix texture. This is probably a resource leak, delete the output matrix texture with GPGPUContext.deleteMatrixTexture before disposing.");let t=this.gl;yt(t,()=>t.finish()),yt(t,()=>t.bindFramebuffer(t.FRAMEBUFFER,null)),yt(t,()=>t.deleteFramebuffer(this.framebuffer)),yt(t,()=>t.bindBuffer(t.ARRAY_BUFFER,null)),yt(t,()=>t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,null)),yt(t,()=>t.deleteBuffer(this.indexBuffer)),this.disposed=!0}createFloat32MatrixTexture(t,e){return this.throwIfDisposed(),Gk(this.gl,t,e,this.textureConfig)}createFloat16MatrixTexture(t,e){return this.throwIfDisposed(),Wk(this.gl,t,e,this.textureConfig)}createUnsignedBytesMatrixTexture(t,e){return this.throwIfDisposed(),Uk(this.gl,t,e,this.textureConfig)}uploadPixelDataToTexture(t,e){this.throwIfDisposed(),Xk(this.gl,t,e)}uploadDenseMatrixToTexture(t,e,n,o){this.throwIfDisposed(),jk(this.gl,t,e,n,o,this.textureConfig)}createFloat16PackedMatrixTexture(t,e){return this.throwIfDisposed(),qk(this.gl,t,e,this.textureConfig)}createPackedMatrixTexture(t,e){return this.throwIfDisposed(),Hk(this.gl,t,e,this.textureConfig)}deleteMatrixTexture(t){this.throwIfDisposed(),this.outputTexture===t&&(xw(this.gl,this.framebuffer),this.outputTexture=null),yt(this.gl,()=>this.gl.deleteTexture(t))}downloadByteEncodedFloatMatrixFromOutputTexture(t,e,n){return this.downloadMatrixDriver(t,()=>Jk(this.gl,e,n,this.textureConfig))}downloadPackedMatrixFromBuffer(t,e,n,o,s,i){return Qk(this.gl,t,e,n,o,s,i,this.textureConfig)}downloadFloat32MatrixFromBuffer(t,e){return Zk(this.gl,t,e)}createBufferFromTexture(t,e,n){this.bindTextureToFrameBuffer(t);let o=Yk(this.gl,e,n,this.textureConfig);return this.unbindTextureToFrameBuffer(),o}createAndWaitForFence(){let t=this.createFence(this.gl);return this.pollFence(t)}createFence(t){let e,n;if(M().getBool("WEBGL_FENCE_API_ENABLED")){let o=t,s=o.fenceSync(o.SYNC_GPU_COMMANDS_COMPLETE,0);t.flush(),n=()=>{let i=o.clientWaitSync(s,0,0);return i===o.ALREADY_SIGNALED||i===o.CONDITION_SATISFIED},e=s}else M().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?(e=this.beginQuery(),this.endQuery(),n=()=>this.isQueryAvailable(e,M().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))):n=()=>!0;return{query:e,isFencePassed:n}}downloadMatrixFromPackedTexture(t,e,n){return this.downloadMatrixDriver(t,()=>tT(this.gl,e,n))}createProgram(t){this.throwIfDisposed();let e=this.gl;this.vertexShader==null&&(this.vertexShader=zk(e));let n=Ck(e);return yt(e,()=>e.attachShader(n,this.vertexShader)),yt(e,()=>e.attachShader(n,t)),Ik(e,n),this.debug&&Hh(e,n),this.vertexAttrsAreBound||(this.setProgram(n),this.vertexAttrsAreBound=Kk(e,this.program,this.vertexBuffer)),n}deleteProgram(t){this.throwIfDisposed(),t===this.program&&(this.program=null),t!=null&&yt(this.gl,()=>this.gl.deleteProgram(t))}setProgram(t){this.throwIfDisposed(),this.program=t,this.program!=null&&this.debug&&Hh(this.gl,this.program),yt(this.gl,()=>this.gl.useProgram(t))}getUniformLocation(t,e,n=!0){return this.throwIfDisposed(),n?Ek(this.gl,t,e):_k(this.gl,t,e)}getAttributeLocation(t,e){return this.throwIfDisposed(),yt(this.gl,()=>this.gl.getAttribLocation(t,e))}getUniformLocationNoThrow(t,e){return this.throwIfDisposed(),this.gl.getUniformLocation(t,e)}setInputMatrixTexture(t,e,n){this.throwIfDisposed(),this.throwIfNoProgram(),Ak(this.gl,t,e,n)}setOutputMatrixTexture(t,e,n){this.setOutputMatrixTextureDriver(t,n,e)}setOutputPackedMatrixTexture(t,e,n){this.throwIfDisposed();let[o,s]=Ki(e,n);this.setOutputMatrixTextureDriver(t,o,s)}setOutputMatrixWriteRegion(t,e,n,o){this.setOutputMatrixWriteRegionDriver(n,t,o,e)}setOutputPackedMatrixWriteRegion(t,e,n,o){throw new Error("setOutputPackedMatrixWriteRegion not implemented.")}debugValidate(){this.program!=null&&Hh(this.gl,this.program),ud(this.gl)}executeProgram(){this.throwIfDisposed(),this.throwIfNoProgram();let t=this.gl;this.debug&&this.debugValidate(),yt(t,()=>t.drawElements(t.TRIANGLES,6,t.UNSIGNED_SHORT,0))}blockUntilAllProgramsCompleted(){this.throwIfDisposed(),yt(this.gl,()=>this.gl.finish())}getQueryTimerExtension(){return this.disjointQueryTimerExtension==null&&(this.disjointQueryTimerExtension=ld(this.gl,M().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2?"EXT_disjoint_timer_query_webgl2":"EXT_disjoint_timer_query")),this.disjointQueryTimerExtension}getQueryTimerExtensionWebGL2(){return this.getQueryTimerExtension()}getQueryTimerExtensionWebGL1(){return this.getQueryTimerExtension()}beginQuery(){if(M().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){let n=this.gl,o=this.getQueryTimerExtensionWebGL2(),s=n.createQuery();return n.beginQuery(o.TIME_ELAPSED_EXT,s),s}let t=this.getQueryTimerExtensionWebGL1(),e=t.createQueryEXT();return t.beginQueryEXT(t.TIME_ELAPSED_EXT,e),e}endQuery(){if(M().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){let e=this.gl,n=this.getQueryTimerExtensionWebGL2();e.endQuery(n.TIME_ELAPSED_EXT);return}let t=this.getQueryTimerExtensionWebGL1();t.endQueryEXT(t.TIME_ELAPSED_EXT)}async waitForQueryAndGetTime(t){return await y.repeatedTry(()=>this.disposed||this.isQueryAvailable(t,M().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))),this.getQueryTime(t,M().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))}getQueryTime(t,e){if(e===0)return null;if(e===2){let n=this.gl;return n.getQueryParameter(t,n.QUERY_RESULT)/1e6}else{let n=this.getQueryTimerExtensionWebGL1();return n.getQueryObjectEXT(t,n.QUERY_RESULT_EXT)/1e6}}isQueryAvailable(t,e){if(e===0)return!0;if(e===2){let n=this.gl,o=this.getQueryTimerExtensionWebGL2(),s=n.getQueryParameter(t,n.QUERY_RESULT_AVAILABLE);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(o.GPU_DISJOINT_EXT)),s&&!this.disjoint}else{let n=this.getQueryTimerExtensionWebGL1(),o=n.getQueryObjectEXT(t,n.QUERY_RESULT_AVAILABLE_EXT);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(n.GPU_DISJOINT_EXT)),o&&!this.disjoint}}pollFence(t){return new Promise(e=>{this.addItemToPoll(()=>t.isFencePassed(),()=>e())})}pollItems(){let t=Ltt(this.itemsToPoll.map(e=>e.isDoneFn));for(let e=0;e<=t;++e){let{resolveFn:n}=this.itemsToPoll[e];n()}this.itemsToPoll=this.itemsToPoll.slice(t+1)}addItemToPoll(t,e){if(this.itemsToPoll.push({isDoneFn:t,resolveFn:e}),this.itemsToPoll.length>1)return;let n;"setTimeoutCustom"in M().platform&&(n=M().platform.setTimeoutCustom.bind(M().platform)),y.repeatedTry(()=>(this.pollItems(),this.itemsToPoll.length===0),()=>0,null,n)}bindTextureToFrameBuffer(t){this.throwIfDisposed(),qh(this.gl,t,this.framebuffer),this.debug&&ud(this.gl)}unbindTextureToFrameBuffer(){this.outputTexture!=null?(qh(this.gl,this.outputTexture,this.framebuffer),this.debug&&ud(this.gl)):xw(this.gl,this.framebuffer)}downloadMatrixDriver(t,e){this.bindTextureToFrameBuffer(t);let n=e();return this.unbindTextureToFrameBuffer(),n}setOutputMatrixTextureDriver(t,e,n){this.throwIfDisposed();let o=this.gl;qh(o,t,this.framebuffer),this.debug&&ud(o),this.outputTexture=t,yt(o,()=>o.viewport(0,0,e,n)),yt(o,()=>o.scissor(0,0,e,n))}setOutputMatrixWriteRegionDriver(t,e,n,o){this.throwIfDisposed(),yt(this.gl,()=>this.gl.scissor(t,e,n,o))}throwIfDisposed(){if(this.disposed)throw new Error("Attempted to use disposed GPGPUContext.")}throwIfNoProgram(){if(this.program==null)throw new Error("No GPU program is currently set.")}};function Ltt(r){let t=0;for(;t<r.length&&r[t]();++t);return t-1}var{addImpl:eL,bincountImpl:Dw,bincountReduceImpl:rL,castImpl:nL,ceilImpl:oL,concatImpl:sL,equalImpl:iL,expImpl:aL,expm1Impl:lL,floorImpl:uL,gatherNdImpl:cL,gatherV2Impl:pL,greaterImpl:mL,greaterEqualImpl:fL,lessImpl:dL,lessEqualImpl:hL,linSpaceImpl:gL,logImpl:xL,maxImpl:yL,maximumImpl:bL,minimumImpl:wL,multiplyImpl:CL,negImpl:IL,notEqualImpl:vL,prodImpl:SL,raggedGatherImpl:NL,raggedTensorToTensorImpl:kL,rangeImpl:TL,rsqrtImpl:EL,scatterImpl:_L,sigmoidImpl:AL,simpleAbsImpl:Rw,sliceImpl:$L,sparseFillEmptyRowsImpl:DL,sparseReshapeImpl:RL,sparseSegmentReductionImpl:Fw,sqrtImpl:FL,stridedSliceImpl:OL,stringNGramsImpl:PL,stringSplitImpl:LL,stringToHashBucketFastImpl:ML,subImpl:zL,tileImpl:BL,topKImpl:VL,transposeImpl:Vc,uniqueImpl:GL}=iw;function rT(r,t){return["x","y","z","w","u","v"].slice(0,t).map(e=>`${r}.${e}`)}function Qe(r,t){return t===1?[r]:rT(r,t)}function WL(r,t){if(r===1)return"rc";let e="";for(let n=0;n<r;n++)e+=t[n],n<r-1&&(e+=",");return e}var Ow=class{constructor(t){if(this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outputShape=t,this.rank=t.length,this.enableShapeUniforms=we(this.outputShape.length),this.rank===0)this.userCode=`
void main() {
setOutput(vec4(getA(), 0., 0., 0.));
}
`;else{let e=Qe("rc",this.rank),n=zt(this.rank),o=this.getOutOfBoundsCondition(e),s=this.getSetup(e),i=this.getOutput(e);this.userCode=`
void main() {
${n} rc = getOutputCoords();
if(${o}) {
setOutput(vec4(0));
} else {
${s}
setOutput(vec4(${i}));
}
}
`}}getSourceCoordsArr(t){let e=[];for(let n=0;n<=1;n++)for(let o=0;o<=1;o++){let s=`${n===0?"r":"rp1"}, ${o===0?"c":"cp1"}`;for(let i=2;i<this.rank;i++)s=`${t[t.length-1-i]},`+s;e.push(s)}return e}getOutOfBoundsCondition(t){if(this.rank===1)return`rc > ${this.enableShapeUniforms?"outShape":this.outputShape[0]}`;let e="";for(let n=this.rank-2;n<this.rank;n++)e+=`${t[n]} >= ${this.enableShapeUniforms?`outShape[${n}]`:this.outputShape[n]}`,n<this.rank-1&&(e+="||");return e}getSetup(t){if(this.rank===1)return"";let e=t.slice(-2),n=this.enableShapeUniforms?`outShape[${this.rank} - 1]`:this.outputShape[this.rank-1],o=this.enableShapeUniforms?`outShape[${this.rank} - 2]`:this.outputShape[this.rank-2];return`
int r = ${e[0]};
int c = ${e[1]};
int rp1 = r + 1;
int cp1 = c + 1;
bool cEdge = cp1 >= ${n};
bool rEdge = rp1 >= ${o};
`}getOutput(t){let e=this.getSourceCoordsArr(t);return this.rank===1?`getA(rc), (rc + 1 >= ${this.enableShapeUniforms?"outShape":this.outputShape[0]} ? 0. : getA(rc + 1)), 0, 0`:`getA(${e[0]}),
cEdge ? 0. : getA(${e[1]}),
rEdge ? 0. : getA(${e[2]}),
rEdge || cEdge ? 0. : getA(${e[3]})`}};var yd=class{constructor(t,e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"inputShape",type:"ivec3"}],this.outputShape=t,this.enableShapeUniforms=we(this.outputShape.length);let n="";for(let o=0;o<4;o++){let s="thisRC = rc;";o%2===1&&(s+="thisRC.z += 1;"),o>1&&(s+="thisRC.y += 1;"),n+=`
${s}
${o>0?"if(thisRC.y < rows && thisRC.z < cols){":""}
int flatIndex = getFlatIndex(thisRC);
ivec3 inputRC = inputCoordsFromReshapedOutCoords(flatIndex);
vec2 inputRCInnerDims = vec2(float(inputRC.y),float(inputRC.z));
result[${o}] =
getChannel(getA(inputRC.x, inputRC.y, inputRC.z), inputRCInnerDims);
${o>0?"}":""}
`}this.userCode=`
${Mtt(e,this.enableShapeUniforms)}
${this.enableShapeUniforms?md():pd(t)}
void main() {
ivec3 rc = getOutputCoords();
vec4 result = vec4(0.);
ivec3 thisRC;
int rows = ${this.enableShapeUniforms?"outShape[1]":t[1]};
int cols = ${this.enableShapeUniforms?"outShape[2]":t[2]};
${n}
setOutput(result);
}
`}};function Mtt(r,t){return`
ivec3 inputCoordsFromReshapedOutCoords(int index) {
${t?qP(["r","c","d"],"inputShape"):Js(["r","c","d"],r)}
return ivec3(r, c, d);
}
`}var Pw=class{constructor(t){this.gpgpu=t,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0,this.freeTextures={},this.logEnabled=!1,this.usedTextures={}}acquireTexture(t,e,n){let o=HL(e,n),s=qL(t,o,n);s in this.freeTextures||(this.freeTextures[s]=[]),s in this.usedTextures||(this.usedTextures[s]=[]);let i=UL(t,o,this.gpgpu.gl,this.gpgpu.textureConfig,n);if(this.freeTextures[s].length>0){this.numFreeTextures--,this.numUsedTextures++,this._numBytesFree-=i,this.log();let u=this.freeTextures[s].shift();return this.usedTextures[s].push(u),u}let a;return o===Fr.PACKED_2X2_FLOAT32?a=this.gpgpu.createPackedMatrixTexture(t[0],t[1]):o===Fr.PACKED_2X2_FLOAT16?a=this.gpgpu.createFloat16PackedMatrixTexture(t[0],t[1]):o===Fr.UNPACKED_FLOAT32?a=this.gpgpu.createFloat32MatrixTexture(t[0],t[1]):o===Fr.UNPACKED_FLOAT16?a=this.gpgpu.createFloat16MatrixTexture(t[0],t[1]):o===Fr.PACKED_4X1_UNSIGNED_BYTE&&(a=this.gpgpu.createUnsignedBytesMatrixTexture(t[0],t[1])),this.usedTextures[s].push(a),this.numUsedTextures++,this._numBytesAllocated+=i,this.log(),a}releaseTexture(t,e,n,o){if(this.freeTextures==null)return;let s=HL(n,o),i=qL(e,s,o);i in this.freeTextures||(this.freeTextures[i]=[]);let a=UL(e,s,this.gpgpu.gl,this.gpgpu.textureConfig,o),u=M().get("WEBGL_DELETE_TEXTURE_THRESHOLD");u!==-1&&this._numBytesAllocated>u?(this.gpgpu.deleteMatrixTexture(t.texture),this._numBytesAllocated-=a):(this.freeTextures[i].push(t),this.numFreeTextures++,this._numBytesFree+=a),this.numUsedTextures--;let l=this.usedTextures[i],c=l.indexOf(t);if(c<0)throw new Error("Cannot release a texture that was never provided by this texture manager");l.splice(c,1),this.log()}log(){if(!this.logEnabled)return;let t=this.numFreeTextures+this.numUsedTextures;console.log("Free/Used",`${this.numFreeTextures} / ${this.numUsedTextures}`,`(${t})`);let e=this._numBytesFree/this._numBytesAllocated;console.log(`Bytes allocated: ${this._numBytesAllocated}`),console.log(`Bytes unused: ${this._numBytesFree} (${Math.round(100*e)}%)`)}get numBytesAllocated(){return this._numBytesAllocated}get numBytesFree(){return this._numBytesFree}getNumUsedTextures(){return this.numUsedTextures}getNumFreeTextures(){return this.numFreeTextures}dispose(){if(this.freeTextures!=null){for(let t in this.freeTextures)this.freeTextures[t].forEach(e=>{this.gpgpu.deleteMatrixTexture(e.texture)});for(let t in this.usedTextures)this.usedTextures[t].forEach(e=>{this.gpgpu.deleteMatrixTexture(e.texture)});this.freeTextures=null,this.usedTextures=null,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0}}};function ztt(r,t){let e=r;if(t===e.R32F)return 4;if(t===e.R16F)return 2;if(t===e.RGBA32F)return 16;if(t===r.RGBA)return 16;if(t===e.RGBA16F)return 8;if(t===e.RGBA8)return 4;throw new Error(`Unknown internal format ${t}`)}function UL(r,t,e,n,o){let s=Btt(t,n),i;if(o){let[u,l]=Ki(r[0],r[1]);i=u*l}else{let[u,l]=Lc(r[0],r[1]);i=u*l}let a=ztt(e,s);return i*a}function Btt(r,t){switch(r){case Fr.PACKED_2X2_FLOAT32:return Aw(t);case Fr.PACKED_2X2_FLOAT16:return $w(t);case Fr.UNPACKED_FLOAT32:return Tw(t);case Fr.UNPACKED_FLOAT16:return Ew(t);case Fr.PACKED_4X1_UNSIGNED_BYTE:return _w(t);default:throw new Error(`Unknown physical texture type ${r}`)}}function Vtt(r){return M().getBool("WEBGL_RENDER_FLOAT32_ENABLED")?r?Fr.PACKED_2X2_FLOAT32:Fr.UNPACKED_FLOAT32:r?Fr.PACKED_2X2_FLOAT16:Fr.UNPACKED_FLOAT16}function HL(r,t){if(r===Kr.UPLOAD)return Fr.PACKED_2X2_FLOAT32;if(r===Kr.RENDER||r==null)return Vtt(t);if(r===Kr.DOWNLOAD||r===Kr.PIXELS)return Fr.PACKED_4X1_UNSIGNED_BYTE;throw new Error(`Unknown logical texture type ${r}`)}function qL(r,t,e){return`${r[0]}_${r[1]}_${t}_${e}`}var tn=class{constructor(t,e){this.variableNames=["A"],this.outputShape=t,this.enableShapeUniforms=we(this.outputShape.length),this.userCode=`
float unaryOperation(float x) {
${e}
}
void main() {
float x = getAAtOutCoords();
float y = unaryOperation(x);
setOutput(y);
}
`}},pr="if (isnan(x)) return x;",KL="return x;",nT="return abs(x);";var jL="return (x >= 0.0) ? x : (exp(x) - 1.0);",XL=pr+`
return (x < 0.0) ? 0.0 : x;
`,YL=pr+`
return (x < 0.0) ? 0.0 : min(6.0, x);
`,Gc="return x;",ZL="return 1.0 / (1.0 + exp(-1.0 * x));";var QL="return x;",tM=`
vec4 result;
result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0);
result.g = (x.g >= 0.0) ? x.g : (exp(x.g) - 1.0);
result.b = (x.b >= 0.0) ? x.b : (exp(x.b) - 1.0);
result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0);
return result;
`,eM=`
vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0)));
bvec4 isNaN = isnan(x);
result.r = isNaN.r ? x.r : result.r;
result.g = isNaN.g ? x.g : result.g;
result.b = isNaN.b ? x.b : result.b;
result.a = isNaN.a ? x.a : result.a;
return result;
`,rM=`
vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0)));
bvec4 isNaN = isnan(x);
result.r = isNaN.r ? x.r : result.r;
result.g = isNaN.g ? x.g : result.g;
result.b = isNaN.b ? x.b : result.b;
result.a = isNaN.a ? x.a : result.a;
return result;
`,nM="return 1.0 / (1.0 + exp(-1.0 * x));",no=class{constructor(t,e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t,this.enableShapeUniforms=we(this.outputShape.length),this.userCode=`
vec4 unaryOperation(vec4 x) {
${e}
}
void main() {
vec4 x = getAAtOutCoords();
vec4 y = unaryOperation(x);
setOutput(y);
}
`}};var Lw=class{constructor(t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=t,this.enableShapeUniforms=we(this.outputShape.length);let e=t.length,n=Qe("rc",e),o=zt(e),s=WL(e,n),i=n.slice(-2),a=e<=1?"rc":`vec2(${i.join(",")})`;this.userCode=`
void main() {
${o} rc = getOutputCoords();
vec4 packedInput = getA(${s});
setOutput(getChannel(packedInput, ${a}));
}
`}};var Wtt=Wr.whereImpl,Utt=1e-7,Htt=1e-4,Mw={};function qtt(r){return r in Mw||(Mw[r]={}),Mw[r]}var Ktt=M().getNumber("CPU_HANDOFF_SIZE_THRESHOLD"),jtt=600;function Xtt(){return M().global.screen==null?1024:M().global.screen.height*M().global.screen.width*window.devicePixelRatio*jtt/1024/1024}var Eu=class extends Mo{constructor(t){if(super(),this.pendingRead=new WeakMap,this.pendingDisposal=new WeakSet,this.dataRefCount=new WeakMap,this.numBytesInGPU=0,this.uploadWaitMs=0,this.downloadWaitMs=0,this.lastGlFlushTime=0,this.warnedAboutMemory=!1,this.pendingDeletes=0,this.disposed=!1,!M().getBool("HAS_WEBGL"))throw new Error("WebGL is not supported on this device");let e;if(t!=null){if(t instanceof Bc)e=t;else{let n=Bn(M().getNumber("WEBGL_VERSION"),t);e=new Bc(n)}this.binaryCache={},this.gpgpuCreatedLocally=!1}else{let n=Bn(M().getNumber("WEBGL_VERSION"));e=new Bc(n),this.binaryCache=qtt(M().getNumber("WEBGL_VERSION")),this.gpgpuCreatedLocally=!0}this.gpgpu=e,this.canvas=this.gpgpu.gl.canvas,this.textureManager=new Pw(this.gpgpu),this.numMBBeforeWarning=Xtt(),this.texData=new ta(this,ho())}nextDataId(){return Eu.nextDataId++}numDataIds(){return this.texData.numDataIds()-this.pendingDeletes}write(t,e,n){if((M().getBool("WEBGL_CHECK_NUMERICAL_PROBLEMS")||M().getBool("DEBUG"))&&this.checkNumericalProblems(t),n==="complex64"&&t!=null)throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");let o={id:this.nextDataId()};return this.texData.set(o,{shape:e,dtype:n,values:t,usage:Kr.UPLOAD,refCount:1}),o}refCount(t){return this.texData.has(t)?this.texData.get(t).refCount:0}incRef(t){let e=this.texData.get(t);e.refCount++}decRef(t){if(this.texData.has(t)){let e=this.texData.get(t);e.refCount--}}move(t,e,n,o,s){if(M().getBool("DEBUG")&&this.checkNumericalProblems(e),o==="complex64")throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.texData.set(t,{shape:n,dtype:o,values:e,usage:Kr.UPLOAD,refCount:s})}disposeIntermediateTensorInfo(t){this.disposeData(t.dataId)}readSync(t){let e=this.texData.get(t),{values:n,dtype:o,complexTensorInfos:s,slice:i,shape:a,isPacked:u}=e;if(i!=null){let m;u?m=new no(a,Gc):m=new tn(a,Gc);let f=this.runWebGLProgram(m,[{dataId:t,shape:a,dtype:o}],o),d=this.readSync(f.dataId);return this.disposeIntermediateTensorInfo(f),d}if(n!=null)return this.convertAndCacheOnCPU(t);if(o==="string")return n;let l=this.activeTimers!=null,c;l&&(c=y.now());let p;if(o==="complex64"){let m=this.readSync(s.real.dataId),f=this.readSync(s.imag.dataId);p=S.mergeRealAndImagArrays(m,f)}else p=this.getValuesFromTexture(t);return l&&(this.downloadWaitMs+=y.now()-c),this.convertAndCacheOnCPU(t,p)}async read(t){if(this.pendingRead.has(t)){let d=this.pendingRead.get(t);return new Promise(h=>d.push(h))}let e=this.texData.get(t),{values:n,shape:o,slice:s,dtype:i,complexTensorInfos:a,isPacked:u}=e;if(s!=null){let d;u?d=new no(o,Gc):d=new tn(o,Gc);let h=this.runWebGLProgram(d,[{dataId:t,shape:o,dtype:i}],i),g=this.read(h.dataId);return this.disposeIntermediateTensorInfo(h),g}if(n!=null)return this.convertAndCacheOnCPU(t);if(M().getBool("DEBUG")&&!M().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")&&M().getNumber("WEBGL_VERSION")===2)throw new Error("tensor.data() with WEBGL_DOWNLOAD_FLOAT_ENABLED=false and WEBGL_VERSION=2 not yet supported.");let l=null,c;if(i!=="complex64"&&M().get("WEBGL_BUFFER_SUPPORTED")){c=this.decode(t);let d=this.texData.get(c.dataId);l=this.gpgpu.createBufferFromTexture(d.texture.texture,...Wh(o))}this.pendingRead.set(t,[]),i!=="complex64"&&await this.gpgpu.createAndWaitForFence();let p;if(i==="complex64"){let d=await Promise.all([this.read(a.real.dataId),this.read(a.imag.dataId)]),h=d[0],g=d[1];p=S.mergeRealAndImagArrays(h,g)}else if(l==null)p=this.getValuesFromTexture(t);else{let d=y.sizeFromShape(o);p=this.gpgpu.downloadFloat32MatrixFromBuffer(l,d)}if(c!=null&&this.disposeIntermediateTensorInfo(c),l!=null){let d=this.gpgpu.gl;yt(d,()=>d.deleteBuffer(l))}let m=this.convertAndCacheOnCPU(t,p),f=this.pendingRead.get(t);return this.pendingRead.delete(t),f.forEach(d=>d(m)),this.pendingDisposal.has(t)&&(this.pendingDisposal.delete(t),this.disposeData(t)&&ho().removeDataId(t,this),this.pendingDeletes--),m}readToGPU(t,e={}){let n=this.texData.get(t),{values:o,shape:s,slice:i,dtype:a,isPacked:u,texture:l}=n;if(a==="complex64")throw new Error("Does not support reading texture for complex64 dtype.");if(i!=null){let f;u?f=new no(s,Gc):f=new tn(s,Gc);let d=this.runWebGLProgram(f,[{dataId:t,shape:s,dtype:a}],a),h=this.readToGPU(d,e);return this.disposeIntermediateTensorInfo(d),h}if(l==null)throw o!=null?new Error("Data is not on GPU but on CPU."):new Error("There is no data on GPU or CPU.");let c=this.decode(t,e.customTexShape),p=ho().makeTensorFromTensorInfo(c),m=this.texData.get(c.dataId);return Object.assign({tensorRef:p},m.texture)}bufferSync(t){let e=this.readSync(t.dataId);if(t.dtype==="string")try{let n=e.map(o=>y.decodeString(o));return wt(t.shape,t.dtype,n)}catch(n){throw new Error("Failed to decode encoded string bytes into utf-8")}return wt(t.shape,t.dtype,e)}checkNumericalProblems(t){if(t!=null)for(let e=0;e<t.length;e++){let n=t[e];if(!yk(n))throw M().getBool("WEBGL_RENDER_FLOAT32_CAPABLE")?Error(`The value ${n} cannot be represented with your current settings. Consider enabling float32 rendering: 'tf.env().set('WEBGL_RENDER_FLOAT32_ENABLED', true);'`):Error(`The value ${n} cannot be represented on this device.`)}}getValuesFromTexture(t){let{shape:e,dtype:n,isPacked:o}=this.texData.get(t),s=y.sizeFromShape(e);if(M().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")){let m=this.decode(t),f=this.texData.get(m.dataId),d=this.gpgpu.downloadMatrixFromPackedTexture(f.texture.texture,...Wh(e)).subarray(0,s);return this.disposeIntermediateTensorInfo(m),d}let i=M().getBool("WEBGL_PACK")&&o===!0,a=i?Kh(e):e,u=i?new Sw(a):new vw(a),l=this.runWebGLProgram(u,[{shape:a,dtype:n,dataId:t}],"float32"),c=this.texData.get(l.dataId),p=this.gpgpu.downloadByteEncodedFloatMatrixFromOutputTexture(c.texture.texture,c.texShape[0],c.texShape[1]).subarray(0,s);return this.disposeIntermediateTensorInfo(l),p}timerAvailable(){return M().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0}time(t){let e=this.activeTimers,n=[],o=!1;this.programTimersStack==null?(this.programTimersStack=n,o=!0):this.activeTimers.push(n),this.activeTimers=n,t();let s=y.flatten(this.activeTimers.map(u=>u.query)).filter(u=>u!=null),i=y.flatten(this.activeTimers.map(u=>u.name)).filter(u=>u!=null);this.activeTimers=e,o&&(this.programTimersStack=null);let a={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null};return(async()=>{if(M().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0){let u=await Promise.all(s);a.kernelMs=y.sum(u),a.getExtraProfileInfo=()=>u.map((l,c)=>({name:i[c],ms:l})).map(l=>`${l.name}: ${l.ms}`).join(", ")}else a.kernelMs={error:"WebGL query timers are not supported in this environment."};return this.uploadWaitMs=0,this.downloadWaitMs=0,a})()}memory(){return{unreliable:!1,numBytesInGPU:this.numBytesInGPU,numBytesInGPUAllocated:this.textureManager.numBytesAllocated,numBytesInGPUFree:this.textureManager.numBytesFree}}startTimer(){return M().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?this.gpgpu.beginQuery():{startMs:y.now(),endMs:null}}endTimer(t){return M().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?(this.gpgpu.endQuery(),t):(t.endMs=y.now(),t)}async getQueryTime(t){if(M().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0)return this.gpgpu.waitForQueryAndGetTime(t);let e=t;return e.endMs-e.startMs}disposeData(t,e=!1){if(this.pendingDisposal.has(t))return!1;if(!this.texData.has(t))return!0;if(e?this.texData.get(t).refCount=0:this.texData.get(t).refCount--,!e&&this.texData.get(t).refCount>0)return!1;if(this.pendingRead.has(t))return this.pendingDisposal.add(t),this.pendingDeletes++,!1;this.releaseGPUData(t);let{complexTensorInfos:n}=this.texData.get(t);return n!=null&&(this.disposeData(n.real.dataId,e),this.disposeData(n.imag.dataId,e)),this.texData.delete(t),!0}releaseGPUData(t){let{texture:e,dtype:n,texShape:o,usage:s,isPacked:i,slice:a}=this.texData.get(t),u=a&&a.origDataId||t,l=this.dataRefCount.get(u);l>1?this.dataRefCount.set(u,l-1):(this.dataRefCount.delete(u),e!=null&&(this.numBytesInGPU-=this.computeBytes(o,n),this.textureManager.releaseTexture(e,o,s,i)));let c=this.texData.get(t);c.texture=null,c.texShape=null,c.isPacked=!1,c.slice=null}getTexture(t){return this.uploadToGPU(t),this.texData.get(t).texture.texture}getDataInfo(t){return this.texData.get(t)}shouldExecuteOnCPU(t,e=Ktt){return M().getBool("WEBGL_CPU_FORWARD")&&t.every(n=>this.texData.get(n.dataId).texture==null&&y.sizeFromShape(n.shape)<e)}getGPGPUContext(){return this.gpgpu}where(t){S.warn("tf.where() in webgl locks the UI thread. Call tf.whereAsync() instead");let e=t.dataSync();return Wtt(t.shape,e)}packedUnaryOp(t,e,n){let o=new no(t.shape,e),s=this.compileAndRun(o,[t],n);return ho().makeTensorFromTensorInfo(s)}abs(t){if(this.shouldExecuteOnCPU([t])&&t.dtype!=="complex64"){let o=Rw(this.texData.get(t.dataId).values);return this.makeOutput(t.shape,t.dtype,o)}if(M().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(t,nT,t.dtype);let e=new tn(t.shape,nT),n=this.compileAndRun(e,[t]);return ho().makeTensorFromTensorInfo(n)}makeTensorInfo(t,e,n){let o;if(e==="string"&&n!=null&&n.length>0&&y.isString(n[0])){let s=n.map(i=>y.encodeString(i));o=this.write(s,t,e)}else o=this.write(n,t,e);return this.texData.get(o).usage=null,{dataId:o,shape:t,dtype:e}}makeOutput(t,e,n){return ho().makeTensorFromTensorInfo(this.makeTensorInfo(t,e,n),this)}unpackTensor(t){let e=new Lw(t.shape);return this.runWebGLProgram(e,[t],t.dtype)}packTensor(t){let e=new Ow(t.shape),n=!0;return this.runWebGLProgram(e,[t],t.dtype,null,n)}packedReshape(t,e){let n=[hl(t.shape),...gl(t.shape)],o={dtype:t.dtype,shape:n,dataId:t.dataId},s=[hl(e),...gl(e)],i=new yd(s,n),a=!0,u=[n],l=this.runWebGLProgram(i,[o],t.dtype,u,a);return{dataId:l.dataId,shape:e,dtype:l.dtype}}decode(t,e){let n=this.texData.get(t),{isPacked:o,shape:s,dtype:i}=n;if(e!=null){let m=y.sizeFromShape(s),f=e[0]*e[1]*4;y.assert(m<=f,()=>"customTexShape is too small. Row * Column * 4 should be equal or larger than the size of the tensor data.")}let a=Kh(s),u;o?u=new Iw(a):u=new Cw(a);let l=!0,c=[e!=null?e:Wh(a)],p=this.runWebGLProgram(u,[{shape:a,dtype:i,dataId:t}],i,c,l,e);return{dtype:i,shape:s,dataId:p.dataId}}runWebGLProgram(t,e,n,o,s=!1,i){let a=this.makeTensorInfo(t.outputShape,n),u=this.texData.get(a.dataId);if(t.packedOutput&&(u.isPacked=!0),t.outPackingScheme===ku.DENSE){let x=i!=null?i:Wh(t.outputShape);u.texShape=x.map(b=>b*2)}if(t.outTexUsage!=null&&(u.usage=t.outTexUsage),y.sizeFromShape(a.shape)===0)return u.values=y.getTypedArrayFromDType(a.dtype,0),a;let l=[],c=e.map(x=>{if(x.dtype==="complex64")throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.");let b=this.texData.get(x.dataId);if(b.texture==null){if(!t.packedInputs&&y.sizeFromShape(x.shape)<=M().getNumber("WEBGL_SIZE_UPLOAD_UNIFORM"))return{shape:x.shape,texData:null,isUniform:!0,uniformValues:b.values};t.packedInputs&&(b.isPacked=!0,b.shape=x.shape)}if(this.uploadToGPU(x.dataId),!!b.isPacked!=!!t.packedInputs)x=b.isPacked?this.unpackTensor(x):this.packTensor(x),l.push(x),b=this.texData.get(x.dataId);else if(b.isPacked&&!Tu(b.shape,x.shape)){let w=x,C=x.shape;x.shape=b.shape,x=this.packedReshape(x,C),l.push(x),b=this.texData.get(x.dataId),w.shape=C}return{shape:x.shape,texData:b,isUniform:!1}});this.uploadToGPU(a.dataId);let p={shape:a.shape,texData:u,isUniform:!1},m=tL(t,c,p),f=this.getAndSaveBinary(m,()=>JP(this.gpgpu,t,c,p)),d=this.activeTimers!=null,h;d&&(h=this.startTimer()),M().get("ENGINE_COMPILE_ONLY")||QP(this.gpgpu,f,c,p,o),l.forEach(x=>this.disposeIntermediateTensorInfo(x)),d&&(h=this.endTimer(h),this.activeTimers.push({name:t.constructor.name,query:this.getQueryTime(h)}));let g=M().get("WEBGL_FLUSH_THRESHOLD");if(g>0){let x=y.now();x-this.lastGlFlushTime>g&&(this.gpgpu.gl.flush(),this.lastGlFlushTime=x)}if(!M().getBool("WEBGL_LAZILY_UNPACK")&&u.isPacked&&s===!1){let x=this.unpackTensor(a);return this.disposeIntermediateTensorInfo(a),x}return a}compileAndRun(t,e,n,o,s=!1){return n=n||e[0].dtype,this.runWebGLProgram(t,e,n,o,s)}getAndSaveBinary(t,e){return t in this.binaryCache||(this.binaryCache[t]=e()),this.binaryCache[t]}getTextureManager(){return this.textureManager}dispose(){this.disposed||(M().getBool("IS_TEST")||Object.keys(this.binaryCache).forEach(e=>{this.gpgpu.deleteProgram(this.binaryCache[e].webGLProgram),delete this.binaryCache[e]}),this.textureManager.dispose(),this.canvas!=null&&typeof HTMLCanvasElement!="undefined"&&this.canvas instanceof HTMLCanvasElement?this.canvas.remove():this.canvas=null,this.gpgpuCreatedLocally&&(this.gpgpu.program=null,this.gpgpu.dispose()),this.disposed=!0)}floatPrecision(){return this.floatPrecisionValue==null&&(this.floatPrecisionValue=B(()=>{if(!M().get("WEBGL_RENDER_FLOAT32_ENABLED")){let t=M().getBool("DEBUG");M().set("DEBUG",!1);let e=this.abs(mt(1e-8)).dataSync()[0];if(M().set("DEBUG",t),e>0)return 32}return 16})),this.floatPrecisionValue}epsilon(){return this.floatPrecision()===32?Utt:Htt}uploadToGPU(t){let e=this.texData.get(t),{shape:n,dtype:o,values:s,texture:i,usage:a,isPacked:u}=e;if(i!=null)return;let l=this.activeTimers!=null,c;l&&(c=y.now());let p=e.texShape;if(p==null&&(p=$k(n,u),e.texShape=p),s!=null){let m=Kh(n),f,d=p[1],h=p[0],g=s instanceof Uint8Array||s instanceof Uint8ClampedArray;(u||!g)&&([d,h]=Ki(p[0],p[1])),u?f=new kw(m,g):f=new Nw(m,g);let x=g?[h,d]:p,b=this.makeTensorInfo(x,o),w=this.texData.get(b.dataId);g?w.usage=Kr.PIXELS:w.usage=Kr.UPLOAD,w.texShape=x,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(b.dataId),d,h,s);let C=[[h,d]],N=!0,_=this.runWebGLProgram(f,[b],o,C,N),A=this.texData.get(_.dataId);e.texShape=A.texShape,e.isPacked=A.isPacked,e.usage=A.usage,M().get("ENGINE_COMPILE_ONLY")?this.disposeData(_.dataId):(e.texture=A.texture,e.values=null,this.texData.delete(_.dataId)),this.disposeIntermediateTensorInfo(b),l&&(this.uploadWaitMs+=y.now()-c)}else{let m=this.acquireTexture(p,a,o,u);e.texture=m}}convertAndCacheOnCPU(t,e){let n=this.texData.get(t),{dtype:o}=n;return this.releaseGPUData(t),e!=null&&(n.values=Ytt(e,o)),n.values}acquireTexture(t,e,n,o){if(this.numBytesInGPU+=this.computeBytes(t,n),!this.warnedAboutMemory&&this.numBytesInGPU>this.numMBBeforeWarning*1024*1024){let s=(this.numBytesInGPU/1024/1024).toFixed(2);this.warnedAboutMemory=!0,console.warn(`High memory usage in GPU: ${s} MB, most likely due to a memory leak`)}return this.textureManager.acquireTexture(t,e,o)}computeBytes(t,e){return t[0]*t[1]*y.bytesPerElement(e)}checkCompileCompletion(){for(let[,t]of Object.entries(this.binaryCache))this.checkCompletion_(t)}async checkCompileCompletionAsync(){let t=[];if(this.gpgpu.parallelCompilationExtension){for(let[,e]of Object.entries(this.binaryCache))t.push(this.checkCompletionAsync_(e));return Promise.all(t)}else{for(let[,e]of Object.entries(this.binaryCache)){let n=new Promise(o=>{try{this.checkCompletion_(e),o(!0)}catch(s){throw s}});t.push(n)}return Promise.all(t)}}async checkCompletionAsync_(t){return this.gpgpu.gl.getProgramParameter(t.webGLProgram,this.gpgpu.parallelCompilationExtension.COMPLETION_STATUS_KHR)?this.checkCompletion_(t):(await ph(),this.checkCompletionAsync_(t))}checkCompletion_(t){if(this.gpgpu.gl.getProgramParameter(t.webGLProgram,this.gpgpu.gl.LINK_STATUS)===!1)throw console.log(this.gpgpu.gl.getProgramInfoLog(t.webGLProgram)),this.gpgpu.gl.getShaderParameter(t.fragmentShader,this.gpgpu.gl.COMPILE_STATUS)===!1?(hw(t.source,this.gpgpu.gl.getShaderInfoLog(t.fragmentShader)),new Error("Failed to compile fragment shader.")):new Error("Failed to link vertex and fragment shaders.");return!0}getUniformLocations(){for(let[,t]of Object.entries(this.binaryCache)){let{uniformLocations:e,customUniformLocations:n,infLoc:o,nanLoc:s,inShapesLocations:i,inTexShapesLocations:a,outShapeLocation:u,outShapeStridesLocation:l,outTexShapeLocation:c}=Mk(this.gpgpu,t.program,t.webGLProgram);t.uniformLocations=e,t.customUniformLocations=n,t.infLoc=o,t.nanLoc=s,t.inShapesLocations=i,t.inTexShapesLocations=a,t.outShapeLocation=u,t.outShapeStridesLocation=l,t.outTexShapeLocation=c}}};Eu.nextDataId=0;function Ytt(r,t){if(t==="float32"||t==="complex64")return r;if(t==="int32"||t==="bool"){let e=t==="int32"?new Int32Array(r.length):new Uint8Array(r.length);for(let n=0;n<e.length;++n)e[n]=Math.round(r[n]);return e}else throw new Error(`Unknown dtype ${t}`)}var oM="3.21.0";function sM(){M().set("WEBGL_FORCE_F16_TEXTURES",!0)}Hl.isBrowser()&&jp("webgl",()=>new Eu,2);var oTe={forceHalfFloat:sM};var bd=`
if (isnan(a)) return a;
if (isnan(b)) return b;
`;var oo=class{constructor(t,e,n){this.variableNames=["A","B"],this.outputShape=S.assertAndGetBroadcastShape(e,n),this.enableShapeUniforms=we(this.outputShape.length),this.userCode=`
float binaryOperation(float a, float b) {
${t}
}
void main() {
float a = getAAtOutCoords();
float b = getBAtOutCoords();
setOutput(binaryOperation(a, b));
}
`}};var ji=`
result.r = isNaN.r ? NAN : result.r;
result.g = isNaN.g ? NAN : result.g;
result.b = isNaN.b ? NAN : result.b;
result.a = isNaN.a ? NAN : result.a;
`;var Fo=class{constructor(t,e,n,o=!1){this.variableNames=["A","B"],this.supportsBroadcasting=!0,this.packedInputs=!0,this.packedOutput=!0,this.outputShape=S.assertAndGetBroadcastShape(e,n);let s=this.outputShape.length;this.enableShapeUniforms=we(s);let i="";if(o)if(s===0||y.sizeFromShape(this.outputShape)===1)i=`
result.y = 0.;
result.z = 0.;
result.w = 0.;
`;else if(i=`
${zt(s)} coords = getOutputCoords();
`,s===1)this.enableShapeUniforms?i+=`
result.y = (coords + 1) >= outShape ? 0. : result.y;
result.z = 0.;
result.w = 0.;
`:i+=`
result.y = (coords + 1) >= ${this.outputShape[0]} ? 0. : result.y;
result.z = 0.;
result.w = 0.;
`;else{let u=Qe("coords",s);this.enableShapeUniforms?i+=`
bool nextRowOutOfBounds =
(${u[s-2]} + 1) >= outShape[${s} - 2];
bool nextColOutOfBounds =
(${u[s-1]} + 1) >= outShape[${s} - 1];
result.y = nextColOutOfBounds ? 0. : result.y;
result.z = nextRowOutOfBounds ? 0. : result.z;
result.w = nextColOutOfBounds || nextRowOutOfBounds ? 0. : result.w;
`:i+=`
bool nextRowOutOfBounds =
(${u[s-2]} + 1) >= ${this.outputShape[s-2]};
bool nextColOutOfBounds =
(${u[s-1]} + 1) >= ${this.outputShape[s-1]};
result.y = nextColOutOfBounds ? 0. : result.y;
result.z = nextRowOutOfBounds ? 0. : result.z;
result.w = nextColOutOfBounds || nextRowOutOfBounds ? 0. : result.w;
`}this.userCode=`
vec4 binaryOperation(vec4 a, vec4 b) {
${t}
}
void main() {
vec4 a = getAAtOutCoords();
vec4 b = getBAtOutCoords();
vec4 result = binaryOperation(a, b);
${i}
setOutput(result);
}
`}};function tr(r){let{inputs:t,backend:e}=r,{x:n}=t;return e.incRef(n.dataId),{dataId:n.dataId,shape:n.shape,dtype:n.dtype}}var iM={kernelName:lo,backendName:"webgl",kernelFunc:tr};function Tn(r){let{inputs:t,backend:e}=r,{real:n,imag:o}=t,s=e.makeTensorInfo(n.shape,"complex64"),i=e.texData.get(s.dataId),a=tr({inputs:{x:n},backend:e}),u=tr({inputs:{x:o},backend:e});return i.complexTensorInfos={real:a,imag:u},s}var aM={kernelName:pp,backendName:"webgl",kernelFunc:Tn};var oT="return (a < 0.) ? b * a : a;",sT=`
vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));
return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);
`;function Ztt(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{alpha:s}=n,i=e.makeTensorInfo([],"float32",y.createScalarValue(s,"float32")),a=M().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Fo(sT,o.shape,i.shape):new oo(oT,o.shape,i.shape),u=e.runWebGLProgram(a,[o,i],"float32");return e.disposeIntermediateTensorInfo(i),u}var lM={kernelName:ss,backendName:"webgl",kernelFunc:Ztt};var iT="return (a < 0.) ? b * a : a;",aT=`
vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));
return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);
`;function Jtt(r){let{inputs:t,backend:e}=r,{x:n,alpha:o}=t,s=M().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Fo(aT,n.shape,o.shape):new oo(iT,n.shape,o.shape);return e.runWebGLProgram(s,[n,o],"float32")}var uM={kernelName:ys,backendName:"webgl",kernelFunc:Jtt};var Oo="if (isnan(x)) return x;";function Ct({opSnippet:r,packedOpSnippet:t,cpuKernelImpl:e,dtype:n}){return({inputs:o,backend:s})=>{let{x:i}=o,a=s,u=n||i.dtype;if(a.shouldExecuteOnCPU([i])&&e!=null){let p=a.texData.get(i.dataId),m=e(p.values,u);return a.makeTensorInfo(i.shape,u,m)}let l=M().getBool("WEBGL_PACK_UNARY_OPERATIONS")&&t!=null,c;return l?c=new no(i.shape,t):c=new tn(i.shape,r),a.runWebGLProgram(c,[i],u)}}function le({opSnippet:r,packedOpSnippet:t,checkOutOfBounds:e=!1,supportsComplex:n=!1,cpuKernelImpl:o,dtype:s}){return({inputs:i,backend:a})=>{let{a:u,b:l}=i,c=a;if(n&&u.dtype==="complex64"){let d=c.texData.get(u.dataId),h=c.texData.get(l.dataId),[g,x]=[[d.complexTensorInfos.real,h.complexTensorInfos.real],[d.complexTensorInfos.imag,h.complexTensorInfos.imag]].map(w=>{let[C,N]=w,_={dataId:C.dataId,dtype:C.dtype,shape:u.shape},A={dataId:N.dataId,dtype:N.dtype,shape:l.shape},$=new oo(r,u.shape,l.shape);return c.runWebGLProgram($,[_,A],or(C.dtype,N.dtype))}),b=Tn({inputs:{real:g,imag:x},backend:c});return c.disposeIntermediateTensorInfo(g),c.disposeIntermediateTensorInfo(x),b}let p=s||or(u.dtype,l.dtype);if((u.dtype==="string"||l.dtype==="string"||c.shouldExecuteOnCPU([u,l]))&&o!=null){let d=c.texData.get(u.dataId).values,h=c.texData.get(l.dataId).values,g=u.dtype==="string"?S.fromUint8ToStringArray(d):d,x=u.dtype==="string"?S.fromUint8ToStringArray(h):h,[b,w]=o(u.shape,l.shape,g,x,p),C=c.makeTensorInfo(w,p),N=c.texData.get(C.dataId);return N.values=b,C}let m=M().getBool("WEBGL_PACK_BINARY_OPERATIONS")&&t!=null,f;return m?f=new Fo(t,u.shape,l.shape,e):f=new oo(r,u.shape,l.shape),c.runWebGLProgram(f,[u,l],p)}}function xl(r,t=!1){if(r==="linear")return t?QL:KL;if(r==="relu")return t?eM:XL;if(r==="elu")return t?tM:jL;if(r==="relu6")return t?rM:YL;if(r==="prelu")return t?aT:iT;if(r==="leakyrelu")return t?sT:oT;if(r==="sigmoid")return t?nM:ZL;throw new Error(`Activation ${r} has not been implemented for the WebGL backend.`)}var wd=class{constructor(t,e,n,o=!1,s=!1,i=!1,a=null,u=!1,l=!1){this.variableNames=["matrixA","matrixB"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=n,this.enableShapeUniforms=we(this.outputShape.length);let c=o?t[1]:t[2],p=Math.ceil(c/2),m=o?"i * 2, rc.y":"rc.y, i * 2",f=s?"rc.z, i * 2":"i * 2, rc.z",d=o?["a.xxyy","a.zzww"]:["a.xxzz","a.yyww"],h=s?["b.xzxz","b.ywyw"]:["b.xyxy","b.zwzw"],g="",x="";a&&(u?g=`vec4 activation(vec4 a) {
vec4 b = getPreluActivationWeightsAtOutCoords();
${a}
}`:l?g=`vec4 activation(vec4 a) {
vec4 b = getLeakyreluAlphaAtOutCoords();
${a}
}`:g=`vec4 activation(vec4 x) {
${a}
}`,x="result = activation(result);");let b=i?"result += getBiasAtOutCoords();":"";i&&this.variableNames.push("bias"),u&&this.variableNames.push("preluActivationWeights"),l&&this.variableNames.push("leakyreluAlpha");let w="rc.x",C="rc.x";t[0]<e[0]?w=`int(min(float(rc.x), ${t[0]-1}.))`:e[0]<t[0]&&(C=`int(min(float(rc.x), ${e[0]-1}.))`),this.userCode=`
${g}
// Don't use uniform for sharedDimensionPacked for performance.
const float sharedDimension = ${p}.0;
vec4 dot2x2ARowBCol(ivec3 rc) {
vec4 result = vec4(0);
for (int i = 0; i < ${p}; i++) {
int batchA = ${w};
int batchB = ${C};
vec4 a = getMatrixA(batchA, ${m});
vec4 b = getMatrixB(batchB, ${f});
// These swizzled products need to be separately added.
// See: https://github.com/tensorflow/tfjs/issues/1735
result += (${d[0]} * ${h[0]});
result += (${d[1]} * ${h[1]});
}
return result;
}
void main() {
ivec3 rc = getOutputCoords();
vec4 result = dot2x2ARowBCol(rc);
${b}
${x}
setOutput(result);
}
`}};var lT={REAL:"return areal * breal - aimag * bimag;",IMAG:"return areal * bimag + aimag * breal;"},Xh=class{constructor(t,e,n){this.variableNames=["AReal","AImag","BReal","BImag"],this.outputShape=S.assertAndGetBroadcastShape(e,n),this.userCode=`
float binaryOpComplex(
float areal, float aimag, float breal, float bimag) {
${t}
}
void main() {
float areal = getARealAtOutCoords();
float aimag = getAImagAtOutCoords();
float breal = getBRealAtOutCoords();
float bimag = getBImagAtOutCoords();
setOutput(binaryOpComplex(areal, aimag, breal, bimag));
}
`}};var cM="return a * b;";function Yh(r){let{inputs:t,backend:e}=r,{a:n,b:o}=t,s=S.upcastType(n.dtype,o.dtype);if(n.dtype==="complex64"){let a=e.texData.get(n.dataId),u=e.texData.get(o.dataId),l=new Xh(lT.REAL,n.shape,o.shape),c=new Xh(lT.IMAG,n.shape,o.shape),p=[{dataId:a.complexTensorInfos.real.dataId,dtype:a.complexTensorInfos.real.dtype,shape:n.shape},{dataId:a.complexTensorInfos.imag.dataId,dtype:a.complexTensorInfos.imag.dtype,shape:n.shape},{dataId:u.complexTensorInfos.real.dataId,dtype:u.complexTensorInfos.real.dtype,shape:o.shape},{dataId:u.complexTensorInfos.imag.dataId,dtype:u.complexTensorInfos.imag.dtype,shape:o.shape}],m=e.runWebGLProgram(l,p,"float32"),f=e.runWebGLProgram(c,p,"float32"),d=Tn({inputs:{real:m,imag:f},backend:e});return e.disposeIntermediateTensorInfo(m),e.disposeIntermediateTensorInfo(f),d}if(e.shouldExecuteOnCPU([n,o])){let a=e.texData.get(n.dataId),u=e.texData.get(o.dataId),[l,c]=CL(n.shape,o.shape,a.values,u.values,s),p=e.makeTensorInfo(c,s),m=e.texData.get(p.dataId);return m.values=l,p}let i;return M().getBool("WEBGL_PACK_BINARY_OPERATIONS")?i=new Fo(cM,n.shape,o.shape):i=new oo(cM,n.shape,o.shape),e.runWebGLProgram(i,[n,o],s)}var pM={kernelName:ds,backendName:"webgl",kernelFunc:Yh};function mM(r,t,e){let n=[hl(r.shape),...gl(r.shape)],o={dtype:r.dtype,shape:n,dataId:r.dataId},s=[hl(t),...gl(t)],i=new yd(s,n),a=!0,u=[n],l=e.runWebGLProgram(i,[o],r.dtype,u,a);return{dataId:l.dataId,shape:t,dtype:l.dtype}}function st(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{shape:s}=n,i=e,a=y.sizeFromShape(o.shape),u=y.inferFromImplicitShape(s,a),l=y.sizeFromShape(u);y.assert(a===l,()=>`The new shape (${u}) has ${l} elements and the old shape (${o.shape}) has ${a} elements. The new shape and old shape must have the same number of elements.`);let c=i.texData.get(o.dataId);return c.isPacked&&!Tu(o.shape,u)&&!(c.texture!==null&&Tu(c.shape,u))?mM(o,u,i):(i.incRef(o.dataId),{dataId:o.dataId,shape:u,dtype:o.dtype})}var fM={kernelName:mi,backendName:"webgl",kernelFunc:st};var Zh=class{constructor(t,e){this.variableNames=["x"];let{windowSize:n,batchSize:o,inSize:s,outSize:i}=t;this.outputShape=[o,i];let a=Math.floor(n/4)*4,u=n%4,l="sumValue += dot(values, ones);";if(e!=null){let p=1/e;l=`sumValue += dot(values * ${y.isInt(p)?p.toPrecision(2):p}, ones);`}let c="";s%n>0&&(c=`
if (inIdx < 0 || inIdx >= ${s}) {
return 0.0;
}
`),this.userCode=`
const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);
float getValue(int batch, int inIdx) {
${c}
return getX(batch, inIdx);
}
void main() {
ivec2 coords = getOutputCoords();
int batch = coords[0];
int outIdx = coords[1];
int inOffset = outIdx * ${n};
float sumValue = 0.0;
for (int i = 0; i < ${a}; i += 4) {
int inIdx = inOffset + i;
vec4 values = vec4(
getValue(batch, inIdx),
getValue(batch, inIdx + 1),
getValue(batch, inIdx + 2),
getValue(batch, inIdx + 3)
);
${l}
}
int inIdx = inOffset + ${a};
if (${u===1}) {
vec4 values = vec4(getValue(batch, inIdx), 0.0, 0.0, 0.0);
${l}
} else if (${u===2}) {
vec4 values = vec4(
getValue(batch, inIdx),
getValue(batch, inIdx + 1), 0.0, 0.0);
${l}
} else if (${u===3}) {
vec4 values = vec4(
getValue(batch, inIdx),
getValue(batch, inIdx + 1),
getValue(batch, inIdx + 2), 0.0);
${l}
}
setOutput(sumValue);
}
`}};var zw=class{constructor(t,e){this.variableNames=["x"];let{windowSize:n,batchSize:o,inSize:s,outSize:i}=t;this.outputShape=[o,i];let a="0.0",u="";e==="prod"?a="1.0":e==="min"?(a="1.0 / 1e-20",u="min"):e==="max"&&(a="-1.0 / 1e-20",u="max");let l=`${e}(${e}(${e}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;e==="sum"?l="sumValue":e==="prod"?l="prodValue":e==="all"?l="allValue":e==="any"&&(l="anyValue");let c=Math.floor(n/4)*4,p=n%4,m=`
if (${e==="sum"}) {
sumValue += dot(values, ones);
} else if (${e==="prod"}) {
vec2 tmp = vec2(values[0], values[1]) * vec2(values[2], values[3]);
prodValue *= tmp[0] * tmp[1];
} else {
minMaxValue = ${u}(values, minMaxValue);
if (${e==="min"} || ${e==="max"}) {
minMaxValue = ${u}(values, minMaxValue);
bvec4 isNaN = isnan(values);
if (isNaN.r || isNaN.g || isNaN.b || isNaN.a) {
minMaxValue = vec4(NAN);
}
}
}
`,f="vec4";e==="all"?(a="1.0",m=`
bool reducedAllValue = all(values);
float floatedReducedAllValue = float(reducedAllValue);
allValue = float(allValue >= 1.0 && floatedReducedAllValue >= 1.0);
`,f="bvec4"):e==="any"&&(a="0.0",m=`
bool reducedAnyValue = any(values);
float floatedReducedAnyValue = float(reducedAnyValue);
anyValue = float(anyValue >= 1.0 || floatedReducedAnyValue >= 1.0);
`,f="bvec4");let d="";s%n>0&&(d=`
if (inIdx < 0 || inIdx >= ${s}) {
return initializationValue;
}
`),this.userCode=`
const float initializationValue = ${a};
const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);
float getValue(int batch, int inIdx) {
${d}
return getX(batch, inIdx);
}
void main() {
ivec2 coords = getOutputCoords();
int batch = coords[0];
int outIdx = coords[1];
int inOffset = outIdx * ${n};
vec4 minMaxValue = vec4(${a});
float prodValue = 1.0;
float sumValue = 0.0;
float allValue = 1.0;
float anyValue = 0.0;
for (int i = 0; i < ${c}; i += 4) {
int inIdx = inOffset + i;
${f} values = ${f}(
getValue(batch, inIdx),
getValue(batch, inIdx + 1),
getValue(batch, inIdx + 2),
getValue(batch, inIdx + 3)
);
${m}
}
int inIdx = inOffset + ${c};
if (${p===1}) {
${f} values = ${f}(
getValue(batch, inIdx),
initializationValue,
initializationValue,
initializationValue
);
${m}
} else if (${p===2}) {
${f} values = ${f}(
getValue(batch, inIdx),
getValue(batch, inIdx + 1),
initializationValue,
initializationValue
);
${m}
} else if (${p===3}) {
${f} values = ${f}(
getValue(batch, inIdx),
getValue(batch, inIdx + 1),
getValue(batch, inIdx + 2),
initializationValue
);
${m}
}
setOutput(${l});
}
`}};function tet(r){let t=[];for(;t.length===0||t[t.length-1].outSize!==1;){let e=t.length?t[t.length-1].outSize:r[1],n=S.computeOptimalWindowSize(e);t.push({inSize:e,windowSize:n,outSize:Math.ceil(e/n)})}return t}function Gn(r,t,e,n){let o=tet(r.shape),s=r;for(let i=0;i<o.length;i++){let{inSize:a,windowSize:u,outSize:l}=o[i],c,p;e==="mean"?c=i===0?new Zh({windowSize:u,inSize:a,batchSize:r.shape[0],outSize:l},a):new Zh({windowSize:u,inSize:a,batchSize:r.shape[0],outSize:l}):c=new zw({windowSize:u,inSize:a,batchSize:r.shape[0],outSize:l},e),p=s,s=n.runWebGLProgram(c,[s],t),p.dataId!==r.dataId&&n.disposeIntermediateTensorInfo(p)}return s}var Bw=class{constructor(t,e){this.variableNames=["A"];let n=new Array(t.length);for(let i=0;i<n.length;i++)n[i]=t[e[i]];this.outputShape=n,this.rank=n.length;let o=zt(this.rank),s=eet(e);this.userCode=`
void main() {
${o} resRC = getOutputCoords();
setOutput(getA(${s}));
}
`}};function eet(r){let t=r.length;if(t>6)throw Error(`Transpose for rank ${t} is not yet supported`);let e=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u","resRC.v"],n=new Array(t);for(let o=0;o<r.length;o++)n[r[o]]=e[o];return n.join()}var Vw=class{constructor(t,e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0;let n=new Array(t.length);for(let c=0;c<n.length;c++)n[c]=t[e[c]];if(this.outputShape=n,this.rank=n.length,this.rank>6)throw Error(`Packed transpose for rank ${this.rank} is not yet supported.`);let o=zt(this.rank),s=rT("rc",this.rank),i=new Array(this.rank);for(let c=0;c<e.length;c++)i[e[c]]=s[c];let a=`vec2(${i.slice(-2).join()})`,u=`++${s[this.rank-1]} < ${n[this.rank-1]}`,l=`getChannel(getA(${i.join()}), ${a})`;this.userCode=`
void main() {
${o} rc = getOutputCoords();
vec4 result = vec4(0.);
result[0] = ${l};
if(${u}) {
result[1] = ${l};
}
--${s[this.rank-1]};
if(++${s[this.rank-2]} < ${n[this.rank-2]}) {
result[2] = ${l};
if(${u}) {
result[3] = ${l};
}
}
setOutput(result);
}
`}};function _u(r,t,e){let n=M().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new Vw(r.shape,t):new Bw(r.shape,t);return e.runWebGLProgram(n,[r],r.dtype)}function dM(r,t,e,n){let o=t,s=r.shape.length,i=y.parseAxisParam(o,r.shape),a=i,u=S.getAxesPermutation(a,s),l=u!=null,c=r;l&&(c=_u(r,u,n),a=S.getInnerMostAxes(a.length,s)),S.assertAxesAreInnerMostDims("sum",a,s);let[p,m]=S.computeOutAndReduceShapes(c.shape,a),f=p;e&&(f=S.expandShapeToKeepDim(p,i));let d=y.sizeFromShape(m),g=y.sizeFromShape(r.shape)/d,x=st({inputs:{x:c},attrs:{shape:[g,d]},backend:n}),b=Gu(r.dtype),w=Gn(x,b,"sum",n),C=st({inputs:{x:w},attrs:{shape:f},backend:n});return n.disposeIntermediateTensorInfo(x),n.disposeIntermediateTensorInfo(w),l&&n.disposeIntermediateTensorInfo(c),C}function Wc(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{axis:s,keepDims:i}=n;return dM(o,s,i,e)}var hM={kernelName:As,backendName:"webgl",kernelFunc:Wc};function Fe(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{perm:s}=n,i=e,a=o.shape.length,u=new Array(a);for(let c=0;c<u.length;c++)u[c]=o.shape[s[c]];let l;if(i.shouldExecuteOnCPU([o])){let p=i.texData.get(o.dataId).values,m=Vc(p,o.shape,o.dtype,s,u);l=i.makeTensorInfo(u,o.dtype);let f=i.texData.get(l.dataId);f.values=m}else l=_u(o,s,i);return l}var gM={kernelName:Jn,backendName:"webgl",kernelFunc:Fe};var uT=1e3;function Uc({a:r,b:t,transposeA:e,transposeB:n,backend:o,bias:s=null,preluActivationWeights:i=null,leakyreluAlpha:a=0,activation:u=null}){let l=r.shape.length,c=t.shape.length,p=e?r.shape[l-2]:r.shape[l-1],m=n?t.shape[c-1]:t.shape[c-2],f=e?r.shape[l-1]:r.shape[l-2],d=n?t.shape[c-2]:t.shape[c-1],h=r.shape.slice(0,-2),g=t.shape.slice(0,-2),x=y.sizeFromShape(h),b=y.sizeFromShape(g),C=zr.assertAndGetBroadcastShape(r.shape.slice(0,-2),t.shape.slice(0,-2)).concat([f,d]);y.assert(p===m,()=>`Error in matMul: inner shapes (${p}) and (${m}) of Tensors with shapes ${r.shape} and ${t.shape} and transposeA=${e} and transposeB=${n} must match.`);let N=e?[x,p,f]:[x,f,p],_=n?[b,d,m]:[b,m,d],A=st({inputs:{x:r},backend:o,attrs:{shape:N}}),$=st({inputs:{x:t},backend:o,attrs:{shape:_}}),F=[A,$],P=Math.max(x,b),V=e?A.shape[1]:A.shape[2],G=s!=null,W=i!=null,q=u==="leakyrelu",H=u!=null?xl(u,!0):null,j=G||W||q||H!=null,Y;if((f===1||d===1)&&V>uT&&j===!1){let et=A,rt=$;e&&(et=Fe({inputs:{x:A},backend:o,attrs:{perm:[0,2,1]}}),F.push(et)),n&&(rt=Fe({inputs:{x:$},backend:o,attrs:{perm:[0,2,1]}}),F.push(rt));let ot=d!==1,at=d===1,nt=et;ot&&(nt=st({inputs:{x:et},backend:o,attrs:{shape:[P,V,1]}}),F.push(nt));let it=d===1?2:1,dt=rt;at&&(dt=st({inputs:{x:rt},backend:o,attrs:{shape:[P,1,V]}}),F.push(dt));let ht=Yh({inputs:{a:nt,b:dt},backend:o});Y=Wc({inputs:{x:ht},backend:o,attrs:{axis:it,keepDims:!0}}),F.push(ht)}else{let et=or(r.dtype,t.dtype),rt=new wd(N,_,[P,f,d],e,n,G,H,W,q),ot=[A,$];if(s!=null&&ot.push(s),W&&ot.push(i),q){let at=o.makeTensorInfo([],"float32",y.createScalarValue(a,"float32"));ot.push(at),F.push(at)}Y=o.runWebGLProgram(rt,ot,et)}let Z=st({inputs:{x:Y},backend:o,attrs:{shape:C}});F.push(Y);for(let et of F)o.disposeIntermediateTensorInfo(et);return Z}function ret(r){let{inputs:t,backend:e,attrs:n}=r,{a:o,b:s,bias:i,preluActivationWeights:a}=t,{transposeA:u,transposeB:l,activation:c,leakyreluAlpha:p}=n;return Uc({a:o,b:s,transposeA:u,transposeB:l,backend:e,bias:i,preluActivationWeights:a,leakyreluAlpha:p,activation:c})}var xM={kernelName:bi,backendName:"webgl",kernelFunc:ret};var yM="return abs(x);";function net(r){let{inputs:t,backend:e}=r,{x:n}=t;if(e.shouldExecuteOnCPU([n])&&n.dtype!=="complex64"){let s=e.texData.get(n.dataId),i=Rw(s.values);return e.makeTensorInfo(n.shape,n.dtype,i)}let o;return M().getBool("WEBGL_PACK_UNARY_OPERATIONS")?o=new no(n.shape,yM):o=new tn(n.shape,yM),e.runWebGLProgram(o,[n],n.dtype)}var bM={kernelName:oi,backendName:"webgl",kernelFunc:net};var oet=pr+`
if (abs(x) > 1.) {
return NAN;
}
return acos(x);
`,set=Ct({opSnippet:oet}),wM={kernelName:ra,backendName:"webgl",kernelFunc:set};var iet=pr+`
if (x < 1.0) return NAN;
return log(x + sqrt(x * x - 1.0));`,aet=Ct({opSnippet:iet}),CM={kernelName:na,backendName:"webgl",kernelFunc:aet};var IM="return a + b;",uet=le({opSnippet:IM,packedOpSnippet:IM,supportsComplex:!0,cpuKernelImpl:eL}),vM={kernelName:Yn,backendName:"webgl",kernelFunc:uet};var Gw=class{constructor(t,e){this.outputShape=[],this.outputShape=t,this.variableNames=e.map((s,i)=>`T${i}`);let n=[];this.variableNames.forEach(s=>{n.push(`float v${s} = get${s}AtOutCoords();`)});let o=this.variableNames.map(s=>`v${s}`).join(" + ");this.userCode=`
void main() {
${n.join(`
`)}
float result = ${o};
setOutput(result);
}
`}};var Ww=class{constructor(t,e){this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t,this.variableNames=e.map((s,i)=>`T${i}`);let n=[];this.variableNames.forEach(s=>{n.push(`vec4 v${s} = get${s}AtOutCoords();`)});let o=this.variableNames.map(s=>`v${s}`).join(" + ");this.userCode=`
void main() {
${n.join(`
`)}
vec4 result = ${o};
setOutput(result);
}
`}};function Uw(r){let{inputs:t,backend:e}=r,n=t;if(n.length===1)return tr({inputs:{x:n[0]},backend:e});if(n.length>M().get("WEBGL_MAX_TEXTURES_IN_SHADER")){let u=Math.floor(n.length/2),l=Uw({inputs:n.slice(0,u),backend:e}),c=Uw({inputs:n.slice(u),backend:e});return Uw({inputs:[l,c],backend:e})}let o=n.map(u=>u.dtype).reduce((u,l)=>or(u,l)),s=n.map(u=>u.shape),a=M().getBool("WEBGL_PACK")?new Ww(n[0].shape,s):new Gw(n[0].shape,s);return e.runWebGLProgram(a,n,o)}var SM={kernelName:Vo,backendName:"webgl",kernelFunc:Uw};function cet(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{axis:s,keepDims:i}=n,a=o.shape.length,u=y.parseAxisParam(s,o.shape),l=u,c=S.getAxesPermutation(l,a),p=o;c!=null&&(p=Fe({inputs:{x:o},backend:e,attrs:{perm:c}}),l=S.getInnerMostAxes(l.length,a)),S.assertAxesAreInnerMostDims("all",l,a);let[m,f]=S.computeOutAndReduceShapes(p.shape,l),d=y.sizeFromShape(f),h=st({inputs:{x:p},backend:e,attrs:{shape:[-1,d]}}),g=Gn(h,h.dtype,"all",e),x;if(i){let b=S.expandShapeToKeepDim(m,u);x=st({inputs:{x:g},backend:e,attrs:{shape:b}})}else x=st({inputs:{x:g},backend:e,attrs:{shape:m}});return e.disposeIntermediateTensorInfo(h),e.disposeIntermediateTensorInfo(g),c!=null&&e.disposeIntermediateTensorInfo(p),x}var NM={kernelName:oa,backendName:"webgl",kernelFunc:cet};function pet(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{axis:s,keepDims:i}=n,a=o.shape.length,u=y.parseAxisParam(s,o.shape),l=u,c=S.getAxesPermutation(l,a),p=o;c!=null&&(p=Fe({inputs:{x:o},backend:e,attrs:{perm:c}}),l=S.getInnerMostAxes(l.length,a)),S.assertAxesAreInnerMostDims("any",l,a);let[m,f]=S.computeOutAndReduceShapes(p.shape,l),d=y.sizeFromShape(f),h=st({inputs:{x:p},backend:e,attrs:{shape:[-1,d]}}),g=Gn(h,h.dtype,"any",e),x;if(i){let b=S.expandShapeToKeepDim(m,u);x=st({inputs:{x:g},backend:e,attrs:{shape:b}})}else x=st({inputs:{x:g},backend:e,attrs:{shape:m}});return e.disposeIntermediateTensorInfo(h),e.disposeIntermediateTensorInfo(g),c!=null&&e.disposeIntermediateTensorInfo(p),x}var kM={kernelName:sa,backendName:"webgl",kernelFunc:pet};var Hw=class{constructor(t,e,n){this.variableNames=["A"];let{windowSize:o,batchSize:s,outSize:i}=t;n||this.variableNames.push("bestIndicesA"),this.outputShape=[s,i];let a=e==="max"?">":"<",u=n?"inOffset + i;":"round(getBestIndicesA(batch, inOffset + i));";this.userCode=`
void main() {
ivec2 coords = getOutputCoords();
int batch = coords[0];
int outIdx = coords[1];
int inOffset = outIdx * ${o};
int bestIndex = inOffset;
float bestValue = getA(batch, bestIndex);
for (int i = 0; i < ${o}; i++) {
int inIdx = ${u};
float candidate = getA(batch, inIdx);
if (candidate ${a} bestValue) {
bestValue = candidate;
bestIndex = inIdx;
}
}
setOutput(float(bestIndex));
}
`}};var qw=class{constructor(t,e,n,o){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,y.assert(t.length>2,()=>`Packed arg${n.charAt(0).toUpperCase()+n.slice(1)} supports only inputs with rank above 2.`);let s=t[t.length-1],i=Math.ceil(s/e);this.outputShape=t.slice(0,-1),i>1&&this.outputShape.push(i),o||this.variableNames.push("bestIndicesA");let a=this.outputShape,u=a.length,l=zt(u),c=Qe("coords",u),p,m;if(i===1){m=u+1;let $=zt(m);p=`
${$} sourceLocR = ${$}(${c.join()}, 0);
++${c[u-1]};
${$} sourceLocG = ${$}(${c.join()}, 0);
++${c[u-2]};
${$} sourceLocA = ${$}(${c.join()}, 0);
--${c[u-1]};
${$} sourceLocB = ${$}(${c.join()}, 0);
--${c[u-2]};`}else m=u,p=`
${l} sourceLocR = coords;
++${c[u-1]};
${l} sourceLocG = coords;
++${c[u-2]};
${l} sourceLocA = coords;
--${c[u-1]};
${l} sourceLocB = coords;
--${c[u-2]};`;let f=["x","y","z","w","u","v"].slice(0,m),d="."+f[m-1],h=f.map($=>"int "+$),g=Qe("sourceLocR",m-1).concat("inIdx.r"),x=Qe("sourceLocG",m-1).concat("inIdx.g"),b=Qe("sourceLocB",m-1).concat("inIdx.b"),w=Qe("sourceLocA",m-1).concat("inIdx.a"),C=n==="max"?"greaterThan":"lessThan",N=o?"":`
inIdx = round(vec4(getBestIndicesAChannel(${g.join()}),
getBestIndicesAChannel(${x.join()}),
getBestIndicesAChannel(${b.join()}),
getBestIndicesAChannel(${w.join()})));`,_=`vec4(
getAChannel(${g.join()}),
hasNextCol ? getAChannel(${x.join()}) : 0.,
hasNextRow ? getAChannel(${b.join()}) : 0.,
hasNextRow && hasNextCol ? getAChannel(${w.join()}) : 0.)`,A=o?"":`
float getBestIndicesAChannel(${h.join()}) {
return getChannel(getBestIndicesA(${f.join()}),
vec2(${f.slice(-2).join()}));
}`;this.userCode=`
float getAChannel(${h.join()}) {
return getChannel(getA(${f.join()}),
vec2(${f.slice(-2).join()}));
}
${A}
void main() {
${l} coords = getOutputCoords();
bool hasNextCol = ${c[u-1]} < ${a[u-1]-1};
bool hasNextRow = ${c[u-2]} < ${a[u-2]-1};
${p}
ivec4 srcIdx = ivec4(sourceLocR${d}, sourceLocG${d},
sourceLocB${d}, sourceLocA${d}) * ${e};
ivec4 inIdx = srcIdx;
vec4 bestIndex = vec4(inIdx);
vec4 bestValue = ${_};
for (int i = 0; i < ${e}; i++) {
inIdx = srcIdx;
${N}
vec4 candidate = ${_};
bvec4 nan = isnan(candidate);
bvec4 replace = bvec4(
vec4(${C}(candidate, bestValue)) * (vec4(1.0) - vec4(nan)));
bestValue = vec4(replace.x ? candidate.x : bestValue.x,
replace.y ? candidate.y : bestValue.y,
replace.z ? candidate.z : bestValue.z,
replace.w ? candidate.w : bestValue.w);
bestIndex = mix(bestIndex, vec4(inIdx), vec4(replace));
srcIdx++;
}
setOutput(bestIndex);
}
`}};function TM(r,t,e,n=null){let o=t.shape[0],s=t.shape[1];n!=null&&(o=n.shape[0],s=n.shape[1]);let i=S.computeOptimalWindowSize(s),a={windowSize:i,inSize:s,batchSize:o,outSize:Math.ceil(s/i)},u=new Hw(a,e,n==null),l=[t];n!=null&&l.push(n);let c=r.runWebGLProgram(u,l,"int32");if(c.shape[1]===1)return c;let p=TM(r,t,e,c);return r.disposeIntermediateTensorInfo(c),p}function EM(r,t,e,n=null){let o=n!=null?n.shape:t.shape,s=o[o.length-1],i=S.computeOptimalWindowSize(s),a=new qw(o,i,e,n==null),u=n==null?[t]:[t,n],l=r.runWebGLProgram(a,u,"int32");if(l.shape.length===t.shape.length){let c=EM(r,t,e,l);return r.disposeIntermediateTensorInfo(l),c}return l}function Kw(r,t,e,n){let o=[e];if(S.assertAxesAreInnerMostDims("arg"+n.charAt(0).toUpperCase()+n.slice(1),o,t.shape.length),!M().getBool("WEBGL_PACK_REDUCE")||t.shape.length<=2){let s=[],i=r.texData.get(t.dataId),a=i!==null&&i.isPacked,u=t;a&&(u=r.unpackTensor(t),s.push(u));let[l,c]=S.computeOutAndReduceShapes(u.shape,o),p=y.sizeFromShape(c),m=st({inputs:{x:u},backend:r,attrs:{shape:[-1,p]}});s.push(m);let f=TM(r,m,n);s.push(f);let d=st({inputs:{x:f},backend:r,attrs:{shape:l}});return s.forEach(h=>r.disposeIntermediateTensorInfo(h)),d}return EM(r,t,n)}function met(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{axis:s}=n,i=y.parseAxisParam(s,o.shape),a=S.getAxesPermutation(i,o.shape.length),u=o,l=[];a!=null&&(u=Fe({inputs:{x:o},backend:e,attrs:{perm:a}}),l.push(u),i=S.getInnerMostAxes(i.length,u.shape.length)),S.assertAxesAreInnerMostDims("argMax",[i[0]],u.shape.length);let c=Kw(e,u,i[0],"max");return l.forEach(p=>e.disposeIntermediateTensorInfo(p)),c}var _M={kernelName:Go,backendName:"webgl",kernelFunc:met};function fet(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{axis:s}=n,i=y.parseAxisParam(s,o.shape),a=S.getAxesPermutation(i,o.shape.length),u=o,l=[];a!=null&&(u=Fe({inputs:{x:o},backend:e,attrs:{perm:a}}),l.push(u),i=S.getInnerMostAxes(i.length,u.shape.length)),S.assertAxesAreInnerMostDims("argMin",[i[0]],u.shape.length);let c=Kw(e,u,i[0],"min");return l.forEach(p=>e.disposeIntermediateTensorInfo(p)),c}var AM={kernelName:Nl,backendName:"webgl",kernelFunc:fet};var det=pr+`
if (abs(x) > 1.) {
return NAN;
}
return asin(x);
`,het=Ct({opSnippet:det}),$M={kernelName:ia,backendName:"webgl",kernelFunc:het};var get=pr+"return log(x + sqrt(x * x + 1.0));",xet=Ct({opSnippet:get}),DM={kernelName:aa,backendName:"webgl",kernelFunc:xet};var yet=pr+`
return atan(x);
`,bet=Ct({opSnippet:yet}),RM={kernelName:la,backendName:"webgl",kernelFunc:bet};var wet=bd+`
return atan(a, b);
`,Cet=`
vec4 result = atan(a, b);
bvec4 isNaNA = isnan(a);
bvec4 isNaNB = isnan(b);
bvec4 isNaN = bvec4(isNaNA.x || isNaNB.x, isNaNA.y || isNaNB.y, isNaNA.z || isNaNB.z, isNaNA.w || isNaNB.w);
`+ji+`
return result;
`,Iet=le({opSnippet:wet,packedOpSnippet:Cet}),FM={kernelName:ca,backendName:"webgl",kernelFunc:Iet};var vet=pr+`
if ((x < -1.0) || (x > 1.0)) return NAN;
return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Net=Ct({opSnippet:vet}),OM={kernelName:ua,backendName:"webgl",kernelFunc:Net};var Qs=class{constructor(t,e,n,o=!1,s=!1){if(this.variableNames=["x"],e==="avg"&&n)throw new Error("Cannot compute positions for average pool.");let i=t.filterWidth,a=t.strideHeight,u=t.strideWidth,l=t.dilationHeight,c=t.dilationWidth,p=t.effectiveFilterHeight,m=t.effectiveFilterWidth,f=t.padInfo.top,d=t.padInfo.left;this.outputShape=t.outShape;let h=e==="avg",g=`((batch * ${t.inHeight} + xR) * ${t.inWidth} + xC) * ${t.inChannels} + d`,x=`(xR * ${t.inWidth} + xC) * ${t.inChannels} + d`,b="0.0";if(h||(b="-1.0 / 1e-20"),n){let $=">=";this.userCode=`
const ivec2 strides = ivec2(${a}, ${u});
const ivec2 pads = ivec2(${f}, ${d});
void main() {
ivec4 coords = getOutputCoords();
int batch = coords[0];
int d = coords[3];
ivec2 xRCCorner = coords.yz * strides - pads;
int xRCorner = xRCCorner.x;
int xCCorner = xRCCorner.y;
// max/min x(?, ?, d) to get y(yR, yC, d).
// ? = to be determined
float minMaxValue = 0.0;
float minMaxValueFound = 0.0;
int minMaxPosition = 0;
float avgValue = 0.0;
for (int wR = 0; wR < ${p};
wR += ${l}) {
int xR = xRCorner + wR;
if (xR < 0 || xR >= ${t.inHeight}) {
continue;
}
for (int wC = 0; wC < ${m};
wC += ${c}) {
int xC = xCCorner + wC;
if (xC < 0 || xC >= ${t.inWidth}) {
continue;
}
float value = getX(batch, xR, xC, d);
// If a min / max value has already been found, use it. If not,
// use the current value.
float currMinMaxValue = mix(
value, minMaxValue, minMaxValueFound);
if (value ${$} currMinMaxValue) {
minMaxValue = value;
minMaxValueFound = 1.0;
minMaxPosition = ${o?s?g:x:`wR * ${m} + wC`};
}
}
}
setOutput(float(minMaxPosition));
}
`;return}let w="max",C=`${e}(${e}(${e}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;e==="avg"&&(C="avgValue / count");let N=Math.floor(i/4)*4,_=i%4,A=`
if (${h}) {
avgValue += dot(values, ones);
} else {
minMaxValue = ${w}(values, minMaxValue);
}
`;this.userCode=`
const ivec2 strides = ivec2(${a}, ${u});
const ivec2 pads = ivec2(${f}, ${d});
const float initializationValue = ${b};
const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);
float count = 0.0;
float getValue(int batch, int xR, int xC, int d) {
if (xC < 0 || xC >= ${t.inWidth}) {
return initializationValue;
}
count += 1.0;
return getX(batch, xR, xC, d);
}
void main() {
ivec4 coords = getOutputCoords();
int batch = coords[0];
int d = coords[3];
ivec2 xRCCorner = coords.yz * strides - pads;
int xRCorner = xRCCorner.x;
int xCCorner = xRCCorner.y;
// max/min x(?, ?, d) to get y(yR, yC, d).
// ? = to be determined
vec4 minMaxValue = vec4(${b});
float avgValue = 0.0;
count = 0.0;
for (int wR = 0; wR < ${p};
wR += ${l}) {
int xR = xRCorner + wR;
if (xR < 0 || xR >= ${t.inHeight}) {
continue;
}
for (int wC = 0; wC < ${N}; wC += 4) {
int xC = xCCorner + wC * ${c};
vec4 values = vec4(
getValue(batch, xR, xC, d),
getValue(batch, xR, xC + ${c}, d),
getValue(batch, xR, xC + 2 * ${c}, d),
getValue(batch, xR, xC + 3 * ${c}, d)
);
${A}
}
int xC = xCCorner + ${N};
if (${_===1}) {
vec4 values = vec4(
getValue(batch, xR, xC, d),
initializationValue,
initializationValue,
initializationValue
);
${A}
} else if (${_===2}) {
vec4 values = vec4(
getValue(batch, xR, xC, d),
getValue(batch, xR, xC + ${c}, d),
initializationValue,
initializationValue
);
${A}
} else if (${_===3}) {
vec4 values = vec4(
getValue(batch, xR, xC, d),
getValue(batch, xR, xC + ${c}, d),
getValue(batch, xR, xC + 2 * ${c}, d),
initializationValue
);
${A}
}
}
setOutput(${C});
}
`}},Au=class{constructor(t,e,n,o=!1,s=!1){if(this.variableNames=["x"],e==="avg"&&n)throw new Error("Cannot compute positions for average pool.");let i=t.filterWidth,a=t.strideDepth,u=t.strideHeight,l=t.strideWidth,c=t.dilationDepth,p=t.dilationHeight,m=t.dilationWidth,f=t.effectiveFilterDepth,d=t.effectiveFilterHeight,h=t.effectiveFilterWidth,g=t.padInfo.front,x=t.padInfo.top,b=t.padInfo.left;this.outputShape=t.outShape;let w=e==="avg",C="0.0";if(w||(C="-1.0 / 1e-20"),n){let P=">=";this.userCode=`
const ivec3 strides =
ivec3(${a}, ${u}, ${l});
const ivec3 pads = ivec3(${g}, ${x}, ${b});
void main() {
ivec5 coords = getOutputCoords();
int batch = coords.x;
int ch = coords.u;
ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;
int xDCorner = xCorner.x;
int xRCorner = xCorner.y;
int xCCorner = xCorner.z;
// max/min x(?, ?, ?, ch) to get y(yD, yR, yC, ch).
// ? = to be determined
float minMaxValue = 0.0;
float minMaxValueFound = 0.0;
int minMaxPosition = 0;
for (int wD = 0; wD < ${f};
wD += ${c}) {
int xD = xDCorner + wD;
if (xD < 0 || xD >= ${t.inDepth}) {
continue;
}
for (int wR = 0; wR < ${d};
wR += ${p}) {
int xR = xRCorner + wR;
if (xR < 0 || xR >= ${t.inHeight}) {
continue;
}
for (int wC = 0; wC < ${h};
wC += ${m}) {
int xC = xCCorner + wC;
if (xC < 0 || xC >= ${t.inWidth}) {
continue;
}
float value = getX(batch, xD, xR, xC, ch);
// If a min / max value has already been found, use it. If not,
// use the current value.
float currMinMaxValue = mix(
value, minMaxValue, minMaxValueFound);
if (value ${P} currMinMaxValue) {
minMaxValue = value;
minMaxValueFound = 1.0;
minMaxPosition = ${o?s?`(((batch * ${t.inDepth} + xD) * ${t.inHeight} + xR) * ${t.inWidth} + xC) * ${t.inChannels} + ch`:`((xD * ${t.inHeight} + xR) * ${t.inWidth} + xC) * ${t.inChannels} + ch`:`wD * ${d} * ${h} +
wR * ${h} + wC`};
}
}
}
}
setOutput(float(minMaxPosition));
}
`;return}let N="max",_=`${e}(${e}(${e}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;e==="avg"&&(_="avgValue / count");let A=Math.floor(i/4)*4,$=i%4,F=`
if (${w}) {
avgValue += dot(values, ones);
} else {
minMaxValue = ${N}(values, minMaxValue);
}
`;this.userCode=`
const ivec3 strides =
ivec3(${a}, ${u}, ${l});
const ivec3 pads = ivec3(${g}, ${x}, ${b});
const float initializationValue = ${C};
const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);
float count = 0.0;
float getValue(int batch, int xD, int xR, int xC, int ch) {
if (xC < 0 || xC >= ${t.inWidth}) {
return initializationValue;
}
count += 1.0;
return getX(batch, xD, xR, xC, ch);
}
void main() {
ivec5 coords = getOutputCoords();
int batch = coords.x;
int ch = coords.u;
ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;
int xDCorner = xCorner.x;
int xRCorner = xCorner.y;
int xCCorner = xCorner.z;
// max/min x(?, ?, ?, d) to get y(yD, yR, yC, ch).
// ? = to be determined
vec4 minMaxValue = vec4(${C});
float avgValue = 0.0;
count = 0.0;
for (int wD = 0; wD < ${f};
wD += ${c}) {
int xD = xDCorner + wD;
if (xD < 0 || xD >= ${t.inDepth}) {
continue;
}
for (int wR = 0; wR < ${d};
wR += ${p}) {
int xR = xRCorner + wR;
if (xR < 0 || xR >= ${t.inHeight}) {
continue;
}
for (int wC = 0; wC < ${A}; wC += 4) {
int xC = xCCorner + wC * ${m};
vec4 values = vec4(
getValue(batch, xD, xR, xC, ch),
getValue(batch, xD, xR, xC + ${m}, ch),
getValue(batch, xD, xR, xC + 2 * ${m}, ch),
getValue(batch, xD, xR, xC + 3 * ${m}, ch)
);
${F}
}
int xC = xCCorner + ${A};
if (${$===1}) {
vec4 values = vec4(
getValue(batch, xD, xR, xC, ch),
initializationValue,
initializationValue,
initializationValue
);
${F}
} else if (${$===2}) {
vec4 values = vec4(
getValue(batch, xD, xR, xC, ch),
getValue(batch, xD, xR, xC + ${m}, ch),
initializationValue,
initializationValue
);
${F}
} else if (${$===3}) {
vec4 values = vec4(
getValue(batch, xD, xR, xC, ch),
getValue(batch, xD, xR, xC + ${m}, ch),
getValue(batch, xD, xR, xC + 2 * ${m}, ch),
initializationValue
);
${F}
}
}
setOutput(${_});
}
}
`}};function ket(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t;Zs(o,"avgPool");let{filterSize:s,strides:i,pad:a,dimRoundingMode:u}=n,l=1;y.assert(S.eitherStridesOrDilationsAreOne(i,l),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${l}'`);let c=S.computePool2DInfo(o.shape,s,i,l,a,u);if(c.filterWidth===1&&c.filterHeight===1&&y.arraysEqual(c.inShape,c.outShape))return tr({inputs:{x:o},backend:e});let p=new Qs(c,"avg",!1);return e.runWebGLProgram(p,[o],"float32")}var PM={kernelName:Wo,backendName:"webgl",kernelFunc:ket};function Tet(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{filterSize:s,strides:i,pad:a,dimRoundingMode:u,dataFormat:l}=n,c=[1,1,1],p=S.computePool3DInfo(o.shape,s,i,c,a,u,l),m=new Au(p,"avg",!1);return e.runWebGLProgram(m,[o],"float32")}var LM={kernelName:kl,backendName:"webgl",kernelFunc:Tet};var jw=class{constructor(t){this.variableNames=["dy"],this.outputShape=t.inShape;let e=t.filterHeight,n=t.filterWidth,o=t.strideHeight,s=t.strideWidth,i=t.dilationHeight,a=t.dilationWidth,u=t.effectiveFilterHeight,l=t.effectiveFilterWidth,c=u-1-t.padInfo.top,p=l-1-t.padInfo.left,m=1/(e*n);this.userCode=`
const ivec2 pads = ivec2(${c}, ${p});
const float avgMultiplier = float(${m});
void main() {
ivec4 coords = getOutputCoords();
int b = coords[0];
int d = coords[3];
ivec2 dyRCCorner = coords.yz - pads;
int dyRCorner = dyRCCorner.x;
int dyCCorner = dyRCCorner.y;
// Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).
// ? = to be determined. : = across all values in that axis.
float dotProd = 0.0;
for (int wR = 0; wR < ${u};
wR += ${i}) {
float dyR = float(dyRCorner + wR) / ${o}.0;
if (dyR < 0.0 || dyR >= ${t.outHeight}.0 || fract(dyR) > 0.0) {
continue;
}
int idyR = int(dyR);
for (int wC = 0; wC < ${l};
wC+= ${a}) {
float dyC = float(dyCCorner + wC) / ${s}.0;
if (dyC < 0.0 || dyC >= ${t.outWidth}.0 ||
fract(dyC) > 0.0) {
continue;
}
int idyC = int(dyC);
float dyValue = getDy(b, idyR, idyC, d);
dotProd += dyValue * avgMultiplier;
}
}
setOutput(dotProd);
}
`}},Xw=class{constructor(t){this.variableNames=["dy"],this.outputShape=t.inShape;let e=t.filterDepth,n=t.filterHeight,o=t.filterWidth,s=t.strideDepth,i=t.strideHeight,a=t.strideWidth,u=t.dilationDepth,l=t.dilationHeight,c=t.dilationWidth,p=t.effectiveFilterDepth,m=t.effectiveFilterHeight,f=t.effectiveFilterWidth,d=p-1-t.padInfo.front,h=m-1-t.padInfo.top,g=f-1-t.padInfo.left,x=1/(e*n*o);this.userCode=`
const ivec3 pads = ivec3(${d}, ${h}, ${g});
const float avgMultiplier = float(${x});
void main() {
ivec5 coords = getOutputCoords();
int batch = coords.x;
int ch = coords.u;
ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;
int dyDCorner = dyCorner.x;
int dyRCorner = dyCorner.y;
int dyCCorner = dyCorner.z;
// Convolve dy(?, ?, ?, d) with pos mask(:, :, :, ch) to get
// dx(xD, xR, xC, ch).
// ? = to be determined. : = across all values in that axis.
float dotProd = 0.0;
for (int wD = 0; wD < ${p};
wD += ${u}) {
float dyD = float(dyDCorner + wD) / ${s}.0;
if (dyD < 0.0 || dyD >= ${t.outDepth}.0 || fract(dyD) > 0.0) {
continue;
}
int idyD = int(dyD);
for (int wR = 0; wR < ${m};
wR += ${l}) {
float dyR = float(dyRCorner + wR) / ${i}.0;
if (dyR < 0.0 || dyR >= ${t.outHeight}.0 ||
fract(dyR) > 0.0) {
continue;
}
int idyR = int(dyR);
for (int wC = 0; wC < ${f};
wC += ${c}) {
float dyC = float(dyCCorner + wC) / ${a}.0;
if (dyC < 0.0 || dyC >= ${t.outWidth}.0 ||
fract(dyC) > 0.0) {
continue;
}
int idyC = int(dyC);
float dyValue = getDy(batch, idyD, idyR, idyC, ch);
dotProd += dyValue * avgMultiplier;
}
}
}
setOutput(dotProd);
}
`}};function Eet(r){let{inputs:t,backend:e,attrs:n}=r,{dy:o,input:s}=t,i=s,{filterSize:a,strides:u,pad:l,dimRoundingMode:c}=n,p=[1,1,1],m=S.computePool3DInfo(i.shape,a,u,p,l,c),f=new Xw(m);return e.runWebGLProgram(f,[o],i.dtype)}var MM={kernelName:lp,backendName:"webgl",kernelFunc:Eet};function _et(r){let{inputs:t,backend:e,attrs:n}=r,{dy:o,input:s}=t,i=s;Zs([o,s],"avgPoolGrad");let{filterSize:a,strides:u,pad:l}=n,c=S.computePool2DInfo(i.shape,a,u,1,l),p=new jw(c);return e.runWebGLProgram(p,[o],i.dtype)}var zM={kernelName:ap,backendName:"webgl",kernelFunc:_et};function Aet(r){let{inputs:t,backend:e,attrs:n}=r,{a:o,b:s}=t,{transposeA:i,transposeB:a}=n;return Uc({a:o,b:s,transposeA:i,transposeB:a,backend:e})}var BM={kernelName:Uo,backendName:"webgl",kernelFunc:Aet};var Yw=class{constructor(t,e,n,o,s,i){this.outputShape=[],this.variableNames=["x","mean","variance"],S.assertAndGetBroadcastShape(t,e),S.assertAndGetBroadcastShape(t,n);let a="0.0";o!=null&&(S.assertAndGetBroadcastShape(t,o),this.variableNames.push("offset"),a="getOffsetAtOutCoords()");let u="1.0";s!=null&&(S.assertAndGetBroadcastShape(t,s),this.variableNames.push("scale"),u="getScaleAtOutCoords()"),this.outputShape=t,this.userCode=`
void main() {
float x = getXAtOutCoords();
float mean = getMeanAtOutCoords();
float variance = getVarianceAtOutCoords();
float offset = ${a};
float scale = ${u};
float inv = scale * inversesqrt(variance + float(${i}));
setOutput(dot(vec3(x, -mean, offset), vec3(inv, inv, 1)));
}
`}};var Zw=class{constructor(t,e,n,o,s,i){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=["x","mean","variance"],S.assertAndGetBroadcastShape(t,e),S.assertAndGetBroadcastShape(t,n);let a="vec4(0.0)";o!=null&&(S.assertAndGetBroadcastShape(t,o),this.variableNames.push("offset"),a="getOffsetAtOutCoords()");let u="vec4(1.0)";s!=null&&(S.assertAndGetBroadcastShape(t,s),this.variableNames.push("scale"),u="getScaleAtOutCoords()"),this.outputShape=t,this.userCode=`
void main() {
vec4 offset = ${a};
vec4 scale = ${u};
vec4 x = getXAtOutCoords();
vec4 mean = getMeanAtOutCoords();
vec4 variance = getVarianceAtOutCoords();
vec4 inv = scale * inversesqrt(variance + vec4(${i}));
setOutput((x - mean) * inv + offset);
}
`}};var $et=({inputs:r,backend:t,attrs:e})=>{let{x:n,mean:o,variance:s,offset:i,scale:a}=r;y.assert(o.shape.length===s.shape.length,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),y.assert(i==null||o.shape.length===i.shape.length,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),y.assert(a==null||o.shape.length===a.shape.length,()=>"Batch normalization gradient requires mean and scale to have equal ranks.");let{varianceEpsilon:u}=e;u==null&&(u=.001);let l=[n,o,s],c=null;i!=null&&(c=i.shape,l.push(i));let p=null;a!=null&&(p=a.shape,l.push(a));let m=M().getBool("WEBGL_PACK_NORMALIZATION")?new Zw(n.shape,o.shape,s.shape,c,p,u):new Yw(n.shape,o.shape,s.shape,c,p,u);return t.runWebGLProgram(m,l,l[0].dtype)},VM={kernelName:ns,backendName:"webgl",kernelFunc:$et};var Jw=class{constructor(t){this.variableNames=["source"],this.outputShape=t,this.rank=t.length;let e=zt(this.rank);this.customUniforms=[{name:"start",arrayIndex:this.rank,type:"int"}];let n=Det(this.rank),o,s=t.map((i,a)=>`sourceLoc.${cT[a]} = start[${a}] + coords.${cT[a]};`);o=`
${e} sourceLoc;
${e} coords = getOutputCoords();
${s.join(`
`)}
`,this.userCode=`
void main() {
${o}
setOutput(getSource(${n}));
}
`}},cT=["x","y","z","w","u","v"];function Det(r){if(r===1)return"sourceLoc";if(r<=6)return cT.slice(0,r).map(t=>"sourceLoc."+t).join(",");throw Error(`Slicing for rank ${r} is not yet supported`)}var Qw=class{constructor(t){this.variableNames=["source"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t,this.rank=t.length,this.customUniforms=[{name:"start",arrayIndex:this.rank,type:"int"}];let e=zt(this.rank),n=Qe("coords",this.rank),o=Qe("sourceLoc",this.rank),s=this.rank===1?"sourceLoc":`vec2(${o.slice(-2).join()})`,i=`getChannel(getSource(${o.join()}), ${s})`,a=`
result.x = ${i};
if (++${n[this.rank-1]} < ${t[this.rank-1]}) {
++${o[this.rank-1]};
result.y = ${i};
--${o[this.rank-1]};
}
`,u=this.rank===1?"":`
--${n[this.rank-1]};
if (++${n[this.rank-2]} < ${t[this.rank-2]}) {
++${o[this.rank-2]};
result.z = ${i};
if (++${n[this.rank-1]} < ${t[this.rank-1]}) {
++${o[this.rank-1]};
result.w = ${i};
}
}
`,l=this.rank<=4?`sourceLoc = coords +
${e}(${t.map((c,p)=>`start[${p}]`).join()});`:t.map((c,p)=>`${o[p]} = ${n[p]} + start[${p}];`).join(`
`);this.userCode=`
void main() {
${e} coords = getOutputCoords();
${e} sourceLoc;
${l}
vec4 result = vec4(0.);
${a}
${u}
setOutput(result);
}
`}};function Ret(r,t,e,n){let o=n.texData.get(r.dataId),s=n.makeTensorInfo(e,r.dtype),i=n.texData.get(s.dataId);Object.assign(i,o),i.refCount=1,i.shape=e,i.dtype=r.dtype;let a=Pe.computeFlatOffset(t,y.computeStrides(r.shape));o.slice&&(a+=o.slice.flatOffset),i.slice={flatOffset:a,origDataId:o.slice&&o.slice.origDataId||r.dataId};let u=n.dataRefCount.get(i.slice.origDataId)||1;return n.dataRefCount.set(i.slice.origDataId,u+1),s}function ti(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{begin:s,size:i}=n,[a,u]=Pe.parseSliceParams(o,s,i);if(Pe.assertParamsValid(o,a,u),y.sizeFromShape(u)===0)return e.makeTensorInfo(u,o.dtype,[]);if(e.shouldExecuteOnCPU([o])||o.dtype==="string"){let p=e.texData.get(o.dataId),m=$L(p.values,a,u,o.shape,o.dtype);return e.makeTensorInfo(u,o.dtype,m)}let{isPacked:l}=e.texData.get(o.dataId),c=Pe.isSliceContinous(o.shape,a,u);if(l||!c){let p=M().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new Qw(u):new Jw(u),m=[a];return e.runWebGLProgram(p,[o],o.dtype,m)}return e.uploadToGPU(o.dataId),Ret(o,a,u,e)}var GM={kernelName:di,backendName:"webgl",kernelFunc:ti};var Fet=r=>{let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{blockShape:s,crops:i}=n;y.assert(o.shape.length<=4,()=>"batchToSpaceND for rank > 4 with a WebGL backend not implemented yet");let a=s.reduce((b,w)=>b*w),u=S.getReshaped(o.shape,s,a),l=S.getPermuted(u.length,s.length),c=S.getReshapedPermuted(o.shape,s,a),p=S.getSliceBeginCoords(i,s.length),m=S.getSliceSize(c,i,s.length),f=[],d=st({inputs:{x:o},backend:e,attrs:{shape:u}}),h=Fe({inputs:{x:d},backend:e,attrs:{perm:l}}),g=st({inputs:{x:h},backend:e,attrs:{shape:c}}),x=ti({inputs:{x:g},backend:e,attrs:{begin:p,size:m}});return f.push(d),f.push(h),f.push(g),f.forEach(b=>e.disposeIntermediateTensorInfo(b)),x},WM={kernelName:si,backendName:"webgl",kernelFunc:Fet};function Oet(r){let{inputs:t,backend:e,attrs:n}=r,{x:o,weights:s}=t,{size:i}=n,a=e.readSync(o.dataId),u=e.readSync(s.dataId),l=Dw(a,u,s.dtype,s.shape,i);return e.makeTensorInfo([i],s.dtype,l)}var UM={kernelName:up,backendName:"webgl",kernelFunc:Oet};function Pet(r){let{inputs:t,backend:e}=r,{s0:n,s1:o}=t,s=e.readSync(n.dataId),i=e.readSync(o.dataId),a=S.assertAndGetBroadcastShape(Array.from(s),Array.from(i));return e.makeTensorInfo([a.length],"int32",Int32Array.from(a))}var HM={kernelName:cp,backendName:"webgl",kernelFunc:Pet};var Let="return float(a != b);",pT=le({opSnippet:Let,cpuKernelImpl:vL,dtype:"bool"}),qM={kernelName:Aa,backendName:"webgl",kernelFunc:pT};function yl(r){let{inputs:t,backend:e}=r,{input:n}=t,o=e.texData.get(n.dataId);return tr({inputs:{x:o.complexTensorInfos.real},backend:e})}var KM={kernelName:Dp,backendName:"webgl",kernelFunc:yl};var Met="return float(int(x));";function jM(r,t){let e=new tn(r.shape,Met),n=t.runWebGLProgram(e,[r],"int32");return{dataId:n.dataId,shape:n.shape,dtype:n.dtype}}function mT(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{dtype:s}=n;if(s==="complex64"){if(o.dtype==="complex64")return tr({inputs:{x:o},backend:e});let i=Ne(o.shape),a=mT({inputs:{x:o},backend:e,attrs:{dtype:"float32"}}),u=Tn({inputs:{real:a,imag:i},backend:e});return i.dispose(),e.disposeIntermediateTensorInfo(a),u}if(o.dtype==="complex64"){let i=yl({inputs:{input:o},backend:e}),a=mT({inputs:{x:i},backend:e,attrs:{dtype:s}});return e.disposeIntermediateTensorInfo(i),a}if(!y.hasEncodingLoss(o.dtype,s)){let i=tr({inputs:{x:o},backend:e});return{dataId:i.dataId,shape:i.shape,dtype:s}}if(e.shouldExecuteOnCPU([o])){let i=e.texData.get(o.dataId).values,[a,u,l]=nL(i,o.shape,o.dtype,s);return e.makeTensorInfo(a,u,l)}if(s==="int32")return jM(o,e);if(s==="bool"){let i=e.makeTensorInfo([],"bool",y.getTypedArrayFromDType("bool",1)),u=pT({inputs:{a:o,b:i},backend:e});return e.disposeIntermediateTensorInfo(i),u}throw new Error(`Error in Cast: failed to cast ${o.dtype} to ${s}`)}var XM={kernelName:io,backendName:"webgl",kernelFunc:mT};var YM="return ceil(x);",zet=Ct({opSnippet:YM,packedOpSnippet:YM,cpuKernelImpl:oL}),ZM={kernelName:Ho,backendName:"webgl",kernelFunc:zet};var tC=class{constructor(t){this.variableNames=["A"],this.customUniforms=[{name:"minVal",type:"float"},{name:"maxVal",type:"float"}],this.outputShape=t,this.userCode=`
void main() {
float value = getAAtOutCoords();
if (isnan(value)) {
setOutput(value);
return;
}
setOutput(clamp(value, minVal, maxVal));
}
`}};var eC=class{constructor(t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"minVal",type:"float"},{name:"maxVal",type:"float"}],this.outputShape=t,this.userCode=`
void main() {
vec4 value = getAAtOutCoords();
if (any(isnan(value))) {
setOutput(value);
return;
}
setOutput(clamp(value, vec4(minVal), vec4(maxVal)));
}
`}};function Bet(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{clipValueMin:s,clipValueMax:i}=n,a;M().getBool("WEBGL_PACK_CLIP")?a=new eC(o.shape):a=new tC(o.shape);let u=[[s],[i]];return e.runWebGLProgram(a,[o],o.dtype,u)}var JM={kernelName:ao,backendName:"webgl",kernelFunc:Bet};var rC=class{constructor(t){this.variableNames=["real","imag"],this.outputShape=t,this.userCode=`
void main() {
float re = abs(getRealAtOutCoords());
float im = abs(getImagAtOutCoords());
float mx = max(re, im);
// sadly the length function in glsl is not underflow-safe
// (at least not on Intel GPUs). So the safe solution is
// to ensure underflow-safety in all cases.
setOutput(
mx == 0.0 ? 0.0 : mx * length(vec2(1, min(re, im)/mx))
);
}
`}};function QM(r,t){return{dataId:t.dataId,dtype:t.dtype,shape:r.shape}}function Vet(r){let{inputs:t,backend:e}=r,{x:n}=t,o=e.texData.get(n.dataId),s=new rC(n.shape),i=[QM(n,o.complexTensorInfos.real),QM(n,o.complexTensorInfos.imag)];return e.runWebGLProgram(s,i,i[0].dtype)}var tz={kernelName:Tl,backendName:"webgl",kernelFunc:Vet};var nC=class{constructor(t){this.outputShape=[],this.outputShape=S.computeOutShape(t,1),this.variableNames=t.map((i,a)=>`T${a}`);let e=new Array(t.length-1);e[0]=t[0][1];for(let i=1;i<e.length;i++)e[i]=e[i-1]+t[i][1];let n=[`if (yC < ${e[0]}) setOutput(getT0(yR, yC));`];for(let i=1;i<e.length;i++){let a=e[i-1];n.push(`else if (yC < ${e[i]}) setOutput(getT${i}(yR, yC-${a}));`)}let o=e.length,s=e[e.length-1];n.push(`else setOutput(getT${o}(yR, yC-${s}));`),this.userCode=`
void main() {
ivec2 coords = getOutputCoords();
int yR = coords.x;
int yC = coords.y;
${n.join(`
`)}
}
`}};var sC=class{constructor(t,e){this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[],this.outputShape=S.computeOutShape(t,e);let n=this.outputShape,o=n.length,s=zt(o),i=Qe("coords",o),a=["x","y","z","w","u","v"].slice(0,o);this.variableNames=t.map((h,g)=>`T${g}`);let u=new Array(t.length-1);u[0]=t[0][e];for(let h=1;h<u.length;h++)u[h]=u[h-1]+t[h][e];let l=a[e],c=a.slice(-2),p=a.join(),m=`if (${l} < ${u[0]}) {
return getChannel(
getT0(${p}), vec2(${c.join()}));
}`;for(let h=1;h<u.length;h++){let g=u[h-1];m+=`
if (${l} < ${u[h]} && ${l} >= ${u[h-1]}) {
return getChannel(
getT${h}(${oC(a,l,g)}),
vec2(${oC(c,l,g)}));
}`}let f=u.length,d=u[u.length-1];m+=`
return getChannel(
getT${f}(${oC(a,l,d)}),
vec2(${oC(c,l,d)}));`,this.userCode=`
float getValue(${a.map(h=>"int "+h)}) {
${m}
}
void main() {
${s} coords = getOutputCoords();
vec4 result = vec4(getValue(${i}), 0., 0., 0.);
${i[o-1]} = ${i[o-1]} + 1;
if (${i[o-1]} < ${n[o-1]}) {
result.g = getValue(${i});
}
${i[o-2]} = ${i[o-2]} + 1;
if (${i[o-2]} < ${n[o-2]}) {
result.a = getValue(${i});
}
${i[o-1]} = ${i[o-1]} - 1;
if (${i[o-2]} < ${n[o-2]} &&
${i[o-1]} < ${n[o-1]}) {
result.b = getValue(${i});
}
setOutput(result);
}
`}};function oC(r,t,e){let n=r.indexOf(t);return r.map((s,i)=>i===n?`${s} - ${e}`:s).join()}function Hc(r){let{inputs:t,backend:e}=r,{input:n}=t,o=e.texData.get(n.dataId);return tr({inputs:{x:o.complexTensorInfos.imag},backend:e})}var ez={kernelName:vp,backendName:"webgl",kernelFunc:Hc};function Cd(r,t,e){let n=r[0].dtype;if(n==="complex64"){let p=r.map(g=>yl({inputs:{input:g},backend:e})),m=r.map(g=>Hc({inputs:{input:g},backend:e})),f=Cd(p,t,e),d=Cd(m,t,e),h=Tn({inputs:{real:f,imag:d},backend:e});return p.forEach(g=>e.disposeIntermediateTensorInfo(g)),m.forEach(g=>e.disposeIntermediateTensorInfo(g)),e.disposeIntermediateTensorInfo(f),e.disposeIntermediateTensorInfo(d),h}let o=e.shouldExecuteOnCPU(r);if(n==="string"&&(o=!0),o){let p=r.map(b=>{let w=y.sizeFromShape(b.shape.slice(t));return st({inputs:{x:b},backend:e,attrs:{shape:[-1,w]}})}),m=p.map(b=>({vals:e.readSync(b.dataId),shape:b.shape})),f=S.computeOutShape(p.map(b=>b.shape),1),d=p[0].shape[0]===1,h=sL(m,f,n,d),g=S.computeOutShape(r.map(b=>b.shape),t),x=e.makeTensorInfo(g,n,h);return p.forEach(b=>e.disposeIntermediateTensorInfo(b)),x}let s=M().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER");if(r.length>s){let p=[];for(let f=0;f<r.length;f+=s){let d=r.slice(f,f+s);p.push(Cd(d,t,e))}let m=Cd(p,t,e);for(let f of p)e.disposeIntermediateTensorInfo(f);return m}if(M().getBool("WEBGL_PACK_ARRAY_OPERATIONS")&&r[0].shape.length>1){let p=new sC(r.map(m=>m.shape),t);return e.runWebGLProgram(p,r,n)}let{tensors2D:i,outShape:a}=Get(r,t,e),u=new nC(i.map(p=>p.shape)),l=e.runWebGLProgram(u,i,n);i.forEach(p=>e.disposeIntermediateTensorInfo(p));let c=st({inputs:{x:l},attrs:{shape:a},backend:e});return e.disposeIntermediateTensorInfo(l),c}function Get(r,t,e){let n=S.computeOutShape(r.map(s=>s.shape),t);return{tensors2D:r.map(s=>st({inputs:{x:s},attrs:{shape:[-1,y.sizeFromShape(s.shape.slice(t))]},backend:e})),outShape:n}}function fT(r){let{inputs:t,backend:e,attrs:n}=r,{axis:o}=n,s=y.parseAxisParam(o,t[0].shape)[0],i=t.map(l=>l.shape);S.assertParamsConsistent(i,s);let a=S.computeOutShape(t.map(l=>l.shape),s);if(y.sizeFromShape(a)===0)return e.makeTensorInfo(a,t[0].dtype,[]);let u=t.filter(l=>y.sizeFromShape(l.shape)>0);return u.length===1?tr({inputs:{x:u[0]},backend:e}):Cd(u,s,e)}var rz={kernelName:ii,backendName:"webgl",kernelFunc:fT};var Id=class{constructor(t,e=!1,n=null,o=!1,s=!1){this.variableNames=["x","W"],this.outputShape=t.outShape;let i=t.padInfo.top,a=t.padInfo.left,u=t.strideHeight,l=t.strideWidth,c=t.dilationHeight,p=t.dilationWidth,m=t.filterHeight,f=t.filterWidth,d=Math.floor(t.inChannels/4)*4,h=t.inChannels%4,g=t.dataFormat==="channelsLast",x=g?1:2,b=g?2:3,w=g?3:1,C="",N="";n&&(o?C=`float activation(float a) {
float b = getPreluActivationWeightsAtOutCoords();
${n}
}`:s?C=`float activation(float a) {
float b = getLeakyreluAlphaAtOutCoords();
${n}
}`:C=`
float activation(float x) {
${n}
}
`,N="result = activation(result);");let _=e?"result += getBiasAtOutCoords();":"";e&&this.variableNames.push("bias"),o&&this.variableNames.push("preluActivationWeights"),s&&this.variableNames.push("leakyreluAlpha"),this.userCode=`
${C}
const ivec2 strides = ivec2(${u}, ${l});
const ivec2 pads = ivec2(${i}, ${a});
void main() {
ivec4 coords = getOutputCoords();
int batch = coords[0];
int d2 = coords[${w}];
ivec2 xRCCorner =
ivec2(coords[${x}], coords[${b}]) * strides - pads;
int xRCorner = xRCCorner.x;
int xCCorner = xRCCorner.y;
// Convolve x(?, ?, d1) with w(:, :, d1, d2) to get y(yR, yC, d2).
// ? = to be determined. : = across all values in that axis.
float dotProd = 0.0;
for (int wR = 0; wR < ${m}; wR++) {
int xR = xRCorner + wR * ${c};
if (xR < 0 || xR >= ${t.inHeight}) {
continue;
}
for (int wC = 0; wC < ${f}; wC++) {
int xC = xCCorner + wC * ${p};
if (xC < 0 || xC >= ${t.inWidth}) {
continue;
}
for (int d1 = 0; d1 < ${d}; d1 += 4) {
vec4 wValues = vec4(
getW(wR, wC, d1, d2),
getW(wR, wC, d1 + 1, d2),
getW(wR, wC, d1 + 2, d2),
getW(wR, wC, d1 + 3, d2)
);
if (${g}) {
vec4 xValues = vec4(
getX(batch, xR, xC, d1),
getX(batch, xR, xC, d1 + 1),
getX(batch, xR, xC, d1 + 2),
getX(batch, xR, xC, d1 + 3)
);
dotProd += dot(xValues, wValues);
} else {
vec4 xValues = vec4(
getX(batch, d1, xR, xC),
getX(batch, d1 + 1, xR, xC),
getX(batch, d1 + 2, xR, xC),
getX(batch, d1 + 3, xR, xC)
);
dotProd += dot(xValues, wValues);
}
}
if (${h===1}) {
if (${g}) {
dotProd +=
getX(batch, xR, xC, ${d}) *
getW(wR, wC, ${d}, d2);
} else {
dotProd +=
getX(batch, ${d}, xR, xC) *
getW(wR, wC, ${d}, d2);
}
} else if (${h===2}) {
vec2 wValues = vec2(
getW(wR, wC, ${d}, d2),
getW(wR, wC, ${d} + 1, d2)
);
if (${g}) {
vec2 xValues = vec2(
getX(batch, xR, xC, ${d}),
getX(batch, xR, xC, ${d} + 1)
);
dotProd += dot(xValues, wValues);
} else {
vec2 xValues = vec2(
getX(batch, ${d}, xR, xC),
getX(batch, ${d} + 1, xR, xC)
);
dotProd += dot(xValues, wValues);
}
} else if (${h===3}) {
vec3 wValues = vec3(
getW(wR, wC, ${d}, d2),
getW(wR, wC, ${d} + 1, d2),
getW(wR, wC, ${d} + 2, d2)
);
if (${g}) {
vec3 xValues = vec3(
getX(batch, xR, xC, ${d}),
getX(batch, xR, xC, ${d} + 1),
getX(batch, xR, xC, ${d} + 2)
);
dotProd += dot(xValues, wValues);
} else {
vec3 xValues = vec3(
getX(batch, ${d}, xR, xC),
getX(batch, ${d} + 1, xR, xC),
getX(batch, ${d} + 2, xR, xC)
);
dotProd += dot(xValues, wValues);
}
}
}
}
float result = dotProd;
${_}
${N}
setOutput(result);
}
`}},iC=class{constructor(t){this.variableNames=["x","W"],this.outputShape=t.outShape;let e=t.padInfo.front,n=t.padInfo.top,o=t.padInfo.left,s=t.strideDepth,i=t.strideHeight,a=t.strideWidth,u=t.dilationDepth,l=t.dilationHeight,c=t.dilationWidth,p=t.filterDepth,m=t.filterHeight,f=t.filterWidth,d=Math.floor(t.inChannels/4)*4,h=t.inChannels%4;this.userCode=`
const ivec3 strides = ivec3(${s}, ${i}, ${a});
const ivec3 pads = ivec3(${e}, ${n}, ${o});
void main() {
ivec5 coords = getOutputCoords();
int batch = coords.x;
int d2 = coords.u;
ivec3 xFRCCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;
int xFCorner = xFRCCorner.x;
int xRCorner = xFRCCorner.y;
int xCCorner = xFRCCorner.z;
// Convolve x(?, ?, ?, d1) with w(:, :, :, d1, d2) to get
// y(yF, yR, yC, d2). ? = to be determined. : = across all
// values in that axis.
float dotProd = 0.0;
for (int wF = 0; wF < ${p}; wF++) {
int xF = xFCorner + wF * ${u};
if (xF < 0 || xF >= ${t.inDepth}) {
continue;
}
for (int wR = 0; wR < ${m}; wR++) {
int xR = xRCorner + wR * ${l};
if (xR < 0 || xR >= ${t.inHeight}) {
continue;
}
for (int wC = 0; wC < ${f}; wC++) {
int xC = xCCorner + wC * ${c};
if (xC < 0 || xC >= ${t.inWidth}) {
continue;
}
for (int d1 = 0; d1 < ${d}; d1 += 4) {
vec4 xValues = vec4(
getX(batch, xF, xR, xC, d1),
getX(batch, xF, xR, xC, d1 + 1),
getX(batch, xF, xR, xC, d1 + 2),
getX(batch, xF, xR, xC, d1 + 3)
);
vec4 wValues = vec4(
getW(wF, wR, wC, d1, d2),
getW(wF, wR, wC, d1 + 1, d2),
getW(wF, wR, wC, d1 + 2, d2),
getW(wF, wR, wC, d1 + 3, d2)
);
dotProd += dot(xValues, wValues);
}
if (${h===1}) {
dotProd +=
getX(batch, xF, xR, xC, ${d}) *
getW(wF, wR, wC, ${d}, d2);
} else if (${h===2}) {
vec2 xValues = vec2(
getX(batch, xF, xR, xC, ${d}),
getX(batch, xF, xR, xC, ${d} + 1)
);
vec2 wValues = vec2(
getW(wF, wR, wC, ${d}, d2),
getW(wF, wR, wC, ${d} + 1, d2)
);
dotProd += dot(xValues, wValues);
} else if (${h===3}) {
vec3 xValues = vec3(
getX(batch, xF, xR, xC, ${d}),
getX(batch, xF, xR, xC, ${d} + 1),
getX(batch, xF, xR, xC, ${d} + 2)
);
vec3 wValues = vec3(
getW(wF, wR, wC, ${d}, d2),
getW(wF, wR, wC, ${d} + 1, d2),
getW(wF, wR, wC, ${d} + 2, d2)
);
dotProd += dot(xValues, wValues);
}
}
}
}
setOutput(dotProd);
}
`}};var vd=class{constructor(t,e=!1,n=null,o=!1,s=!1){this.variableNames=["x","W"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"pads",type:"ivec2"},{name:"strides",type:"ivec2"},{name:"dilations",type:"ivec2"},{name:"inDims",type:"ivec2"}],this.outputShape=t.outShape,this.enableShapeUniforms=we(this.outputShape.length);let i=t.padInfo.left,a=t.strideWidth,u=t.dilationWidth,l=t.filterHeight,c=t.filterWidth,p=c,m=`
int xR; int xC; int xCOffset;
vec4 wTexel; vec4 previous; vec4 final;`;for(let g=0;g<c;g++)m+=`
vec4 xTexelC${g*2};
int xTexelC${g*2}Ready;
vec4 xTexelC${g*2+1};
int xTexelC${g*2+1}Ready;
vec4 xC${g};`;m+=`
for (int r = 0; r < ${l}; r++) {
for (int d1 = 0; d1 < ${t.inChannels}; d1 += 2) {
`;for(let g=0;g<c;g++)m+=`
xTexelC${g*2} = vec4(0.0);
xTexelC${g*2}Ready = 0;
xTexelC${g*2+1} = vec4(0.0);
xTexelC${g*2+1}Ready = 0;
xC${g} = vec4(0.0);`;m+=`
xR = xRCorner + r * dilations[0];
if (xR >=0 && xR < inDims[0]) {
`;for(let g=0;g<(p+1)/2;g++){let x=g*2;if(m+=`
xC = xCCorner + ${x*u};
`,a===1){if(x<c&&(i%2===1?(m+=`
xCOffset = xC + 1;
if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${x}Ready == 0) {
xTexelC${x} = getX(batch, xR, xCOffset, d1);
// Need to manually clear unused channels in case
// we're reading from recycled texture.
if (xCOffset + 1 >= inDims[1]) {
xTexelC${x}.zw = vec2(0.0);
}
xTexelC${x}Ready = 1;
}
`,u===1&&x>0?m+=`
xC${x} = vec4(xTexelC${x-2}.zw, xTexelC${x}.xy);
`:m+=`
xCOffset = xC + 1 - 2;
if (xCOffset >= 0 && xCOffset < inDims[1]) {
previous = getX(batch, xR, xCOffset, d1);
// Need to manually clear unused channels in case
// we're reading from recycled texture.
if (xCOffset + 1 >= inDims[1]) {
previous.zw = vec2(0.0);
}
xC${x} = vec4(previous.zw, xTexelC${x}.xy);
} else {
xC${x} = vec4(0.0, 0.0, xTexelC${x}.xy);
}
`):m+=`
if (xC >= 0 && xC < inDims[1] && xTexelC${x}Ready == 0) {
xTexelC${x} = getX(batch, xR, xC, d1);
if (xC + 1 >= inDims[1]) {
xTexelC${x}.zw = vec2(0.0);
}
xTexelC${x}Ready = 1;
}
xC${x} = xTexelC${x};
`,x+1<c)){let b=i%2===0?y.nearestLargerEven(u):u;u%2===0&&i%2===1||u%2!==0&&i%2!==1?(m+=`
xCOffset = xC + imod(pads[1], 2) + ${b};
if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${x+1}Ready == 0) {
xTexelC${x+1} = getX(batch, xR, xCOffset, d1);
// Need to manually clear unused channels in case
// we're reading from recycled texture.
if (xCOffset + 1 >= inDims[1]) {
xTexelC${x+1}.zw = vec2(0.0);
}
xTexelC${x+1}Ready = 1;
}
`,u>1?m+=`
xCOffset -= 2;
if (xCOffset >= 0 && xCOffset < inDims[1]) {
previous = getX(batch, xR, xCOffset, d1);
xC${x+1} = vec4(previous.zw, xTexelC${x+1}.xy);
} else {
xC${x+1} = vec4(0.0, 0.0, xTexelC${x+1}.xy);
}
`:m+=`
xC${x+1} = vec4(xTexelC${x}.zw, xTexelC${x+1}.xy);
`):b===1?m+=`
xC${x+1} = xTexelC${x};
`:m+=`
xCOffset = xC + ${b};
if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${x+1}Ready == 0) {
xTexelC${x+1} = getX(batch, xR, xCOffset, d1);
if (xCOffset + 1 >= inDims[1]) {
xTexelC${x+1}.zw = vec2(0.0);
}
xTexelC${x+1}Ready = 1;
}
xC${x+1} = xTexelC${x+1};
`}}else x<c&&(i%2===1?(m+=`
xCOffset = xC + 1 - strides[1];
if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${x}Ready == 0) {
xTexelC${x} = getX(batch, xR, xCOffset, d1);
// Need to manually clear unused channels in case
// we're reading from recycled texture.
if (xCOffset + 1 >= inDims[1]) {
xTexelC${x}.zw = vec2(0.0);
}
xTexelC${x}Ready = 1;
}
if(xC + 1 >= 0 && xC + 1 < inDims[1] && xTexelC${x+1}Ready == 0) {
xTexelC${x+1} = getX(batch, xR, xC + 1, d1);
// Need to manually clear unused channels in case
// we're reading from recycled texture.
if (xC + 2 >= inDims[1]) {
xTexelC${x+1}.zw = vec2(0.0);
}
xTexelC${x+1}Ready = 1;
}
xC${x} = vec4(xTexelC${x}.zw, xTexelC${x+1}.zw);
`,x+1<c&&(m+=`
final = vec4(0.0);
xCOffset = xC + 1 + strides[1];
if(xCOffset >= 0 && xCOffset < inDims[1]) {
final = getX(batch, xR, xCOffset, d1);
}
xC${x+1} = vec4(xTexelC${x+1}.xy, final.xy);
`)):(m+=`
if(xC >= 0 && xC < inDims[1] && xTexelC${x}Ready == 0) {
xTexelC${x} = getX(batch, xR, xC, d1);
if (xC + 1 >= inDims[1]) {
xTexelC${x}.zw = vec2(0.0);
}
xTexelC${x}Ready = 1;
}
xCOffset = xC + strides[1];
if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${x+1}Ready == 0) {
xTexelC${x+1} = getX(batch, xR, xCOffset, d1);
if (xCOffset + 1 >= inDims[1]) {
xTexelC${x+1}.zw = vec2(0.);
}
xTexelC${x+1}Ready = 1;
}
xC${x} = vec4(
xTexelC${x}.xy, xTexelC${x+1}.xy);
`,x+1<c&&(m+=`
xC${x+1} = vec4(xTexelC${x}.zw, xTexelC${x+1}.zw);
`)));x<c&&(m+=`
wTexel = getW(r, ${x}, d1, d2);
dotProd += xC${x}.xxzz * vec4(wTexel.xy, wTexel.xy);
if(d1 + 1 < ${t.inChannels}) {
dotProd += xC${x}.yyww * vec4(wTexel.zw, wTexel.zw);
}
`,x+1<c&&(m+=`
wTexel = getW(r, ${x+1}, d1, d2);
dotProd += xC${x+1}.xxzz * vec4(wTexel.xy, wTexel.xy);
if(d1 + 1 < ${t.inChannels}) {
dotProd += xC${x+1}.yyww * vec4(wTexel.zw, wTexel.zw);
}
`))}m+=`
}
`,m+=`
}
`,m+=`
}
`;let f="",d="";n&&(o?f=`vec4 activation(vec4 a) {
vec4 b = getPreluActivationWeightsAtOutCoords();
${n}
}`:s?f=`vec4 activation(vec4 a) {
vec4 b = getLeakyreluAlphaAtOutCoords();
${n}
}`:f=`vec4 activation(vec4 x) {
${n}
}`,d="result = activation(result);");let h=e?"result += getBiasAtOutCoords();":"";e&&this.variableNames.push("bias"),o&&this.variableNames.push("preluActivationWeights"),s&&this.variableNames.push("leakyreluAlpha"),this.userCode=`
${f}
void main() {
ivec4 coords = getOutputCoords();
int batch = coords.x;
ivec2 xRCCorner = coords.yz * strides - pads;
int d2 = coords.w;
int xRCorner = xRCCorner.x;
int xCCorner = xRCCorner.y;
//intialize dotProd with a small epsilon seems to reduce GPU accuracy loss.
vec4 dotProd = vec4(0.000000000000001);
${m}
vec4 result = dotProd - vec4(0.000000000000001);
${h}
${d}
setOutput(result);
}
`}};var aC=class{constructor(t,e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"inputShape",type:"ivec4"},{name:"pad",type:"ivec2"},{name:"stride",type:"ivec2"},{name:"dilation",type:"ivec2"},{name:"inChannels",type:"int"},{name:"itemsPerBlockRow",type:"int"},{name:"outWidth",type:"int"}],this.outputShape=t,this.enableShapeUniforms=we(this.outputShape.length);let{dataFormat:n}=e,o=Ve(),s=n==="channelsLast",i=s?1:2,a=s?2:3,u=this.enableShapeUniforms?"if(blockIndex < outShape[2] && pos < outShape[1]) {":`if(blockIndex < ${t[2]} && pos < ${t[1]}) {`,l="";for(let c=0;c<=1;c++)for(let p=0;p<=1;p++)l+=`
blockIndex = rc.z + ${p};
pos = rc.y + ${c};
${u}
offsetY = int(blockIndex / outWidth) * stride[0] - pad[0];
d0 = offsetY + dilation[0] * (pos / itemsPerBlockRow);
if(d0 < inputShape[${i}] && d0 >= 0) {
// Use custom imod instead mod. On Intel GPU, mod may generate
// unexpected value.
// https://github.com/tensorflow/tfjs/issues/5447
offsetX = imod(blockIndex, outWidth) * stride[1] - pad[1];
d1 = offsetX + dilation[1] * (imod(pos, itemsPerBlockRow) /
inChannels);
if(d1 < inputShape[${a}] && d1 >= 0) {
ch = imod(pos, inChannels);
if (${s}) {
innerDims = vec2(d1, ch);
result[${c*2+p}] = getChannel(
getA(rc.x, d0, int(innerDims.x),
int(innerDims.y)), innerDims);
} else {
innerDims = vec2(d0, d1);
result[${c*2+p}] = getChannel(
getA(rc.x, ch, int(innerDims.x),
int(innerDims.y)), innerDims);
}
}
}
}
`;this.userCode=`
void main() {
ivec3 rc = getOutputCoords();
vec4 result = vec4(0);
int blockIndex, pos, offsetY, d0, offsetX, d1, ch;
vec2 innerDims;
${l}
${o.output} = result;
}
`}};function lC(r,t){let e=r.length;return e>=3?t?[...r.slice(0,-3),r[e-3]*r[e-2],r[e-1]]:[...r.slice(0,-3),r[e-3],r[e-2]*r[e-1]]:!t&&e===1&&r[0]>1?[r[0],1]:null}function uC({x:r,filter:t,convInfo:e,backend:n,bias:o=null,preluActivationWeights:s=null,leakyreluAlpha:i=0,activation:a=null}){let u=r.shape,l=n.texData.get(r.dataId),c=e.inChannels,p=u[0]*u[1]*u[2],m=e.outChannels,f=e.dataFormat==="channelsLast",d=!1,h=!1,g,x=[];if(s!=null){let C=lC(s.shape,f);C!=null&&(s=st({inputs:{x:s},backend:n,attrs:{shape:C}}),x.push(s))}if(o!=null){let C=lC(o.shape,f);C!=null&&(o=st({inputs:{x:o},backend:n,attrs:{shape:C}}),x.push(o))}if(!((p===1||m===1)&&c>uT)&&l.isPacked&&f&&l.texture!=null&&u[2]%2!==0&&y.arraysEqual(l.shape.slice(-3),u.slice(-3))){let C=u[0]*u[1]*(u[2]+1),N={dataId:r.dataId,shape:[1,C,e.inChannels],dtype:r.dtype},_=l.shape;l.shape=l.shape.slice(),l.shape[l.shape.length-2]++,y.assert(Tu(l.shape,N.shape),()=>`packed reshape ${l.shape} to ${N.shape} isn't free`);let A=st({inputs:{x:t},backend:n,attrs:{shape:[1,e.inChannels,e.outChannels]}});x.push(A);let $=Uc({a:N,b:A,backend:n,transposeA:d,transposeB:h,bias:o,activation:a,preluActivationWeights:s,leakyreluAlpha:i}),F=n.texData.get($.dataId);y.assert(F.isPacked,()=>"batchMatMul result is expected to be packed"),l.shape=_,F.shape=e.outShape,g=tr({inputs:{x:$},backend:n}),g.shape=e.outShape,x.push($)}else{let C=e.outHeight*e.outWidth,N=st({inputs:{x:r},backend:n,attrs:{shape:f?[e.batchSize,C,e.inChannels]:[e.batchSize,e.inChannels,C]}}),_=st({inputs:{x:t},backend:n,attrs:{shape:[1,e.inChannels,e.outChannels]}}),A=Uc({a:f?N:_,b:f?_:N,transposeA:!f,transposeB:h,backend:n,bias:o,activation:a,preluActivationWeights:s,leakyreluAlpha:i});g=st({inputs:{x:A},backend:n,attrs:{shape:e.outShape}}),x.push(N),x.push(_),x.push(A)}for(let C of x)n.disposeIntermediateTensorInfo(C);return g}function cC({x:r,filter:t,convInfo:e,backend:n,bias:o=null,preluActivationWeights:s=null,leakyreluAlpha:i=0,activation:a=null}){let{filterWidth:u,filterHeight:l,inChannels:c,outWidth:p,outHeight:m,dataFormat:f}=e,d=f==="channelsLast",h=u*l*c,g=m*p,x=[e.batchSize,h,g],b=!0,w=!1,C=[];if(s!=null){let Z=lC(s.shape,d);Z!=null&&(s=st({inputs:{x:s},backend:n,attrs:{shape:Z}}),C.push(s))}if(o!=null){let Z=lC(o.shape,d);Z!=null&&(o=st({inputs:{x:o},backend:n,attrs:{shape:Z}}),C.push(o))}let N=st({inputs:{x:t},backend:n,attrs:{shape:[1,h,y.sizeFromShape(t.shape)/h]}});C.push(N);let _=new aC(x,e),A=[r.shape,[e.padInfo.top,e.padInfo.left],[e.strideHeight,e.strideWidth],[e.dilationHeight,e.dilationWidth],[e.inChannels],[e.filterWidth*e.inChannels],[e.outWidth]],$=n.runWebGLProgram(_,[r],"float32",A),F=st({inputs:{x:$},backend:n,attrs:{shape:x}});C.push($),C.push(F);let P=o!=null,V=s!=null,G=a==="leakyrelu",W=a?xl(a,!0):null,q=new wd(d?F.shape:N.shape,d?N.shape:F.shape,d?[e.batchSize,g,e.outChannels]:[e.batchSize,e.outChannels,g],b,w,P,W,V,G),H=d?[F,N]:[N,F];if(o&&H.push(o),V&&H.push(s),G){let Z=n.makeTensorInfo([],"float32",y.createScalarValue(i,"float32"));H.push(Z),C.push(Z)}let j=n.runWebGLProgram(q,H,"float32"),Y=st({inputs:{x:j},backend:n,attrs:{shape:e.outShape}});C.push(j);for(let Z of C)n.disposeIntermediateTensorInfo(Z);return Y}function Wet(r){let{inputs:t,backend:e,attrs:n}=r,{x:o,filter:s}=t,{strides:i,pad:a,dataFormat:u,dilations:l,dimRoundingMode:c}=n,p=S.convertConv2DDataFormat(u),m=S.computeConv2DInfo(o.shape,s.shape,i,l,a,c,!1,p),f;if(m.filterHeight===1&&m.filterWidth===1&&m.dilationHeight===1&&m.dilationWidth===1&&m.strideHeight===1&&m.strideWidth===1&&(m.padInfo.type==="SAME"||m.padInfo.type==="VALID"))f=uC({x:o,filter:s,convInfo:m,backend:e});else if(m.strideWidth<=2&&p==="channelsLast"&&M().getBool("WEBGL_EXP_CONV")){let h=new vd(m),g=[[m.padInfo.top,m.padInfo.left],[m.strideHeight,m.strideWidth],[m.dilationHeight,m.dilationWidth],[m.inHeight,m.inWidth]];f=e.runWebGLProgram(h,[o,s],"float32",g)}else if(M().getBool("WEBGL_CONV_IM2COL"))f=cC({x:o,filter:s,convInfo:m,backend:e});else{let h=new Id(m);f=e.runWebGLProgram(h,[o,s],"float32")}let d=st({inputs:{x:f},backend:e,attrs:{shape:m.outShape}});return e.disposeIntermediateTensorInfo(f),d}var nz={kernelName:qo,backendName:"webgl",kernelFunc:Wet};var pC=class{constructor(t){this.variableNames=["x","dy"],this.outputShape=t.filterShape;let e=t.strideHeight,n=t.strideWidth,o=t.padInfo.top,s=t.padInfo.left,i=t.dataFormat==="channelsLast";this.userCode=`
void main() {
ivec4 coords = getOutputCoords();
int wR = coords.x;
int wC = coords.y;
int d1 = coords.z;
int d2 = coords.w;
// Convolve x(?, ?, d1) with dy(:, :, d2) to get dw(wR, wC, d1, d2).
// ? = to be determined. : = across all values in that axis.
float dotProd = 0.0;
for (int b = 0; b < ${t.batchSize}; b++) {
for (int yR = 0; yR < ${t.outHeight}; yR++) {
int xR = wR + yR * ${e} - ${o};
if (xR < 0 || xR >= ${t.inHeight}) {
continue;
}
for (int yC = 0; yC < ${t.outWidth}; yC++) {
int xC = wC + yC * ${n} - ${s};
if (xC < 0 || xC >= ${t.inWidth}) {
continue;
}
if (${i}) {
float dyValue = getDy(b, yR, yC, d2);
float xValue = getX(b, xR, xC, d1);
dotProd += (xValue * dyValue);
} else {
float dyValue = getDy(b, d2, yR, yC);
float xValue = getX(b, d1, xR, xC);
dotProd += (xValue * dyValue);
}
}
}
}
setOutput(dotProd);
}
`}},mC=class{constructor(t){this.variableNames=["dy","W"],this.outputShape=t.inShape;let e=t.filterHeight,n=t.filterWidth,o=t.strideHeight,s=t.strideWidth,i=t.dataFormat==="channelsLast",a=e-1-t.padInfo.top,u=n-1-t.padInfo.left,l=i?1:2,c=i?2:3,p=i?3:1;this.userCode=`
const ivec2 pads = ivec2(${a}, ${u});
void main() {
ivec4 coords = getOutputCoords();
int batch = coords[0];
int d1 = coords[${p}];
ivec2 dyCorner = ivec2(coords[${l}], coords[${c}]) - pads;
int dyRCorner = dyCorner.x;
int dyCCorner = dyCorner.y;
// Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1).
// ? = to be determined. : = across all values in that axis.
float dotProd = 0.0;
for (int wR = 0; wR < ${e}; wR++) {
float dyR = float(dyRCorner + wR) / ${o}.0;
if (dyR < 0.0 || dyR >= ${t.outHeight}.0 || fract(dyR) > 0.0) {
continue;
}
int idyR = int(dyR);
int wRPerm = ${e} - 1 - wR;
for (int wC = 0; wC < ${n}; wC++) {
float dyC = float(dyCCorner + wC) / ${s}.0;
if (dyC < 0.0 || dyC >= ${t.outWidth}.0 ||
fract(dyC) > 0.0) {
continue;
}
int idyC = int(dyC);
int wCPerm = ${n} - 1 - wC;
for (int d2 = 0; d2 < ${t.outChannels}; d2++) {
if (${i}) {
float xValue = getDy(batch, idyR, idyC, d2);
float wValue = getW(wRPerm, wCPerm, d1, d2);
dotProd += xValue * wValue;
} else {
float xValue = getDy(batch, d2, idyR, idyC);
float wValue = getW(wRPerm, wCPerm, d1, d2);
dotProd += xValue * wValue;
}
}
}
}
setOutput(dotProd);
}
`}},fC=class{constructor(t){this.variableNames=["x","dy"],this.outputShape=t.filterShape;let e=t.strideDepth,n=t.strideHeight,o=t.strideWidth,s=t.padInfo.front,i=t.padInfo.top,a=t.padInfo.left;this.userCode=`
void main() {
ivec5 coords = getOutputCoords();
int wF = coords.x;
int wR = coords.y;
int wC = coords.z;
int d1 = coords.w;
int d2 = coords.u;
float dotProd = 0.0;
for (int b = 0; b < ${t.batchSize}; b++) {
for (int yF = 0; yF < ${t.outDepth}; yF++) {
int xF = wF + yF * ${e} - ${s};
if (xF < 0 || xF >= ${t.inDepth}) {
continue;
}
for (int yR = 0; yR < ${t.outHeight}; yR++) {
int xR = wR + yR * ${n} - ${i};
if (xR < 0 || xR >= ${t.inHeight}) {
continue;
}
for (int yC = 0; yC < ${t.outWidth}; yC++) {
int xC = wC + yC * ${o} - ${a};
if (xC < 0 || xC >= ${t.inWidth}) {
continue;
}
float dyValue = getDy(b, yF, yR, yC, d2);
float xValue = getX(b, xF, xR, xC, d1);
dotProd += (xValue * dyValue);
}
}
}
}
setOutput(dotProd);
}
`}},dC=class{constructor(t){this.variableNames=["dy","W"],this.outputShape=t.inShape;let e=t.filterDepth,n=t.filterHeight,o=t.filterWidth,s=t.strideDepth,i=t.strideHeight,a=t.strideWidth,u=e-1-t.padInfo.front,l=n-1-t.padInfo.top,c=o-1-t.padInfo.left;this.userCode=`
const ivec3 pads = ivec3(${u}, ${l}, ${c});
void main() {
ivec5 coords = getOutputCoords();
int batch = coords.x;
int d1 = coords.u;
ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;
int dyFCorner = dyCorner.x;
int dyRCorner = dyCorner.y;
int dyCCorner = dyCorner.z;
float dotProd = 0.0;
for (int wF = 0; wF < ${e}; wF++) {
float dyF = float(dyFCorner + wF) / ${s}.0;
if (dyF < 0.0 || dyF >= ${t.outDepth}.0 || fract(dyF) > 0.0) {
continue;
}
int idyF = int(dyF);
int wFPerm = ${e} - 1 - wF;
for (int wR = 0; wR < ${n}; wR++) {
float dyR = float(dyRCorner + wR) / ${i}.0;
if (dyR < 0.0 || dyR >= ${t.outHeight}.0 ||
fract(dyR) > 0.0) {
continue;
}
int idyR = int(dyR);
int wRPerm = ${n} - 1 - wR;
for (int wC = 0; wC < ${o}; wC++) {
float dyC = float(dyCCorner + wC) / ${a}.0;
if (dyC < 0.0 || dyC >= ${t.outWidth}.0 ||
fract(dyC) > 0.0) {
continue;
}
int idyC = int(dyC);
int wCPerm = ${o} - 1 - wC;
for (int d2 = 0; d2 < ${t.outChannels}; d2++) {
float xValue = getDy(batch, idyF, idyR, idyC, d2);
float wValue = getW(wFPerm, wRPerm, wCPerm, d1, d2);
dotProd += xValue * wValue;
}
}
}
}
setOutput(dotProd);
}
`}};function Uet(r){let{inputs:t,backend:e,attrs:n}=r,{x:o,dy:s}=t,{strides:i,pad:a,dataFormat:u,dimRoundingMode:l,filterShape:c}=n,p=S.convertConv2DDataFormat(u),m=S.computeConv2DInfo(o.shape,c,i,1,a,l,!1,p),f=new pC(m);return e.runWebGLProgram(f,[o,s],"float32")}var oz={kernelName:mp,backendName:"webgl",kernelFunc:Uet};function Het(r){let{inputs:t,backend:e,attrs:n}=r,{dy:o,filter:s}=t,{inputShape:i,strides:a,pad:u,dataFormat:l,dimRoundingMode:c}=n,p=S.convertConv2DDataFormat(l),m=S.computeConv2DInfo(i,s.shape,a,1,u,c,!1,p),f=new mC(m);return e.runWebGLProgram(f,[o,s],"float32")}var sz={kernelName:Ko,backendName:"webgl",kernelFunc:Het};function qet(r){let{inputs:t,backend:e,attrs:n}=r,{x:o,filter:s}=t,{strides:i,pad:a,dilations:u}=n,l=S.computeConv3DInfo(o.shape,s.shape,i,u,a),c=new iC(l);return e.runWebGLProgram(c,[o,s],"float32")}var iz={kernelName:El,backendName:"webgl",kernelFunc:qet};function Ket(r){let{inputs:t,backend:e,attrs:n}=r,{x:o,dy:s}=t,{strides:i,pad:a,filterShape:u}=n,l=S.computeConv3DInfo(o.shape,u,i,1,a),c=new fC(l);return e.runWebGLProgram(c,[o,s],"float32")}var az={kernelName:fp,backendName:"webgl",kernelFunc:Ket};function jet(r){let{inputs:t,backend:e,attrs:n}=r,{dy:o,filter:s}=t,{pad:i,strides:a,inputShape:u}=n,l=S.computeConv3DInfo(u,s.shape,a,1,i),c=new dC(l);return e.runWebGLProgram(c,[o,s],"float32")}var lz={kernelName:dp,backendName:"webgl",kernelFunc:jet};var Xet=Oo+`
return cos(x);
`,Yet=Ct({opSnippet:Xet}),uz={kernelName:jo,backendName:"webgl",kernelFunc:Yet};var Zet=`
float e2x = exp(-x);
return (e2x + 1.0 / e2x) / 2.0;
`,Jet=Ct({opSnippet:Zet}),cz={kernelName:Xo,backendName:"webgl",kernelFunc:Jet};var hC=class{constructor(t,e,n,o,s){this.variableNames=["Image","Boxes","BoxInd"],this.outputShape=[];let[i,a,u,l]=t,[c]=e,[p,m]=n;this.outputShape=[c,p,m,l];let f=o==="bilinear"?1:0,[d,h]=[`${a-1}.0`,`${u-1}.0`],[g,x,b]=p>1?[`${(a-1)/(p-1)}`,"(y2-y1) * height_ratio",`y1*${d} + float(y)*(height_scale)`]:["0.0","0.0",`0.5 * (y1+y2) * ${d}`],[w,C,N]=m>1?[`${(u-1)/(m-1)}`,"(x2-x1) * width_ratio",`x1*${h} + float(x)*(width_scale)`]:["0.0","0.0",`0.5 * (x1+x2) * ${h}`];this.userCode=`
const float height_ratio = float(${g});
const float width_ratio = float(${w});
void main() {
ivec4 coords = getOutputCoords();
int b = coords[0];
int y = coords[1];
int x = coords[2];
int d = coords[3];
// get box vals
float y1 = getBoxes(b,0);
float x1 = getBoxes(b,1);
float y2 = getBoxes(b,2);
float x2 = getBoxes(b,3);
// get image in batch index
int bInd = round(getBoxInd(b));
if(bInd < 0 || bInd >= ${i}) {
return;
}
float height_scale = ${x};
float width_scale = ${C};
float in_y = ${b};
if( in_y < 0.0 || in_y > ${d} ) {
setOutput(float(${s}));
return;
}
float in_x = ${N};
if( in_x < 0.0 || in_x > ${h} ) {
setOutput(float(${s}));
return;
}
vec2 sourceFracIndexCR = vec2(in_x,in_y);
if(${f} == 1) {
// Compute the four integer indices.
ivec2 sourceFloorCR = ivec2(sourceFracIndexCR);
ivec2 sourceCeilCR = ivec2(ceil(sourceFracIndexCR));
float topLeft = getImage(b, sourceFloorCR.y, sourceFloorCR.x, d);
float bottomLeft = getImage(b, sourceCeilCR.y, sourceFloorCR.x, d);
float topRight = getImage(b, sourceFloorCR.y, sourceCeilCR.x, d);
float bottomRight = getImage(b, sourceCeilCR.y, sourceCeilCR.x, d);
vec2 fracCR = sourceFracIndexCR - vec2(sourceFloorCR);
float top = topLeft + (topRight - topLeft) * fracCR.x;
float bottom = bottomLeft + (bottomRight - bottomLeft) * fracCR.x;
float newValue = top + (bottom - top) * fracCR.y;
setOutput(newValue);
} else {
// Compute the coordinators of nearest neighbor point.
ivec2 sourceNearestCR = ivec2(floor(
sourceFracIndexCR + vec2(0.5,0.5)));
float newValue = getImage(b, sourceNearestCR.y, sourceNearestCR.x, d);
setOutput(newValue);
}
}
`}};var Qet=r=>{let{inputs:t,backend:e,attrs:n}=r,{image:o,boxes:s,boxInd:i}=t,{cropSize:a,method:u,extrapolationValue:l}=n,c=new hC(o.shape,s.shape,a,u,l);return e.runWebGLProgram(c,[o,s,i],"float32")},pz={kernelName:ma,backendName:"webgl",kernelFunc:Qet};var qc;(function(r){r.Prod="*",r.Sum="+"})(qc||(qc={}));var Jh=class{constructor(t,e,n,o){this.op=t,this.outputShape=e,this.variableNames=["x"],this.customUniforms=[{name:"index",type:"float"}];let s=this.outputShape.length,i=this.op===qc.Prod?"1.0":"0.0",a=n?i:`getX(${mz(s,"coords",this.op)})`,u=this.outputShape[this.outputShape.length-1],l="",c="";n?(l=o?`end != ${u-1}`:"end != 0",c=o?"end + 1":"end - 1"):(l=o?`end + pow2 < ${u}`:"end >= pow2",c=o?"end + pow2":"end - pow2"),this.userCode=`
void main() {
${zt(s)} coords = getOutputCoords();
int end = ${fz(s,"coords",this.op)};
float val = ${a};
int pow2 = int(pow(2.0, index));
if (${l}) {
int idx = ${c};
${fz(s,"coords",this.op)} = idx;
val ${this.op}= getX(${mz(s,"coords",this.op)});
}
setOutput(val);
}
`}};function mz(r,t,e){if(r===1)return`${t}`;if(r===2)return`${t}.x, ${t}.y`;if(r===3)return`${t}.x, ${t}.y, ${t}.z`;if(r===4)return`${t}.x, ${t}.y, ${t}.z, ${t}.w`;throw new Error(`Cumulative ${e} for rank ${r} is not yet supported`)}function fz(r,t,e){if(r===1)return`${t}`;if(r===2)return`${t}.y`;if(r===3)return`${t}.z`;if(r===4)return`${t}.w`;throw new Error(`Cumulative ${e} for rank ${r} is not yet supported`)}function gC(r,t,e,n,o,s){let i=t.shape.length,a=S.getAxesPermutation([n],i),u=t;a!=null&&(u=Fe({inputs:{x:t},backend:e,attrs:{perm:a}}));let l=S.getInnerMostAxes(1,i)[0];if(l!==i-1)throw new Error(`WebGL cumprod shader expects an inner-most axis=${t.shape.length-1} but got axis=${n}`);let c=u.shape[l],p=tr({inputs:{x:u},backend:e});for(let m=0;m<=Math.ceil(Math.log2(c))-1;m++){let f=new Jh(r,u.shape,!1,s),d=[[m]],h=p;p=e.runWebGLProgram(f,[p],p.dtype,d),e.disposeIntermediateTensorInfo(h)}if(o){let m=new Jh(r,u.shape,o,s),f=p;p=e.runWebGLProgram(m,[p],p.dtype),e.disposeIntermediateTensorInfo(f)}if(a!=null){let m=S.getUndoAxesPermutation(a),f=Fe({inputs:{x:p},backend:e,attrs:{perm:m}});return e.disposeIntermediateTensorInfo(p),e.disposeIntermediateTensorInfo(u),f}return p}function trt(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{axis:s,exclusive:i,reverse:a}=n;return gC(qc.Prod,o,e,s,i,a)}var dz={kernelName:pa,backendName:"webgl",kernelFunc:trt};function ert(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{axis:s,exclusive:i,reverse:a}=n;return gC(qc.Sum,o,e,s,i,a)}var hz={kernelName:Yo,backendName:"webgl",kernelFunc:ert};function rrt(r){let{inputs:t,backend:e,attrs:n}=r,{x:o,weights:s}=t,{size:i,binaryOutput:a}=n;if(o.shape.length===1){let u=e.readSync(o.dataId),l=e.readSync(s.dataId),c=Dw(u,l,s.dtype,s.shape,i);return e.makeTensorInfo([i],s.dtype,c)}else if(o.shape.length===2){let u=e.bufferSync(o),l=e.bufferSync(s),c=rL(u,l,i,a);return e.makeTensorInfo(c.shape,s.dtype,c.values)}throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank${o.shape.length}.`)}var gz={kernelName:hp,backendName:"webgl",kernelFunc:rrt};var xC=class{constructor(t,e,n){this.variableNames=["x"],this.outputShape=[],this.outputShape=t,this.blockSize=e,this.dataFormat=n,this.userCode=`
void main() {
ivec4 coords = getOutputCoords();
int b = coords[0];
int h = ${this.getHeightCoordString()};
int w = ${this.getWidthCoordString()};
int d = ${this.getDepthCoordString()};
int in_h = h / ${e};
int offset_h = imod(h, ${e});
int in_w = w / ${e};
int offset_w = imod(w, ${e});
int offset_d = (offset_h * ${e} + offset_w) *
${this.getOutputDepthSize()};
int in_d = d + offset_d;
float result = ${this.getInputSamplingString()};
setOutput(result);
}
`}getHeightCoordString(){return this.dataFormat==="NHWC"?"coords[1]":"coords[2]"}getWidthCoordString(){return this.dataFormat==="NHWC"?"coords[2]":"coords[3]"}getDepthCoordString(){return this.dataFormat==="NHWC"?"coords[3]":"coords[1]"}getOutputDepthSize(){return this.dataFormat==="NHWC"?this.outputShape[3]:this.outputShape[1]}getInputSamplingString(){return this.dataFormat==="NHWC"?"getX(b, in_h, in_w, in_d)":"getX(b, in_d, in_h, in_w)"}};function nrt(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{blockSize:s,dataFormat:i}=n,a=o.shape[0],u=i==="NHWC"?o.shape[1]:o.shape[2],l=i==="NHWC"?o.shape[2]:o.shape[3],c=i==="NHWC"?o.shape[3]:o.shape[1],p=u*s,m=l*s,f=c/(s*s),d=i==="NHWC"?[a,p,m,f]:[a,f,p,m],h=new xC(d,s,i);return e.runWebGLProgram(h,[o],o.dtype)}var xz={kernelName:fa,backendName:"webgl",kernelFunc:nrt};var Sd=class{constructor(t,e=!1,n=null,o=!1,s=!1){this.variableNames=["x","W"],this.customUniforms=[{name:"pads",type:"ivec2"},{name:"strides",type:"ivec2"},{name:"dilations",type:"ivec2"},{name:"inDims",type:"ivec2"}],this.outputShape=t.outShape,this.enableShapeUniforms=we(this.outputShape.length);let i=t.filterHeight,a=t.filterWidth,u=t.outChannels/t.inChannels,l="",c="";n&&(o?l=`float activation(float a) {
float b = getPreluActivationWeightsAtOutCoords();
${n}
}`:s?l=`float activation(float a) {
float b = getLeakyreluAlphaAtOutCoords();
${n}
}`:l=`
float activation(float x) {
${n}
}
`,c="result = activation(result);");let p=e?"result += getBiasAtOutCoords();":"";e&&this.variableNames.push("bias"),o&&this.variableNames.push("preluActivationWeights"),s&&this.variableNames.push("leakyreluAlpha"),this.userCode=`
${l}
void main() {
ivec4 coords = getOutputCoords();
int batch = coords.x;
ivec2 xRCCorner = coords.yz * strides - pads;
int d2 = coords.w;
int d1 = d2 / ${u};
int q = d2 - d1 * ${u};
int xRCorner = xRCCorner.x;
int xCCorner = xRCCorner.y;
// Convolve x(?, ?, d1) with w(:, :, d1, q) to get y(yR, yC, d2).
// ? = to be determined. : = across all values in that axis.
float dotProd = 0.0;
// TO DO(dsmilkov): Flatten the two for loops and vec4 the operations.
for (int wR = 0; wR < ${i}; wR++) {
int xR = xRCorner + wR * dilations[0];
if (xR < 0 || xR >= inDims[0]) {
continue;
}
for (int wC = 0; wC < ${a}; wC++) {
int xC = xCCorner + wC * dilations[1];
if (xC < 0 || xC >= inDims[1]) {
continue;
}
float xVal = getX(batch, xR, xC, d1);
float wVal = getW(wR, wC, d1, q);
dotProd += xVal * wVal;
}
}
float result = dotProd;
${p}
${c}
setOutput(result);
}
`}};var Nd=class{constructor(t,e=!1,n=null,o=!1,s=!1){this.variableNames=["x","W"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"pads",type:"ivec2"},{name:"strides",type:"ivec2"},{name:"dilations",type:"ivec2"},{name:"inDims",type:"ivec2"}],this.outputShape=t.outShape,this.enableShapeUniforms=we(this.outputShape.length);let i=t.outChannels/t.inChannels,a=t.padInfo.left,u=t.strideWidth,l=t.dilationWidth,c=t.filterHeight,p=t.filterWidth,m=p,f=`
int xR; int xC; int xCOffset;
vec4 wTexel; vec4 previous; vec4 final;`;for(let x=0;x<p;x++)f+=`
vec4 xTexelC${x*2};
int xTexelC${x*2}Ready;
vec4 xTexelC${x*2+1};
int xTexelC${x*2+1}Ready;
vec4 xC${x};`;f+=`
for (int r = 0; r < ${c}; r++) {
`;for(let x=0;x<p;x++)f+=`
xTexelC${x*2} = vec4(0.0);
xTexelC${x*2}Ready = 0;
xTexelC${x*2+1} = vec4(0.0);
xTexelC${x*2+1}Ready = 0;
xC${x} = vec4(0.0);`;f+=`
xR = xRCorner + r * dilations[0];
if (xR >=0 && xR < inDims[0]) {
`;for(let x=0;x<(m+1)/2;x++){let b=x*2;if(f+=`
xC = xCCorner + ${b*l};
`,u===1){if(b<p&&(a%2===1?(f+=`
xCOffset = xC + 1;
if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${b}Ready == 0) {
xTexelC${b} = getX(batch, xR, xCOffset, d1);
// Need to manually clear unused channels in case
// we're reading from recycled texture.
if (xCOffset + 1 >= inDims[1]) {
xTexelC${b}.zw = vec2(0.0);
}
xTexelC${b}Ready = 1;
}
`,l===1&&b>0?f+=`
xC${b} = vec4(xTexelC${b-2}.zw, xTexelC${b}.xy);
`:f+=`
xCOffset = xC + 1 - 2;
if (xCOffset >= 0 && xCOffset < inDims[1]) {
previous = getX(batch, xR, xCOffset, d1);
// Need to manually clear unused channels in case
// we're reading from recycled texture.
if (xCOffset + 1 >= inDims[1]) {
previous.zw = vec2(0.0);
}
xC${b} = vec4(previous.zw, xTexelC${b}.xy);
} else {
xC${b} = vec4(0.0, 0.0, xTexelC${b}.xy);
}
`):f+=`
if (xC >= 0 && xC < inDims[1] && xTexelC${b}Ready == 0) {
xTexelC${b} = getX(batch, xR, xC, d1);
if (xC + 1 >= inDims[1]) {
xTexelC${b}.zw = vec2(0.0);
}
xTexelC${b}Ready = 1;
}
xC${b} = xTexelC${b};
`,b+1<p)){let w=a%2===0?y.nearestLargerEven(l):l;l%2===0&&a%2===1||l%2!==0&&a%2!==1?(f+=`
xCOffset = xC + imod(pads[1], 2) + ${w};
if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${b+1}Ready == 0) {
xTexelC${b+1} = getX(batch, xR, xCOffset, d1);
// Need to manually clear unused channels in case
// we're reading from recycled texture.
if (xCOffset + 1 >= inDims[1]) {
xTexelC${b+1}.zw = vec2(0.0);
}
xTexelC${b+1}Ready = 1;
}
`,l>1?f+=`
xCOffset -= 2;
if (xCOffset >= 0 && xCOffset < inDims[1]) {
previous = getX(batch, xR, xCOffset, d1);
xC${b+1} = vec4(previous.zw, xTexelC${b+1}.xy);
} else {
xC${b+1} = vec4(0.0, 0.0, xTexelC${b+1}.xy);
}
`:f+=`
xC${b+1} = vec4(xTexelC${b}.zw, xTexelC${b+1}.xy);
`):w===1?f+=`
xC${b+1} = xTexelC${b};
`:f+=`
xCOffset = xC + ${w};
if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${b+1}Ready == 0) {
xTexelC${b+1} = getX(batch, xR, xCOffset, d1);
if (xCOffset + 1 >= inDims[1]) {
xTexelC${b+1}.zw = vec2(0.0);
}
xTexelC${b+1}Ready = 1;
}
xC${b+1} = xTexelC${b+1};
`}}else b<p&&(a%2===1?(f+=`
xCOffset = xC + 1 - strides[1];
if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${b}Ready == 0) {
xTexelC${b} = getX(batch, xR, xCOffset, d1);
// Need to manually clear unused channels in case
// we're reading from recycled texture.
if (xCOffset + 1 >= inDims[1]) {
xTexelC${b}.zw = vec2(0.0);
}
xTexelC${b}Ready = 1;
}
if(xC + 1 >= 0 && xC + 1 < inDims[1] && xTexelC${b+1}Ready == 0) {
xTexelC${b+1} = getX(batch, xR, xC + 1, d1);
// Need to manually clear unused channels in case
// we're reading from recycled texture.
if (xC + 2 >= inDims[1]) {
xTexelC${b+1}.zw = vec2(0.0);
}
xTexelC${b+1}Ready = 1;
}
xC${b} = vec4(xTexelC${b}.zw, xTexelC${b+1}.zw);
`,b+1<p&&(f+=`
final = vec4(0.0);
xCOffset = xC + 1 + strides[1];
if(xCOffset >= 0 && xCOffset < inDims[1]) {
final = getX(batch, xR, xCOffset, d1);
}
xC${b+1} = vec4(xTexelC${b+1}.xy, final.xy);
`)):(f+=`
if(xC >= 0 && xC < inDims[1] && xTexelC${b}Ready == 0) {
xTexelC${b} = getX(batch, xR, xC, d1);
if (xC + 1 >= inDims[1]) {
xTexelC${b}.zw = vec2(0.0);
}
xTexelC${b}Ready = 1;
}
xCOffset = xC + strides[1];
if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${b+1}Ready == 0) {
xTexelC${b+1} = getX(batch, xR, xCOffset, d1);
if (xCOffset + 1 >= inDims[1]) {
xTexelC${b+1}.zw = vec2(0.);
}
xTexelC${b+1}Ready = 1;
}
xC${b} = vec4(
xTexelC${b}.xy, xTexelC${b+1}.xy);
`,b+1<p&&(f+=`
xC${b+1} = vec4(xTexelC${b}.zw, xTexelC${b+1}.zw);
`)));b<p&&(f+=`
wTexel = getW(r, ${b}, d1, q);
dotProd += xC${b} * vec4(wTexel.xz, wTexel.xz);
`,b+1<p&&(f+=`
wTexel = getW(r, ${b+1}, d1, q);
dotProd += xC${b+1} * vec4(wTexel.xz, wTexel.xz);
`))}f+=`
}
`,f+=`
}
`;let d="",h="";n&&(o?d=`vec4 activation(vec4 a) {
vec4 b = getPreluActivationWeightsAtOutCoords();
${n}
}`:s?d=`vec4 activation(vec4 a) {
vec4 b = getLeakyreluAlphaAtOutCoords();
${n}
}`:d=`vec4 activation(vec4 x) {
${n}
}`,h="result = activation(result);");let g=e?"result += getBiasAtOutCoords();":"";e&&this.variableNames.push("bias"),o&&this.variableNames.push("preluActivationWeights"),s&&this.variableNames.push("leakyreluAlpha"),this.userCode=`
${d}
void main() {
ivec4 coords = getOutputCoords();
int batch = coords.x;
ivec2 xRCCorner = coords.yz * strides - pads;
int d2 = coords.w;
int d1 = d2 / ${i};
int q = d2 - d1 * ${i};
int xRCorner = xRCCorner.x;
int xCCorner = xRCCorner.y;
//intialize dotProd with a small epsilon seems to reduce GPU accuracy loss.
vec4 dotProd = vec4(0.000000000000001);
${f}
vec4 result = dotProd - vec4(0.000000000000001);
${g}
${h}
setOutput(result);
}
`}};function ort(r){let{inputs:t,backend:e,attrs:n}=r,{x:o,filter:s}=t,{strides:i,pad:a,dilations:u,dimRoundingMode:l}=n,c=u;c==null&&(c=[1,1]),y.assert(S.eitherStridesOrDilationsAreOne(i,c),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${i} and dilations '${c}'`);let p=S.computeConv2DInfo(o.shape,s.shape,i,c,a,l,!0),m;M().getBool("WEBGL_PACK_DEPTHWISECONV")&&p.strideWidth<=2&&p.outChannels/p.inChannels===1?m=new Nd(p):m=new Sd(p);let f=[[p.padInfo.top,p.padInfo.left],[p.strideHeight,p.strideWidth],[p.dilationHeight,p.dilationWidth],[p.inHeight,p.inWidth]];return e.runWebGLProgram(m,[o,s],"float32",f)}var yz={kernelName:Zo,backendName:"webgl",kernelFunc:ort};var yC=class{constructor(t){this.variableNames=["x","dy"],this.outputShape=t.filterShape;let e=t.strideHeight,n=t.strideWidth,o=t.padInfo.top,s=t.padInfo.left,i=t.outChannels/t.inChannels;this.userCode=`
void main() {
ivec4 coords = getOutputCoords();
int wR = coords.x;
int wC = coords.y;
int d1 = coords.z;
int dm = coords.w;
int d2 = d1 * ${i} + dm;
float dotProd = 0.0;
// TO DO: Vec4 over the batch size
for (int b = 0; b < ${t.batchSize}; b++) {
for (int yR = 0; yR < ${t.outHeight}; yR++) {
int xR = wR + yR * ${e} - ${o};
if (xR < 0 || xR >= ${t.inHeight}) {
continue;
}
for (int yC = 0; yC < ${t.outWidth}; yC++) {
int xC = wC + yC * ${n} - ${s};
if (xC < 0 || xC >= ${t.inWidth}) {
continue;
}
float dyValue = getDy(b, yR, yC, d2);
float xValue = getX(b, xR, xC, d1);
dotProd += (xValue * dyValue);
}
}
}
setOutput(dotProd);
}
`}},bC=class{constructor(t){this.variableNames=["dy","W"],this.outputShape=t.inShape;let e=t.filterHeight,n=t.filterWidth,o=t.strideHeight,s=t.strideWidth,i=e-1-t.padInfo.top,a=n-1-t.padInfo.left,u=t.outChannels/t.inChannels;this.userCode=`
const ivec2 pads = ivec2(${i}, ${a});
void main() {
ivec4 coords = getOutputCoords();
int batch = coords[0];
int d1 = coords[3];
ivec2 dyCorner = coords.yz - pads;
int dyRCorner = dyCorner.x;
int dyCCorner = dyCorner.y;
float dotProd = 0.0;
for (int wR = 0; wR < ${e}; wR++) {
float dyR = float(dyRCorner + wR) / ${o}.0;
if (dyR < 0.0 || dyR >= ${t.outHeight}.0 || fract(dyR) > 0.0) {
continue;
}
int idyR = int(dyR);
int wRPerm = ${e} - 1 - wR;
for (int wC = 0; wC < ${n}; wC++) {
float dyC = float(dyCCorner + wC) / ${s}.0;
if (dyC < 0.0 || dyC >= ${t.outWidth}.0 ||
fract(dyC) > 0.0) {
continue;
}
int idyC = int(dyC);
int wCPerm = ${n} - 1 - wC;
// TO DO: Vec4 over the channelMul
for (int dm = 0; dm < ${u}; dm++) {
int d2 = d1 * ${u} + dm;
float xValue = getDy(batch, idyR, idyC, d2);
float wValue = getW(wRPerm, wCPerm, d1, dm);
dotProd += xValue * wValue;
}
}
}
setOutput(dotProd);
}
`}};function srt(r){let{inputs:t,backend:e,attrs:n}=r,{x:o,dy:s}=t,{strides:i,dilations:a,pad:u,dimRoundingMode:l,filterShape:c}=n,p=S.computeConv2DInfo(o.shape,c,i,a,u,l,!0),m=new yC(p);return e.runWebGLProgram(m,[o,s],"float32")}var bz={kernelName:gp,backendName:"webgl",kernelFunc:srt};function irt(r){let{inputs:t,backend:e,attrs:n}=r,{dy:o,filter:s}=t,{strides:i,dilations:a,pad:u,dimRoundingMode:l,inputShape:c}=n,p=S.computeConv2DInfo(c,s.shape,i,a,u,l,!0),m=new bC(p);return e.runWebGLProgram(m,[o,s],"float32")}var wz={kernelName:xp,backendName:"webgl",kernelFunc:irt};var wC=class{constructor(t){this.variableNames=["X"],this.outputShape=[t,t],this.userCode=`
void main() {
ivec2 coords = getOutputCoords();
float val = coords[0] == coords[1] ? getX(coords[0]) : 0.0;
setOutput(val);
}
`}};function art(r){let{inputs:t,backend:e}=r,{x:n}=t,o=[...n.shape,...n.shape],s=y.sizeFromShape(n.shape),i=st({inputs:{x:n},backend:e,attrs:{shape:[s]}}),a=new wC(s),u=e.runWebGLProgram(a,[i],i.dtype),l=st({inputs:{x:u},backend:e,attrs:{shape:o}});return e.disposeIntermediateTensorInfo(i),e.disposeIntermediateTensorInfo(u),l}var Cz={kernelName:yp,backendName:"webgl",kernelFunc:art};var CC=class{constructor(t){this.variableNames=["x","W"],this.outputShape=t.outShape;let{inHeight:e,inWidth:n,padInfo:o,strideHeight:s,strideWidth:i,filterHeight:a,filterWidth:u,dilationHeight:l,dilationWidth:c}=t,{top:p,left:m}=o;this.userCode=`
const ivec2 strides = ivec2(${s}, ${i});
const ivec2 pads = ivec2(${p}, ${m});
const float neg_infinity = -3.4e38;
void main() {
ivec4 coords = getOutputCoords();
int batch = coords.x;
int d1 = coords.w;
ivec2 outTopLeftCorner =
coords.yz * strides - pads;
int hBeg = outTopLeftCorner.x;
int wBeg = outTopLeftCorner.y;
float curVal = neg_infinity;
for (int h = 0; h < ${a}; h++) {
int hIn = hBeg + h * ${l};
if (hIn >= 0 && hIn < ${e}) {
for (int w = 0; w < ${u}; w++) {
int wIn = wBeg + w * ${c};
if (wIn >= 0 && wIn < ${n}) {
float xVal = getX(batch, hIn, wIn, d1);
float wVal = getW(h, w, d1);
float val = xVal + wVal;
if (val > curVal) {
curVal = val;
}
}
}
}
}
float result = curVal;
setOutput(result);
}
`}};function lrt(r){let{inputs:t,backend:e,attrs:n}=r,{x:o,filter:s}=t,{strides:i,pad:a,dilations:u}=n,l=S.computeDilation2DInfo(o.shape,s.shape,i,a,"NHWC",u),c,p=new CC(l);c=e.runWebGLProgram(p,[o,s],"float32");let m=st({inputs:{x:c},backend:e,attrs:{shape:l.outShape}});return e.disposeIntermediateTensorInfo(c),m}var Iz={kernelName:_l,backendName:"webgl",kernelFunc:lrt};function urt(r){let{inputs:t,backend:e,attrs:n}=r,{equation:o}=n,s=t,{allDims:i,summedDims:a,idDims:u}=S.decodeEinsumEquation(o,s.length);S.checkEinsumDimSizes(i.length,u,s);let{path:l,steps:c}=S.getEinsumComputePath(a,u),p=c.length,m=null,f=i.length,d=[];for(let h=0;h<p;++h){for(let g of c[h]){let{permutationIndices:x,expandDims:b}=S.getEinsumPermutation(f,u[g]),w;S.isIdentityPermutation(x)?w=s[g]:(w=Fe({inputs:{x:s[g]},backend:e,attrs:{perm:x}}),d.push(w));let C=w.shape.slice();for(let N=0;N<b.length;++N)C.splice(b[N],0,1);y.arraysEqual(w.shape,C)||(w=st({inputs:{x:w},backend:e,attrs:{shape:C}}),d.push(w)),m===null?m=w:(m=Yh({inputs:{a:w,b:m},backend:e}),d.push(m))}h<p-1&&(l[h]>=0&&(m=Wc({inputs:{x:m},backend:e,attrs:{axis:l[h]-(i.length-f),keepDims:!1}}),d.push(m)),f--)}for(let h of d)h!==m&&e.disposeIntermediateTensorInfo(h);return m}var vz={kernelName:bp,backendName:"webgl",kernelFunc:urt};var crt="return (x >= 0.0) ? x : (exp(x) - 1.0);",prt=`
vec4 result;
result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0);
result.g = (x.g >= 0.0) ? x.g : (exp(x.g) - 1.0);
result.b = (x.b >= 0.0) ? x.b : (exp(x.b) - 1.0);
result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0);
return result;
`,mrt=Ct({opSnippet:crt,packedOpSnippet:prt}),Sz={kernelName:Qo,backendName:"webgl",kernelFunc:mrt};var frt="return (b >= 1.0) ? a : a * (b + 1.0);",drt=`
vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.)));
return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0))));
`,hrt=r=>{let{inputs:t,backend:e}=r,{dy:n,y:o}=t,s=M().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Fo(drt,n.shape,o.shape):new oo(frt,n.shape,o.shape);return e.runWebGLProgram(s,[n,o],n.dtype)},Nz={kernelName:wp,backendName:"webgl",kernelFunc:hrt};var grt=`
return vec4(equal(a, b));
`,xrt="return float(a == b);",yrt=le({opSnippet:xrt,packedOpSnippet:grt,dtype:"bool",cpuKernelImpl:iL}),kz={kernelName:ha,backendName:"webgl",kernelFunc:yrt};var brt=`
// Error function is calculated approximately with elementary function.
// See "Handbook of Mathematical Functions with Formulas,
// Graphs, and Mathematical Tables", Abramowitz and Stegun.
float p = ${S.ERF_P};
float a1 = ${S.ERF_A1};
float a2 = ${S.ERF_A2};
float a3 = ${S.ERF_A3};
float a4 = ${S.ERF_A4};
float a5 = ${S.ERF_A5};
float sign = sign(x);
x = abs(x);
float t = 1.0 / (1.0 + p * x);
return sign * (1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*exp(-x*x));
`,wrt=Ct({opSnippet:brt}),Tz={kernelName:da,backendName:"webgl",kernelFunc:wrt};var Crt=Oo+`
return exp(x);
`,Irt=`
vec4 result = exp(x);
bvec4 isNaN = isnan(x);
result.r = isNaN.r ? x.r : result.r;
result.g = isNaN.g ? x.g : result.g;
result.b = isNaN.b ? x.b : result.b;
result.a = isNaN.a ? x.a : result.a;
return result;
`,dT=Ct({opSnippet:Crt,packedOpSnippet:Irt,cpuKernelImpl:aL,dtype:"float32"}),Ez={kernelName:ts,backendName:"webgl",kernelFunc:dT};function IC(r){let{inputs:t,attrs:e,backend:n}=r,{dim:o}=e,{input:s}=t,i=s.shape.length,a=s.shape.slice(),u=o;return o<0&&(y.assert(-(i+1)<=o,()=>`Axis must be in the interval [${-(i+1)}, ${i}]`),u=i+o+1),a.splice(u,0,1),st({inputs:{x:s},backend:n,attrs:{shape:a}})}var _z={kernelName:ai,backendName:"webgl",kernelFunc:IC};var Az="return exp(x) - 1.0;",vrt=Ct({opSnippet:Az,packedOpSnippet:Az,cpuKernelImpl:lL}),$z={kernelName:ga,backendName:"webgl",kernelFunc:vrt};var Qh=class{constructor(t,e,n){this.variableNames=["real","imag"];let o=e[1];this.outputShape=e;let s=n?`2.0 * ${Math.PI}`:`-2.0 * ${Math.PI}`,i=n?`${o}.0`:"1.0",a;if(t==="real")a="return real * expR - imag * expI;";else if(t==="imag")a="return real * expI + imag * expR;";else throw new Error(`FFT component must be either "real" or "imag", got ${t}.`);this.userCode=`
const float exponentMultiplier = ${s};
float unaryOpComplex(float real, float expR, float imag, float expI) {
${a}
}
float mulMatDFT(int batch, int index) {
float indexRatio = float(index) / float(${o});
float exponentMultiplierTimesIndexRatio =
exponentMultiplier * indexRatio;
float result = 0.0;
for (int i = 0; i < ${o}; i++) {
// x = (-2|2 * PI / N) * index * i;
float x = exponentMultiplierTimesIndexRatio * float(i);
float expR = cos(x);
float expI = sin(x);
float real = getReal(batch, i);
float imag = getImag(batch, i);
result +=
unaryOpComplex(real, expR, imag, expI) / ${i};
}
return result;
}
void main() {
ivec2 coords = getOutputCoords();
setOutput(mulMatDFT(coords[0], coords[1]));
}
`}};function vC(r,t,e){let n=e.texData.get(r.dataId),o=y.sizeFromShape(r.shape),s=r.shape[r.shape.length-1],i=o/s,a=st({inputs:{x:r},backend:e,attrs:{shape:[i,s]}}),u=a.shape,l=new Qh("real",u,t),c=new Qh("imag",u,t),p=[{dataId:n.complexTensorInfos.real.dataId,dtype:n.complexTensorInfos.real.dtype,shape:u},{dataId:n.complexTensorInfos.imag.dataId,dtype:n.complexTensorInfos.imag.dtype,shape:u}],m=e.runWebGLProgram(l,p,"float32"),f=e.runWebGLProgram(c,p,"float32"),d=Tn({inputs:{real:m,imag:f},backend:e});e.disposeIntermediateTensorInfo(m),e.disposeIntermediateTensorInfo(f);let h=st({inputs:{x:d},backend:e,attrs:{shape:r.shape}});return e.disposeIntermediateTensorInfo(a),e.disposeIntermediateTensorInfo(d),h}function Srt(r){let{inputs:t,backend:e}=r,{input:n}=t;return vC(n,!1,e)}var Dz={kernelName:Cp,backendName:"webgl",kernelFunc:Srt};var SC=class{constructor(t,e){this.outputShape=[],this.customUniforms=[{name:"value",type:"float"}],this.variableNames=["x"],this.outputShape=t,this.userCode=`
void main() {
// Input can be obtained from uniform value.
setOutput(value);
}
`}};function bl(r){let{backend:t,attrs:e}=r,{shape:n,value:o}=e,{dtype:s}=e;if(s=s||y.inferDtype(o),s==="string"){let i=y.getArrayFromDType(s,y.sizeFromShape(n));return i.fill(o),t.makeTensorInfo(n,s,i)}else{let i=new SC(n,o),a=[[o]];return t.runWebGLProgram(i,[],s,a)}}var Rz={kernelName:Al,backendName:"webgl",kernelFunc:bl};var NC=class{constructor(t){this.variableNames=["Image"],this.outputShape=[];let e=t[2];this.outputShape=t,this.userCode=`
void main() {
ivec4 coords = getOutputCoords();
int x = coords[2];
int coordX = ${e} - x - 1;
float outputValue;
if(coordX >= 0 && coordX < ${e}) {
outputValue = getImage(coords[0], coords[1], coordX, coords[3]);
} else {
outputValue = getImage(coords[0], coords[1], coords[2], coords[3]);
}
setOutput(outputValue);
}
`}};var Fz={kernelName:xa,backendName:"webgl",kernelFunc:({inputs:r,backend:t})=>{let{image:e}=r,n=t,o=new NC(e.shape);return n.runWebGLProgram(o,[e],e.dtype)}};var Oz="return floor(x);",Nrt=Ct({opSnippet:Oz,packedOpSnippet:Oz,cpuKernelImpl:uL}),Pz={kernelName:es,backendName:"webgl",kernelFunc:Nrt};var krt=`
float s = sign(a) * sign(b);
int ia = round(a);
int ib = round(b);
if (ib != 0) {
// Windows (D3D) wants guaranteed non-zero int division at compile-time.
return float(idiv(ia, ib, s));
} else {
return NAN;
}
`,Trt=`
ivec4 ia = round(a);
ivec4 ib = round(b);
bvec4 cond = notEqual(ib, ivec4(0));
ivec4 result = ivec4(0);
vec4 s = sign(a) * sign(b);
// Windows (D3D) wants guaranteed non-zero int division at compile-time.
if (cond[0]) {
result[0] = idiv(ia[0], ib[0], s[0]);
}
if (cond[1]) {
result[1] = idiv(ia[1], ib[1], s[1]);
}
if (cond[2]) {
result[2] = idiv(ia[2], ib[2], s[2]);
}
if (cond[3]) {
result[3] = idiv(ia[3], ib[3], s[3]);
}
return vec4(result);
`,Ert=le({opSnippet:krt,packedOpSnippet:Trt,dtype:"int32"}),Lz={kernelName:rs,backendName:"webgl",kernelFunc:Ert};var kC=class{constructor(t){this.variableNames=["A"];let e=Ve(),[n,o]=t;this.outputShape=t,this.userCode=`
void main() {
ivec3 coords = getOutputCoords();
int texR = coords[0];
int texC = coords[1];
int depth = coords[2];
vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${o}.0, ${n}.0);
vec4 values = ${e.texture2D}(A, uv);
float value;
if (depth == 0) {
value = values.r;
} else if (depth == 1) {
value = values.g;
} else if (depth == 2) {
value = values.b;
} else if (depth == 3) {
value = values.a;
}
setOutput(floor(value * 255.0 + 0.5));
}
`}};var TC=class{constructor(t){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;let e=Ve(),[n,o]=t;this.outputShape=t,this.userCode=`
void main() {
ivec3 coords = getOutputCoords();
int texR = coords[0];
int texC = coords[1];
int depth = coords[2];
vec4 result = vec4(0.);
for(int row=0; row<=1; row++) {
for(int col=0; col<=1; col++) {
texC = coords[1] + row;
depth = coords[2] + col;
vec2 uv = (vec2(texC, texR) + halfCR) /
vec2(${o}.0, ${n}.0);
vec4 values = ${e.texture2D}(A, uv);
float value;
if (depth == 0) {
value = values.r;
} else if (depth == 1) {
value = values.g;
} else if (depth == 2) {
value = values.b;
} else if (depth == 3) {
value = values.a;
}
result[row * 2 + col] = floor(value * 255.0 + 0.5);
}
}
${e.output} = result;
}
`}};var Mz={kernelName:qd,backendName:"webgl",kernelFunc:_rt},kd,hT=M().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");function _rt(r){let{inputs:t,backend:e,attrs:n}=r,{pixels:o}=t,{numChannels:s}=n,i=typeof HTMLVideoElement!="undefined"&&o instanceof HTMLVideoElement,a=typeof HTMLImageElement!="undefined"&&o instanceof HTMLImageElement,[u,l]=i?[o.videoWidth,o.videoHeight]:[o.width,o.height],c=[l,u],p=[l,u,s];if(a||i){let h=M().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");(kd==null||h!==hT)&&(hT=h,kd=document.createElement("canvas").getContext("2d",{willReadFrequently:hT})),kd.canvas.width=u,kd.canvas.height=l,kd.drawImage(o,0,0,u,l),o=kd.canvas}let m=e.makeTensorInfo(c,"int32");e.texData.get(m.dataId).usage=Kr.PIXELS,e.gpgpu.uploadPixelDataToTexture(e.getTexture(m.dataId),o);let f=M().getBool("WEBGL_PACK")?new TC(p):new kC(p),d=e.runWebGLProgram(f,[m],"int32");return e.disposeData(m.dataId),d}function Art(r){let{inputs:t,backend:e,attrs:n}=r,{x:o,filter:s,bias:i,preluActivationWeights:a}=t,{strides:u,pad:l,dataFormat:c,dilations:p,dimRoundingMode:m,activation:f,leakyreluAlpha:d}=n,h=S.convertConv2DDataFormat(c),g=S.computeConv2DInfo(o.shape,s.shape,u,p,l,m,!1,h),x,b=[],w=i!=null,C=a!=null,N=f==="leakyrelu",_=()=>{let $=[o,s],F=(P,V)=>{if(V==="NCHW"&&P.shape.length===1&&P.shape[0]!==1){let G=st({inputs:{x:P},backend:e,attrs:{shape:[P.shape[0],1,1]}});return b.push(G),G}return P};if(w&&$.push(F(i,c)),C&&$.push(F(a,c)),N){let P=e.makeTensorInfo([],"float32",y.createScalarValue(d,"float32"));$.push(P),b.push(P)}return $};if(g.filterHeight===1&&g.filterWidth===1&&g.dilationHeight===1&&g.dilationWidth===1&&g.strideHeight===1&&g.strideWidth===1&&(g.padInfo.type==="SAME"||g.padInfo.type==="VALID"))x=uC({x:o,filter:s,convInfo:g,backend:e,bias:i,activation:f,preluActivationWeights:a,leakyreluAlpha:d});else if(g.strideWidth<=2&&h==="channelsLast"&&M().getBool("WEBGL_EXP_CONV")){let $=f?xl(f,!0):null,F=new vd(g,w,$,C,N),P=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],V=_();x=e.runWebGLProgram(F,V,"float32",P)}else if(M().getBool("WEBGL_CONV_IM2COL"))x=cC({x:o,filter:s,convInfo:g,backend:e,bias:i,activation:f,preluActivationWeights:a,leakyreluAlpha:d});else{let $=f?xl(f,!1):null,F=new Id(g,w,$,C,N),P=_();x=e.runWebGLProgram(F,P,"float32")}let A=st({inputs:{x},backend:e,attrs:{shape:g.outShape}});return b.push(x),b.forEach($=>e.disposeIntermediateTensorInfo($)),A}var zz={kernelName:wi,backendName:"webgl",kernelFunc:Art};function $rt(r){let{inputs:t,backend:e,attrs:n}=r,{x:o,filter:s,bias:i,preluActivationWeights:a}=t,{strides:u,pad:l,dilations:c,dimRoundingMode:p,activation:m,leakyreluAlpha:f}=n,d=[],h=c;h==null&&(h=[1,1]),y.assert(S.eitherStridesOrDilationsAreOne(u,h),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${u} and dilations '${h}'`);let g=S.computeConv2DInfo(o.shape,s.shape,u,h,l,p,!0),x=M().getBool("WEBGL_PACK_DEPTHWISECONV")&&g.strideWidth<=2&&g.outChannels/g.inChannels===1,b=m?xl(m,x):null,w=[o,s],C=i!=null,N=a!=null,_=m==="leakyrelu";if(C&&w.push(i),N&&w.push(a),_){let P=e.makeTensorInfo([],"float32",y.createScalarValue(f,"float32"));w.push(P),d.push(P)}let A;x?A=new Nd(g,C,b,N,_):A=new Sd(g,C,b,N,_);let $=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],F=e.runWebGLProgram(A,w,"float32",$);return d.forEach(P=>e.disposeIntermediateTensorInfo(P)),F}var Bz={kernelName:Ci,backendName:"webgl",kernelFunc:$rt};var EC=class{constructor(t,e,n,o){this.sliceDim=t,this.strides=e,this.paramsShape=o,this.variableNames=["x","indices"],this.outputShape=n;let s=zt(n.length),i=`
int index;`;for(let a=0;a<this.sliceDim;a++)i+=`
index = round(getIndices(coords[0], ${a}));
out_of_bounds = out_of_bounds || index < 0;
out_of_bounds = out_of_bounds || index >= ${this.paramsShape[a]};
flattenIndex += index * ${this.strides[a]};`;this.userCode=`
void main() {
${s} coords = getOutputCoords();
int flattenIndex = 0;
bool out_of_bounds = false;
${i}
setOutput(out_of_bounds ? 0.0 : getX(flattenIndex, coords[1]));
}
`}};function Drt(r){let{inputs:t,backend:e}=r,{params:n,indices:o}=t,s=o.shape,i=s[s.length-1],a=y.sizeFromShape(n.shape),[u,l,c,p]=S.prepareAndValidate(n,o),m=st({inputs:{x:o},backend:e,attrs:{shape:[l,i]}}),f=st({inputs:{x:n},backend:e,attrs:{shape:[y.sizeFromShape(n.shape)/c,c]}});if(e.shouldExecuteOnCPU([n,o])||n.dtype==="string"){let x=e.readSync(o.dataId),b=e.bufferSync(n),w=cL(x,b,n.dtype,l,i,c,p,n.shape,a);return e.makeTensorInfo(u,n.dtype,w.values)}let d=new EC(i,p,[l,c],n.shape),h=e.runWebGLProgram(d,[f,m],f.dtype),g=st({inputs:{x:h},backend:e,attrs:{shape:u}});return e.disposeIntermediateTensorInfo(m),e.disposeIntermediateTensorInfo(f),e.disposeIntermediateTensorInfo(h),g}var Vz={kernelName:ya,backendName:"webgl",kernelFunc:Drt};var _C=class{constructor(t,e){this.variableNames=["A","indices"],this.outputShape=e,this.rank=e.length;let n=zt(this.rank),o=Rrt(t,2);this.userCode=`
void main() {
${n} resRC = getOutputCoords();
int index = int(getIndices(resRC.x, resRC.z));
float inBounds = (index >= 0) && (index < ${t[2]}) ? 1.0 : 0.0;
setOutput(inBounds * getA(${o}));
}
`}};function Rrt(r,t){let e=["resRC.x","resRC.y","resRC.z","resRC.w"],n=[];for(let o=0;o<r.length;o++)o===2?n.push("index"):n.push(`${e[o]}`);return n.join()}function gT(r){let{inputs:t,backend:e,attrs:n}=r,{x:o,indices:s}=t,{axis:i,batchDims:a}=n,u=y.parseAxisParam(i,o.shape)[0];if(M().get("DEBUG")){let b=e.readSync(s.dataId),w=o.shape[u];for(let C=0;C<b.length;++C){let N=b[C];y.assert(N<=w-1&&N>=0,()=>`GatherV2: the index value ${N} is not in [0, ${w-1}]`)}}let l=S.segment_util.collectGatherOpShapeInfo(o,s,u,a),c=y.sizeFromShape(s.shape),p=[],m=st({inputs:{x:o},backend:e,attrs:{shape:[l.batchSize,l.outerSize,l.dimSize,l.sliceSize]}}),f=st({inputs:{x:s},backend:e,attrs:{shape:[l.batchSize,c/l.batchSize]}});p.push(m),p.push(f);let d=[l.batchSize,l.outerSize,c/l.batchSize,l.sliceSize];if(e.shouldExecuteOnCPU([o,s])||o.dtype==="string"){let b=e.bufferSync(f),w=e.bufferSync(m),C=pL(w,b,d);return p.forEach(N=>e.disposeIntermediateTensorInfo(N)),e.makeTensorInfo(l.outputShape,C.dtype,C.values)}let h=new _C(m.shape,d),g=e.runWebGLProgram(h,[m,f],m.dtype);p.push(g);let x=st({inputs:{x:g},backend:e,attrs:{shape:l.outputShape}});return p.forEach(b=>e.disposeIntermediateTensorInfo(b)),x}var Gz={kernelName:li,backendName:"webgl",kernelFunc:gT};var Frt="return float(a > b);",Ort=`
return vec4(greaterThan(a, b));
`,Prt=le({opSnippet:Frt,packedOpSnippet:Ort,cpuKernelImpl:mL,dtype:"bool"}),Wz={kernelName:ba,backendName:"webgl",kernelFunc:Prt};var Lrt="return float(a >= b);",Mrt=`
return vec4(greaterThanEqual(a, b));
`,zrt=le({opSnippet:Lrt,packedOpSnippet:Mrt,dtype:"bool",cpuKernelImpl:fL}),Uz={kernelName:os,backendName:"webgl",kernelFunc:zrt};function Brt(r){let{inputs:t,backend:e}=r,{input:n}=t;return vC(n,!0,e)}var Hz={kernelName:Ip,backendName:"webgl",kernelFunc:Brt};var Vrt="return float(!isnan(x) && !isinf(x));",Grt=Ct({opSnippet:Vrt,dtype:"bool"}),qz={kernelName:wa,backendName:"webgl",kernelFunc:Grt};var Wrt="return float(isinf(x));",Urt=Ct({opSnippet:Wrt,dtype:"bool"}),Kz={kernelName:Ca,backendName:"webgl",kernelFunc:Urt};var Hrt="return float(isnan(x));",qrt=Ct({opSnippet:Hrt,dtype:"bool"}),jz={kernelName:Ia,backendName:"webgl",kernelFunc:qrt};var Krt="return float(a < b);",jrt=`
return vec4(lessThan(a, b));
`,Xrt=le({opSnippet:Krt,packedOpSnippet:jrt,cpuKernelImpl:dL,dtype:"bool"}),Xz={kernelName:va,backendName:"webgl",kernelFunc:Xrt};var Yrt="return float(a <= b);",Zrt=`
return vec4(lessThanEqual(a, b));
`,Jrt=le({opSnippet:Yrt,packedOpSnippet:Zrt,cpuKernelImpl:hL,dtype:"bool"}),Yz={kernelName:Sa,backendName:"webgl",kernelFunc:Jrt};function Qrt(r){let{backend:t,attrs:e}=r,{start:n,stop:o,num:s}=e,i=gL(n,o,s);return t.makeTensorInfo([i.length],"float32",i)}var Zz={kernelName:Sp,backendName:"webgl",kernelFunc:Qrt};var tnt=Oo+`
return x < 0.0 ? 0./0. : log(x);
`,ent=`
vec4 result = log(x);
bvec4 isNaN = isnan(x);
result.r = isNaN.r ? x.r : (x.r < 0.0 ? 0./0. : result.r);
result.g = isNaN.g ? x.g : (x.g < 0.0 ? 0./0. : result.g);
result.b = isNaN.b ? x.b : (x.b < 0.0 ? 0./0. : result.b);
result.a = isNaN.a ? x.a : (x.a < 0.0 ? 0./0. : result.a);
return result;
`,rnt=Ct({opSnippet:tnt,packedOpSnippet:ent,cpuKernelImpl:xL}),Jz={kernelName:is,backendName:"webgl",kernelFunc:rnt};var nnt=Oo+`
return log(1.0 + x);
`,ont=Ct({opSnippet:nnt}),Qz={kernelName:Na,backendName:"webgl",kernelFunc:ont};var snt="return float(a >= 1.0 && b >= 1.0);",int=`
return vec4(
vec4(greaterThanEqual(a, vec4(1.0))) *
vec4(greaterThanEqual(b, vec4(1.0))));
`,ant=le({opSnippet:snt,packedOpSnippet:int,dtype:"bool"}),t3={kernelName:ka,backendName:"webgl",kernelFunc:ant};var lnt="return float(!(x >= 1.0));",unt=Ct({opSnippet:lnt}),e3={kernelName:Ta,backendName:"webgl",kernelFunc:unt};var cnt="return float(a >= 1.0 || b >= 1.0);",pnt=`
return min(
vec4(greaterThanEqual(a, vec4(1.0))) +
vec4(greaterThanEqual(b, vec4(1.0))),
vec4(1.0));
`,mnt=le({opSnippet:cnt,packedOpSnippet:pnt,dtype:"bool"}),r3={kernelName:Ea,backendName:"webgl",kernelFunc:mnt};var AC=class{constructor(t,e,n,o,s){this.variableNames=["x"],this.outputShape=[];let i=e,a=t[3]-1;this.outputShape=t;let u,l=`float(${n}) + float(${o}) * sum`;s===.5?u=`inversesqrt(${l})`:s===1?u=`1.0/(${l})`:u=`exp(log(${l}) * float(-${s}));`,this.userCode=`
void main() {
ivec4 coords = getOutputCoords();
int b = coords[0];
int r = coords[1];
int c = coords[2];
int d = coords[3];
float x = getX(b, r, c, d);
float sum = 0.0;
for (int j = -${i}; j <= ${i}; j++) {
int idx = d + j;
if (idx >= 0 && idx <= ${a}) {
float z = getX(b, r, c, idx);
sum += z * z;
}
}
float val = x * ${u};
setOutput(val);
}
`}};var $C=class{constructor(t,e,n,o,s){this.variableNames=["x"],this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0;let i=e,a=t[3]-1;this.outputShape=t;let u,l=`float(${n}) + float(${o}) * sum`;s===.5?u=`inversesqrt(${l})`:s===1?u=`1.0/(${l})`:u=`exp(log(${l}) * float(-${s}));`,this.userCode=`
void main() {
ivec4 coords = getOutputCoords();
int b = coords.x;
int r = coords.y;
int c = coords.z;
int d = coords.w;
bool hasNextCol = d < ${this.outputShape[3]};
bool hasNextRow = c < ${this.outputShape[2]};
vec4 sum = vec4(0.);
vec4 xFragAtOutputCoords = getX(b, r, c, d);
vec4 xAtOutputCoords = vec4(
getChannel(xFragAtOutputCoords, vec2(c, d)),
hasNextCol ?
getChannel(xFragAtOutputCoords, vec2(c, d + 1)) : 0.0,
hasNextRow ?
getChannel(xFragAtOutputCoords , vec2(c + 1, d)) : 0.0,
(hasNextRow && hasNextCol) ?
getChannel(xFragAtOutputCoords, vec2(c + 1, d + 1)) : 0.0
);
int firstChannel = d - ${i};
vec2 cache = vec2(0.);
if(firstChannel >= 0){
vec4 firstChannelFrag = getX(b, r, c, firstChannel);
cache.x = getChannel(firstChannelFrag, vec2(c, firstChannel));
if(hasNextRow){
cache.y = getChannel(firstChannelFrag, vec2(c + 1, firstChannel));
}
}
ivec2 depth = ivec2(d, d + 1);
for (int j = - ${i}; j <= ${i}; j++) {
ivec2 idx = depth + j;
bvec2 aboveLowerBound = greaterThanEqual(idx, ivec2(0));
bvec2 belowUpperBound = lessThanEqual(idx, ivec2(${a}));
bool depthInRange = aboveLowerBound.x && belowUpperBound.x;
bool depthPlusOneInRange = aboveLowerBound.y && belowUpperBound.y;
if(depthInRange || depthPlusOneInRange){
vec4 z = vec4(0.);
vec4 xFragAtCurrentDepth;
z.xz = cache.xy;
if(depthPlusOneInRange && hasNextCol){
xFragAtCurrentDepth = idx.y != d ?
getX(b, r, c, idx.y) : xFragAtOutputCoords;
z.y = getChannel(xFragAtCurrentDepth, vec2(c, idx.y));
if(hasNextRow){
z.w = getChannel(xFragAtCurrentDepth, vec2(c + 1, idx.y));
}
}
cache.xy = z.yw;
sum += z * z;
}
}
vec4 result = xAtOutputCoords * ${u};
setOutput(result);
}
`}};var fnt=r=>{let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{depthRadius:s,bias:i,alpha:a,beta:u}=n,l=M().getBool("WEBGL_PACK_NORMALIZATION")?new $C(o.shape,s,i,a,u):new AC(o.shape,s,i,a,u);return e.runWebGLProgram(l,[o],o.dtype)},n3={kernelName:$l,backendName:"webgl",kernelFunc:fnt};var DC=class{constructor(t,e,n,o,s){this.variableNames=["inputImage","outputImage","dy"],this.outputShape=[],this.outputShape=t,this.depth=t[3],this.depthRadius=e,this.bias=n,this.alpha=o,this.beta=s,this.userCode=`
void main() {
ivec4 coords = getOutputCoords();
int b = coords[0];
int r = coords[1];
int c = coords[2];
float result = 0.0;
for (int d = 0; d < ${this.depth}; ++d) {
int depthBegin = int(max(0.0, float(d - ${e})));
int depthEnd = int(min(float(${this.depth}),
float(d + ${e} + 1)));
const int MIN_DEPTH_BEGIN = 0;
const int MAX_DEPTH_END = ${this.depth};
float norm = 0.0;
for (int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k) {
if (k < depthBegin){
continue;
}
else if (k >= depthBegin && k < depthEnd) {
norm += getInputImage(b, r, c, k) * getInputImage(b, r, c, k);
}
else {
break;
}
}
norm = float(${o}) * norm + float(${n});
for(int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k){
if (k < depthBegin){
continue;
}
else if (k >= depthBegin && k < depthEnd){
float dyi = -2.0 * float(${o})
* float(${s})
* getInputImage(b ,r ,c, k) * getOutputImage(b, r, c, d)
/ norm;
if (k == d) {
dyi += pow(norm, -1.0 * ${s});
}
if (k == coords[3]) {
dyi *= getDy(b, r, c, d);
result += dyi;
}
}
else {
break;
}
}
}
setOutput(result);
}
`}};var dnt=r=>{let{inputs:t,backend:e,attrs:n}=r,{x:o,y:s,dy:i}=t,{depthRadius:a,bias:u,alpha:l,beta:c}=n,p=new DC(o.shape,a,u,l,c);return e.runWebGLProgram(p,[o,s,i],o.dtype)},o3={kernelName:Np,backendName:"webgl",kernelFunc:dnt};function s3(r,t,e,n){let o=y.sizeFromShape(t),i=y.sizeFromShape(r.shape)/o,a=st({inputs:{x:r},attrs:{shape:[i,o]},backend:n}),u=Gn(a,r.dtype,"max",n),l=st({inputs:{x:u},attrs:{shape:e},backend:n});return n.disposeIntermediateTensorInfo(a),n.disposeIntermediateTensorInfo(u),l}function xT(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{reductionIndices:s,keepDims:i}=n,a=o.shape.length,u=y.parseAxisParam(s,o.shape),l=u,c=S.getAxesPermutation(l,a),p=c!=null,m=e.shouldExecuteOnCPU([o]),f=o;if(p){if(m){let w=e.texData.get(f.dataId).values,C=new Array(a);for(let A=0;A<C.length;A++)C[A]=o.shape[c[A]];let N=Vc(w,o.shape,o.dtype,c,C);f=e.makeTensorInfo(C,o.dtype);let _=e.texData.get(f.dataId);_.values=N}else f=_u(o,c,e);l=S.getInnerMostAxes(l.length,a)}S.assertAxesAreInnerMostDims("max",l,a);let[d,h]=S.computeOutAndReduceShapes(f.shape,l),g=d;i&&(g=S.expandShapeToKeepDim(d,u));let x;if(m){let w=e.texData.get(f.dataId).values,C=yL(w,y.sizeFromShape(h),g,o.dtype);x=e.makeTensorInfo(g,o.dtype);let N=e.texData.get(x.dataId);N.values=C}else x=s3(f,h,g,e);return p&&e.disposeIntermediateTensorInfo(f),x}var i3={kernelName:as,backendName:"webgl",kernelFunc:xT};var hnt=bd+`
return max(a, b);
`,gnt=`
vec4 result = vec4(max(a, b));
bvec4 isNaNA = isnan(a);
bvec4 isNaNB = isnan(b);
bvec4 isNaN = bvec4(isNaNA.x || isNaNB.x, isNaNA.y || isNaNB.y, isNaNA.z || isNaNB.z, isNaNA.w || isNaNB.w);
`+ji+`
return result;
`,xnt=le({opSnippet:hnt,packedOpSnippet:gnt,cpuKernelImpl:bL}),a3={kernelName:ls,backendName:"webgl",kernelFunc:xnt};function ynt(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t;Zs(o,"maxPool");let{filterSize:s,strides:i,pad:a,dimRoundingMode:u}=n,l=1;y.assert(S.eitherStridesOrDilationsAreOne(i,l),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${l}'`);let c=S.computePool2DInfo(o.shape,s,i,l,a,u);if(c.filterWidth===1&&c.filterHeight===1&&y.arraysEqual(c.inShape,c.outShape))return tr({inputs:{x:o},backend:e});let p=new Qs(c,"max",!1);return e.runWebGLProgram(p,[o],o.dtype)}var l3={kernelName:us,backendName:"webgl",kernelFunc:ynt};function bnt(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{filterSize:s,strides:i,pad:a,dataFormat:u,dimRoundingMode:l}=n,c=[1,1,1],p=S.computePool3DInfo(o.shape,s,i,c,a,l,u),m=new Au(p,"max",!1);return e.runWebGLProgram(m,[o],o.dtype)}var u3={kernelName:Dl,backendName:"webgl",kernelFunc:bnt};var RC=class{constructor(t){this.variableNames=["dy","maxPos"],this.outputShape=t.inShape;let e=t.strideHeight,n=t.strideWidth,o=t.dilationHeight,s=t.effectiveFilterHeight,i=t.effectiveFilterWidth,a=s-1-t.padInfo.top,u=i-1-t.padInfo.left,l=s*i-1;this.userCode=`
const ivec2 pads = ivec2(${a}, ${u});
void main() {
ivec4 coords = getOutputCoords();
int b = coords[0];
int d = coords[3];
ivec2 dyRCCorner = coords.yz - pads;
int dyRCorner = dyRCCorner.x;
int dyCCorner = dyRCCorner.y;
// Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).
// ? = to be determined. : = across all values in that axis.
float dotProd = 0.0;
for (int wR = 0; wR < ${s};
wR += ${o}) {
float dyR = float(dyRCorner + wR) / ${e}.0;
if (dyR < 0.0 || dyR >= ${t.outHeight}.0 || fract(dyR) > 0.0) {
continue;
}
int idyR = int(dyR);
for (int wC = 0; wC < ${i}; wC++) {
float dyC = float(dyCCorner + wC) / ${n}.0;
if (dyC < 0.0 || dyC >= ${t.outWidth}.0 ||
fract(dyC) > 0.0) {
continue;
}
int idyC = int(dyC);
float dyValue = getDy(b, idyR, idyC, d);
int maxPosValue = ${l} - int(getMaxPos(b, idyR, idyC, d));
// Get the current value, check it against the value from the
// position matrix.
int curPosValue = wR * ${i} + wC;
float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);
dotProd += dyValue * mask;
}
}
setOutput(dotProd);
}
`}},FC=class{constructor(t){this.variableNames=["dy","maxPos"],this.outputShape=t.inShape;let e=t.strideDepth,n=t.strideHeight,o=t.strideWidth,s=t.dilationDepth,i=t.dilationHeight,a=t.dilationWidth,u=t.effectiveFilterDepth,l=t.effectiveFilterHeight,c=t.effectiveFilterWidth,p=u-1-t.padInfo.front,m=l-1-t.padInfo.top,f=c-1-t.padInfo.left,d=u*l*c-1;this.userCode=`
const ivec3 pads = ivec3(${p}, ${m}, ${f});
void main() {
ivec5 coords = getOutputCoords();
int batch = coords.x;
int ch = coords.u;
ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;
int dyDCorner = dyCorner.x;
int dyRCorner = dyCorner.y;
int dyCCorner = dyCorner.z;
// Convolve dy(?, ?, ?, ch) with pos mask(:, :, :, d) to get
// dx(xD, xR, xC, ch).
// ? = to be determined. : = across all values in that axis.
float dotProd = 0.0;
for (int wD = 0; wD < ${u};
wD += ${s}) {
float dyD = float(dyDCorner + wD) / ${e}.0;
if (dyD < 0.0 || dyD >= ${t.outDepth}.0 || fract(dyD) > 0.0) {
continue;
}
int idyD = int(dyD);
for (int wR = 0; wR < ${l};
wR += ${i}) {
float dyR = float(dyRCorner + wR) / ${n}.0;
if (dyR < 0.0 || dyR >= ${t.outHeight}.0 ||
fract(dyR) > 0.0) {
continue;
}
int idyR = int(dyR);
for (int wC = 0; wC < ${c};
wC += ${a}) {
float dyC = float(dyCCorner + wC) / ${o}.0;
if (dyC < 0.0 || dyC >= ${t.outWidth}.0 ||
fract(dyC) > 0.0) {
continue;
}
int idyC = int(dyC);
float dyValue = getDy(batch, idyD, idyR, idyC, ch);
int maxPosValue = ${d} -
int(getMaxPos(batch, idyD, idyR, idyC, ch));
// Get the current value, check it against the value from the
// position matrix.
int curPosValue =
wD * ${l} * ${c} +
wR * ${c} + wC;
float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);
dotProd += dyValue * mask;
}
}
}
setOutput(dotProd);
}
`}};function wnt(r){let{inputs:t,backend:e,attrs:n}=r,{dy:o,input:s}=t,i=s,{filterSize:a,strides:u,pad:l,dimRoundingMode:c}=n,p=[1,1,1],m=S.computePool3DInfo(i.shape,a,u,p,l,c),f=new Au(m,"max",!0),d=e.runWebGLProgram(f,[i],i.dtype),h=new FC(m),g=e.runWebGLProgram(h,[o,d],i.dtype);return e.disposeIntermediateTensorInfo(d),g}var c3={kernelName:Tp,backendName:"webgl",kernelFunc:wnt};function Cnt(r){let{inputs:t,backend:e,attrs:n}=r,{dy:o,input:s,output:i}=t,a=s;Zs([s,i],"maxPoolGrad");let{filterSize:u,strides:l,pad:c,dimRoundingMode:p}=n,m=S.computePool2DInfo(a.shape,u,l,1,c,p),f=!0,d=new Qs(m,"max",f),h=e.runWebGLProgram(d,[a],a.dtype),g=new RC(m),x=e.runWebGLProgram(g,[o,h],a.dtype);return e.disposeIntermediateTensorInfo(h),x}var p3={kernelName:kp,backendName:"webgl",kernelFunc:Cnt};function m3(r,t,e,n){let o=new Qs(e,"max",!1),s=n.runWebGLProgram(o,[r],"float32");o=new Qs(e,"max",!0,!0,t);let i=n.runWebGLProgram(o,[r],"float32");return[s,i]}var f3={kernelName:Ep,backendName:"webgl",kernelFunc:({inputs:r,attrs:t,backend:e})=>{let{x:n}=r,{filterSize:o,strides:s,pad:i,includeBatchInIndex:a}=t,u=e;y.assert(n.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${n.shape.length}.`);let l=[1,1];y.assert(S.eitherStridesOrDilationsAreOne(s,l),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${l}'`);let c=S.computePool2DInfo(n.shape,o,s,l,i),[p,m]=m3(n,a,c,u);return[p,m]}};function d3(r,t,e,n){let o=y.sizeFromShape(t),i=y.sizeFromShape(r.shape)/o,a=st({inputs:{x:r},attrs:{shape:[i,o]},backend:n}),u=Gn(a,"float32","mean",n),l=st({inputs:{x:u},attrs:{shape:e},backend:n});return n.disposeIntermediateTensorInfo(a),n.disposeIntermediateTensorInfo(u),l}var h3={kernelName:cs,backendName:"webgl",kernelFunc:({inputs:r,attrs:t,backend:e})=>{let{x:n}=r,{keepDims:o,axis:s}=t,i=e,a=n.shape.length,u=y.parseAxisParam(s,n.shape),l=u,c=S.getAxesPermutation(l,a),p=c!=null,m=i.shouldExecuteOnCPU([n]),f=[],d=n;if(p){if(m){let C=i.texData.get(d.dataId).values,N=new Array(a);for(let $=0;$<N.length;$++)N[$]=n.shape[c[$]];let _=Vc(C,n.shape,n.dtype,c,N);d=i.makeTensorInfo(N,n.dtype);let A=i.texData.get(d.dataId);A.values=_}else d=_u(n,c,i);f.push(d),l=S.getInnerMostAxes(l.length,a)}S.assertAxesAreInnerMostDims("sum",l,a);let[h,g]=S.computeOutAndReduceShapes(d.shape,l),x=h;o&&(x=S.expandShapeToKeepDim(h,u));let b=d3(d,g,x,i);for(let w of f)i.disposeIntermediateTensorInfo(w);return b}};function Int(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{axis:s,keepDims:i}=n,a=o.shape.length,u=y.parseAxisParam(s,o.shape),l=u,c=S.getAxesPermutation(l,a),p=o;c!=null&&(p=Fe({inputs:{x:o},backend:e,attrs:{perm:c}}),l=S.getInnerMostAxes(l.length,o.shape.length)),S.assertAxesAreInnerMostDims("min",l,a);let[m,f]=S.computeOutAndReduceShapes(p.shape,l),d=y.sizeFromShape(f),h=st({inputs:{x:p},backend:e,attrs:{shape:[-1,d]}}),g=Gn(h,h.dtype,"min",e),x;if(i){let b=S.expandShapeToKeepDim(m,u);x=st({inputs:{x:g},backend:e,attrs:{shape:b}})}else x=st({inputs:{x:g},backend:e,attrs:{shape:m}});return e.disposeIntermediateTensorInfo(h),e.disposeIntermediateTensorInfo(g),c!=null&&e.disposeIntermediateTensorInfo(p),x}var g3={kernelName:ps,backendName:"webgl",kernelFunc:Int};var vnt=bd+`
return min(a, b);
`,Snt=`
vec4 result = vec4(min(a, b));
bvec4 isNaNA = isnan(a);
bvec4 isNaNB = isnan(b);
bvec4 isNaN = bvec4(isNaNA.x || isNaNB.x, isNaNA.y || isNaNB.y, isNaNA.z || isNaNB.z, isNaNA.w || isNaNB.w);
`+ji+`
return result;
`,Nnt=le({opSnippet:vnt,packedOpSnippet:Snt,cpuKernelImpl:wL}),x3={kernelName:ms,backendName:"webgl",kernelFunc:Nnt};var OC=class{constructor(t,e,n){this.variableNames=["x"],this.outputShape=e.map((c,p)=>c[0]+t[p]+c[1]);let o=t.length,s=zt(o),i=e.map(c=>c[0]).join(","),a=e.map((c,p)=>c[0]+t[p]).join(","),u=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,o),l=n==="reflect"?0:1;if(o===1){this.userCode=`
int start = ${i};
int end = ${a};
void main() {
int outC = getOutputCoords();
if (outC < start) {
outC = start * 2 - outC - ${l};
} else if(outC >= end) {
outC = (end - 1) * 2 - outC + ${l};
}
setOutput(getX(outC - start));
}
`;return}this.userCode=`
${s} start = ${s}(${i});
${s} end = ${s}(${a});
void main() {
${s} outC = getOutputCoords();
for (int i = 0; i < ${o}; i++) {
if (outC[i] < start[i]) {
outC[i] = start[i] * 2 - outC[i] - ${l};
} else if(outC[i] >= end[i]) {
outC[i] = (end[i] - 1) * 2 - outC[i] + ${l};
}
}
${s} coords = outC - start;
setOutput(getX(${u}));
}
`}};var PC=class{constructor(t,e,n){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e.map((d,h)=>d[0]+t[h]+d[1]);let o=t.length,s=zt(o),i=e.map(d=>d[0]).join(","),a=e.map((d,h)=>d[0]+t[h]).join(","),u=Qe("rc",o),l=Qe("source",o),c=`${u[o-1]} < ${this.outputShape[o-1]}`,p=o===1?"source":`vec2(${l.slice(-2).join()})`,m=n==="reflect"?0:1,f="";if(o===1){let d=`
${s} source = rc;
if (source < start) {
source = start * 2 - source - ${m};
} else if (source >= end) {
source = (end - 1) * 2 - source + ${m};
}
source -= start;
`;f=`
${s} rc = outputLoc;
${d}
result[0] = getChannel(getX(${l.join()}), ${p});
${u[o-1]} += 1;
if(${c}) {
${d}
result[1] = getChannel(getX(${l.join()}), ${p});
}
`}else{let d=`
${s} source = rc;
${s} lt = ${s}(lessThan(source, start));
${s} gte = ${s}(greaterThanEqual(source, end));
${s} orig = 1 - (lt + gte);
source = orig * source +
lt * (start * 2 - source - ${m}) +
gte * ((end - 1) * 2 - source + ${m});
source -= start;
`;f=`
${s} rc = outputLoc;
${d}
result[0] = getChannel(getX(${l.join()}), ${p});
${u[o-1]} += 1;
if(${c}) {
${d}
result[1] = getChannel(getX(${l.join()}), ${p});
}
rc = outputLoc;
${u[o-2]} += 1;
if(${u[o-2]} < ${this.outputShape[o-2]}) {
${d}
result[2] = getChannel(getX(${l.join()}), ${p});
${u[o-1]} += 1;
if(${c}) {
${d}
result[3] = getChannel(getX(${l.join()}), ${p});
}
}
`}this.userCode=`
const ${s} start = ${s}(${i});
const ${s} end = ${s}(${a});
void main() {
${s} outputLoc = getOutputCoords();
vec4 result = vec4(0.);
${f}
setOutput(result);
}
`}};var knt=({inputs:r,backend:t,attrs:e})=>{let{x:n}=r,{paddings:o,mode:s}=e,i=M().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new PC(n.shape,o,s):new OC(n.shape,o,s);return t.runWebGLProgram(i,[n],n.dtype)},y3={kernelName:fs,backendName:"webgl",kernelFunc:knt};var Tnt=`if (b == 0.0) return NAN;
return mod(a, b);`,Ent=`
vec4 result = mod(a, b);
bvec4 isNaN = equal(b, vec4(0.0));
`+ji+`
return result;
`,_nt=le({opSnippet:Tnt,packedOpSnippet:Ent}),b3={kernelName:_a,backendName:"webgl",kernelFunc:_nt};var LC=class{constructor(t,e,n){this.variableNames=["probs"],this.customUniforms=[{name:"seed",type:"float"}],this.outputShape=[t,n],this.userCode=`
void main() {
ivec2 coords = getOutputCoords();
int batch = coords[0];
float r = random(seed);
float cdf = 0.0;
for (int i = 0; i < ${e-1}; i++) {
cdf += getProbs(batch, i);
if (r < cdf) {
setOutput(float(i));
return;
}
}
// If no other event happened, last event happened.
setOutput(float(${e-1}));
}
`}};var Ant=`
if (a == b) {
return 1.0;
};
return a / b;`,$nt=`
// vec4 one = vec4(equal(a, b));
// return one + (vec4(1.0) - one) * a / b;
vec4 result = a / b;
if(a.x == b.x) {
result.x = 1.;
}
if(a.y == b.y) {
result.y = 1.;
}
if(a.z == b.z) {
result.z = 1.;
}
if(a.w == b.w) {
result.w = 1.;
}
return result;
`,yT=le({opSnippet:Ant,packedOpSnippet:$nt,checkOutOfBounds:!0}),w3={kernelName:Jo,backendName:"webgl",kernelFunc:yT};var C3="return a - b;",bT=le({opSnippet:C3,packedOpSnippet:C3,supportsComplex:!0,cpuKernelImpl:zL}),I3={kernelName:Rs,backendName:"webgl",kernelFunc:bT};function wT(r){let{inputs:t,backend:e,attrs:n}=r,{logits:o}=t,{dim:s}=n,i=y.parseAxisParam([s],o.shape),a=xT({inputs:{x:o},backend:e,attrs:{reductionIndices:i,keepDims:!1}}),u=S.expandShapeToKeepDim(a.shape,i),l=st({inputs:{x:a},backend:e,attrs:{shape:u}}),c=bT({inputs:{a:o,b:l},backend:e}),p=dT({inputs:{x:c},backend:e}),m=Wc({inputs:{x:p},backend:e,attrs:{axis:i,keepDims:!1}}),f=st({inputs:{x:m},backend:e,attrs:{shape:u}}),d=yT({inputs:{a:p,b:f},backend:e});return e.disposeIntermediateTensorInfo(a),e.disposeIntermediateTensorInfo(l),e.disposeIntermediateTensorInfo(c),e.disposeIntermediateTensorInfo(p),e.disposeIntermediateTensorInfo(m),e.disposeIntermediateTensorInfo(f),d}var v3={kernelName:$s,backendName:"webgl",kernelFunc:wT};function Dnt(r){let{inputs:t,backend:e,attrs:n}=r,{logits:o}=t,{numSamples:s,seed:i,normalized:a}=n,u=a?o:wT({inputs:{logits:o},backend:e,attrs:{dim:o.shape.length-1}}),l=u.shape[0],c=u.shape[1],p=new LC(l,c,s),m=[[i]],f=e.runWebGLProgram(p,[u],"int32",m);return a||e.disposeIntermediateTensorInfo(u),f}var S3={kernelName:_p,backendName:"webgl",kernelFunc:Dnt};var Rnt=pr+`
return -x;
`,Fnt=`
vec4 result = -x;
bvec4 isNaN = isnan(x);
result.r = isNaN.r ? x.r : result.r;
result.g = isNaN.g ? x.g : result.g;
result.b = isNaN.b ? x.b : result.b;
result.a = isNaN.a ? x.a : result.a;
return result;
`;function Ont(r){let{inputs:t,backend:e}=r,{x:n}=t;if(e.shouldExecuteOnCPU([n])){let s=e.texData.get(n.dataId),[i,a]=IL(s.values,n.shape,n.dtype);return e.makeTensorInfo(a,n.dtype,i)}let o;return M().getBool("WEBGL_PACK_UNARY_OPERATIONS")?o=new no(n.shape,Fnt):o=new tn(n.shape,Rnt),e.runWebGLProgram(o,[n],n.dtype)}var N3={kernelName:ui,backendName:"webgl",kernelFunc:Ont};var Pnt=Wr.nonMaxSuppressionV3Impl;function Lnt(r){S.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:e,attrs:n}=r,{boxes:o,scores:s}=t,{maxOutputSize:i,iouThreshold:a,scoreThreshold:u}=n,l=e.readSync(o.dataId),c=e.readSync(s.dataId),{selectedIndices:p}=Pnt(l,c,i,a,u);return e.makeTensorInfo([p.length],"int32",new Int32Array(p))}var k3={kernelName:$a,backendName:"webgl",kernelFunc:Lnt};var Mnt=Wr.nonMaxSuppressionV4Impl;function znt(r){S.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:e,attrs:n}=r,{boxes:o,scores:s}=t,{maxOutputSize:i,iouThreshold:a,scoreThreshold:u,padToMaxOutputSize:l}=n,c=e.readSync(o.dataId),p=e.readSync(s.dataId),{selectedIndices:m,validOutputs:f}=Mnt(c,p,i,a,u,l);return[e.makeTensorInfo([m.length],"int32",new Int32Array(m)),e.makeTensorInfo([],"int32",new Int32Array([f]))]}var T3={kernelName:Da,backendName:"webgl",kernelFunc:znt};var Bnt=Wr.nonMaxSuppressionV5Impl;function Vnt(r){S.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:e,attrs:n}=r,{boxes:o,scores:s}=t,{maxOutputSize:i,iouThreshold:a,scoreThreshold:u,softNmsSigma:l}=n,c=e.readSync(o.dataId),p=e.readSync(s.dataId),m=i,f=a,d=u,h=l,{selectedIndices:g,selectedScores:x}=Bnt(c,p,m,f,d,h);return[e.makeTensorInfo([g.length],"int32",new Int32Array(g)),e.makeTensorInfo([x.length],"float32",new Float32Array(x))]}var E3={kernelName:Ra,backendName:"webgl",kernelFunc:Vnt};var MC=class{constructor(t,e,n,o){this.variableNames=["indices"],this.outputShape=[t,e],this.userCode=`
void main() {
ivec2 coords = getOutputCoords();
int index = round(getIndices(coords.x));
setOutput(mix(float(${o}), float(${n}),
float(index == coords.y)));
}
`}};var Gnt=r=>{let{inputs:t,backend:e,attrs:n}=r,{indices:o}=t,{dtype:s,depth:i,onValue:a,offValue:u}=n,l=y.sizeFromShape(o.shape),c=new MC(l,i,a,u),p=st({inputs:{x:o},backend:e,attrs:{shape:[l]}}),m=e.runWebGLProgram(c,[p],s);e.disposeIntermediateTensorInfo(p);let f=[...o.shape,i],d=st({inputs:{x:m},backend:e,attrs:{shape:f}});return e.disposeIntermediateTensorInfo(m),d},_3={kernelName:hs,backendName:"webgl",kernelFunc:Gnt};function tg(r){let{inputs:t,backend:e}=r,{x:n}=t;if(n.dtype==="complex64"){let o=yl({inputs:{input:n},backend:e}),s=tg({inputs:{x:o},backend:e}),i=Hc({inputs:{input:n},backend:e}),a=tg({inputs:{x:i},backend:e}),u=Tn({inputs:{real:s,imag:a},backend:e});return e.disposeIntermediateTensorInfo(o),e.disposeIntermediateTensorInfo(s),e.disposeIntermediateTensorInfo(i),e.disposeIntermediateTensorInfo(a),u}else return bl({attrs:{shape:n.shape,dtype:n.dtype,value:n.dtype==="string"?"":0},backend:e})}var A3={kernelName:yi,backendName:"webgl",kernelFunc:tg};function $3(r){let{inputs:t,backend:e}=r,{x:n}=t;if(n.dtype==="string")throw new Error("onesLike is not supported under string dtype");if(n.dtype==="complex64"){let o=yl({inputs:{input:n},backend:e}),s=$3({inputs:{x:o},backend:e}),i=Hc({inputs:{input:n},backend:e}),a=tg({inputs:{x:i},backend:e}),u=Tn({inputs:{real:s,imag:a},backend:e});return e.disposeIntermediateTensorInfo(o),e.disposeIntermediateTensorInfo(s),e.disposeIntermediateTensorInfo(i),e.disposeIntermediateTensorInfo(a),u}else return bl({attrs:{shape:n.shape,dtype:n.dtype,value:1},backend:e})}var D3={kernelName:ci,backendName:"webgl",kernelFunc:$3};function Wnt(r){let{inputs:t,backend:e,attrs:n}=r,{axis:o}=n;if(t.length===1)return IC({inputs:{input:t[0]},backend:e,attrs:{dim:o}});let s=t[0].shape,i=t[0].dtype;t.forEach(c=>{y.assertShapesMatch(s,c.shape,"All tensors passed to stack must have matching shapes"),y.assert(i===c.dtype,()=>"All tensors passed to stack must have matching dtypes")});let a=[],u=t.map(c=>{let p=IC({inputs:{input:c},backend:e,attrs:{dim:o}});return a.push(p),p}),l=fT({inputs:u,backend:e,attrs:{axis:o}});return a.forEach(c=>e.disposeIntermediateTensorInfo(c)),l}var R3={kernelName:pi,backendName:"webgl",kernelFunc:Wnt};var zC=class{constructor(t,e,n){this.variableNames=["x"],this.customUniforms=[{name:"value",type:"float"}],this.outputShape=e.map((l,c)=>l[0]+t[c]+l[1]);let o=t.length,s=zt(o),i=e.map(l=>l[0]).join(","),a=e.map((l,c)=>l[0]+t[c]).join(","),u=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,o);if(o===1){this.userCode=`
int start = ${i};
int end = ${a};
void main() {
int outC = getOutputCoords();
if (outC < start || outC >= end) {
setOutput(value);
} else {
setOutput(getX(outC - start));
}
}
`;return}this.userCode=`
${s} start = ${s}(${i});
${s} end = ${s}(${a});
void main() {
${s} outC = getOutputCoords();
if (any(lessThan(outC, start)) || any(greaterThanEqual(outC, end))) {
setOutput(value);
} else {
${s} coords = outC - start;
setOutput(getX(${u}));
}
}
`}};var BC=class{constructor(t,e,n){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"value",type:"float"}],this.outputShape=e.map((h,g)=>h[0]+t[g]+h[1]);let o=t.length,s=zt(o),i=e.map(h=>h[0]).join(","),a=e.map((h,g)=>h[0]+t[g]).join(","),u=Qe("rc",o),l=Qe("source",o),c=`${u[o-1]} < ${this.outputShape[o-1]}`,p=o===1?"source":`vec2(${l.slice(-2).join()})`,m=[`${s} rc = outputLoc;`,`${u[o-1]} += 1;
if(${c}) {
`,o===1?"":`}
rc = outputLoc;
${u[o-2]} += 1;
if(${u[o-2]} < ${this.outputShape[o-2]}) {`,o===1?"":` ${u[o-1]} += 1;
if(${c}) {`],f=o===1?"rc < start || rc >= end":"any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))",d="";for(let h=0,g=o===1?2:4;h<g;h++)d+=`
${m[h]}
if (${f}) {
result[${h}] = float(value);
} else {
${s} source = rc - start;
result[${h}] = getChannel(getX(${l.join()}), ${p});
}
`;d+=o===1?"} ":"}}",this.userCode=`
const ${s} start = ${s}(${i});
const ${s} end = ${s}(${a});
void main() {
${s} outputLoc = getOutputCoords();
vec4 result = vec4(0.);
${d}
setOutput(result);
}
`}};var CT=r=>{let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{paddings:s,constantValue:i}=n;if(y.sizeFromShape(o.shape)===0){let l=s.map((c,p)=>c[0]+o.shape[p]+c[1]);return bl({backend:e,attrs:{shape:l,value:i,dtype:o.dtype}})}let a=M().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new BC(o.shape,s,i):new zC(o.shape,s,i),u=[[i]];return e.runWebGLProgram(a,[o],o.dtype,u)},F3={kernelName:gs,backendName:"webgl",kernelFunc:CT};var Unt=`
if(a < 0.0 && floor(b) < b){
return NAN;
}
if (b == 0.0) {
return 1.0;
}
return (round(mod(b, 2.0)) != 1) ?
pow(abs(a), b) : sign(a) * pow(abs(a), b);
`,Hnt=`
// isModRound1 has 1 for components with round(mod(b, 2.0)) == 1, 0 otherwise.
vec4 isModRound1 = vec4(equal(round(mod(b, 2.0)), ivec4(1)));
vec4 multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1);
vec4 result = multiplier * pow(abs(a), b);
// Ensure that a^0 = 1, including 0^0 = 1 as this correspond to TF and JS
bvec4 isExpZero = equal(b, vec4(0.0));
result.r = isExpZero.r ? 1.0 : result.r;
result.g = isExpZero.g ? 1.0 : result.g;
result.b = isExpZero.b ? 1.0 : result.b;
result.a = isExpZero.a ? 1.0 : result.a;
bvec4 isNaN1 = lessThan(a, vec4(0.0));
bvec4 isNaN2 = lessThan(floor(b), b);
bvec4 isNaN = bvec4(isNaN1.x && isNaN2.x, isNaN1.y && isNaN2.y, isNaN1.z && isNaN2.z, isNaN1.w && isNaN2.w);
`+ji+`
return result;
`,qnt=le({opSnippet:Unt,packedOpSnippet:Hnt}),O3={kernelName:xs,backendName:"webgl",kernelFunc:qnt};function Knt(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{axis:s,keepDims:i}=n,a=o.shape.length,u=[],l=y.parseAxisParam(s,o.shape),c=l,p=S.getAxesPermutation(c,a),m=o;p!=null&&(m=Fe({inputs:{x:o},backend:e,attrs:{perm:p}}),c=S.getInnerMostAxes(c.length,a),u.push(m)),S.assertAxesAreInnerMostDims("prod",c,a);let f;if(e.shouldExecuteOnCPU([m])){let d=e.texData.get(m.dataId).values,{outVals:h,outShape:g,outDtype:x}=SL(m.shape,m.dtype,d,c);f=e.makeTensorInfo(g,x,h)}else{let[d,h]=S.computeOutAndReduceShapes(m.shape,c),g=y.sizeFromShape(h),x=st({inputs:{x:m},backend:e,attrs:{shape:[-1,g]}}),b=Gu(o.dtype),w=Gn(x,b,"prod",e);f=st({inputs:{x:w},backend:e,attrs:{shape:d}}),u.push(x),u.push(w)}if(i){u.push(f);let d=S.expandShapeToKeepDim(f.shape,l);f=st({inputs:{x:f},backend:e,attrs:{shape:d}})}return u.forEach(d=>e.disposeIntermediateTensorInfo(d)),f}var P3={kernelName:bs,backendName:"webgl",kernelFunc:Knt};function jnt(r){let{inputs:t,backend:e,attrs:n}=r,{paramsNestedSplits:o,paramsDenseValues:s,indices:i}=t,{outputRaggedRank:a}=n,u=o.map(x=>e.readSync(x.dataId)),l=o.map(x=>x.shape),c=e.readSync(s.dataId),p=e.readSync(i.dataId),[m,f,d]=NL(u,l,c,s.shape,s.dtype,p,i.shape,a),h=m.map(x=>e.makeTensorInfo([x.length],"int32",x)),g=e.makeTensorInfo(d,s.dtype,f);return h.concat([g])}var L3={kernelName:Ap,backendName:"webgl",kernelFunc:jnt};function Xnt(r){let{inputs:t,backend:e,attrs:n}=r,{shape:o,values:s,defaultValue:i,rowPartitionTensors:a}=t,{rowPartitionTypes:u}=n,l=e.readSync(o.dataId),c=e.readSync(s.dataId),p=e.readSync(i.dataId),m=a.map(g=>e.readSync(g.dataId)),f=a.map(g=>g.shape),[d,h]=kL(l,o.shape,c,s.shape,s.dtype,p,i.shape,m,f,u);return e.makeTensorInfo(d,s.dtype,h)}var M3={kernelName:$p,backendName:"webgl",kernelFunc:Xnt};var IT=r=>{let{backend:t,attrs:e}=r,{start:n,stop:o,step:s,dtype:i}=e,a=TL(n,o,s,i);return t.makeTensorInfo([a.length],i,a)},z3={kernelName:Rl,backendName:"webgl",kernelFunc:IT};var Ynt="return 1.0 / x;",Znt=Ct({opSnippet:Ynt}),B3={kernelName:Fa,backendName:"webgl",kernelFunc:Znt};var Jnt=pr+`
return (x < 0.0) ? 0.0 : x;
`,Qnt=`
vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0)));
bvec4 isNaN = isnan(x);
result.r = isNaN.r ? x.r : result.r;
result.g = isNaN.g ? x.g : result.g;
result.b = isNaN.b ? x.b : result.b;
result.a = isNaN.a ? x.a : result.a;
return result;
`,tot=Ct({opSnippet:Jnt,packedOpSnippet:Qnt}),V3={kernelName:ws,backendName:"webgl",kernelFunc:tot};var eot=pr+`
return (x < 0.0) ? 0.0 : min(6.0, x);
`,rot=`
vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0)));
bvec4 isNaN = isnan(x);
result.r = isNaN.r ? x.r : result.r;
result.g = isNaN.g ? x.g : result.g;
result.b = isNaN.b ? x.b : result.b;
result.a = isNaN.a ? x.a : result.a;
return result;
`,not=Ct({opSnippet:eot,packedOpSnippet:rot}),G3={kernelName:vs,backendName:"webgl",kernelFunc:not};var VC=class{constructor(t,e,n,o,s){this.variableNames=["A"],this.outputShape=[];let[i,a,u,l]=t;this.outputShape=[i,e,n,l];let c=[o&&e>1?a-1:a,o&&n>1?u-1:u],p=[o&&e>1?e-1:e,o&&n>1?n-1:n],m;s?m="(vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC - vec2(0.5)":m="vec2(yRC) * effectiveInputOverOutputRatioRC",this.userCode=`
const vec2 effectiveInputOverOutputRatioRC = vec2(
${c[0]/p[0]},
${c[1]/p[1]});
const vec2 inputShapeRC = vec2(${a}.0, ${u}.0);
void main() {
ivec4 coords = getOutputCoords();
int b = coords[0];
int d = coords[3];
ivec2 yRC = coords.yz;
// Fractional source index.
vec2 sourceFracIndexRC = ${m};
// Compute the four integer indices.
ivec2 sourceFloorRC = ivec2(max(sourceFracIndexRC, vec2(0.0)));
ivec2 sourceCeilRC = ivec2(
min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));
float topLeft = getA(b, sourceFloorRC.x, sourceFloorRC.y, d);
float bottomLeft = getA(b, sourceCeilRC.x, sourceFloorRC.y, d);
float topRight = getA(b, sourceFloorRC.x, sourceCeilRC.y, d);
float bottomRight = getA(b, sourceCeilRC.x, sourceCeilRC.y, d);
vec2 fracRC = sourceFracIndexRC - vec2(sourceFloorRC);
float top = topLeft + (topRight - topLeft) * fracRC.y;
float bottom = bottomLeft + (bottomRight - bottomLeft) * fracRC.y;
float newValue = top + (bottom - top) * fracRC.x;
setOutput(newValue);
}
`}};var GC=class{constructor(t,e,n,o,s){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[i,a,u,l]=t;this.outputShape=[i,e,n,l];let c=[o&&e>1?a-1:a,o&&n>1?u-1:u],p=[o&&e>1?e-1:e,o&&n>1?n-1:n],m;s?m="(vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC - vec3(0.5)":m="vec3(yRC) * effectiveInputOverOutputRatioRC",this.userCode=`
const vec3 effectiveInputOverOutputRatioRC = vec3(
${c[0]/p[0]},
${c[1]/p[1]},
${c[1]/p[1]});
const vec3 inputShapeRC = vec3(${a}.0, ${u}.0,
${u}.0);
float getAValue(int b, int r, int c, int d) {
return getChannel(getA(b, r, c, d), vec2(c, d));
}
void main() {
ivec4 coords = getOutputCoords();
int b = coords[0];
int d = coords[3];
// Calculate values for next column in yRC.z.
ivec3 yRC = coords.yzz + ivec3(0, 0, 1);
// Fractional source index.
vec3 sourceFracIndexRC = ${m};
// Compute the four integer indices.
ivec3 sourceFloorRC = ivec3(max(sourceFracIndexRC, vec3(0.0)));
ivec3 sourceCeilRC = ivec3(
min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));
// Should we calculate next column and row elements in 2x2 packed cell.
bool hasNextCol = d < ${l-1};
bool hasNextRow = coords.z < ${n-1};
// In parallel, construct four corners for all four components in
// packed 2x2 cell.
vec4 topLeft = vec4(
getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d),
hasNextCol ? getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d + 1)
: 0.0,
hasNextRow ? getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d)
: 0.0,
(hasNextRow && hasNextCol) ?
getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d + 1) : 0.0);
vec4 bottomLeft = vec4(
getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d),
hasNextCol ? getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d + 1)
: 0.0,
hasNextRow ? getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d)
: 0.0,
(hasNextRow && hasNextCol) ?
getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d + 1) : 0.0);
vec4 topRight = vec4(
getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d),
hasNextCol ? getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d + 1)
: 0.0,
hasNextRow ? getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d)
: 0.0,
(hasNextRow && hasNextCol) ?
getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d + 1) : 0.0);
vec4 bottomRight = vec4(
getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d),
hasNextCol ? getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d + 1)
: 0.0,
hasNextRow ? getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d)
: 0.0,
(hasNextRow && hasNextCol) ?
getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d + 1) : 0.0);
vec3 fracRC = sourceFracIndexRC - vec3(sourceFloorRC);
vec4 top = mix(topLeft, topRight, fracRC.yyzz);
vec4 bottom = mix(bottomLeft, bottomRight, fracRC.yyzz);
vec4 newValue = mix(top, bottom, fracRC.x);
setOutput(newValue);
}
`}};function oot(r){let{inputs:t,backend:e,attrs:n}=r,{images:o}=t,{alignCorners:s,halfPixelCenters:i,size:a}=n,[u,l]=a,c=M().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new GC(o.shape,u,l,s,i):new VC(o.shape,u,l,s,i);return e.runWebGLProgram(c,[o],"float32")}var W3={kernelName:Is,backendName:"webgl",kernelFunc:oot};var WC=class{constructor(t,e,n){this.variableNames=["dy"],this.outputShape=[],this.outputShape=e;let[,o,s]=e,[,i,a]=t,u=[n&&i>1?o-1:o,n&&a>1?s-1:s],l=[n&&i>1?i-1:i,n&&a>1?a-1:a],c=u[0]/l[0],p=u[1]/l[1],m=1/c,f=1/p,d=Math.ceil(m)*2+2,h=Math.ceil(f)*2+2;this.userCode=`
void main() {
ivec4 coords = getOutputCoords();
int b = coords[0];
int d = coords[3];
int r = coords[1];
int c = coords[2];
float accumulator = 0.0;
const float heightScale = float(${c});
const float widthScale = float(${p});
const float invHeightScale = float(${m});
const float invWidthScale = float(${f});
const int winHeight = int(${d});
const int winWidth = int(${h});
// Compute bounds for where in dy we will look
float startRLerp = floor(float(r) * invHeightScale);
int startDyR = int(startRLerp - float(winHeight / 2));
float startCLerp = floor(float(c) * invWidthScale);
int startDyC = int(startCLerp - float(winWidth / 2));
// Loop over dy
for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) {
int dyR = dyROffset + startDyR;
// Guard against the window exceeding the bounds of dy
if (dyR < 0 || dyR >= ${i}) {
continue;
}
for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) {
int dyC = dyCOffset + startDyC;
// Guard against the window exceeding the bounds of dy
if (dyC < 0 || dyC >= ${a}) {
continue;
}
float dxR = float(dyR) * heightScale;
int topDxRIndex = int(floor(dxR));
int bottomDxRIndex = int(min(ceil(dxR), ${o-1}.0));
float dxRLerp = dxR - float(topDxRIndex);
float inverseDxRLerp = 1.0 - dxRLerp;
float dxC = float(dyC) * widthScale;
int leftDxCIndex = int(floor(dxC));
int rightDxCIndex = int(min(ceil(dxC), ${s-1}.0));
float dxCLerp = dxC - float(leftDxCIndex);
float inverseDxCLerp = 1.0 - dxCLerp;
if (r == topDxRIndex && c == leftDxCIndex) {
// topLeft
accumulator +=
getDy(b, dyR, dyC, d) * inverseDxRLerp * inverseDxCLerp;
}
if (r == topDxRIndex && c == rightDxCIndex) {
// topRight
accumulator += getDy(b, dyR, dyC, d) * inverseDxRLerp * dxCLerp;
}
if (r == bottomDxRIndex && c == leftDxCIndex) {
// bottomLeft
accumulator += getDy(b, dyR, dyC, d) * dxRLerp * inverseDxCLerp;
}
if (r == bottomDxRIndex && c == rightDxCIndex) {
// bottomRight
accumulator += getDy(b, dyR, dyC, d) * dxRLerp * dxCLerp;
}
}
}
// End loop over dy
setOutput(accumulator);
}
`}};function sot(r){let{inputs:t,backend:e,attrs:n}=r,{images:o,dy:s}=t,{alignCorners:i}=n,a=new WC(s.shape,o.shape,i);return e.runWebGLProgram(a,[s],s.dtype)}var U3={kernelName:Fp,backendName:"webgl",kernelFunc:sot};var UC=class{constructor(t,e,n,o,s){this.variableNames=["A"],this.outputShape=[];let[i,a,u,l]=t;this.outputShape=[i,e,n,l];let c=[o&&e>1?a-1:a,o&&n>1?u-1:u],p=[o&&e>1?e-1:e,o&&n>1?n-1:n],m=o?"0.5":"0.0",f;s?f="max((vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))":f="vec2(yRC) * effectiveInputOverOutputRatioRC",this.userCode=`
const vec2 effectiveInputOverOutputRatioRC = vec2(
${c[0]/p[0]},
${c[1]/p[1]});
const vec2 inputShapeRC = vec2(${a}.0, ${u}.0);
void main() {
ivec4 coords = getOutputCoords();
int b = coords[0];
int d = coords[3];
ivec2 yRC = coords.yz;
// Fractional source index.
vec2 sourceFracIndexRC = ${f};
// Compute the coordinators of nearest neighbor point.
ivec2 sourceNearestRC = ivec2(
min(inputShapeRC - 1.0, floor(sourceFracIndexRC + ${m})));
float newValue = getA(b, sourceNearestRC.x, sourceNearestRC.y, d);
setOutput(newValue);
}
`}};var HC=class{constructor(t,e,n,o,s){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[i,a,u,l]=t;this.outputShape=[i,e,n,l];let c=[o&&e>1?a-1:a,o&&n>1?u-1:u],p=[o&&e>1?e-1:e,o&&n>1?n-1:n],m=o?"0.5":"0.0",f;s?f="max((vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC, vec3(0.0))":f="vec3(yRC) * effectiveInputOverOutputRatioRC",this.userCode=`
const vec3 effectiveInputOverOutputRatioRC = vec3(
${c[0]/p[0]},
${c[1]/p[1]},
${c[1]/p[1]});
const vec3 inputShapeRC = vec3(${a}.0, ${u}.0,
${u}.0);
float getAValue(int b, int r, int c, int d) {
return getChannel(getA(b, r, c, d), vec2(c, d));
}
void main() {
ivec4 coords = getOutputCoords();
int b = coords[0];
int d = coords[3];
// Calculate values for next column in yRC.z.
ivec3 yRC = coords.yzz + ivec3(0, 0, 1);
// Fractional source index.
vec3 sourceFracIndexRC = ${f};
// Compute the coordinators of nearest neighbor point.
ivec3 sourceNearestRC = ivec3(
min(inputShapeRC - 1.0, floor(sourceFracIndexRC + ${m})));
// Should we calculate next column and row elements in 2x2 packed cell.
bool hasNextCol = d < ${l-1};
bool hasNextRow = coords.z < ${n-1};
vec4 newValue = vec4(
getAValue(b, sourceNearestRC.x, sourceNearestRC.y, d),
hasNextCol ? getAValue(b, sourceNearestRC.x, sourceNearestRC.y, d + 1)
: 0.0,
hasNextRow ? getAValue(b, sourceNearestRC.x, sourceNearestRC.z, d)
: 0.0,
(hasNextRow && hasNextCol) ?
getAValue(b, sourceNearestRC.x, sourceNearestRC.z, d + 1) : 0.0);
setOutput(newValue);
}
`}};function iot(r){let{inputs:t,backend:e,attrs:n}=r,{images:o}=t,{alignCorners:s,halfPixelCenters:i,size:a}=n,[u,l]=a,c=M().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new HC(o.shape,u,l,s,i):new UC(o.shape,u,l,s,i);return e.runWebGLProgram(c,[o],o.dtype)}var H3={kernelName:Cs,backendName:"webgl",kernelFunc:iot};var qC=class{constructor(t,e,n){this.variableNames=["dy"],this.outputShape=[],this.outputShape=e;let[,o,s]=e,[,i,a]=t,u=[n&&i>1?o-1:o,n&&a>1?s-1:s],l=[n&&i>1?i-1:i,n&&a>1?a-1:a],c=u[0]/l[0],p=u[1]/l[1],m=1/c,f=1/p,d=Math.ceil(m)*2+2,h=Math.ceil(f)*2+2;this.userCode=`
void main() {
ivec4 coords = getOutputCoords();
int b = coords[0];
int d = coords[3];
int r = coords[1];
int c = coords[2];
float accumulator = 0.0;
const float heightScale = float(${c});
const float widthScale = float(${p});
const float invHeightScale = float(${m});
const float invWidthScale = float(${f});
const int winHeight = int(${d});
const int winWidth = int(${h});
// Compute bounds for where in dy we will look
float startRLerp = floor(float(r) * invHeightScale);
int startDyR = int(floor(startRLerp - float(winHeight / 2)));
float startCLerp = floor(float(c) * invWidthScale);
int startDyC = int(floor(startCLerp - float(winWidth / 2)));
// Loop over dy
for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) {
int dyR = dyROffset + startDyR;
// Guard against the window exceeding the bounds of dy
if (dyR < 0 || dyR >= ${i}) {
continue;
}
for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) {
int dyC = dyCOffset + startDyC;
// Guard against the window exceeding the bounds of dy
if (dyC < 0 || dyC >= ${a}) {
continue;
}
float sourceFracRow =
float(${u[0]}) *
(float(dyR) / float(${l[0]}));
float sourceFracCol =
float(${u[1]}) *
(float(dyC) / float(${l[1]}));
int sourceNearestRow = int(min(
float(int(${o}) - 1),
${n} ? float(round(sourceFracRow)) :
float(floor(sourceFracRow))));
int sourceNearestCol = int(min(
float(int(${s}) - 1),
${n} ? float(round(sourceFracCol)) :
float(floor(sourceFracCol))));
if (r == sourceNearestRow && c == sourceNearestCol) {
accumulator += getDy(b, dyR, dyC, d);
}
}
}
// End loop over dy
setOutput(accumulator);
}
`}};function aot(r){let{inputs:t,backend:e,attrs:n}=r,{images:o,dy:s}=t,{alignCorners:i}=n,a=new qC(s.shape,o.shape,i);return e.runWebGLProgram(a,[s],s.dtype)}var q3={kernelName:Rp,backendName:"webgl",kernelFunc:aot};var KC=class{constructor(t,e){this.variableNames=["x"];let n=t.length;if(n>4)throw new Error(`WebGL backend: Reverse of rank-${n} tensor is not yet supported`);if(this.outputShape=t,n===1){this.userCode=`
void main() {
int coord = getOutputCoords();
setOutput(getX(${t[0]} - coord - 1));
}
`;return}let o=a=>e.indexOf(a)!==-1&&t[a]!==1?`${t[a]} - coords[${a}] - 1`:`coords[${a}]`,s=t.map((a,u)=>o(u)).join(","),i=zt(n);this.userCode=`
void main() {
${i} coords = getOutputCoords();
setOutput(getX(${s}));
}
`}};var jC=class{constructor(t,e){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0;let n=t.length;if(n>4)throw new Error(`WebGL backend: Reverse of rank-${n} tensor is not yet supported`);this.outputShape=t;let o=Qe("rc",n),s=`${o[n-1]} + 1 < ${this.outputShape[n-1]}`,i=`${o[n-2]} + 1 < ${this.outputShape[n-2]}`,a=zt(n);n===1?this.userCode=`
void main(){
int rc = getOutputCoords();
vec4 result = vec4(0.);
result.r = getChannel(getX(${t[0]} - rc - 1),
${t[0]} - rc - 1);
if(${s}){
result.g = getChannel(getX(${t[0]} - (rc + 1) - 1),
${t[0]} - (rc + 1) - 1);
}
setOutput(result);
}
`:this.userCode=`
void main() {
${a} rc = getOutputCoords();
vec4 result = vec4(0.);
result.r = ${u(o.slice())};
if(${s}){
result.g = ${l(o.slice())};
}
if(${i}) {
result.b = ${c(o.slice())};
if(${s}) {
result.a = ${p(o.slice())};
}
}
setOutput(result);
}
`;function u(d){return m(d)}function l(d){return d[n-1]="("+d[n-1]+" + 1)",m(d)}function c(d){return d[n-2]="("+d[n-2]+" + 1)",m(d)}function p(d){return d[n-1]="("+d[n-1]+" + 1)",d[n-2]="("+d[n-2]+" + 1)",m(d)}function m(d){let h=t.map((b,w)=>f(w,d)),g=h.join(","),x=h.slice(-2).join(",");return`getChannel(getX(${g}), vec2(${x}))`}function f(d,h){return e.indexOf(d)!==-1&&t[d]!==1?`${t[d]} - ${h[d]} - 1`:`${h[d]}`}}};function lot(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{dims:s}=n,i=o.shape.length,a=y.parseAxisParam(s,o.shape);if(i===0)return tr({inputs:{x:o},backend:e});let u=M().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new jC(o.shape,a):new KC(o.shape,a);return e.runWebGLProgram(u,[o],o.dtype)}var K3={kernelName:Ss,backendName:"webgl",kernelFunc:lot};var XC=class{constructor(t,e){this.variableNames=["Image"],this.outputShape=[],this.customUniforms=[{name:"params",type:"vec4"}];let n=t[1],o=t[2];this.outputShape=t;let s="";typeof e=="number"?s=`float outputValue = ${e.toFixed(2)};`:s=`
vec3 fill = vec3(${e.join(",")});
float outputValue = fill[coords[3]];`,this.userCode=`
void main() {
ivec4 coords = getOutputCoords();
int x = coords[2];
int y = coords[1];
float coordXFloat = (float(x) - params[0]) * params[3] -
(float(y) - params[1]) * params[2];
float coordYFloat = (float(x) - params[0]) * params[2] +
(float(y) - params[1]) * params[3];
int coordX = int(round(coordXFloat + params[0]));
int coordY = int(round(coordYFloat + params[1]));
${s}
if(coordX >= 0 && coordX < ${o} && coordY >= 0 && coordY < ${n}) {
outputValue = getImage(coords[0], coordY, coordX, coords[3]);
}
setOutput(outputValue);
}
`}};var j3={kernelName:Ua,backendName:"webgl",kernelFunc:({inputs:r,attrs:t,backend:e})=>{let{image:n}=r,{radians:o,fillValue:s,center:i}=t,a=e,u=new XC(n.shape,s),[l,c]=S.getImageCenter(i,n.shape[1],n.shape[2]),p=[[l,c,Math.sin(o),Math.cos(o)]];return a.runWebGLProgram(u,[n],n.dtype,p)}};var uot=`
// OpenGL ES does not support round function.
// The algorithm is based on banker's rounding.
float base = floor(x);
if ((x - base) < 0.5) {
return floor(x);
} else if ((x - base) > 0.5) {
return ceil(x);
} else {
if (mod(base, 2.0) == 0.0) {
return base;
} else {
return base + 1.0;
}
}
`,cot=Ct({opSnippet:uot}),X3={kernelName:Ns,backendName:"webgl",kernelFunc:cot};var pot="return inversesqrt(x);",mot=Ct({opSnippet:pot,cpuKernelImpl:EL}),Y3={kernelName:ks,backendName:"webgl",kernelFunc:mot};var Td=class{constructor(t,e,n,o,s,i,a=!0){this.variableNames=["updates","indices","defaultValue"],this.outputShape=i;let u=zt(s.length),l=zt(i.length),c="";n===1?c="i":n===2&&(c="i, j");let p=`getIndices(${c})`,m="";o===1?m="i":o===2&&(m="i, coords[1]");let f=`getUpdates(${m})`,d=e>1?"strides[j]":"strides";this.userCode=`
${u} strides = ${u}(${s});
void main() {
${l} coords = getOutputCoords();
float sum = 0.0;
bool found = false;
for (int i = 0; i < ${t}; i++) {
int flattenedIndex = 0;
for (int j = 0; j < ${e}; j++) {
int index = round(${p});
flattenedIndex += index * ${d};
}
if (flattenedIndex == coords[0]) {
sum += ${f};
found = true;
}
}
setOutput(mix(getDefaultValue(), sum, float(found)));
}
`}};function fot(r){let{inputs:t,backend:e,attrs:n}=r,{indices:o,updates:s}=t,{shape:i}=n,{sliceRank:a,numUpdates:u,sliceSize:l,strides:c,outputSize:p}=S.calculateShapes(s,o,i),m=[p/l,l];if(p===0)return e.makeTensorInfo(i,o.dtype);let f=st({inputs:{x:o},backend:e,attrs:{shape:[u,a]}}),d=st({inputs:{x:s},backend:e,attrs:{shape:[u,l]}}),h=e.makeTensorInfo([],"float32",new Float32Array([0])),g=new Td(u,a,f.shape.length,d.shape.length,c,m),x=e.runWebGLProgram(g,[d,f,h],d.dtype),b=st({inputs:{x},backend:e,attrs:{shape:i}});return e.disposeIntermediateTensorInfo(f),e.disposeIntermediateTensorInfo(d),e.disposeIntermediateTensorInfo(x),e.disposeIntermediateTensorInfo(h),b}var Z3={kernelName:Oa,backendName:"webgl",kernelFunc:fot};var YC=class{constructor(t,e,n,o){this.variableNames=["sortedSequence","values"],this.customUniforms=[{name:"numInputs",type:"int"}],this.outputShape=[t,n];let s="while (left < right) {",i=`for (int i = 0; i < ${Math.ceil(Math.log2(e+1))}; ++i) { if (left >= right) break;`,a=M().getNumber("WEBGL_VERSION")===2?s:i,u=o==="left"?"<":"<=";this.userCode=`
int findBound(int batch, float value) {
int left = 0;
int right = numInputs;
int mid;
${a}
mid = (left + right) / 2;
if (getSortedSequence(batch, mid) ${u} value) {
left = mid + 1;
} else {
right = mid;
}
}
return right;
}
void main() {
ivec2 coords = getOutputCoords();
int batch = coords[0];
int valueIndex = coords[1];
float value = getValues(batch, valueIndex);
setOutput(float(findBound(batch, value)));
}
`}};function dot(r){let{inputs:t,backend:e,attrs:n}=r,{sortedSequence:o,values:s}=t,{side:i}=n,a=new YC(o.shape[0],o.shape[1],s.shape[1],i),u=[[o.shape[1]]];return e.runWebGLProgram(a,[o,s],"int32",u)}var J3={kernelName:Op,backendName:"webgl",kernelFunc:dot};var ZC=class{constructor(t,e,n){this.variableNames=["c","a","b"],this.outputShape=e;let o,s;if(n>4)throw Error(`Where for rank ${n} is not yet supported`);if(n===1)s="resRC",o="resRC";else{let a=["resRC.x","resRC.y","resRC.z","resRC.w"],u=[],l=[];for(let c=0;c<e.length;c++)l.push(`${a[c]}`),c<t&&u.push(`${a[c]}`);o=u.join(),s=l.join()}let i=zt(n);this.userCode=`
void main() {
${i} resRC = getOutputCoords();
float cVal = getC(${o});
if (cVal >= 1.0) {
setOutput(getA(${s}));
} else {
setOutput(getB(${s}));
}
}
`}};function hot(r){let{inputs:t,backend:e}=r,{condition:n,t:o,e:s}=t,i=new ZC(n.shape.length,o.shape,o.shape.length);return e.runWebGLProgram(i,[n,o,s],or(o.dtype,s.dtype))}var Q3={kernelName:fi,backendName:"webgl",kernelFunc:hot};var got=`
// Stable and Attracting Fixed Point (0, 1) for Normalized Weights.
// see: https://arxiv.org/abs/1706.02515
float scaleAlpha = ${S.SELU_SCALEALPHA};
float scale = ${S.SELU_SCALE};
return (x >= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0);
`,xot=Ct({opSnippet:got}),tB={kernelName:Pa,backendName:"webgl",kernelFunc:xot};var yot=Oo+`
return 1.0 / (1.0 + exp(-1.0 * x));
`,bot=`
vec4 result = 1.0 / (1.0 + exp(-1.0 * x));
bvec4 isNaN = isnan(x);
result.r = isNaN.r ? x.r : result.r;
result.g = isNaN.g ? x.g : result.g;
result.b = isNaN.b ? x.b : result.b;
result.a = isNaN.a ? x.a : result.a;
return result;
`,wot=Ct({opSnippet:yot,packedOpSnippet:bot,cpuKernelImpl:AL}),eB={kernelName:Es,backendName:"webgl",kernelFunc:wot};var Cot=`
if (isnan(x)) { return 0.0; }
return sign(x);
`,Iot=Ct({opSnippet:Cot}),rB={kernelName:Ma,backendName:"webgl",kernelFunc:Iot};var vot=Oo+`
return sin(x);
`,Sot=Ct({opSnippet:vot}),nB={kernelName:Ts,backendName:"webgl",kernelFunc:Sot};var Not=`
float e2x = exp(x);
return (e2x - 1.0 / e2x) / 2.0;
`,kot=Ct({opSnippet:Not}),oB={kernelName:La,backendName:"webgl",kernelFunc:kot};var Tot=`
float epsilon = 1.1920928955078125e-7;
float threshold = log(epsilon) + 2.0;
bool too_large = x > -threshold;
bool too_small = x < threshold;
float result;
float exp_x = exp(x);
if (too_large){
result = x;
}
else if (too_small){
result = exp_x;
}
else{
result = log(exp_x + 1.0);
}
return result;
`,Eot=Ct({opSnippet:Tot}),sB={kernelName:za,backendName:"webgl",kernelFunc:Eot};var _ot=r=>{let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{blockShape:s,paddings:i}=n;y.assert(o.shape.length<=4,()=>"spaceToBatchND for rank > 4 with a WebGL backend not implemented yet");let a=s.reduce((x,b)=>x*b),u=[[0,0]];u.push(...i);for(let x=1+s.length;x<o.shape.length;++x)u.push([0,0]);let l=[],c=CT({inputs:{x:o},backend:e,attrs:{paddings:u,constantValue:0}}),p=S.getReshaped(c.shape,s,a,!1),m=S.getPermuted(p.length,s.length,!1),f=S.getReshapedPermuted(c.shape,s,a,!1),d=st({inputs:{x:c},backend:e,attrs:{shape:p}}),h=Fe({inputs:{x:d},backend:e,attrs:{perm:m}}),g=st({inputs:{x:h},backend:e,attrs:{shape:f}});return l.push(c),l.push(d),l.push(h),l.forEach(x=>e.disposeIntermediateTensorInfo(x)),g},iB={kernelName:hi,backendName:"webgl",kernelFunc:_ot};function Aot(r){let{inputs:t,backend:e}=r,{indices:n,values:o,denseShape:s,defaultValue:i}=t;if(s.shape.length!==1)throw new Error(`Dense shape must be a vector, saw:
${s.shape}`);if(n.shape.length!==2)throw new Error(`Indices must be a matrix, saw:
${n.shape}`);if(o.shape.length!==1)throw new Error(`Values must be a vector, saw:
${o.shape}`);if(i.shape.length!==0)throw new Error(`Default value must be a scalar, saw:
${i.shape}`);let a=e.readSync(n.dataId),u=e.readSync(o.dataId),l=e.readSync(s.dataId),c=e.readSync(i.dataId)[0],[p,m,f,d,h]=DL(a,n.shape,n.dtype,u,o.dtype,l,c);return[e.makeTensorInfo(m,n.dtype,p),e.makeTensorInfo([m[0]],o.dtype,f),e.makeTensorInfo([d.length],"bool",new Uint8Array(d.map(g=>Number(g)))),e.makeTensorInfo([h.length],n.dtype,new Int32Array(h))]}var aB={kernelName:Fl,backendName:"webgl",kernelFunc:Aot};function $ot(r){let{inputs:t,backend:e}=r,{inputIndices:n,inputShape:o,newShape:s}=t;if(n.shape.length!==2)throw new Error(`Input indices should be a matrix but received shape ${n.shape}`);if(o.shape.length!==1)throw new Error(`Input shape should be a vector but received shape ${o.shape}`);if(s.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${s.shape}`);let i=Array.from(e.readSync(o.dataId)),a=e.readSync(n.dataId),u=Array.from(e.readSync(s.dataId)),[l,c,p]=RL(a,n.shape,n.dtype,i,u);return[e.makeTensorInfo(c,n.dtype,l),e.makeTensorInfo([p.length],s.dtype,new Int32Array(p))]}var lB={kernelName:Ba,backendName:"webgl",kernelFunc:$ot};function Dot(r){let{inputs:t,backend:e}=r,{data:n,indices:o,segmentIds:s}=t;if(n.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(o.shape.length!==1)throw new Error(`Indices should be a vector but received shape
${o.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape
${s.shape}`);let i=e.readSync(n.dataId),a=e.readSync(o.dataId),u=e.readSync(s.dataId),[l,c]=Fw(i,n.shape,n.dtype,a,u,!0);return e.makeTensorInfo(c,n.dtype,l)}var uB={kernelName:Ol,backendName:"webgl",kernelFunc:Dot};function Rot(r){let{inputs:t,backend:e}=r,{data:n,indices:o,segmentIds:s}=t;if(n.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(o.shape.length!==1)throw new Error(`Indices should be a vector but received shape
${o.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape
${s.shape}`);let i=e.readSync(n.dataId),a=e.readSync(o.dataId),u=e.readSync(s.dataId),[l,c]=Fw(i,n.shape,n.dtype,a,u);return e.makeTensorInfo(c,n.dtype,l)}var cB={kernelName:Pl,backendName:"webgl",kernelFunc:Rot};function Fot(r){let{inputs:t,backend:e,attrs:n}=r,{sparseIndices:o,sparseValues:s,defaultValue:i}=t,{outputShape:a}=n,{sliceRank:u,numUpdates:l,sliceSize:c,strides:p,outputSize:m}=S.calculateShapes(s,o,a),f=!1;if(s.dtype==="string"){let x=e.bufferSync(o),b=e.bufferSync(s),w=y.decodeString(e.readSync(i.dataId)[0]),C=_L(x,b,a,m,c,l,u,p,w,f);return e.makeTensorInfo(a,C.dtype,C.values)}let d=new Td(l,u,o.shape.length,s.shape.length,p,[m,1],f),h=e.runWebGLProgram(d,[s,o,i],s.dtype),g=st({inputs:{x:h},backend:e,attrs:{shape:a}});return e.disposeIntermediateTensorInfo(h),g}var pB={kernelName:Pp,backendName:"webgl",kernelFunc:Fot};function Oot(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{numOrSizeSplits:s,axis:i}=n,a=y.parseAxisParam(i,o.shape)[0],u=S.prepareSplitSize(o,s,a),l=o.shape.length,c=new Array(l).fill(0),p=o.shape.slice();return u.map(m=>{let f=[...p];f[a]=m;let d=ti({inputs:{x:o},backend:e,attrs:{begin:c,size:f}});return c[a]+=m,d})}var mB={kernelName:gi,backendName:"webgl",kernelFunc:Oot};var fB="return sqrt(x);",Pot=Ct({opSnippet:fB,packedOpSnippet:fB,cpuKernelImpl:FL}),dB={kernelName:_s,backendName:"webgl",kernelFunc:Pot};var Lot="return x * x;",Mot=Ct({opSnippet:Lot}),hB={kernelName:Ll,backendName:"webgl",kernelFunc:Mot};var gB="return (a - b) * (a - b);",zot=le({opSnippet:gB,packedOpSnippet:gB}),xB={kernelName:Ds,backendName:"webgl",kernelFunc:zot};function Bot({inputs:r,attrs:t,backend:e}){let{x:n}=r,o=pr+`
return x > 0.0 ? 1.0 : float(${t.alpha});
`,s=new tn(n.shape,o);return e.runWebGLProgram(s,[n],n.dtype)}var yB={kernelName:uo,backendName:"webgl",kernelFunc:Bot};var JC=class{constructor(t,e,n){this.variableNames=["x"],this.outputShape=n;let o=n.length,s=zt(n.length),i=zt(n.length),a="";if(o===1)a="coords * strides + begin";else{let u=0;a=n.map((l,c)=>(u++,n.length===1?`coords * strides[${c}] + begin[${c}]`:`coords[${u-1}] * strides[${c}] + begin[${c}]`)).join(",")}this.userCode=`
${s} begin = ${s}(${t});
${s} strides = ${s}(${e});
void main() {
${i} coords = getOutputCoords();
setOutput(getX(${a}));
}
`}};function Vot(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{begin:s,end:i,strides:a,beginMask:u,endMask:l,ellipsisMask:c,newAxisMask:p,shrinkAxisMask:m}=n,{finalShapeSparse:f,finalShape:d,isIdentity:h,sliceDim0:g,isSimpleSlice:x,begin:b,end:w,strides:C}=Pe.sliceInfo(o.shape,s,i,a,u,l,c,p,m),N;if(h)N=st({inputs:{x:o},backend:e,attrs:{shape:d}});else if(g||x){y.assert(o.shape.length>=1,()=>`Input must have rank at least 1, got: ${o.shape.length}`);let A=Pe.computeOutShape(b,w,C),$=ti({inputs:{x:o},backend:e,attrs:{begin:b,size:A}});N=st({inputs:{x:$},backend:e,attrs:{shape:d}}),e.disposeIntermediateTensorInfo($)}else if(e.shouldExecuteOnCPU([o])){let $=e.readSync(o.dataId),F=wt(o.shape,o.dtype,$),P=OL(f,F,C,b);N=e.makeTensorInfo(d,o.dtype,P.values)}else{let $=new JC(b,C,f);N=e.runWebGLProgram($,[o],o.dtype)}let _=st({inputs:{x:N},backend:e,attrs:{shape:d}});return e.disposeIntermediateTensorInfo(N),_}var bB={kernelName:Va,backendName:"webgl",kernelFunc:Vot};function Got(r){let{inputs:t,backend:e,attrs:n}=r,{separator:o,nGramWidths:s,leftPad:i,rightPad:a,padWidth:u,preserveShortSequences:l}=n,{data:c,dataSplits:p}=t,m=e.readSync(c.dataId),f=e.readSync(p.dataId),[d,h]=PL(m,f,o,s,i,a,u,l);return[e.makeTensorInfo([d.length],"string",d),e.makeTensorInfo(p.shape,"int32",h)]}var wB={kernelName:Ml,backendName:"webgl",kernelFunc:Got};function Wot(r){let{inputs:t,backend:e,attrs:n}=r,{skipEmpty:o}=n,{input:s,delimiter:i}=t;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(s.shape.length!==1)throw new Error(`Input must be a vector, got shape: ${s.shape}`);if(i.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${i.shape}`);let a=e.readSync(s.dataId),u=e.readSync(i.dataId)[0],[l,c,p]=LL(a,u,o),m=c.length;return[e.makeTensorInfo([m,2],"int32",l),e.makeTensorInfo([m],"string",c),e.makeTensorInfo([2],"int32",new Int32Array(p))]}var CB={kernelName:zl,backendName:"webgl",kernelFunc:Wot};function Uot(r){let{inputs:t,backend:e,attrs:n}=r,{numBuckets:o}=n,{input:s}=t;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(o<=0)throw new Error("Number of buckets must be at least 1");let i=e.readSync(s.dataId),a=ML(i,o);return e.makeTensorInfo(s.shape,"int32",a)}var IB={kernelName:Bl,backendName:"webgl",kernelFunc:Uot};var Hot="return tan(x);",qot=Ct({opSnippet:Hot}),vB={kernelName:Fs,backendName:"webgl",kernelFunc:qot};var Kot=`
float e2x = exp(-2.0 * abs(x));
return sign(x) * (1.0 - e2x) / (1.0 + e2x);
`,jot=Ct({opSnippet:Kot}),SB={kernelName:Os,backendName:"webgl",kernelFunc:jot};var QC=class{constructor(t,e){this.variableNames=["A"];let n=new Array(t.length);for(let i=0;i<n.length;i++)n[i]=t[i]*e[i];this.outputShape=n,this.rank=n.length;let o=zt(this.rank),s=Xot(t);this.userCode=`
void main() {
${o} resRC = getOutputCoords();
setOutput(getA(${s}));
}
`}};function Xot(r){let t=r.length;if(t>5)throw Error(`Tile for rank ${t} is not yet supported`);if(t===1)return`imod(resRC, ${r[0]})`;let e=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u"],n=[];for(let o=0;o<r.length;o++)n.push(`imod(${e[o]}, ${r[o]})`);return n.join()}function vT(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{reps:s}=n;if(o.dtype==="string"||o.shape.length>5){let u=e.readSync(o.dataId),l=o.dtype==="string"?u.map(m=>y.decodeString(m)):u,c=wt(o.shape,o.dtype,l),p=BL(c,s);return e.makeTensorInfo(p.shape,p.dtype,p.values)}let i=new QC(o.shape,s);return e.runWebGLProgram(i,[o],o.dtype)}var NB={kernelName:Zn,backendName:"webgl",kernelFunc:vT};var tI=class{constructor(t){this.variableNames=["x","indices"],this.customUniforms=[{name:"n",type:"int"},{name:"firstPass",type:"int"},{name:"negativeInf",type:"float"},{name:"dir",type:"int"},{name:"inc",type:"int"}],this.outputShape=t,this.userCode=`
void main() {
ivec2 coords = getOutputCoords();
int batch = coords[0];
int elemIdx = coords[1];
// We compare elements pair-wise within a group of size 2 * inc.
// The comparing rule for each group alternates between ascending
// and descending. Within each group, we compare each pair at
// positions i and i+inc. To decide whether an element at position i
// is x0 or x1, we mod it by 2 * inc, if the result is smaller than
// inc, it is in the first half of the group, we denote it as x0,
// otherwise we denote it as x1.
// For example, as shown in the Bitonic top K paper referenced above,
// Figure5(a) shows that element[1] is in the
// second half of the group when group size is 2, but it is in the
// first half of the group when group size is 4.
bool isFirstInPair = imod(elemIdx, 2 * inc) < inc;
int i = isFirstInPair ? elemIdx : elemIdx - inc;
int i0 = firstPass == 1 ? i : int(getIndices(batch, i));
int i1 = firstPass == 1 ? i + inc : int(getIndices(batch, i + inc));
float x0 = i0 < n ? getX(batch, i0) : negativeInf;
float x1 = i1 < n ? getX(batch, i1) : negativeInf;
// Denotes which direction indices are in (ascending or descending).
bool reverse = imod(elemIdx, 2 * dir) >= dir;
bool isGreater = x0 > x1 || (x0 == x1 && i1 > i0);
if (reverse == isGreater) { // Elements in opposite order of direction
int iTemp = i0;
i0 = i1;
i1 = iTemp;
}
if (isFirstInPair) {
setOutput(float(i0));
} else {
setOutput(float(i1));
}
}
`}},eI=class{constructor(t){this.variableNames=["x","indices"],this.customUniforms=[{name:"n",type:"int"},{name:"firstPass",type:"int"},{name:"k",type:"int"}],this.outputShape=t,this.userCode=`
void main() {
// Takes max of indices (0, k), (1, k + 1), (2, k + 2) ...
ivec2 coords = getOutputCoords();
int batch = coords[0];
int elemIdx = coords[1];
// The output size is half of the previous size.
// If the previous sequence is | | | | _ _ _ _ | | | | _ _ _ _ (k=4),
// we only need to output the indices at positions |, the indices at
// positions _ can be thrown away, see Figure5(b) After Phase 2
// (Merge phase) in the Bitonic Top K paper referenced above.
// For example, the paper shows we only need to output the orange bars.
// The output sequence should look like this | | | | | | | |.
// Because the sequence is halved, to map the output index back
// to the previous sequence to find the corresponding value,
// we need to double the index. When we double the index,
// we basically interpolate a position, so 2i looks like
// | _ | _ | _ | _ | _ | _ | _. We move the | to the first k position
// of each 2k positions by - elemIdx % k. E.g. for output at
// index 4,5,6,7, we want to get the corresponding element at
// original index 8,9,10,11, for output at index 8,9,10,11,
// we want to get the corresponding element at original index
// 16,17,18,19, so on and so forth.
int i = elemIdx < k ? elemIdx : (elemIdx * 2 - imod(elemIdx, k));
int i0 = firstPass == 1 ? i : int(getIndices(batch, i));
int i1 = firstPass == 1 ? i + k : int(getIndices(batch, i + k));
float x0 = getX(batch, i0);
float x1 = i1 < n ? getX(batch, i1) : x0;
setOutput(x0 >= x1 ? float(i0) : float(i1));
}
`}};function Kc(r,t){t!==null&&r.disposeIntermediateTensorInfo(t)}function kB(r){let t=1;for(;t<r;)t*=2;return t}function Yot(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{k:s,sorted:i}=n,a=M().getNumber("TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD"),u=M().getNumber("TOPK_K_CPU_HANDOFF_THRESHOLD"),l=o.shape,c=l[l.length-1];if(e.shouldExecuteOnCPU([o])||c<a||s>u){let P=e.readSync(o.dataId),[V,G]=VL(P,l,o.dtype,s,i);return[e.makeTensorInfo(V.shape,V.dtype,V.values),e.makeTensorInfo(G.shape,G.dtype,G.values)]}if(s===0)return l[l.length-1]=0,[e.makeTensorInfo(l,o.dtype,[]),e.makeTensorInfo(l,"int32",[])];if(c===1)return[o,bl({attrs:{shape:l,dtype:"int32",value:0},backend:e})];let p=e.texData.get(o.dataId),m=p!==null&&p.isPacked,f=m?e.unpackTensor(o):o,h=y.sizeFromShape(l)/c,g=st({inputs:{x:f},attrs:{shape:[h,c]},backend:e});m&&Kc(e,f);let x=kB(s),b=kB(c),w=null,C=()=>w===null?[g,g]:[g,w],N=(P,V,G)=>{let W=C(),q=new tI(G),j=[[c],[w===null?1:0],[Number.NEGATIVE_INFINITY],[P],[V]],Y=w;w=e.runWebGLProgram(q,W,"int32",j),Kc(e,Y)};for(let P=1;P<x;P*=2){let V=P*2;for(let G=P;G>=1;G/=2)N(V,G,[h,b])}for(let P=b;P>x;P/=2){let V=C(),G=new eI([h,P/2]),q=[[c],[w===null?1:0],[x]],H=w;w=e.runWebGLProgram(G,V,"int32",q),Kc(e,H);let j=x/2,Y=j*2;for(let Z=j;Z>=1;Z/=2)N(Y,Z,w.shape)}let _=w;w=ti({inputs:{x:w},backend:e,attrs:{begin:0,size:[h,s]}}),Kc(e,_);let A=gT({inputs:{x:g,indices:w},backend:e,attrs:{axis:1,batchDims:1}});Kc(e,g);let $=l.slice(0,-1);$.push(s),_=w,w=st({inputs:{x:w},attrs:{shape:$},backend:e}),Kc(e,_);let F=A;return A=st({inputs:{x:A},attrs:{shape:$},backend:e}),Kc(e,F),[A,w]}var TB={kernelName:Ga,backendName:"webgl",kernelFunc:Yot};var rI=class{constructor(t,e,n,o,s,i){this.variableNames=["Image","Transforms"],this.outputShape=i;let a=n==="nearest"?1:2,u;switch(o){case"constant":u=1;break;case"reflect":u=2;break;case"wrap":u=3;break;case"nearest":u=4;break;default:u=1;break}this.userCode=`
float mapCoord(float outCoord, float len) {
float inCoord = outCoord;
if(${u} == 2) {
if (inCoord < 0.0) {
if (len <= 1.0) {
inCoord = 0.0;
} else {
float sz2 = 2.0 * len;
if (inCoord < sz2) {
inCoord = sz2 * float(int(float(-inCoord / sz2))) +
inCoord;
}
inCoord = inCoord < -len ? inCoord + sz2 : -inCoord - 1.0;
}
} else if (inCoord > len - 1.0) {
if (len <= 1.0) {
inCoord = 0.0;
} else {
float sz2 = 2.0 * len;
inCoord -= sz2 * float(int(float(inCoord / sz2)));
if (inCoord >= len) {
inCoord = sz2 - inCoord - 1.0;
}
}
}
return clamp(inCoord, 0.0, len - 1.0);
} else if (${u} == 3) {
if (inCoord < 0.0) {
if (len <= 1.0) {
inCoord = 0.0;
} else {
float sz = len - 1.0;
inCoord += len * (float(int(float(-inCoord / sz))) + 1.0);
}
} else if (inCoord > len - 1.0) {
if (len <= 1.0) {
inCoord = 0.0;
} else {
float sz = len - 1.0;
inCoord -= len * float(int(float(inCoord / sz)));
}
}
return clamp(inCoord, 0.0, len - 1.0);
} else if (${u} == 4) {
return clamp(outCoord, 0.0, len - 1.0);
} else {
return outCoord;
}
}
float readWithFillValue(int batch, int coordY, int coordX,
int channel) {
float outputValue;
if (0 <= coordY && coordY < ${t} && 0 <= coordX && coordX < ${e}) {
outputValue = getImage(batch, coordY, coordX, channel);
} else {
outputValue = float(${s});
}
return outputValue;
}
void main() {
ivec4 coords = getOutputCoords();
float outputValue;
int batch = coords[0];
int x = coords[2];
int y = coords[1];
int channel = coords[3];
float xf = float(x);
float yf = float(y);
float a1 = getTransforms(batch, 0);
float a2 = getTransforms(batch, 1);
float a3 = getTransforms(batch, 2);
float b1 = getTransforms(batch, 3);
float b2 = getTransforms(batch, 4);
float b3 = getTransforms(batch, 5);
float c1 = getTransforms(batch, 6);
float c2 = getTransforms(batch, 7);
float projection = c1 * xf + c2 * yf + 1.0;
if (projection == 0.0) {
outputValue = float(${s});
} else {
float inX = (a1 * xf + a2 * yf + a3) / projection;
float inY = (b1 * xf + b2 * yf + b3) / projection;
float mapX = mapCoord(inX, float(${e}));
float mapY = mapCoord(inY, float(${t}));
if (${a} == 1) {
int coordY = int(round(mapY));
int coordX = int(round(mapX));
outputValue = readWithFillValue(batch, coordY, coordX,
channel);
} else {
float yFloor = floor(mapY);
float xFloor = floor(mapX);
float yCeil = yFloor + 1.0;
float xCeil = xFloor + 1.0;
float valueYFloor = (xCeil - mapX) *
readWithFillValue(batch, int(yFloor), int(xFloor), channel) +
(mapX - xFloor) *
readWithFillValue(batch, int(yFloor), int(xCeil), channel);
float valueYCeil = (xCeil - mapX) *
readWithFillValue(batch, int(yCeil), int(xFloor), channel) +
(mapX - xFloor) *
readWithFillValue(batch, int(yCeil), int(xCeil), channel);
outputValue = (yCeil - mapY) * valueYFloor +
(mapY - yFloor) * valueYCeil;
}
}
setOutput(outputValue);
}
`}};function Zot(r){let{inputs:t,backend:e,attrs:n}=r,{image:o,transforms:s}=t,{interpolation:i,fillMode:a,fillValue:u,outputShape:l}=n,[c,p,m,f]=o.shape,[d,h]=l!=null?l:[p,m],g=[c,d,h,f],x=new rI(p,m,i,a,u,g);return e.runWebGLProgram(x,[o,s],"float32")}var EB={kernelName:Wa,backendName:"webgl",kernelFunc:Zot};function Jot(r){let{inputs:t,attrs:e,backend:n}=r,{axis:o}=e,{x:s}=t;Zs(s,"unique"),console.warn("WARNING: ","UI might be locked temporarily as data is being downloaded");let i=n.readSync(s.dataId),{outputValues:a,outputShape:u,indices:l}=GL(i,o,s.shape,s.dtype);return[n.makeTensorInfo(u,s.dtype,a),n.makeTensorInfo([l.length],"int32",l)]}var _B={kernelName:Lp,backendName:"webgl",kernelFunc:Jot};function Qot(r){let{inputs:t,backend:e,attrs:n}=r,{value:o}=t,{axis:s}=n;s<0&&(s+=o.shape.length);let i=o,a=i.shape.length,u=o.shape[s],l=new Array(a-1),c=0;for(let h=0;h<a;h++)h!==s&&(l[c++]=i.shape[h]);let p=[],m=new Array(a).fill(0),f=i.shape.slice();f[s]=1;let d=new Array(u);for(let h=0;h<d.length;h++){m[s]=h;let g=ti({inputs:{x:i},backend:e,attrs:{begin:m,size:f}}),x=st({inputs:{x:g},backend:e,attrs:{shape:l}});d[h]=x,p.push(g)}return p.forEach(h=>e.disposeIntermediateTensorInfo(h)),d}var AB={kernelName:xi,backendName:"webgl",kernelFunc:Qot};var nI=class{constructor(t,e){this.variableNames=["x","segmentIds"];let n=t.windowSize,o=t.batchSize,s=t.inSize,i=t.numSegments,a=i*Math.ceil(s/n);this.outputShape=[o,a];let u="0.0",l="sumValue",c=Math.floor(n/4)*4,p=n%4,m=`
sumValue += dot(values, segFilter);
`,f="";s%n>0&&(f=`
if (inIdx < 0 || inIdx >= ${s}) {
return initializationValue;
}
`);let d="";s%n>0&&(d=`
if (inIdx < 0 || inIdx >= ${s}) {
return -1.0;
}
`),this.userCode=`
const float initializationValue = ${u};
float getValue(int batch, int inIdx) {
${f}
return getX(batch, inIdx);
}
float getSegmentIdAtIndex(int inIdx) {
${d}
return getSegmentIds(inIdx);
}
void main() {
ivec2 coords = getOutputCoords();
int batch = coords[0];
int outIdx = coords[1];
int inOffset = int(floor(float(outIdx) / float(
${i})) * float(${n}));
int currentSeg = int(mod(float(outIdx), float(${i})));
float sumValue = 0.0;
for (int i = 0; i < ${c}; i += 4) {
int inIdx = inOffset + i;
vec4 values = vec4(
getValue(batch, inIdx),
getValue(batch, inIdx + 1),
getValue(batch, inIdx + 2),
getValue(batch, inIdx + 3)
);
vec4 segFilter = vec4(
int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,
int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,
int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,
int(getSegmentIdAtIndex(inIdx + 3)) == currentSeg ? 1 : 0
);
${m}
}
int inIdx = inOffset + ${c};
if (${p===1}) {
vec4 values = vec4(
getValue(batch, inIdx),
initializationValue,
initializationValue,
initializationValue
);
int inIdxSeg = int(getSegmentIdAtIndex(inIdx));
vec4 segFilter = vec4(
int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,
0,
0,
0
);
${m}
} else if (${p===2}) {
vec4 values = vec4(
getValue(batch, inIdx),
getValue(batch, inIdx + 1),
initializationValue,
initializationValue
);
vec4 segFilter = vec4(
int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,
int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,
0,
0
);
${m}
} else if (${p===3}) {
vec4 values = vec4(
getValue(batch, inIdx),
getValue(batch, inIdx + 1),
getValue(batch, inIdx + 2),
initializationValue
);
vec4 segFilter = vec4(
int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,
int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,
int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,
0
);
${m}
}
setOutput(${l});
}
`}};function tst(r){let{inputs:t,backend:e,attrs:n}=r,{x:o,segmentIds:s}=t,{numSegments:i}=n,a=o.shape.length,u=[],l=0,c=S.getAxesPermutation([l],a),p=o;c!=null&&(p=Fe({inputs:{x:o},backend:e,attrs:{perm:c}}),u.push(p),l=S.getInnerMostAxes(1,a)[0]);let m=S.segment_util.computeOutShape(p.shape,l,i),f=y.sizeFromShape([p.shape[l]]),d=st({inputs:{x:p},backend:e,attrs:{shape:[-1,f]}});u.push(d);let h=Gu(o.dtype),g=(C,N,_,A,$)=>{let F=C.shape[0],P=C.shape[1],V=S.segment_util.segOpComputeOptimalWindowSize(P,$),G={windowSize:V,inSize:P,batchSize:F,numSegments:$},W=new nI(G,N),q=e.compileAndRun(W,[C,_],A);if(u.push(q),q.shape[1]===$)return q;let H=IT({backend:e,attrs:{start:0,stop:$,step:1,dtype:"float32"}}),j=vT({inputs:{x:H},backend:e,attrs:{reps:[P/V]}});return u.push(H),u.push(j),g(q,N,j,A,$)},x=g(d,"unsortedSegmentSum",s,h,i),b=st({inputs:{x},backend:e,attrs:{shape:m}}),w=b;if(c!=null){u.push(b);let C=S.getUndoAxesPermutation(c);w=Fe({inputs:{x:w},backend:e,attrs:{perm:C}})}return u.forEach(C=>e.disposeIntermediateTensorInfo(C)),w}var $B={kernelName:Vl,backendName:"webgl",kernelFunc:tst};var est=[xM,bM,wM,CM,vM,SM,NM,kM,_M,AM,$M,DM,RM,FM,OM,PM,LM,MM,zM,BM,VM,WM,UM,HM,XM,ZM,JM,aM,tz,rz,nz,oz,sz,iz,az,lz,uz,cz,pz,dz,hz,gz,xz,yz,bz,wz,Cz,Iz,vz,Sz,Nz,kz,Tz,Ez,_z,$z,Dz,Rz,Fz,Pz,Lz,Mz,zz,Bz,Vz,Gz,Wz,Uz,iM,Hz,ez,qz,Kz,jz,lM,Xz,Yz,Zz,Jz,Qz,t3,e3,r3,n3,o3,i3,a3,l3,u3,c3,p3,f3,h3,g3,x3,y3,b3,S3,pM,N3,k3,T3,E3,qM,_3,D3,R3,F3,O3,uM,P3,L3,M3,z3,KM,w3,B3,V3,G3,fM,W3,U3,H3,q3,K3,j3,X3,Y3,Z3,J3,Q3,tB,eB,rB,nB,oB,GM,v3,sB,iB,aB,lB,uB,cB,pB,mB,dB,hB,xB,yB,bB,wB,CB,IB,I3,hM,vB,SB,NB,TB,EB,gM,_B,AB,$B,A3];for(let r of est)Pu(r);var Ht;(function(r){r[r.float32=0]="float32",r[r.int32=1]="int32",r[r.bool=2]="bool",r[r.string=3]="string",r[r.complex64=4]="complex64"})(Ht||(Ht={}));var $u;(function(r){r[r.linear=0]="linear",r[r.relu=1]="relu",r[r.relu6=2]="relu6",r[r.prelu=3]="prelu",r[r.leakyrelu=4]="leakyrelu",r[r.sigmoid=5]="sigmoid",r[r.elu=6]="elu"})($u||($u={}));var DB;function rst(r){DB=r.wasm.cwrap(bi,null,["number","array","number","number","array","number","number","number","number","number","number","number","number"])}function nst(r){let{inputs:t,backend:e,attrs:n}=r,{a:o,b:s,bias:i,preluActivationWeights:a}=t;if(o.dtype!=="float32"||s.dtype!=="float32")throw new Error("_FusedMatMul for non non-float32 tensors not yet supported.");let{transposeA:u,transposeB:l,activation:c,leakyreluAlpha:p}=n,m=e.dataIdMap.get(o.dataId).id,f=e.dataIdMap.get(s.dataId).id,d=0;if(i!=null){let $=e.dataIdMap.get(i.dataId);if($.shape.length!==1)throw new Error(`_FusedMatMul only supports rank-1 bias but got rank ${$.shape.length}.`);d=$.id}let h=a==null?0:e.dataIdMap.get(a.dataId).id,g=$u[c];if(g==null)throw new Error(`${c} activation not yet supported for FusedConv2D in the wasm backend.`);let x=u?o.shape[2]:o.shape[1],b=l?s.shape[1]:s.shape[2],w=zr.assertAndGetBroadcastShape(o.shape.slice(0,-2),s.shape.slice(0,-2)),C=e.makeOutput([...w,x,b],o.dtype),N=e.dataIdMap.get(C.dataId).id,_=new Uint8Array(new Int32Array(o.shape).buffer),A=new Uint8Array(new Int32Array(s.shape).buffer);return DB(m,_,o.shape.length,f,A,s.shape.length,u,l,g,d,h,p||0,N),C}var RB={kernelName:bi,backendName:"wasm",setupFunc:rst,kernelFunc:nst};function se(r,t){let e;function n(s){e=s.wasm.cwrap(r,null,["number","number","number"])}function o(s){let{backend:i,inputs:{x:a}}=s,u=i.dataIdMap.get(a.dataId).id,l=i.makeOutput(a.shape,t||a.dtype),c=i.dataIdMap.get(l.dataId).id;return y.sizeFromShape(l.shape)===0||e(u,Ht[a.dtype],c),l}return{kernelName:r,backendName:"wasm",setupFunc:n,kernelFunc:o}}var FB=se(oi);function ue(r,t,e){let n;function o(i){n=i.wasm.cwrap(r,null,["number","array","number","number","array","number","number","number"])}function s(i){let{backend:a,inputs:u}=i,{a:l,b:c}=u,p=a.dataIdMap.get(l.dataId).id,m=a.dataIdMap.get(c.dataId).id,f=e!=null?e:l.dtype,d=S.assertAndGetBroadcastShape(l.shape,c.shape),h=a.makeOutput(d,f);if(y.sizeFromShape(d)===0)return h;let g=new Uint8Array(new Int32Array(l.shape).buffer),x=new Uint8Array(new Int32Array(c.shape).buffer),b=a.dataIdMap.get(h.dataId).id;return(()=>n(p,g,l.shape.length,m,x,c.shape.length,Ht[l.dtype],b))(),h}return{kernelName:r,backendName:"wasm",setupFunc:o,kernelFunc:s}}var ost=!0,OB=ue(Yn,ost);var PB;function sst(r){PB=r.wasm.cwrap(Vo,null,["array","number","number","number"])}function ist(r){let{inputs:t,backend:e}=r,n=e.makeOutput(t[0].shape,t[0].dtype);if(y.sizeFromShape(n.shape)===0)return n;let o=t.map(a=>e.dataIdMap.get(a.dataId).id),s=new Uint8Array(new Int32Array(o).buffer),i=e.dataIdMap.get(n.dataId).id;return PB(s,o.length,Ht[n.dtype],i),n}var LB={kernelName:Vo,backendName:"wasm",setupFunc:sst,kernelFunc:ist};function jc(r){let{inputs:{x:t},backend:e}=r,n=e.makeOutput(t.shape,t.dtype),o=e.typedArrayFromHeap(t);return e.typedArrayFromHeap(n).set(o),n}var MB={kernelName:lo,backendName:"wasm",kernelFunc:jc};var zB;function ast(r){zB=r.wasm.cwrap(Jn,null,["number","array","number","number","number","array","number"])}function so(r){let{inputs:t,backend:e,attrs:n}=r,[o,s]=ust(t.x.shape,n.perm),i=!0;for(let d=0;d<s.length;d++)s[d]!==d&&(i=!1);let a=lst(t.x.shape,n.perm),u={dataId:t.x.dataId,shape:o,dtype:t.x.dtype};if(i){let d=jc({inputs:t,backend:e});return d.shape=a,d}let l=e.makeOutput(a,u.dtype),c=e.dataIdMap.get(u.dataId).id,p=e.dataIdMap.get(l.dataId).id,m=new Uint8Array(new Int32Array(s).buffer),f=new Uint8Array(new Int32Array(u.shape).buffer);return zB(c,f,u.shape.length,Ht[u.dtype],p,m,s.length),l}function lst(r,t){let e=new Array(r.length);for(let n=0;n<e.length;n++)e[n]=r[t[n]];return e}function ust(r,t){let e=[],n=[];for(let o=0;o<r.length;++o)r[o]!==1&&e.push(r[o]),r[t[o]]!==1&&n.push(t[o]);for(let o=0;o<n.length;++o){let s=-1;for(let i=0;i<n.length;++i)n[i]>=o&&(s===-1||n[s]>n[i])&&(s=i);n[s]=o}return[e,n]}var BB={kernelName:Jn,backendName:"wasm",kernelFunc:so,setupFunc:ast};function yn(r,t,e){let n=r.shape,o=r.shape.length,s=y.parseAxisParam(t,n),i=s,a=S.getAxesPermutation(i,o),u=null,l=!1;if(a!=null){let c=new Array(o);for(let f=0;f<c.length;f++)c[f]=n[a[f]];i=S.getInnerMostAxes(i.length,o),u=so({inputs:{x:r},attrs:{perm:a},backend:e});let p=e.dataIdMap.get(r.dataId).id;e.dataIdMap.get(u.dataId).id!==p&&(l=!0)}return{transposed:u,originalAxes:s,axes:i,inputWasTransposed:l}}var VB;function cst(r){VB=r.wasm.cwrap(oa,null,["number, number, number"])}function pst(r){let{backend:t,inputs:e,attrs:n}=r,{axis:o,keepDims:s}=n,{x:i}=e,u=t.dataIdMap.get(i.dataId).id,l=i,{transposed:c,axes:p,originalAxes:m,inputWasTransposed:f}=yn(i,o,t);if(f){let w=t.dataIdMap.get(c.dataId).id;l=c,u=w}let d=l.shape.length;S.assertAxesAreInnerMostDims("all",p,d);let[h,g]=S.computeOutAndReduceShapes(l.shape,p),x=y.sizeFromShape(g),b=t.makeOutput(h,i.dtype);if(y.sizeFromShape(l.shape)!==0){let w=t.dataIdMap.get(b.dataId).id;VB(u,x,w)}if(f&&t.disposeData(c.dataId),s){let w=S.expandShapeToKeepDim(b.shape,m);b.shape=w}return b}var GB={kernelName:oa,backendName:"wasm",setupFunc:cst,kernelFunc:pst};var WB;function mst(r){WB=r.wasm.cwrap(sa,null,["number, number, number"])}function fst(r){let{backend:t,inputs:e,attrs:n}=r,{axis:o,keepDims:s}=n,{x:i}=e,u=t.dataIdMap.get(i.dataId).id,l=i,{transposed:c,axes:p,originalAxes:m,inputWasTransposed:f}=yn(i,o,t);if(f){let w=t.dataIdMap.get(c.dataId).id;l=c,u=w}let d=l.shape.length;S.assertAxesAreInnerMostDims("any",p,d);let[h,g]=S.computeOutAndReduceShapes(l.shape,p),x=y.sizeFromShape(g),b=t.makeOutput(h,i.dtype);if(y.sizeFromShape(l.shape)!==0){let w=t.dataIdMap.get(b.dataId).id;WB(u,x,w)}if(f&&t.disposeData(c.dataId),s){let w=S.expandShapeToKeepDim(b.shape,m);b.shape=w}return b}var UB={kernelName:sa,backendName:"wasm",setupFunc:mst,kernelFunc:fst};var HB;function dst(r){HB=r.wasm.cwrap(Go,null,["number","number","number","number","number"])}function hst(r){let{backend:t,inputs:e,attrs:n}=r,{axis:o}=n,{x:s}=e,i=t.dataIdMap.get(s.dataId).id,a=i,u=s,{transposed:l,axes:c,inputWasTransposed:p}=yn(s,o,t);if(p){let x=t.dataIdMap.get(l.dataId).id;x!==i&&(u=l,a=x)}let m=u.shape.slice(0,-1),f=t.makeOutput(m,"int32"),d=t.dataIdMap.get(f.dataId).id,h=y.sizeFromShape(f.shape),g=u.shape[c[0]];return HB(a,Ht[u.dtype],h,g,d),p&&t.disposeData(l.dataId),f}var qB={kernelName:Go,backendName:"wasm",kernelFunc:hst,setupFunc:dst};var KB;function gst(r){KB=r.wasm.cwrap(Wo,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function xst(r){let{inputs:t,attrs:e,backend:n}=r,o=t.x,s=n.dataIdMap.get(o.dataId).id,{filterSize:i,strides:a,pad:u,dimRoundingMode:l}=e,c=S.computePool2DInfo(o.shape,i,a,1,u,l),p=c.filterHeight,m=c.filterWidth,f=c.padInfo.top,d=c.padInfo.right,h=c.padInfo.bottom,g=c.padInfo.left,x=c.strideHeight,b=c.strideWidth,w=c.inChannels;if(c.dataFormat!=="channelsLast")throw new Error(`wasm backend does not support dataFormat:'${c.dataFormat}'. Please use 'channelsLast'.`);if(c.dilationWidth!==1||c.dilationHeight!==1)throw new Error(`was backend only supports average pooling with dilation = [1, 1], got [${c.dilationHeight}, ${c.dilationWidth}].`);let C=n.makeOutput(c.outShape,"float32"),N=n.dataIdMap.get(C.dataId).id;return KB(s,o.shape[0],o.shape[1],o.shape[2],p,m,f,d,h,g,x,b,w,N),C}var jB={kernelName:Wo,backendName:"wasm",setupFunc:gst,kernelFunc:xst};function ir(r){let{inputs:t,attrs:e}=r,{x:n}=t,{shape:o}=e,s=y.sizeFromShape(n.shape),i=y.inferFromImplicitShape(o,s);return y.assert(s===y.sizeFromShape(i),()=>`new shape: ${i}, old shape: ${n.shape}. New shape and old shape must have the same number of elements.`),r.backend.incRef(n.dataId),{dataId:n.dataId,shape:i,dtype:n.dtype}}var XB={kernelName:mi,backendName:"wasm",kernelFunc:ir};var YB;function yst(r){YB=r.wasm.cwrap(Uo,null,["number","array","number","number","array","number","number","number","number"])}function bst(r){let{inputs:t,backend:e,attrs:n}=r,{a:o,b:s}=t,{transposeA:i,transposeB:a}=n;if(o.dtype!=="float32"||s.dtype!=="float32")throw new Error("BatchMatMul for non non-float32 tensors not yet supported.");let u=o.shape.length,l=s.shape.length,c=i?o.shape[u-2]:o.shape[u-1],p=a?s.shape[l-1]:s.shape[l-2],m=i?o.shape[u-1]:o.shape[u-2],f=a?s.shape[l-2]:s.shape[l-1],d=o.shape.slice(0,-2),h=s.shape.slice(0,-2),g=y.sizeFromShape(d),x=y.sizeFromShape(h),w=zr.assertAndGetBroadcastShape(o.shape.slice(0,-2),s.shape.slice(0,-2)).concat([m,f]);y.assert(c===p,()=>`Error in matMul: inner shapes (${c}) and (${p}) of Tensors with shapes ${o.shape} and ${s.shape} and transposeA=${i} and transposeB=${a} must match.`);let C=i?[g,c,m]:[g,m,c],N=a?[x,f,p]:[x,p,f],_=ir({inputs:{x:o},backend:e,attrs:{shape:C}}),A=ir({inputs:{x:s},backend:e,attrs:{shape:N}}),$=e.dataIdMap.get(_.dataId).id,F=e.dataIdMap.get(A.dataId).id,P=i?_.shape[2]:_.shape[1],V=a?A.shape[1]:A.shape[2],G=Math.max(g,x),W=e.makeOutput([G,P,V],_.dtype),q=e.dataIdMap.get(W.dataId).id,H=new Uint8Array(new Int32Array(_.shape).buffer),j=new Uint8Array(new Int32Array(A.shape).buffer);return YB($,H,_.shape.length,F,j,A.shape.length,i,a,q),e.disposeData(_.dataId),e.disposeData(A.dataId),W.shape=w,W}var ZB={kernelName:Uo,backendName:"wasm",setupFunc:yst,kernelFunc:bst};function Po(r){let{inputs:{x:t},attrs:{begin:e,size:n},backend:o}=r,[s,i]=Pe.parseSliceParams(t,e,n),a=Pe.isSliceContinous(t.shape,s,i),u=o.readSync(t.dataId),l=o.makeOutput(i,t.dtype),c=y.computeStrides(t.shape),p=o.dataIdMap.get(l.dataId);if(a){let d=Pe.computeFlatOffset(s,c);return t.dtype==="string"?p.stringBytes=u.slice(d,d+y.sizeFromShape(i)):o.typedArrayFromHeap(l).set(u.subarray(d,d+y.sizeFromShape(i))),l}if(t.dtype==="string"){let d=$c(u,s,i,t.shape,t.dtype);return p.stringBytes=d,l}let m=o.typedArrayFromHeap(l),f=t.shape.length;if(f===2)wst(u,c[0],m,s,i);else if(f===3)Cst(u,c[0],c[1],m,s,i);else if(f===4)Ist(u,c[0],c[1],c[2],m,s,i);else{let d=$c(u,s,i,t.shape,t.dtype);m.set(d)}return l}function wst(r,t,e,n,o){let s=0,i=n[0],a=n[1],u=i+o[0];for(let l=i;l<u;l++){let c=l*t+a;e.set(r.subarray(c,c+o[1]),s),s+=o[1]}}function Cst(r,t,e,n,o,s){let i=0,a=o[0],u=o[1],l=o[2],c=a+s[0],p=u+s[1];for(let m=a;m<c;m++)for(let f=u;f<p;f++){let d=m*t+f*e+l;n.set(r.subarray(d,d+s[2]),i),i+=s[2]}}function Ist(r,t,e,n,o,s,i){let a=0,u=s[0],l=s[1],c=s[2],p=u+i[0],m=l+i[1],f=c+i[2],d=s[3];for(let h=u;h<p;h++)for(let g=l;g<m;g++)for(let x=c;x<f;x++){let b=h*t+g*e+x*n+d;o.set(r.subarray(b,b+i[3]),a),a+=i[3]}}var JB={kernelName:di,backendName:"wasm",kernelFunc:Po};function vst(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{blockShape:s,crops:i}=n,a=s.reduce((x,b)=>x*b),u=S.getReshaped(o.shape,s,a),l=S.getPermuted(u.length,s.length),c=S.getReshapedPermuted(o.shape,s,a),p=S.getSliceBeginCoords(i,s.length),m=S.getSliceSize(c,i,s.length),f=ir({inputs:{x:o},backend:e,attrs:{shape:u}}),d=so({inputs:{x:f},backend:e,attrs:{perm:l}}),h=ir({inputs:{x:d},backend:e,attrs:{shape:c}}),g=Po({inputs:{x:h},backend:e,attrs:{begin:p,size:m}});return e.disposeData(f.dataId),e.disposeData(d.dataId),e.disposeData(f.dataId),g}var QB={kernelName:si,backendName:"wasm",kernelFunc:vst};function ei(r){let{inputs:{x:t},attrs:{dtype:e},backend:n}=r,o=n.makeOutput(t.shape,e),s=n.typedArrayFromHeap(t);return n.typedArrayFromHeap(o).set(s),o}var tV={kernelName:io,backendName:"wasm",kernelFunc:ei};var eV=se(Ho);var rV;function Sst(r){rV=r.wasm.cwrap(ao,null,["number","number","number","number"])}function Nst(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{clipValueMin:s,clipValueMax:i}=n,a=e.dataIdMap.get(o.dataId).id,u=e.makeOutput(o.shape,o.dtype),l=e.dataIdMap.get(u.dataId).id;return rV(a,s,i,l),u}var nV={kernelName:ao,backendName:"wasm",setupFunc:Sst,kernelFunc:Nst};function ST(r){let{inputs:t,backend:e}=r,n=y.parseAxisParam(r.attrs.axis,t[0].shape)[0],o=t.map(f=>f.shape);S.assertParamsConsistent(o,n);let s=S.computeOutShape(t.map(f=>f.shape),n),i=t.filter(f=>y.sizeFromShape(f.shape)>0);if(i.length===1)return jc({inputs:{x:i[0]},backend:e});let a=e.makeOutput(s,t[0].dtype);if(y.sizeFromShape(s)===0)return a;if(i[0].dtype==="string"){let f=i.map(w=>{let C=y.sizeFromShape(w.shape.slice(n));return ir({inputs:{x:w},backend:e,attrs:{shape:[-1,C]}})}),d=f.map(w=>({vals:e.readSync(w.dataId),shape:w.shape}));s=S.computeOutShape(f.map(w=>w.shape),1);let h=f[0].shape[0]===1,g=Ec(d,s,t[0].dtype,h),x=S.computeOutShape(i.map(w=>w.shape),n);a.shape=x;let b=e.dataIdMap.get(a.dataId);return b.stringBytes=S.fromStringArrayToUint8(g),f.forEach(w=>e.disposeData(w.dataId)),a}let u=y.sizeFromShape(i[0].shape.slice(0,n)),l=0,c=i.map(f=>{let d=y.sizeFromShape(f.shape.slice(n));return l+=d,d}),p=i.map(f=>e.typedArrayFromHeap(f)),m=e.typedArrayFromHeap(a);for(let f=0;f<u;f++){let d=f*l;for(let h=0;h<p.length;h++){let g=c[h],x=f*g,b=p[h].subarray(x,x+g);m.set(b,d),d+=g}}return a}var oV={kernelName:ii,backendName:"wasm",kernelFunc:ST};var sV;function kst(r){sV=r.wasm.cwrap(qo,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Tst(r){let{inputs:t,attrs:e,backend:n}=r,{x:o,filter:s}=t,i=n.dataIdMap.get(o.dataId).id,a=n.dataIdMap.get(s.dataId).id,{strides:u,dilations:l,pad:c,dimRoundingMode:p,dataFormat:m}=e,f=S.convertConv2DDataFormat(m),d=S.computeConv2DInfo(o.shape,s.shape,u,l,c,p,!1,f),h=d.filterHeight,g=d.filterWidth,x=d.padInfo.top,b=d.padInfo.right,w=d.padInfo.bottom,C=d.padInfo.left,N=d.dilationHeight,_=d.dilationWidth,A=d.strideHeight,$=d.strideWidth,F=d.inChannels,P=d.outChannels,V=d.padInfo.type==="SAME"?1:0;if(d.dataFormat!=="channelsLast")throw new Error(`wasm backend Conv2D does not support dataFormat:'${d.dataFormat}'. Please use 'channelsLast'.`);let G=n.makeOutput(d.outShape,"float32"),W=n.dataIdMap.get(G.dataId).id;return sV(i,o.shape[0],o.shape[1],o.shape[2],a,h,g,x,b,w,C,V,N,_,A,$,F,P,W),G}var iV={kernelName:qo,backendName:"wasm",setupFunc:kst,kernelFunc:Tst};var aV;function Est(r){aV=r.wasm.cwrap(Ko,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function _st(r){let{backend:t,inputs:e,attrs:n}=r,{dy:o,filter:s}=e,{strides:i,pad:a,dataFormat:u,dimRoundingMode:l,inputShape:c}=n,p=1,m=S.convertConv2DDataFormat(u),f=S.computeConv2DInfo(c,s.shape,i,p,a,l,!1,m),{batchSize:d,filterHeight:h,filterWidth:g,inChannels:x,inHeight:b,inWidth:w,outChannels:C,outHeight:N,outWidth:_,strideHeight:A,strideWidth:$}=f,F=h-1-f.padInfo.top,P=g-1-f.padInfo.left,V=f.dataFormat==="channelsLast",G=y.computeStrides(f.inShape),W=y.computeStrides(o.shape),[q,H,j]=y.computeStrides(s.shape),Y=G[0],Z=V?G[1]:G[2],et=V?G[2]:1,rt=V?1:G[1],ot=W[0],at=V?W[1]:W[2],nt=V?W[2]:1,it=V?1:W[1],dt=t.makeOutput(f.inShape,"float32"),ht=t.dataIdMap.get(dt.dataId).id,bt=t.dataIdMap.get(o.dataId).id,Tt=t.dataIdMap.get(s.dataId).id;return aV(bt,Tt,d,h,g,b,w,x,N,_,C,A,$,F,P,q,H,j,Y,Z,et,rt,ot,at,nt,it,ht),dt}var lV={kernelName:Ko,backendName:"wasm",setupFunc:Est,kernelFunc:_st};var uV=se(jo);var cV=se(Xo);var NT;(function(r){r[r.bilinear=0]="bilinear",r[r.nearest=1]="nearest"})(NT||(NT={}));var pV;function Ast(r){pV=r.wasm.cwrap(ma,null,["number","number","number","number","array","number","number","number","number","number"])}function $st(r){let{backend:t,inputs:e,attrs:n}=r,{method:o,extrapolationValue:s,cropSize:i}=n,{image:a,boxes:u,boxInd:l}=e,c=u.shape[0],[p,m]=i,f=[c,p,m,a.shape[3]],d=t.dataIdMap.get(a.dataId),h;a.dtype!=="float32"&&(h=ei({backend:t,inputs:{x:a},attrs:{dtype:"float32"}}),d=t.dataIdMap.get(h.dataId));let g=d.id,x=t.dataIdMap.get(u.dataId).id,b=t.dataIdMap.get(l.dataId).id,w=t.makeOutput(f,"float32"),C=t.dataIdMap.get(w.dataId).id,N=new Uint8Array(new Int32Array(a.shape).buffer);return pV(g,x,b,c,N,p,m,NT[o],s,C),h!=null&&t.disposeData(h.dataId),w}var mV={kernelName:ma,backendName:"wasm",setupFunc:Ast,kernelFunc:$st};var fV;function Dst(r){fV=r.wasm.cwrap(pa,null,["number","number","number","number","number","number"])}function Rst(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{axis:s,exclusive:i,reverse:a}=n,u=o.shape.length;y.assert(o.dtype==="float32"||o.dtype==="int32",()=>`cumprod does not support ${o.dtype} tensors in the WASM backend`);let l=S.getAxesPermutation([s],u),c=o;l!==null&&(c=so({inputs:{x:o},attrs:{perm:l},backend:e}));let p=S.getInnerMostAxes(1,u)[0];S.assertAxesAreInnerMostDims("cumprod",[p],u);let m=e.makeOutput(c.shape,c.dtype),f=c.shape[p],d=e.dataIdMap.get(c.dataId).id,h=e.dataIdMap.get(m.dataId).id;fV(d,i?1:0,a?1:0,f,h,Ht[o.dtype]);let g=m;if(l!==null){let x=S.getUndoAxesPermutation(l);g=so({inputs:{x:m},attrs:{perm:x},backend:e}),e.disposeData(c.dataId),e.disposeData(m.dataId)}return g}var dV={kernelName:pa,backendName:"wasm",setupFunc:Dst,kernelFunc:Rst};var hV;function Fst(r){hV=r.wasm.cwrap(Yo,null,["number","number","number","number","number","number"])}function Ost(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{axis:s,exclusive:i,reverse:a}=n,u=o.shape.length;y.assert(o.dtype==="float32"||o.dtype==="int32",()=>`cumsum does not support ${o.dtype} tensors in the WASM backend`);let l=S.getAxesPermutation([s],u),c=o;l!==null&&(c=so({inputs:{x:o},attrs:{perm:l},backend:e}));let p=S.getInnerMostAxes(1,u)[0];S.assertAxesAreInnerMostDims("cumsum",[p],u);let m=e.makeOutput(c.shape,c.dtype),f=c.shape[p],d=e.dataIdMap.get(c.dataId).id,h=e.dataIdMap.get(m.dataId).id;hV(d,i?1:0,a?1:0,f,h,Ht[o.dtype]);let g=m;if(l!==null){let x=S.getUndoAxesPermutation(l);g=so({inputs:{x:m},attrs:{perm:x},backend:e}),e.disposeData(c.dataId),e.disposeData(m.dataId)}return g}var gV={kernelName:Yo,backendName:"wasm",setupFunc:Fst,kernelFunc:Ost};var xV;function Pst(r){xV=r.wasm.cwrap(fa,null,["number","number","number","array","number","array","array","number","number"])}function Lst(r){let{backend:t,inputs:e,attrs:n}=r,{x:o}=e,{blockSize:s,dataFormat:i}=n,a=o.shape[0],u=i==="NHWC"?o.shape[1]:o.shape[2],l=i==="NHWC"?o.shape[2]:o.shape[3],c=i==="NHWC"?o.shape[3]:o.shape[1],p=u*s,m=l*s,f=c/(s*s),d=i==="NHWC"?[a,p,m,f]:[a,f,p,m],h=t.makeOutput(d,"float32"),x=t.dataIdMap.get(o.dataId).id,b=new Uint8Array(new Int32Array(y.computeStrides(o.shape)).buffer),w=new Uint8Array(new Int32Array(d).buffer),C=new Uint8Array(new Int32Array(y.computeStrides(d)).buffer),N=t.dataIdMap.get(h.dataId).id;return xV(x,s,i==="NHWC"?1:0,b,o.shape.length-1,w,C,d.length,N),h}var yV={kernelName:fa,backendName:"wasm",setupFunc:Pst,kernelFunc:Lst};var bV;function Mst(r){bV=r.wasm.cwrap(Zo,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function zst(r){let{inputs:t,attrs:e,backend:n}=r,{x:o,filter:s}=t,i=n.dataIdMap.get(o.dataId).id,a=n.dataIdMap.get(s.dataId).id,{strides:u,dilations:l,pad:c,dimRoundingMode:p}=e,m=l==null?[1,1]:l,f=S.computeConv2DInfo(o.shape,s.shape,u,m,c,p,!0),d=f.filterHeight,h=f.filterWidth,g=f.padInfo.top,x=f.padInfo.right,b=f.padInfo.bottom,w=f.padInfo.left,C=f.dilationHeight,N=f.dilationWidth,_=f.strideHeight,A=f.strideWidth,$=f.inChannels,F=f.outChannels,P=f.padInfo.type==="SAME"?1:0;if(f.dataFormat!=="channelsLast")throw new Error(`wasm backend DepthwiseConv2dNative does not support dataFormat:'${f.dataFormat}'. Please use 'channelsLast'.`);let V=n.makeOutput(f.outShape,"float32"),G=n.dataIdMap.get(V.dataId).id;return bV(i,o.shape[0],o.shape[1],o.shape[2],a,d,h,g,x,b,w,P,C,N,_,A,$,F,G),V}var wV={kernelName:Zo,backendName:"wasm",setupFunc:Mst,kernelFunc:zst};var CV=se(Qo);var Bst=!1,IV=ue(ha,Bst,"bool");var vV=se(ts,"float32");function oI(r){let{inputs:t,attrs:e,backend:n}=r,{input:o}=t,{dim:s}=e,i=o.shape.length,a=o.shape.slice(),u=s;return s<0&&(y.assert(-(i+1)<=s,()=>`Axis must be in the interval [${-(i+1)}, ${i}]`),u=i+s+1),a.splice(u,0,1),ir({inputs:{x:o},backend:n,attrs:{shape:a}})}var SV={kernelName:ai,backendName:"wasm",kernelFunc:oI};function kT(r){let{attrs:{shape:t,value:e,dtype:n},backend:o}=r,s=o.makeOutput(t,n);return o.typedArrayFromHeap(s).fill(e),s}var NV={kernelName:Al,backendName:"wasm",kernelFunc:kT};var kV;function Vst(r){kV=r.wasm.cwrap(xa,null,["number","number","number","number","number","number"])}function Gst(r){let{inputs:t,backend:e}=r,{image:n}=t,o=e.makeOutput(n.shape,n.dtype),s=e.dataIdMap.get(n.dataId).id,i=e.dataIdMap.get(o.dataId).id,[a,u,l,c]=n.shape;return kV(s,a,u,l,c,i),o}var TV={kernelName:xa,backendName:"wasm",kernelFunc:Gst,setupFunc:Vst};var EV=se(es);var Wst=!1,_V=ue(rs,Wst);var AV;function Ust(r){AV=r.wasm.cwrap(ns,null,["number","number","number","number","number","number","number"])}function Hst(r){let{backend:t,inputs:e,attrs:n}=r,{varianceEpsilon:o}=n,{x:s,mean:i,variance:a,offset:u,scale:l}=e,c=t.dataIdMap.get(s.dataId).id,p=t.dataIdMap.get(i.dataId).id,m=t.dataIdMap.get(a.dataId).id,f=u!=null?t.dataIdMap.get(u.dataId).id:0,d=l!=null?t.dataIdMap.get(l.dataId).id:0,h=t.makeOutput(s.shape,s.dtype);if(y.sizeFromShape(s.shape)===0)return h;let g=t.dataIdMap.get(h.dataId).id;return AV(c,p,m,f,d,o,g),h}var $V={kernelName:ns,backendName:"wasm",setupFunc:Ust,kernelFunc:Hst};var DV;function qst(r){DV=r.wasm.cwrap(wi,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Kst(r){let{inputs:t,attrs:e,backend:n}=r,{x:o,filter:s,bias:i,preluActivationWeights:a}=t,{strides:u,pad:l,dilations:c,dataFormat:p,dimRoundingMode:m,activation:f,leakyreluAlpha:d}=e,h=S.computeConv2DInfo(o.shape,s.shape,u,c,l,m),g=$u[f];if(g==null)throw new Error(`${f} activation not yet supported for FusedConv2D in the wasm backend.`);let x=n.dataIdMap.get(o.dataId).id,b=n.dataIdMap.get(s.dataId).id,w=h.outChannels,C=0;if(i!=null){let nt=n.dataIdMap.get(i.dataId);if(nt.shape.length!==1)throw new Error(`FusedConv2D only supports rank-1 bias but got rank ${nt.shape.length}.`);if(nt.shape[0]!==w)throw new Error(`FusedConv2D bias shape (${nt.shape}) does not match the number of output channels (${w})`);C=nt.id}let N=h.filterHeight,_=h.filterWidth,A=h.padInfo.top,$=h.padInfo.right,F=h.padInfo.bottom,P=h.padInfo.left,V=h.dilationHeight,G=h.dilationWidth,W=h.strideHeight,q=h.strideWidth,H=h.inChannels,j=h.padInfo.type==="SAME"?1:0,Y=h.batchSize,Z=h.inHeight,et=h.inWidth;if(p!=="NHWC")throw new Error(`wasm backend FusedConv2D does not support dataFormat:'${p}'. Please use 'NHWC'.`);let rt=n.makeOutput(h.outShape,"float32"),ot=n.dataIdMap.get(rt.dataId).id,at=a==null?0:n.dataIdMap.get(a.dataId).id;return DV(x,Y,Z,et,b,N,_,C,A,$,F,P,j,V,G,W,q,H,w,g,at,d||0,ot),rt}var RV={kernelName:wi,backendName:"wasm",setupFunc:qst,kernelFunc:Kst};var FV;function jst(r){FV=r.wasm.cwrap(Ci,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Xst(r){let{inputs:t,attrs:e,backend:n}=r,{x:o,filter:s,bias:i,preluActivationWeights:a}=t,{strides:u,pad:l,dilations:c,dataFormat:p,dimRoundingMode:m,activation:f,leakyreluAlpha:d}=e,h=S.computeConv2DInfo(o.shape,s.shape,u,c,l,m,!0),g=$u[f];if(g==null)throw new Error(`${f} activation not yet supported for FusedDepthwiseConv2D in the wasm backend.`);let x=n.dataIdMap.get(o.dataId).id,b=n.dataIdMap.get(s.dataId).id,w=h.outChannels,C=0;if(i!=null){let nt=n.dataIdMap.get(i.dataId);if(nt.shape.length!==1)throw new Error(`FusedDepthwiseConv2D only supports rank-1 bias but got rank ${nt.shape.length}.`);if(nt.shape[0]!==w)throw new Error(`FusedDepthwiseConv2D bias shape (${nt.shape}) does not match the number of output channels (${w})`);C=nt.id}let N=h.filterHeight,_=h.filterWidth,A=h.padInfo.top,$=h.padInfo.right,F=h.padInfo.bottom,P=h.padInfo.left,V=h.dilationHeight,G=h.dilationWidth,W=h.strideHeight,q=h.strideWidth,H=h.inChannels,j=h.padInfo.type==="SAME"?1:0,Y=h.batchSize,Z=h.inHeight,et=h.inWidth;if(p!=="NHWC")throw new Error(`wasm backend FusedDepthwiseConv2D does not support dataFormat:'${p}'. Please use 'NHWC'.`);let rt=n.makeOutput(h.outShape,"float32"),ot=n.dataIdMap.get(rt.dataId).id,at=a==null?0:n.dataIdMap.get(a.dataId).id;return FV(x,Y,Z,et,b,N,_,C,A,$,F,P,j,V,G,W,q,H,w,g,at,d||0,ot),rt}var OV={kernelName:Ci,backendName:"wasm",setupFunc:jst,kernelFunc:Xst};var PV;function Yst(r){PV=r.wasm.cwrap(ya,null,["number","number","number","number","number","number","array","number"])}function Zst(r){let{backend:t,inputs:e}=r,{params:n,indices:o}=e,[s,i,a,u]=Qg.prepareAndValidate(n,o),l=t.makeOutput(s,n.dtype);if(i===0)return l;let c=o.shape,p=c[c.length-1],f=t.dataIdMap.get(n.dataId).id,h=t.dataIdMap.get(o.dataId).id,g=new Uint8Array(new Int32Array(u).buffer),x=t.dataIdMap.get(l.dataId).id;return PV(f,Ht[n.dtype],h,i,p,a,g,x),l}var LV={kernelName:ya,backendName:"wasm",setupFunc:Yst,kernelFunc:Zst};var MV;function Jst(r){MV=r.wasm.cwrap("Gather",null,["number","number","array","number","number","number","array","number"])}function Qst(r){let{backend:t,inputs:e,attrs:n}=r,{x:o,indices:s}=e,{axis:i,batchDims:a}=n,u=y.parseAxisParam(i,o.shape)[0],l=t.readSync(s.dataId),c=o.shape[u];for(let F=0;F<l.length;++F){let P=l[F];y.assert(P<=c-1&&P>=0,()=>`GatherV2: the index value ${P} is not in [0, ${c-1}]`)}let p=S.segment_util.collectGatherOpShapeInfo(o,s,u,a),m=ir({inputs:{x:o},attrs:{shape:[p.batchSize,p.outerSize,p.dimSize,p.sliceSize]},backend:t}),f=y.sizeFromShape(s.shape),d=ir({inputs:{x:s},attrs:{shape:[p.batchSize,f/p.batchSize]},backend:t}),h=[p.batchSize,p.outerSize,f/p.batchSize,p.sliceSize],g=t.makeOutput(h,o.dtype);if(y.sizeFromShape(o.shape)===0)return g;let x=m.shape.length-1,w=t.dataIdMap.get(m.dataId).id,N=t.dataIdMap.get(d.dataId).id,_=t.dataIdMap.get(g.dataId).id,A=new Uint8Array(new Int32Array(y.computeStrides(m.shape)).buffer),$=new Uint8Array(new Int32Array(y.computeStrides(h)).buffer);return MV(w,Ht[o.dtype],A,x,N,p.batchSize,$,_),t.disposeData(m.dataId),t.disposeData(d.dataId),g.shape=p.outputShape,g}var zV={kernelName:li,backendName:"wasm",setupFunc:Jst,kernelFunc:Qst};var tit=!1,BV=ue(ba,tit,"bool");var eit=!1,VV=ue(os,eit,"bool");var GV;function rit(r){GV=r.wasm.cwrap(ss,null,["number","number","number","number"])}function nit(r){let{inputs:{x:t},attrs:{alpha:e},backend:n}=r,o=n.dataIdMap.get(t.dataId).id,s=n.makeOutput(t.shape,"float32");if(y.sizeFromShape(t.shape)!==0){let i=n.dataIdMap.get(s.dataId).id;GV(o,Ht[t.dtype],e,i)}return s}var WV={kernelName:ss,backendName:"wasm",setupFunc:rit,kernelFunc:nit};var oit=!1,UV=ue(va,oit,"bool");var sit=!1,HV=ue(Sa,sit,"bool");var qV=se(is);var iit=!1,KV=ue(ka,iit,"bool");var jV=se(Ta);var ait=!1,XV=ue(Ea,ait,"bool");var lit=!1,YV=ue(a1,lit,"bool");var ZV;function uit(r){ZV=r.wasm.cwrap(as,null,["number","number","number","number"])}function cit(r){let{backend:t,inputs:e,attrs:n}=r,{reductionIndices:o,keepDims:s}=n,{x:i}=e,u=t.dataIdMap.get(i.dataId).id,l=i,{transposed:c,axes:p,originalAxes:m,inputWasTransposed:f}=yn(i,o,t);if(f){let w=t.dataIdMap.get(c.dataId).id;l=c,u=w}let d=l.shape.length;S.assertAxesAreInnerMostDims("max",p,d);let[h,g]=S.computeOutAndReduceShapes(l.shape,p),x=y.sizeFromShape(g),b=t.makeOutput(h,i.dtype);if(y.sizeFromShape(l.shape)!==0){let w=t.dataIdMap.get(b.dataId).id;ZV(u,Ht[i.dtype],x,w)}if(f&&t.disposeData(c.dataId),s){let w=S.expandShapeToKeepDim(b.shape,m);b.shape=w}return b}var JV={kernelName:as,backendName:"wasm",setupFunc:uit,kernelFunc:cit};var pit=!1,QV=ue(ls,pit);var tG;function mit(r){tG=r.wasm.cwrap(us,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function fit(r){let{inputs:t,attrs:e,backend:n}=r,o=t.x,s=n.dataIdMap.get(o.dataId).id;y.assert(o.dtype==="float32",()=>`Error in MaxPool: only float32 input is supported. Got ${o.dtype}.`);let{filterSize:i,strides:a,pad:u,dimRoundingMode:l}=e,c=S.computePool2DInfo(o.shape,i,a,1,u,l),p=c.filterHeight,m=c.filterWidth,f=c.padInfo.top,d=c.padInfo.right,h=c.padInfo.bottom,g=c.padInfo.left,x=c.dilationHeight,b=c.dilationWidth,w=c.strideHeight,C=c.strideWidth,N=c.inChannels,_=c.outChannels;if(c.dataFormat!=="channelsLast")throw new Error(`wasm backend does not support dataFormat:'${c.dataFormat}'. Please use 'channelsLast'.`);let A=n.makeOutput(c.outShape,"float32"),$=n.dataIdMap.get(A.dataId).id;return tG(s,o.shape[0],o.shape[1],o.shape[2],p,m,f,d,h,g,x,b,w,C,N,_,$),A}var eG={kernelName:us,backendName:"wasm",setupFunc:mit,kernelFunc:fit};var rG;function dit(r){rG=r.wasm.cwrap(cs,null,["number, number, number"])}function hit(r){let{backend:t,inputs:e,attrs:n}=r,{axis:o,keepDims:s}=n,{x:i}=e,a=t.dataIdMap.get(i.dataId).id,u=a,l=i,{transposed:c,axes:p,originalAxes:m,inputWasTransposed:f}=yn(i,o,t),d=p;if(f){let C=t.dataIdMap.get(c.dataId).id;C!==a&&(l=c,u=C,d=S.getInnerMostAxes(d.length,l.shape.length))}S.assertAxesAreInnerMostDims("mean",d,l.shape.length);let[h,g]=S.computeOutAndReduceShapes(l.shape,d),x=y.sizeFromShape(g),b=l;l.dtype!=="float32"&&(b=ei({backend:t,inputs:{x:l},attrs:{dtype:"float32"}}),u=t.dataIdMap.get(b.dataId).id);let w=t.makeOutput(h,"float32");if(y.sizeFromShape(l.shape)!==0){let C=t.dataIdMap.get(w.dataId).id;rG(u,x,C)}if(f&&t.disposeData(c.dataId),s){let C=S.expandShapeToKeepDim(w.shape,m);w.shape=C}return l.dtype!=="float32"&&t.disposeData(b.dataId),w}var nG={kernelName:cs,backendName:"wasm",setupFunc:dit,kernelFunc:hit};var oG;function git(r){oG=r.wasm.cwrap(ps,null,["number","number","number","number"])}function xit(r){let{backend:t,inputs:e,attrs:n}=r,{axis:o,keepDims:s}=n,{x:i}=e,a=t.dataIdMap.get(i.dataId).id,u=a,l=i,{transposed:c,axes:p,originalAxes:m,inputWasTransposed:f}=yn(i,o,t);if(f){let w=t.dataIdMap.get(c.dataId).id;w!==a&&(l=c,u=w)}let d=l.shape.length;S.assertAxesAreInnerMostDims("min",p,d);let[h,g]=S.computeOutAndReduceShapes(l.shape,p),x=y.sizeFromShape(g),b=t.makeOutput(h,l.dtype);if(y.sizeFromShape(l.shape)!==0){let w=t.dataIdMap.get(b.dataId).id;oG(u,Ht[i.dtype],x,w)}if(f&&t.disposeData(c.dataId),s){let w=S.expandShapeToKeepDim(b.shape,m);b.shape=w}return b}var sG={kernelName:ps,backendName:"wasm",setupFunc:git,kernelFunc:xit};var yit=!1,iG=ue(ms,yit);var TT;(function(r){r[r.reflect=0]="reflect",r[r.symmetric=1]="symmetric"})(TT||(TT={}));var aG;function bit(r){aG=r.wasm.cwrap(fs,null,["number","array","number","number","array","array","number","number"])}function wit(r){let{inputs:{x:t},backend:e,attrs:{paddings:n,mode:o}}=r,s=n.map((d,h)=>d[0]+t.shape[h]+d[1]),i=e.dataIdMap.get(t.dataId).id,a=e.makeOutput(s,t.dtype),u=e.dataIdMap.get(a.dataId).id,l=new Uint8Array(new Int32Array(t.shape).buffer),c=n.map(d=>d[0]),p=n.map(d=>d[1]),m=new Uint8Array(new Int32Array(c).buffer),f=new Uint8Array(new Int32Array(p).buffer);return aG(i,l,t.shape.length,Ht[t.dtype],m,f,TT[o],u),a}var lG={kernelName:fs,backendName:"wasm",kernelFunc:wit,setupFunc:bit};var Cit=!0,uG=ue(ds,Cit);var cG=se(ui);function Ed(r,t){let e=new Int32Array(r.wasm.HEAPU8.buffer,t,4),n=e[0],o=e[1],s=e[2],i=e[3];return r.wasm._free(t),{pSelectedIndices:n,selectedSize:o,pSelectedScores:s,pValidOutputs:i}}var pG;function Iit(r){pG=r.wasm.cwrap($a,"number",["number","number","number","number","number"])}function vit(r){let{backend:t,inputs:e,attrs:n}=r,{iouThreshold:o,maxOutputSize:s,scoreThreshold:i}=n,{boxes:a,scores:u}=e,l=t.dataIdMap.get(a.dataId).id,c=t.dataIdMap.get(u.dataId).id,p=pG(l,c,s,o,i),{pSelectedIndices:m,selectedSize:f,pSelectedScores:d,pValidOutputs:h}=Ed(t,p);return t.wasm._free(d),t.wasm._free(h),t.makeOutput([f],"int32",m)}var mG={kernelName:$a,backendName:"wasm",setupFunc:Iit,kernelFunc:vit};var fG;function Sit(r){fG=r.wasm.cwrap(Da,"number",["number","number","number","number","number","bool"])}function Nit(r){let{backend:t,inputs:e,attrs:n}=r,{iouThreshold:o,maxOutputSize:s,scoreThreshold:i,padToMaxOutputSize:a}=n,{boxes:u,scores:l}=e,c=t.dataIdMap.get(u.dataId).id,p=t.dataIdMap.get(l.dataId).id,m=fG(c,p,s,o,i,a),{pSelectedIndices:f,selectedSize:d,pSelectedScores:h,pValidOutputs:g}=Ed(t,m);t.wasm._free(h);let x=t.makeOutput([d],"int32",f),b=t.makeOutput([],"int32",g);return[x,b]}var dG={kernelName:Da,backendName:"wasm",setupFunc:Sit,kernelFunc:Nit};var hG;function kit(r){hG=r.wasm.cwrap(Ra,"number",["number","number","number","number","number","number"])}function Tit(r){let{backend:t,inputs:e,attrs:n}=r,{iouThreshold:o,maxOutputSize:s,scoreThreshold:i,softNmsSigma:a}=n,{boxes:u,scores:l}=e,c=t.dataIdMap.get(u.dataId).id,p=t.dataIdMap.get(l.dataId).id,m=hG(c,p,s,o,i,a),{pSelectedIndices:f,selectedSize:d,pSelectedScores:h,pValidOutputs:g}=Ed(t,m);t.wasm._free(g);let x=t.makeOutput([d],"int32",f),b=t.makeOutput([d],"float32",h);return[x,b]}var gG={kernelName:Ra,backendName:"wasm",setupFunc:kit,kernelFunc:Tit};var Eit=!1,xG=ue(Aa,Eit,"bool");var yG;function _it(r){yG=r.wasm.cwrap(hs,null,["number","number","number","number","number"])}function Ait(r){let{inputs:t,backend:e,attrs:n}=r,{indices:o}=t,{dtype:s,depth:i,onValue:a,offValue:u}=n,l=e.makeOutput([...o.shape,i],s),c=e.dataIdMap.get(l.dataId).id,m=e.dataIdMap.get(o.dataId).id;return yG(m,i,a,u,c),l}var bG={kernelName:hs,backendName:"wasm",setupFunc:_it,kernelFunc:Ait};function $it(r){let{inputs:{x:t},backend:e}=r,n=e.makeOutput(t.shape,t.dtype);return e.typedArrayFromHeap(n).fill(1),n}var wG={kernelName:ci,backendName:"wasm",kernelFunc:$it};function Dit(r){let{inputs:t,backend:e,attrs:n}=r,{axis:o}=n;if(t.length===1)return oI({inputs:{input:t[0]},backend:e,attrs:{dim:o}});let s=t[0].shape,i=t[0].dtype;t.forEach(c=>{y.assertShapesMatch(s,c.shape,"All tensors passed to stack must have matching shapes"),y.assert(i===c.dtype,()=>"All tensors passed to stack must have matching dtypes")});let a=[],u=t.map(c=>{let p=oI({inputs:{input:c},backend:e,attrs:{dim:o}});return a.push(p),p}),l=ST({inputs:u,backend:e,attrs:{axis:o}});return a.forEach(c=>e.disposeData(c.dataId)),l}var CG={kernelName:pi,backendName:"wasm",kernelFunc:Dit};var IG;function Rit(r){IG=r.wasm.cwrap(gs,null,["number","array","number","number","array","array","number","number"])}function Fit(r){let{inputs:{x:t},backend:e,attrs:{paddings:n,constantValue:o}}=r,s=n.map((h,g)=>h[0]+t.shape[g]+h[1]);if(y.sizeFromShape(t.shape)===0)return kT({backend:e,attrs:{shape:s,value:o,dtype:t.dtype}});let i=e.dataIdMap.get(t.dataId).id,a=e.makeOutput(s,t.dtype),l=e.dataIdMap.get(a.dataId).id,c=new Uint8Array(new Int32Array(t.shape).buffer),p=n.map(h=>h[0]),m=n.map(h=>h[1]),f=new Uint8Array(new Int32Array(p).buffer),d=new Uint8Array(new Int32Array(m).buffer);return IG(i,c,t.shape.length,Ht[t.dtype],f,d,o,l),a}var sI={kernelName:gs,backendName:"wasm",kernelFunc:Fit,setupFunc:Rit};var Oit=!1,vG=ue(xs,Oit);var SG;function Pit(r){SG=r.wasm.cwrap(ys,null,["number","number","number"])}function Lit(r){let{inputs:t,backend:e}=r,{x:n,alpha:o}=t,s=e.dataIdMap.get(n.dataId).id,i=e.dataIdMap.get(o.dataId).id,a=s,u=n,l=u;u.dtype!=="float32"&&(l=ei({backend:e,inputs:{x:n},attrs:{dtype:"float32"}}),a=e.dataIdMap.get(l.dataId).id);let c=e.makeOutput(n.shape,"float32"),p=e.dataIdMap.get(c.dataId).id;return SG(a,i,p),u.dtype!=="float32"&&e.disposeData(l.dataId),c}var NG={kernelName:ys,backendName:"wasm",setupFunc:Pit,kernelFunc:Lit};var kG;function Mit(r){kG=r.wasm.cwrap(bs,null,["number","number","number","number"])}function zit(r){let{backend:t,inputs:e,attrs:n}=r,{axis:o,keepDims:s}=n,{x:i}=e,a=t.dataIdMap.get(i.dataId).id,u=a,l=i,{transposed:c,axes:p,originalAxes:m,inputWasTransposed:f}=yn(i,o,t),d=p;if(f){let w=t.dataIdMap.get(c.dataId).id;w!==a&&(l=c,u=w,d=S.getInnerMostAxes(d.length,l.shape.length))}S.assertAxesAreInnerMostDims("prod",d,l.shape.length);let[h,g]=S.computeOutAndReduceShapes(l.shape,d),x=y.sizeFromShape(g),b=t.makeOutput(h,l.dtype);if(y.sizeFromShape(l.shape)!==0){let w=t.dataIdMap.get(b.dataId).id;kG(u,x,Ht[b.dtype],w)}if(f&&t.disposeData(c.dataId),s){let w=S.expandShapeToKeepDim(b.shape,m);b.shape=w}return b}var TG={kernelName:bs,backendName:"wasm",setupFunc:Mit,kernelFunc:zit};var Bit=r=>{let{backend:t,attrs:e}=r,{start:n,stop:o,step:s,dtype:i}=e,a=Ac(n,o,s,i),u=t.makeOutput([a.length],i);return t.typedArrayFromHeap(u).set(a),u},EG={kernelName:Rl,backendName:"wasm",kernelFunc:Bit};var Vit=!0,_G=ue(Jo,Vit);var AG=se(ws);var $G=se(vs);var DG;function Git(r){DG=r.wasm.cwrap(Is,null,["number","number","number","number","number","number","number","number","number","number"])}function Wit(r){let{backend:t,inputs:e,attrs:n}=r,{images:o}=e,{alignCorners:s,halfPixelCenters:i,size:a}=n,[u,l]=a,[c,p,m,f]=o.shape,d=[c,u,l,f],h=t.dataIdMap.get(o.dataId),g;h.dtype!=="float32"&&(g=ei({backend:t,inputs:{x:o},attrs:{dtype:"float32"}}),h=t.dataIdMap.get(g.dataId));let x=h.id,b=t.makeOutput(d,"float32");if(y.sizeFromShape(o.shape)===0)return b;let w=t.dataIdMap.get(b.dataId).id;return DG(x,c,p,m,f,u,l,s?1:0,i?1:0,w),g!=null&&t.disposeData(g.dataId),b}var RG={kernelName:Is,backendName:"wasm",setupFunc:Git,kernelFunc:Wit};var FG;function Uit(r){FG=r.wasm.cwrap(Cs,null,["number","number","number","number","number","number","number","number","number","number"])}function Hit(r){let{backend:t,inputs:e,attrs:n}=r,{images:o}=e,{alignCorners:s,halfPixelCenters:i,size:a}=n,[u,l]=a,[c,p,m,f]=o.shape,d=[c,u,l,f],h=t.makeOutput(d,"float32");if(y.sizeFromShape(o.shape)===0)return h;let g=t.dataIdMap.get(o.dataId),x;g.dtype!=="float32"&&(x=ei({backend:t,inputs:{x:o},attrs:{dtype:"float32"}}),g=t.dataIdMap.get(x.dataId));let b=g.id,w=t.dataIdMap.get(h.dataId).id;return FG(b,c,p,m,f,u,l,s?1:0,i?1:0,w),x!=null&&t.disposeData(x.dataId),h}var OG={kernelName:Cs,backendName:"wasm",setupFunc:Uit,kernelFunc:Hit};var PG;function qit(r){PG=r.wasm.cwrap(Ss,null,["number","array","number","array","number","number"])}function Kit(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{dims:s}=n,i=y.parseAxisParam(s,o.shape);if(o.shape.length===0)return jc({inputs:{x:o},backend:e});let a=e.makeOutput(o.shape,o.dtype),u=e.dataIdMap.get(o.dataId).id,l=e.dataIdMap.get(a.dataId).id,c=new Uint8Array(new Int32Array(i).buffer),p=new Uint8Array(new Int32Array(o.shape).buffer);PG(u,c,i.length,p,o.shape.length,l);let m=ir({inputs:{x:a},attrs:{shape:o.shape},backend:e});return e.disposeData(a.dataId),m}var LG={kernelName:Ss,backendName:"wasm",kernelFunc:Kit,setupFunc:qit};var MG;function jit(r){MG=r.wasm.cwrap(Ua,null,["number","number","number","number","number","number","number","number","array","number","number"])}function Xit(r){let{inputs:t,backend:e,attrs:n}=r,{image:o}=t,{radians:s,fillValue:i,center:a}=n,u=e.makeOutput(o.shape,o.dtype),l=e.dataIdMap.get(o.dataId).id,c=e.dataIdMap.get(u.dataId).id,[p,m,f,d]=o.shape,[h,g]=S.getImageCenter(a,m,f),x=i===0,b=255,w=typeof i=="number"?[i,i,i,x?0:b]:[...i,b],C=new Uint8Array(new Int32Array(w).buffer);return MG(l,p,m,f,d,s,h,g,C,w.length,c),u}var zG={kernelName:Ua,backendName:"wasm",kernelFunc:Xit,setupFunc:jit};var BG=se(Ns);var VG=se(ks);var GG;function Yit(r){GG=r.wasm.cwrap(Oa,null,["number","number","number","number","number","number","array","number","number"])}function Zit(r){let{backend:t,inputs:e,attrs:n}=r,{indices:o,updates:s}=e,{shape:i}=n,a=t.makeOutput(i,s.dtype);if(y.sizeFromShape(i)===0)return a;let{sliceRank:u,numUpdates:l,sliceSize:c,strides:p,outputSize:m}=oh.calculateShapes(s,o,i),d=t.dataIdMap.get(o.dataId).id,g=t.dataIdMap.get(s.dataId).id,x=new Uint8Array(new Int32Array(p).buffer),b=t.dataIdMap.get(a.dataId).id;return GG(d,g,Ht[s.dtype],u,l,c,x,m,b),a}var WG={kernelName:Oa,backendName:"wasm",setupFunc:Yit,kernelFunc:Zit};var UG;function Jit(r){UG=r.wasm.cwrap("SelectV2",null,["number","number","number","number","number"])}function Qit(r){let{inputs:t,backend:e}=r,{condition:n,t:o,e:s}=t,i=e.dataIdMap.get(n.dataId).id,a=e.dataIdMap.get(o.dataId).id,u=e.dataIdMap.get(s.dataId).id,l=e.makeOutput(o.shape,o.dtype),c=e.dataIdMap.get(l.dataId).id,p=n.shape.length,m=o.shape.length,f=p===0||p>1||m===1?1:y.sizeFromShape(o.shape.slice(1));return UG(i,a,u,f,c),l}var HG={kernelName:fi,backendName:"wasm",kernelFunc:Qit,setupFunc:Jit};var qG;function tat(r){qG=r.wasm.cwrap(Es,null,["number","number"])}function eat(r){let{backend:t,inputs:{x:e}}=r,n=t.dataIdMap.get(e.dataId).id,o=t.makeOutput(e.shape,e.dtype),s=t.dataIdMap.get(o.dataId).id;return y.sizeFromShape(o.shape)===0||qG(n,s),o}var KG={kernelName:"Sigmoid",backendName:"wasm",setupFunc:tat,kernelFunc:eat};var jG=se(Ts);var XG;function rat(r){XG=r.wasm.cwrap($s,null,["number","number","number","number"])}function nat(r){let{backend:t,inputs:{logits:e},attrs:{dim:n}}=r,o=t.dataIdMap.get(e.dataId).id,s=t.makeOutput(e.shape,e.dtype),i=t.dataIdMap.get(s.dataId).id,a=e.shape[n],u=y.sizeFromShape(e.shape)/a;return y.sizeFromShape(s.shape)===0||XG(o,i,a,u),s}var YG={kernelName:$s,backendName:"wasm",setupFunc:rat,kernelFunc:nat};function oat(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,{blockShape:s,paddings:i}=n,a=y.sizeFromShape(s),u=[[0,0]];u.push(...i);for(let _=1+s.length;_<o.shape.length;++_)u.push([0,0]);let l=sI.kernelFunc({inputs:{x:o},backend:e,attrs:{paddings:u,constantValue:0}}),c=S.getReshaped(l.shape,s,a,!1),p=S.getPermuted(c.length,s.length,!1),m=S.getReshapedPermuted(l.shape,s,a,!1),h=ir({inputs:{x:l},backend:e,attrs:{shape:c}}),b=so({inputs:{x:h},backend:e,attrs:{perm:p}}),N=ir({inputs:{x:b},backend:e,attrs:{shape:m}});return e.disposeData(l.dataId),e.disposeData(h.dataId),e.disposeData(b.dataId),N}var ZG={kernelName:hi,backendName:"wasm",kernelFunc:oat};var JG;function sat(r){JG=r.wasm.cwrap("SparseFillEmptyRows","number",["number","number","number","number","number","number","number","number","number","number","number","number"])}function iat(r){let{backend:t,inputs:e}=r,{indices:n,values:o,denseShape:s,defaultValue:i}=e,a=n.shape[0],u=n.shape[1],l=t.readSync(s.dataId)[0],c=[a+l,u],p=t.dataIdMap.get(n.dataId).id,m=t.dataIdMap.get(o.dataId).id,f=t.dataIdMap.get(i.dataId).id,d=t.makeOutput(c,n.dtype),h=t.dataIdMap.get(d.dataId).id,g=t.makeOutput(c.slice(0,1),o.dtype),x=t.dataIdMap.get(g.dataId).id,b=t.makeOutput([l],"bool"),w=t.dataIdMap.get(b.dataId).id,C=t.makeOutput([a],n.dtype),N=t.dataIdMap.get(C.dataId).id,_=t.makeOutput([4],"int32"),A=t.dataIdMap.get(_.dataId).id,$=JG(p,m,Ht[o.dtype],a,l,u,f,h,x,w,N,A),F=t.readSync(_.dataId),P;switch(F[0]){case 1:{P=S.getSparseFillEmptyRowsIndicesDenseShapeMismatch(F[1]);break}case 2:{P=S.getSparseFillEmptyRowsNegativeIndexErrorMessage(F[1],F[2]);break}case 3:P=S.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(F[1],F[2],F[3]);break;default:P=""}if(t.disposeData(_.dataId),P)throw t.disposeData(d.dataId),t.disposeData(g.dataId),t.disposeData(b.dataId),t.disposeData(C.dataId),new Error(P);let V=d,G=g;return $!==c[0]&&(V=Po({inputs:{x:d},attrs:{begin:0,size:[$,u]},backend:t}),G=Po({inputs:{x:g},attrs:{begin:0,size:$},backend:t}),t.disposeData(d.dataId),t.disposeData(g.dataId)),[V,G,b,C]}var QG={kernelName:Fl,backendName:"wasm",setupFunc:sat,kernelFunc:iat};var tW;function aat(r){tW=r.wasm.cwrap(Ba,null,["number","number","number","number","number","number","number"])}function lat(r){let{backend:t,inputs:e}=r,{inputIndices:n,inputShape:o,newShape:s}=e;if(n.shape.length!==2)throw new Error(`Input indices should be a matrix but received shape
${n.shape}`);if(o.shape.length!==1)throw new Error(`Input shape should be a vector but received shape
${o.shape}`);if(s.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${s.shape}`);let i=t.dataIdMap.get(n.dataId).id,a=t.dataIdMap.get(o.dataId).id,u=t.dataIdMap.get(s.dataId).id,l=n.shape[0],c=y.sizeFromShape(s.shape),p=t.makeOutput([l,c],n.dtype),m=t.dataIdMap.get(p.dataId).id,f=t.makeOutput([c],s.dtype),d=t.dataIdMap.get(f.dataId).id,h=t.makeOutput([3],"int32"),g=t.dataIdMap.get(h.dataId).id;tW(i,a,u,l,m,d,g);let x=t.readSync(h.dataId),b;switch(x[0]){case 0:{b=S.getSparseReshapeMultipleNegativeOneOutputDimErrorMessage(x[1],x[2]);break}case 1:{b=S.getSparseReshapeNegativeOutputDimErrorMessage(x[1],x[2]);break}case 2:b=S.getSparseReshapeEmptyTensorZeroOutputDimErrorMessage();break;case 3:{let w=Array.from(t.readSync(o.dataId)),C=Array.from(t.readSync(f.dataId));b=S.getSparseReshapeInputOutputMultipleErrorMessage(w,C);break}case 4:{let w=Array.from(t.readSync(o.dataId)),C=Array.from(t.readSync(f.dataId));b=S.getSparseReshapeInputOutputMismatchErrorMessage(w,C);break}default:b=""}if(t.disposeData(h.dataId),b)throw t.disposeData(p.dataId),t.disposeData(f.dataId),new Error(b);return[p,f]}var eW={kernelName:Ba,backendName:"wasm",setupFunc:aat,kernelFunc:lat};var rW;function iI(r){rW=r.wasm.cwrap("SparseSegmentReduction",null,["number","number","number","number","number","number","number","number","number"])}function aI(r,t){let{backend:e,inputs:n}=r,{data:o,indices:s,segmentIds:i}=n,a=s.shape[0],u=e.readSync(i.dataId,a-1,a)[0],c=a>0?u+1:0;if(c<0)throw new Error(S.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let p=o.shape.slice();p[0]=c;let m=e.dataIdMap.get(o.dataId).id,f=e.dataIdMap.get(s.dataId).id,d=e.dataIdMap.get(i.dataId).id,h=e.makeOutput(p,o.dtype),g=e.dataIdMap.get(h.dataId).id,x=e.makeOutput([4],"int32"),b=e.dataIdMap.get(x.dataId).id;rW(m,Ht[o.dtype],o.shape[0],f,d,g,b,t,0);let w=e.readSync(x.dataId),C;switch(w[0]){case 0:{C=S.getSparseSegmentReductionNegativeSegmentIdsErrorMessage();break}case 1:{C=S.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage();break}case 2:C=S.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(w[1],w[2]);break;case 3:C=S.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(w[1],w[2],w[3]);break;default:C=""}if(e.disposeData(x.dataId),C)throw e.disposeData(h.dataId),new Error(C);return h}function uat(r){return aI(r,!0)}var nW={kernelName:Ol,backendName:"wasm",setupFunc:iI,kernelFunc:uat};function cat(r){return aI(r,!1)}var oW={kernelName:Pl,backendName:"wasm",setupFunc:iI,kernelFunc:cat};function pat(r){let{inputs:t,attrs:e,backend:n}=r,{x:o}=t,{numOrSizeSplits:s,axis:i}=e,a=y.parseAxisParam(i,o.shape)[0],u=S.prepareSplitSize(o,s,a),l=new Array(o.shape.length).fill(0),c=o.shape.slice();return u.map(p=>{let m=[...c];m[a]=p;let f=Po({inputs:{x:o},attrs:{begin:l,size:m},backend:n});return l[a]+=p,f})}var sW={kernelName:gi,backendName:"wasm",kernelFunc:pat};var iW=se(_s);var aW=se(Ll);var mat=!0,lW=ue(Ds,mat);var uW;function fat(r){uW=r.wasm.cwrap(uo,null,["number","number","number","number"])}function dat(r){let{backend:t,inputs:e,attrs:n}=r,{alpha:o}=n,{x:s}=e,i=t.dataIdMap.get(s.dataId).id,a=t.makeOutput(s.shape,s.dtype),u=t.dataIdMap.get(a.dataId).id;return uW(i,o,Ht[s.dtype],u),a}var cW={kernelName:uo,backendName:"wasm",setupFunc:fat,kernelFunc:dat};var pW;function hat(r){pW=r.wasm.cwrap(Va,null,["number","array","number","array","array","array","array","array","number","number"])}function gat(r){let{backend:t,inputs:e,attrs:n}=r,{x:o}=e,{begin:s,end:i,strides:a,beginMask:u,endMask:l,ellipsisMask:c,newAxisMask:p,shrinkAxisMask:m}=n,{finalShapeSparse:f,finalShape:d,isIdentity:h,sliceDim0:g,isSimpleSlice:x,begin:b,end:w,strides:C}=Pe.sliceInfo(o.shape,s,i,a,u,l,c,p,m),N;if(h)N=ir({inputs:{x:o},backend:t,attrs:{shape:d}});else if(g||x){y.assert(o.shape.length>=1,()=>`Input must have rank at least 1, got: ${o.shape.length}`);let _=Pe.computeOutShape(b,w,C),A=Po({inputs:{x:o},backend:t,attrs:{begin:b,size:_}});N=ir({inputs:{x:A},backend:t,attrs:{shape:d}}),t.disposeData(A.dataId)}else{let _=t.makeOutput(f,"float32"),A=t.dataIdMap.get(o.dataId).id,$=new Uint8Array(new Int32Array(y.computeStrides(o.shape)).buffer),F=new Uint8Array(new Int32Array(b).buffer),P=new Uint8Array(new Int32Array(w).buffer),V=new Uint8Array(new Int32Array(C).buffer),G=new Uint8Array(new Int32Array(f).buffer),W=new Uint8Array(new Int32Array(y.computeStrides(f)).buffer),q=t.dataIdMap.get(_.dataId).id;pW(A,$,o.shape.length,F,P,V,G,W,f.length,q),N=ir({inputs:{x:_},backend:t,attrs:{shape:d}}),t.disposeData(_.dataId)}return N}var mW={kernelName:Va,backendName:"wasm",setupFunc:hat,kernelFunc:gat};function xat(r){let{backend:t,inputs:e,attrs:n}=r,{data:o,dataSplits:s}=e,{separator:i,nGramWidths:a,leftPad:u,rightPad:l,padWidth:c,preserveShortSequences:p}=n,m=t.readSync(o.dataId),f=t.readSync(s.dataId),[d,h]=Dc(m,f,i,a,u,l,c,p),g=t.makeOutput([d.length],"string"),x=t.dataIdMap.get(g.dataId);x.stringBytes=d;let b=t.makeOutput(s.shape,"int32");return t.typedArrayFromHeap(b).set(h),[g,b]}var fW={kernelName:Ml,backendName:"wasm",kernelFunc:xat};function yat(r){let{backend:t,inputs:e,attrs:n}=r,{input:o,delimiter:s}=e,{skipEmpty:i}=n,a=t.readSync(o.dataId),u=t.readSync(s.dataId),[l,c,p]=Rc(a,u[0],i),m=c.length,f=t.makeOutput([m,2],"int32");t.typedArrayFromHeap(f).set(l);let h=t.makeOutput([m],"string"),g=t.dataIdMap.get(h.dataId);g.stringBytes=c;let x=t.makeOutput([2],"int32");return t.typedArrayFromHeap(x).set(p),[f,h,x]}var dW={kernelName:zl,backendName:"wasm",kernelFunc:yat};function bat(r){let{backend:t,inputs:e,attrs:n}=r,{input:o}=e,{numBuckets:s}=n,i=t.readSync(o.dataId),a=Fc(i,s),u=t.makeOutput(o.shape,"int32");return t.typedArrayFromHeap(u).set(a),u}var hW={kernelName:Bl,backendName:"wasm",kernelFunc:bat};var wat=!0,gW=ue(Rs,wat);var xW;function Cat(r){xW=r.wasm.cwrap(As,null,["number","number","number","number"])}function Iat(r){let{backend:t,inputs:e,attrs:n}=r,{axis:o,keepDims:s}=n,{x:i}=e,a=t.dataIdMap.get(i.dataId).id,u=a,l=i,{transposed:c,axes:p,originalAxes:m,inputWasTransposed:f}=yn(i,o,t),d=p;if(f){let w=t.dataIdMap.get(c.dataId).id;w!==a&&(l=c,u=w,d=S.getInnerMostAxes(d.length,l.shape.length))}S.assertAxesAreInnerMostDims("sum",d,l.shape.length);let[h,g]=S.computeOutAndReduceShapes(l.shape,d),x=y.sizeFromShape(g),b=t.makeOutput(h,l.dtype);if(y.sizeFromShape(l.shape)!==0){let w=t.dataIdMap.get(b.dataId).id;xW(u,x,Ht[b.dtype],w)}if(f&&t.disposeData(c.dataId),s){let w=S.expandShapeToKeepDim(b.shape,m);b.shape=w}return b}var yW={kernelName:As,backendName:"wasm",setupFunc:Cat,kernelFunc:Iat};var bW=se(Fs);var wW=se(Os);var CW;function vat(r){CW=r.wasm.cwrap(Zn,null,["number","array","number","array","number","number"])}function Sat(r){let{inputs:t,backend:e,attrs:n}=r,{x:o}=t,s=e.dataIdMap.get(o.dataId).id,{reps:i}=n,a=new Array(o.shape.length);for(let m=0;m<a.length;m++)a[m]=o.shape[m]*i[m];let u=new Uint8Array(new Int32Array(o.shape).buffer),l=new Uint8Array(new Int32Array(a).buffer),c=e.makeOutput(a,o.dtype),p=e.dataIdMap.get(c.dataId).id;return CW(s,u,o.shape.length,l,a.length,Ht[c.dtype],p),c}var IW={kernelName:Zn,backendName:"wasm",setupFunc:vat,kernelFunc:Sat};var vW;function Nat(r){vW=r.wasm.cwrap(Ga,null,["number","array","number","number","number","bool","number","number"])}var kat=({inputs:r,backend:t,attrs:e})=>{let{x:n}=r,{k:o,sorted:s}=e,i=t.dataIdMap.get(n.dataId).id,a=new Uint8Array(new Int32Array(n.shape).buffer),u=n.shape.slice();u[u.length-1]=o;let l=t.makeOutput(u,n.dtype),c=t.dataIdMap.get(l.dataId).id,p=t.makeOutput(u,"int32"),m=t.dataIdMap.get(p.dataId).id;return vW(i,a,n.shape.length,Ht[n.dtype],o,s,c,m),[l,p]},SW={kernelName:Ga,backendName:"wasm",setupFunc:Nat,kernelFunc:kat};var NW;function Tat(r){NW=r.wasm.cwrap(Wa,null,["number","number","bool","number","number","number","number","number","number","array","number","array","number","number","number","number","number"])}function Eat(r){let{backend:t,inputs:e,attrs:n}=r,{image:o,transforms:s}=e,{interpolation:i,fillMode:a,fillValue:u,outputShape:l}=n,[c,p,m,f]=o.shape,[d,h]=l!=null?l:[p,m],g=[c,d,h,f],x=new Uint8Array(new Int32Array(y.computeStrides(o.shape)).buffer),b=new Uint8Array(new Int32Array(y.computeStrides(g)).buffer),w=t.makeOutput(g,o.dtype),C=t.dataIdMap.get(w.dataId).id,_=t.dataIdMap.get(o.dataId).id,$=t.dataIdMap.get(s.dataId).id,F=i==="nearest"?1:2,P;switch(a){case"constant":P=1;break;case"reflect":P=2;break;case"wrap":P=3;break;case"nearest":P=4;break;default:P=1;break}return NW(_,$,s.shape[0]>1,c,d,h,f,m,p,x,o.shape.length-1,b,g.length-1,F,P,u,C),w}var kW={kernelName:Wa,backendName:"wasm",setupFunc:Tat,kernelFunc:Eat};function _at(r){let{inputs:t,backend:e,attrs:n}=r,{value:o}=t,{axis:s}=n;s<0&&(s+=o.shape.length);let i=o.shape[s],a=o.shape.length,u=new Array(a-1),l=0;for(let f=0;f<a;f++)f!==s&&(u[l++]=o.shape[f]);let c=new Array(i),p=new Array(a).fill(0),m=o.shape.slice();m[s]=1;for(let f=0;f<c.length;f++)p[s]=f,c[f]=Po({inputs:{x:o},attrs:{begin:p,size:m},backend:e});return c.map(({dataId:f,dtype:d})=>({dataId:f,dtype:d,shape:u}))}var TW={kernelName:xi,backendName:"wasm",kernelFunc:_at};function Aat(r){let{inputs:{x:t},backend:e}=r,n=e.makeOutput(t.shape,t.dtype);return e.typedArrayFromHeap(n).fill(0),n}var EW={kernelName:yi,backendName:"wasm",kernelFunc:Aat};var $at=[RB,FB,OB,LB,GB,UB,qB,jB,ZB,QB,tV,eV,nV,oV,iV,lV,uV,cV,mV,dV,gV,yV,wV,CV,IV,vV,SV,NV,TV,EV,_V,$V,RV,OV,LV,zV,BV,VV,MB,WV,UV,HV,qV,KV,jV,XV,YV,JV,QV,eG,nG,sG,iG,lG,uG,cG,mG,dG,gG,xG,bG,wG,CG,sI,vG,NG,TG,EG,_G,AG,$G,XB,RG,OG,LG,zG,BG,VG,WG,HG,KG,jG,JB,YG,ZG,QG,eW,nW,oW,sW,iW,aW,lW,cW,mW,fW,dW,hW,gW,yW,bW,wW,IW,SW,kW,BB,TW,EW];for(let r of $at)Pu(r);var ET=M();ET.registerFlag("WASM_HAS_SIMD_SUPPORT",async()=>{try{return WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]))}catch(r){return!1}});ET.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT",async()=>{if(ET.get("IS_NODE"))return!1;try{return new MessageChannel().port1.postMessage(new SharedArrayBuffer(1)),WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,5,4,1,3,1,1,10,11,1,9,0,65,0,254,16,2,0,26,11]))}catch(r){return!1}});var FT=Sl(DW()),MW=Sl(FW()),OT=Sl(OW());var PW=FT.default||FT,Dat=OT.default||OT,sg=class extends Mo{constructor(t){super(),this.wasm=t,this.dataIdNextNumber=1,this.wasm.tfjs.initWithThreadsCount(BW),RT=this.wasm.tfjs.getThreadsCount(),this.dataIdMap=new ta(this,ho())}write(t,e,n){let o={id:this.dataIdNextNumber++};return this.move(o,t,e,n,1),o}numDataIds(){return this.dataIdMap.numDataIds()}async time(t){let e=y.now();return t(),{kernelMs:y.now()-e}}move(t,e,n,o,s){let i=this.dataIdNextNumber++;if(o==="string"){let c=e;this.dataIdMap.set(t,{id:i,stringBytes:c,shape:n,dtype:o,memoryOffset:null,refCount:s});return}let a=y.sizeFromShape(n),u=a*y.bytesPerElement(o),l=this.wasm._malloc(u);this.dataIdMap.set(t,{id:i,memoryOffset:l,shape:n,dtype:o,refCount:s}),this.wasm.tfjs.registerTensor(i,a,l),e!=null&&this.wasm.HEAPU8.set(new Uint8Array(e.buffer,e.byteOffset,u),l)}async read(t){return this.readSync(t)}readSync(t,e,n){let{memoryOffset:o,dtype:s,shape:i,stringBytes:a}=this.dataIdMap.get(t);if(s==="string")return(e==null||e===0)&&(n==null||n>=a.length)?a:a.slice(e,n);e=e||0,n=n||y.sizeFromShape(i);let u=y.bytesPerElement(s),l=this.wasm.HEAPU8.slice(o+e*u,o+n*u);return Fat(l.buffer,s)}disposeData(t,e=!1){if(this.dataIdMap.has(t)){let n=this.dataIdMap.get(t);if(n.refCount--,!e&&n.refCount>0)return!1;this.wasm._free(n.memoryOffset),this.wasm.tfjs.disposeData(n.id),this.dataIdMap.delete(t)}return!0}refCount(t){return this.dataIdMap.has(t)?this.dataIdMap.get(t).refCount:0}incRef(t){let e=this.dataIdMap.get(t);e!=null&&e.refCount++}floatPrecision(){return 32}getMemoryOffset(t){return this.dataIdMap.get(t).memoryOffset}dispose(){this.wasm.tfjs.dispose(),"PThread"in this.wasm&&this.wasm.PThread.terminateAllThreads(),this.wasm=null}memory(){return{unreliable:!1}}makeOutput(t,e,n){let o;if(n==null)o=this.write(null,t,e);else{let s=this.dataIdNextNumber++;o={id:s},this.dataIdMap.set(o,{id:s,memoryOffset:n,shape:t,dtype:e,refCount:1});let i=y.sizeFromShape(t);this.wasm.tfjs.registerTensor(s,i,n)}return{dataId:o,shape:t,dtype:e}}typedArrayFromHeap({shape:t,dtype:e,dataId:n}){let o=this.wasm.HEAPU8.buffer,{memoryOffset:s}=this.dataIdMap.get(n),i=y.sizeFromShape(t);switch(e){case"float32":return new Float32Array(o,s,i);case"int32":return new Int32Array(o,s,i);case"bool":return new Uint8Array(o,s,i);default:throw new Error(`Unknown dtype ${e}`)}}};function Rat(r){return(t,e)=>(y.fetch(r,{credentials:"same-origin"}).then(n=>{n.ok||t.env.a(`failed to load wasm binary file at '${r}'`),n.arrayBuffer().then(o=>{WebAssembly.instantiate(o,t).then(s=>{e(s.instance,s.module)})})}),{})}function LW(r,t,e){if(cI!=null)return cI;let n="tfjs-backend-wasm.wasm";return r&&t?n="tfjs-backend-wasm-threaded-simd.wasm":r&&(n="tfjs-backend-wasm-simd.wasm"),ng!=null&&ng[n]!=null?ng[n]:e+n}async function zW(){let[r,t]=await Promise.all([M().getAsync("WASM_HAS_SIMD_SUPPORT"),M().getAsync("WASM_HAS_MULTITHREAD_SUPPORT")]);return new Promise((e,n)=>{let o={};o.locateFile=(a,u)=>{if(a.endsWith(".worker.js")){let l=MW.wasmWorkerContents.replace(/\n/g,"\\n"),c=new Blob([l],{type:"application/javascript"});return URL.createObjectURL(c)}return a.endsWith(".wasm")?LW(r,t,rg!=null?rg:u):u+a},PT&&(o.instantiateWasm=Rat(LW(r,t,rg!=null?rg:"")));let s=!1;o.onAbort=()=>{if(s||og)return;og=!0,n({message:"Make sure the server can serve the `.wasm` file relative to the bundled js file. For more details see https://github.com/tensorflow/tfjs/blob/master/tfjs-backend-wasm/README.md#using-bundlers"})};let i;t&&r&&cI==null?(o.mainScriptUrlOrBlob=new Blob(["var WasmBackendModuleThreadedSimd = "+PW.toString()],{type:"text/javascript"}),i=PW(o)):i=Dat(o),i.then(a=>{s=!0,og=!1;let u=null;a.tfjs={init:a.cwrap("init",null,[]),initWithThreadsCount:a.cwrap("init_with_threads_count",null,["number"]),getThreadsCount:a.cwrap("get_threads_count","number",[]),registerTensor:a.cwrap("register_tensor",null,["number","number","number"]),disposeData:a.cwrap("dispose_data",u,["number"]),dispose:a.cwrap("dispose",u,[])},e({wasm:a})}).catch(n)})}function Fat(r,t){switch(t){case"float32":return new Float32Array(r);case"int32":return new Int32Array(r);case"bool":return new Uint8Array(r);default:throw new Error(`Unknown dtype ${t}`)}}var Oat=["tfjs-backend-wasm.wasm","tfjs-backend-wasm-simd.wasm","tfjs-backend-wasm-threaded-simd.wasm"],cI=null,rg=null,ng={},og=!1,PT=!1;function Pat(r,t=!1){if(MS("setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release."),og)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`");cI=r,PT=t}function Lat(r,t=!1){if(og)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPaths()` before you call `tf.setBackend()` or `tf.ready()`");if(typeof r=="string")rg=r;else{ng=r;let e=Oat.filter(n=>ng[n]==null);if(e.length>0)throw new Error(`There were no entries found for the following binaries: ${e.join(",")}. Please either call setWasmPaths with a map providing a path for each binary, or with a string indicating the directory where all the binaries can be found.`)}PT=t}var BW=-1,RT=-1;function Mat(r){BW=r}function zat(){if(RT===-1)throw new Error("WASM backend not initialized.");return RT}var Bat="3.21.0";var Vat=2;jp("wasm",async()=>{let{wasm:r}=await zW();return new sg(r)},Vat);var Gat="3.21.0",Wat="3.21.0",Uat="3.21.0",Hat="3.21.0",qat="3.21.0",Kat="3.21.0",jat="3.21.0",Xat="3.21.0",Yat={tfjs:Gat,"tfjs-core":Wat,"tfjs-data":Uat,"tfjs-layers":Hat,"tfjs-converter":qat,"tfjs-backend-cpu":Kat,"tfjs-backend-webgl":jat,"tfjs-backend-wasm":Xat};export{oi as Abs,ra as Acos,na as Acosh,uu as AdadeltaOptimizer,cu as AdagradOptimizer,pu as AdamOptimizer,mu as AdamaxOptimizer,Yn as Add,Vo as AddN,oa as All,sa as Any,Go as ArgMax,Nl as ArgMin,ia as Asin,aa as Asinh,la as Atan,ca as Atan2,ua as Atanh,Wo as AvgPool,kl as AvgPool3D,lp as AvgPool3DGrad,ap as AvgPoolGrad,sg as BackendWasm,Uo as BatchMatMul,si as BatchToSpaceND,up as Bincount,cp as BroadcastArgs,i1 as BroadcastTo,yb as Callback,$y as CallbackList,io as Cast,Ho as Ceil,ao as ClipByValue,pp as Complex,Tl as ComplexAbs,ii as Concat,qo as Conv2D,mp as Conv2DBackpropFilter,Ko as Conv2DBackpropInput,El as Conv3D,fp as Conv3DBackpropFilterV2,dp as Conv3DBackpropInputV2,jo as Cos,Xo as Cosh,ma as CropAndResize,pa as Cumprod,Yo as Cumsum,Ry as CustomCallback,ta as DataStorage,hp as DenseBincount,fa as DepthToSpace,Zo as DepthwiseConv2dNative,gp as DepthwiseConv2dNativeBackpropFilter,xp as DepthwiseConv2dNativeBackpropInput,yp as Diag,_l as Dilation2D,Hd as Dilation2DBackpropFilter,Ud as Dilation2DBackpropInput,eS as ENV,bb as EarlyStopping,bp as Einsum,Qo as Elu,wp as EluGrad,Gd as Environment,ha as Equal,da as Erf,ts as Exp,ai as ExpandDims,ga as Expm1,Cp as FFT,Al as Fill,xa as FlipLeftRight,es as Floor,rs as FloorDiv,qd as FromPixels,ns as FusedBatchNorm,wi as FusedConv2D,Ci as FusedDepthwiseConv2D,Bc as GPGPUContext,ya as GatherNd,li as GatherV2,$h as GraphModel,ba as Greater,os as GreaterEqual,Dy as History,Ip as IFFT,lo as Identity,vp as Imag,ye as InputSpec,wa as IsFinite,Ca as IsInf,Ia as IsNan,Mo as KernelBackend,$l as LRN,Np as LRNGrad,gh as LayerVariable,Mn as LayersModel,ss as LeakyRelu,va as Less,Sa as LessEqual,Sp as LinSpace,is as Log,Na as Log1p,l1 as LogSoftmax,ka as LogicalAnd,Ta as LogicalNot,Ea as LogicalOr,a1 as LogicalXor,rlt as LowerBound,Eu as MathBackendWebGL,as as Max,us as MaxPool,Dl as MaxPool3D,Tp as MaxPool3DGrad,kp as MaxPoolGrad,Ep as MaxPoolWithArgmax,ls as Maximum,cs as Mean,ps as Min,ms as Minimum,fs as MirrorPad,_a as Mod,fu as MomentumOptimizer,_p as Multinomial,ds as Multiply,ui as Neg,$a as NonMaxSuppressionV3,Da as NonMaxSuppressionV4,Ra as NonMaxSuppressionV5,Aa as NotEqual,IS as OP_SCOPE_SUFFIX,hs as OneHot,ci as OnesLike,Gr as Optimizer,Vs as OptimizerConstructors,pi as Pack,gs as PadV2,nlt as Pool,xs as Pow,ys as Prelu,bs as Prod,du as RMSPropOptimizer,Nn as RNN,Ap as RaggedGather,$p as RaggedTensorToTensor,Rl as Range,mS as Rank,Dp as Real,Jo as RealDiv,Fa as Reciprocal,Xe as Reduction,ws as Relu,vs as Relu6,mi as Reshape,Is as ResizeBilinear,Fp as ResizeBilinearGrad,Cs as ResizeNearestNeighbor,Rp as ResizeNearestNeighborGrad,Ss as Reverse,Ua as RotateWithOffset,Ns as Round,ks as Rsqrt,Mi as SGDOptimizer,Oa as ScatterNd,Op as SearchSorted,fi as Select,Pa as Selu,Ui as Sequential,Es as Sigmoid,Ma as Sign,Ts as Sin,La as Sinh,di as Slice,$s as Softmax,za as Softplus,hi as SpaceToBatchND,Fl as SparseFillEmptyRows,Ba as SparseReshape,Ol as SparseSegmentMean,Pl as SparseSegmentSum,Pp as SparseToDense,gi as SplitV,_s as Sqrt,Ll as Square,Ds as SquaredDifference,uo as Step,Va as StridedSlice,Ml as StringNGrams,zl as StringSplit,Bl as StringToHashBucketFast,Rs as Sub,As as Sum,Jr as SymbolicTensor,Fs as Tan,Os as Tanh,Ft as Tensor,pe as TensorBuffer,Zn as Tile,Ga as TopK,Wa as Transform,Jn as Transpose,Lp as Unique,xi as Unpack,Vl as UnsortedSegmentSum,olt as UpperBound,Ha as Variable,yi as ZerosLike,bi as _FusedMatMul,Ee as abs,rx as acos,nx as acosh,X as add,DE as addN,Yp as all,Hu as any,Ei as argMax,ox as argMin,sx as asin,ix as asinh,ax as atan,lx as atan2,ux as atanh,jl as avgPool,px as avgPool3d,pE as backend,S as backend_util,OE as basicLSTMCell,Ai as batchNorm,mx as batchNorm2d,fx as batchNorm3d,dx as batchNorm4d,Xl as batchToSpaceND,hx as bincount,Uj as booleanMaskAsync,LE as broadcastArgs,$i as broadcastTo,zr as broadcast_util,Jg as browser,wt as buffer,NZ as callbacks,J as cast,gx as ceil,Cr as clipByValue,sn as clone,bn as complex,ne as concat,xx as concat1d,yx as concat2d,bx as concat3d,wx as concat4d,G$ as constraints,Jp as conv1d,Cn as conv2d,tm as conv2dTranspose,Cx as conv3d,vx as conv3dTranspose,plt as copyRegisteredKernels,Yl as cos,em as cosh,ch as cosineWindow,ju as cumprod,rm as cumsum,ln as customGrad,vR as data,ME as denseBincount,MS as deprecationWarn,Sx as depthToSpace,Di as depthwiseConv2d,_Z as deregisterOp,Hl as device_util,zE as diag,Nx as dilation2d,ept as disableDeprecationWarnings,St as dispose,rpt as disposeVariables,pt as div,kx as divNoNan,Tx as dot,n0 as dropout,BE as einsum,Ri as elu,tpt as enableDebugMode,Qct as enableProdMode,o0 as enclosingPowerOfTwo,ho as engine,M as env,Ar as equal,Ex as erf,_x as euclideanNorm,er as exp,gr as expandDims,Ax as expm1,Yu as eye,su as fft,go as fill,lpt as findBackend,upt as findBackendFactory,Fi as floor,Xp as floorDiv,sM as forceHalfFloat,au as fused,Oi as gather,Qj as gatherND,Qg as gather_util,ipt as getBackend,oS as getGradient,jd as getKernel,Fg as getKernelsForBackend,zat as getThreadsCount,eT as gpgpu_util,aK as grad,lK as grads,He as greater,Fn as greaterEqual,Za as ifft,Kl as imag,lu as image,r6 as inTopKAsync,W$ as initializers,$0 as input,Er as io,gm as irfft,$x as isFinite,Dx as isInf,Rx as isNaN,De as keep,Wr as kernel_impls,CD as layers,Zl as leakyRelu,nm as less,On as lessEqual,i0 as linalg,WE as linspace,I7 as loadGraphModel,v7 as loadGraphModelSync,O8 as loadLayersModel,Fx as localResponseNormalization,Ir as log,Jl as log1p,Lx as logSigmoid,om as logSoftmax,sm as logSumExp,Dr as logicalAnd,Ql as logicalNot,im as logicalOr,Mx as logicalXor,rX as losses,UE as lowerBound,Lt as matMul,fE as math,Br as max,tu as maxPool,Bx as maxPool3d,HE as maxPoolWithArgmax,In as maximum,Se as mean,nh as memory,qE as meshgrid,ID as metrics,Xu as min,Pi as minimum,Vx as mirrorPad,Gx as mod,R8 as model,vD as models,Zu as moments,qj as movingAverage,R as mul,KE as multiRNNCell,jE as multinomial,Ut as neg,ph as nextFrame,Ya as norm,zs as notEqual,ki as oneHot,lr as ones,xr as onesLike,k as op,XE as outerProduct,un as pad,YE as pad1d,ZE as pad2d,JE as pad3d,QE as pad4d,Wx as pool,an as pow,ru as prelu,Kg as print,Ux as prod,npt as profile,t_ as raggedGather,e_ as raggedTensorToTensor,r_ as rand,b_ as randomGamma,tc as randomNormal,w_ as randomStandardNormal,Li as randomUniform,nu as range,spt as ready,Xa as real,Xx as reciprocal,jp as registerBackend,P8 as registerCallbackConstructor,c1 as registerGradient,Pu as registerKernel,EZ as registerOp,SD as regularizers,Rr as relu,am as relu6,apt as removeBackend,D as reshape,ur as reverse,C_ as reverse1d,I_ as reverse2d,v_ as reverse3d,S_ as reverse4d,iu as rfft,lm as round,um as rsqrt,mt as scalar,jj as scatterND,oh as scatter_util,ah as searchSorted,cm as selu,pm as separableConv2d,F8 as sequential,Q as serialization,G4 as setBackend,cpt as setPlatform,Mat as setThreadsCount,Pat as setWasmPath,Lat as setWasmPaths,hk as setWebGLContext,N_ as setdiff1dAsync,Xr as sigmoid,Yx as sign,eX as signal,mm as sin,fm as sinh,Dt as slice,dm as slice1d,uh as slice2d,hm as slice3d,ec as slice4d,Pe as slice_util,ou as softmax,Ms as softplus,eu as spaceToBatchND,nX as sparse,Zj as sparseToDense,tX as spectral,cr as split,ve as sqrt,Mt as square,xm as squaredDifference,Pn as squeeze,rr as stack,yo as step,Zx as stridedSlice,oX as string,ct as sub,ft as sum,Gu as sumOutType,Jx as tan,_i as tanh,wr as tensor,Le as tensor1d,Bs as tensor2d,Zg as tensor3d,k_ as tensor4d,T_ as tensor5d,E_ as tensor6d,fo as tensor_util,AE as test_util,B as tidy,$r as tile,opt as time,Qx as topk,ic as train,Ot as transpose,ym as truncatedNormal,ty as unique,clt as unregisterGradient,ult as unregisterKernel,bm as unsortedSegmentSum,vr as unstack,or as upcastType,__ as upperBound,y as util,uK as valueAndGrad,cK as valueAndGrads,ey as variable,Ox as variableGrads,Yat as version,nR as version_converter,$E as version_core,Wm as version_layers,Bat as version_wasm,oM as version_webgl,oTe as webgl,cd as webgl_util,_e as where,ny as whereAsync,Ne as zeros,It as zerosLike};