/* Human library homepage: author: ' */ var bB=Object.create,Ph=Object.defineProperty,wB=Object.getPrototypeOf,_B=Object.prototype.hasOwnProperty,kB=Object.getOwnPropertyNames,vB=Object.getOwnPropertyDescriptor;var CB=r=>Ph(r,"__esModule",{value:!0});var dt=(r,e)=>()=>(e||(e={exports:{}},r(e.exports,e)),e.exports),Ke=(r,e)=>{for(var t in e)Ph(r,t,{get:e[t],enumerable:!0})},IB=(r,e,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of kB(e))!_B.call(r,n)&&n!=="default"&&Ph(r,n,{get:()=>e[n],enumerable:!(t=vB(e,n))||t.enumerable});return r},Tc=r=>IB(CB(Ph(r!=null?bB(wB(r)):{},"default",r&&r.__esModule&&"default"in r?{get:()=>r.default,enumerable:!0}:{value:r,enumerable:!0})),r);var sN=dt(()=>{});var LN=dt((MN,Bw)=>{(function(r,e,t){function n(i){var l=this,u=a();l.next=function(){var c=2091639*l.s0+l.c*23283064365386963e-26;return l.s0=l.s1,l.s1=l.s2,l.s2=c-(l.c=c|0)},l.c=1,l.s0=u(" "),l.s1=u(" "),l.s2=u(" "),l.s0-=u(i),l.s0<0&&(l.s0+=1),l.s1-=u(i),l.s1<0&&(l.s1+=1),l.s2-=u(i),l.s2<0&&(l.s2+=1),u=null}function o(i,l){return l.c=i.c,l.s0=i.s0,l.s1=i.s1,l.s2=i.s2,l}function s(i,l){var u=new n(i),c=l&&l.state,p=u.next;return p.int32=function(){return u.next()*4294967296|0},p.double=function(){return p()+(p()*2097152|0)*11102230246251565e-32},p.quick=p,c&&(typeof c=="object"&&o(c,u),p.state=function(){return o(u,{})}),p}function a(){var i=4022871197,l=function(u){u=u.toString();for(var c=0;c>>0,p-=i,p*=i,i=p>>>0,p-=i,i+=p*4294967296}return(i>>>0)*23283064365386963e-26};return l}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.alea=s})(MN,typeof Bw=="object"&&Bw,typeof define=="function"&&define)});var BN=dt((zN,Vw)=>{(function(r,e,t){function n(a){var i=this,l="";i.x=0,i.y=0,i.z=0,i.w=0,i.next=function(){var c=i.x^i.x<<11;return i.x=i.y,i.y=i.z,i.z=i.w,i.w^=i.w>>>19^c^c>>>8},a===(a|0)?i.x=a:l+=a;for(var u=0;u>>0)/4294967296};return c.double=function(){do var p=l.next()>>>11,m=(l.next()>>>0)/4294967296,f=(p+m)/(1<<21);while(f===0);return f},c.int32=l.next,c.quick=c,u&&(typeof u=="object"&&o(u,l),c.state=function(){return o(l,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xor128=s})(zN,typeof Vw=="object"&&Vw,typeof define=="function"&&define)});var GN=dt((VN,Gw)=>{(function(r,e,t){function n(a){var i=this,l="";i.next=function(){var c=i.x^i.x>>>2;return i.x=i.y,i.y=i.z,i.z=i.w,i.w=i.v,(i.d=i.d+362437|0)+(i.v=i.v^i.v<<4^(c^c<<1))|0},i.x=0,i.y=0,i.z=0,i.w=0,i.v=0,a===(a|0)?i.x=a:l+=a;for(var u=0;u>>4),i.next()}function o(a,i){return i.x=a.x,i.y=a.y,i.z=a.z,i.w=a.w,i.v=a.v,i.d=a.d,i}function s(a,i){var l=new n(a),u=i&&i.state,c=function(){return(l.next()>>>0)/4294967296};return c.double=function(){do var p=l.next()>>>11,m=(l.next()>>>0)/4294967296,f=(p+m)/(1<<21);while(f===0);return f},c.int32=l.next,c.quick=c,u&&(typeof u=="object"&&o(u,l),c.state=function(){return o(l,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xorwow=s})(VN,typeof Gw=="object"&&Gw,typeof define=="function"&&define)});var WN=dt((jN,jw)=>{(function(r,e,t){function n(a){var i=this;i.next=function(){var u=i.x,c=i.i,p,m,f;return p=u[c],p^=p>>>7,m=p^p<<24,p=u[c+1&7],m^=p^p>>>10,p=u[c+3&7],m^=p^p>>>3,p=u[c+4&7],m^=p^p<<7,p=u[c+7&7],p=p^p<<13,m^=p^p<<9,u[c]=m,i.i=c+1&7,m};function l(u,c){var p,m,f=[];if(c===(c|0))m=f[0]=c;else for(c=""+c,p=0;p0;--p)u.next()}l(i,a)}function o(a,i){return i.x=a.x.slice(),i.i=a.i,i}function s(a,i){a==null&&(a=+new Date);var l=new n(a),u=i&&i.state,c=function(){return(l.next()>>>0)/4294967296};return c.double=function(){do var p=l.next()>>>11,m=(l.next()>>>0)/4294967296,f=(p+m)/(1<<21);while(f===0);return f},c.int32=l.next,c.quick=c,u&&(u.x&&o(u,l),c.state=function(){return o(l,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xorshift7=s})(jN,typeof jw=="object"&&jw,typeof define=="function"&&define)});var qN=dt((UN,Ww)=>{(function(r,e,t){function n(a){var i=this;i.next=function(){var u=i.w,c=i.X,p=i.i,m,f;return i.w=u=u+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,i.i=p,f+(u^u>>>16)|0};function l(u,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>>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;u.w=h,u.X=g,u.i=f}l(i,a)}function o(a,i){return i.i=a.i,i.w=a.w,i.X=a.X.slice(),i}function s(a,i){a==null&&(a=+new Date);var l=new n(a),u=i&&i.state,c=function(){return(l.next()>>>0)/4294967296};return c.double=function(){do var p=l.next()>>>11,m=(l.next()>>>0)/4294967296,f=(p+m)/(1<<21);while(f===0);return f},c.int32=l.next,c.quick=c,u&&(u.X&&o(u,l),c.state=function(){return o(l,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xor4096=s})(UN,typeof Ww=="object"&&Ww,typeof define=="function"&&define)});var KN=dt((HN,Uw)=>{(function(r,e,t){function n(a){var i=this,l="";i.next=function(){var c=i.b,p=i.c,m=i.d,f=i.a;return c=c<<25^c>>>7^p,p=p-m|0,m=m<<24^m>>>8^f,f=f-c|0,i.b=c=c<<20^c>>>12^p,i.c=p=p-m|0,i.d=m<<16^p>>>16^f,i.a=f-c|0},i.a=0,i.b=0,i.c=2654435769|0,i.d=1367130551,a===Math.floor(a)?(i.a=a/4294967296|0,i.b=a|0):l+=a;for(var u=0;u>>0)/4294967296};return c.double=function(){do var p=l.next()>>>11,m=(l.next()>>>0)/4294967296,f=(p+m)/(1<<21);while(f===0);return f},c.int32=l.next,c.quick=c,u&&(typeof u=="object"&&o(u,l),c.state=function(){return o(l,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.tychei=s})(HN,typeof Uw=="object"&&Uw,typeof define=="function"&&define)});var sg=dt(()=>{});var XN=dt((Pye,ig)=>{(function(r,e){var t=this,n=256,o=6,s=52,a="random",i=e.pow(n,o),l=e.pow(2,s),u=l*2,c=n-1,p;function m(b,_,k){var A=[];_=_==!0?{entropy:!0}:_||{};var S=g(h(_.entropy?[b,w(r)]:b==null?x():b,3),A),$=new f(A),O=function(){for(var M=$.g(o),G=i,j=0;M=u;)M/=2,G/=2,j>>>=1;return(M+j)/G};return O.int32=function(){return $.g(4)|0},O.quick=function(){return $.g(4)/4294967296},O.double=O,g(w($.S),r),(_.pass||k||function(M,G,j,U){return U&&(U.S&&d(U,$),M.state=function(){return d($,{})}),j?(e[a]=M,G):M})(O,S,"global"in _?_.global:this==e,_.state)}e["seed"+a]=m;function f(b){var _,k=b.length,A=this,S=0,$=A.i=A.j=0,O=A.S=[];for(k||(b=[k++]);S{var YW=LN(),ZW=BN(),JW=GN(),QW=WN(),e4=qN(),t4=KN(),Eu=XN();Eu.alea=YW;Eu.xor128=ZW;Eu.xorwow=JW;Eu.xorshift7=QW;Eu.xor4096=e4;Eu.tychei=t4;YN.exports=Eu});var X1=dt((K1,A_)=>{(function(r,e,t){function n(i){var l=this,u=a();l.next=function(){var c=2091639*l.s0+l.c*23283064365386963e-26;return l.s0=l.s1,l.s1=l.s2,l.s2=c-(l.c=c|0)},l.c=1,l.s0=u(" "),l.s1=u(" "),l.s2=u(" "),l.s0-=u(i),l.s0<0&&(l.s0+=1),l.s1-=u(i),l.s1<0&&(l.s1+=1),l.s2-=u(i),l.s2<0&&(l.s2+=1),u=null}function o(i,l){return l.c=i.c,l.s0=i.s0,l.s1=i.s1,l.s2=i.s2,l}function s(i,l){var u=new n(i),c=l&&l.state,p=u.next;return p.int32=function(){return u.next()*4294967296|0},p.double=function(){return p()+(p()*2097152|0)*11102230246251565e-32},p.quick=p,c&&(typeof c=="object"&&o(c,u),p.state=function(){return o(u,{})}),p}function a(){var i=4022871197,l=function(u){u=u.toString();for(var c=0;c>>0,p-=i,p*=i,i=p>>>0,p-=i,i+=p*4294967296}return(i>>>0)*23283064365386963e-26};return l}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.alea=s})(K1,typeof A_=="object"&&A_,typeof define=="function"&&define)});var Z1=dt((Y1,E_)=>{(function(r,e,t){function n(a){var i=this,l="";i.x=0,i.y=0,i.z=0,i.w=0,i.next=function(){var c=i.x^i.x<<11;return i.x=i.y,i.y=i.z,i.z=i.w,i.w^=i.w>>>19^c^c>>>8},a===(a|0)?i.x=a:l+=a;for(var u=0;u>>0)/4294967296};return c.double=function(){do var p=l.next()>>>11,m=(l.next()>>>0)/4294967296,f=(p+m)/(1<<21);while(f===0);return f},c.int32=l.next,c.quick=c,u&&(typeof u=="object"&&o(u,l),c.state=function(){return o(l,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xor128=s})(Y1,typeof E_=="object"&&E_,typeof define=="function"&&define)});var Q1=dt((J1,D_)=>{(function(r,e,t){function n(a){var i=this,l="";i.next=function(){var c=i.x^i.x>>>2;return i.x=i.y,i.y=i.z,i.z=i.w,i.w=i.v,(i.d=i.d+362437|0)+(i.v=i.v^i.v<<4^(c^c<<1))|0},i.x=0,i.y=0,i.z=0,i.w=0,i.v=0,a===(a|0)?i.x=a:l+=a;for(var u=0;u>>4),i.next()}function o(a,i){return i.x=a.x,i.y=a.y,i.z=a.z,i.w=a.w,i.v=a.v,i.d=a.d,i}function s(a,i){var l=new n(a),u=i&&i.state,c=function(){return(l.next()>>>0)/4294967296};return c.double=function(){do var p=l.next()>>>11,m=(l.next()>>>0)/4294967296,f=(p+m)/(1<<21);while(f===0);return f},c.int32=l.next,c.quick=c,u&&(typeof u=="object"&&o(u,l),c.state=function(){return o(l,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xorwow=s})(J1,typeof D_=="object"&&D_,typeof define=="function"&&define)});var tA=dt((eA,$_)=>{(function(r,e,t){function n(a){var i=this;i.next=function(){var u=i.x,c=i.i,p,m,f;return p=u[c],p^=p>>>7,m=p^p<<24,p=u[c+1&7],m^=p^p>>>10,p=u[c+3&7],m^=p^p>>>3,p=u[c+4&7],m^=p^p<<7,p=u[c+7&7],p=p^p<<13,m^=p^p<<9,u[c]=m,i.i=c+1&7,m};function l(u,c){var p,m,f=[];if(c===(c|0))m=f[0]=c;else for(c=""+c,p=0;p0;--p)u.next()}l(i,a)}function o(a,i){return i.x=a.x.slice(),i.i=a.i,i}function s(a,i){a==null&&(a=+new Date);var l=new n(a),u=i&&i.state,c=function(){return(l.next()>>>0)/4294967296};return c.double=function(){do var p=l.next()>>>11,m=(l.next()>>>0)/4294967296,f=(p+m)/(1<<21);while(f===0);return f},c.int32=l.next,c.quick=c,u&&(u.x&&o(u,l),c.state=function(){return o(l,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xorshift7=s})(eA,typeof $_=="object"&&$_,typeof define=="function"&&define)});var nA=dt((rA,R_)=>{(function(r,e,t){function n(a){var i=this;i.next=function(){var u=i.w,c=i.X,p=i.i,m,f;return i.w=u=u+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,i.i=p,f+(u^u>>>16)|0};function l(u,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>>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;u.w=h,u.X=g,u.i=f}l(i,a)}function o(a,i){return i.i=a.i,i.w=a.w,i.X=a.X.slice(),i}function s(a,i){a==null&&(a=+new Date);var l=new n(a),u=i&&i.state,c=function(){return(l.next()>>>0)/4294967296};return c.double=function(){do var p=l.next()>>>11,m=(l.next()>>>0)/4294967296,f=(p+m)/(1<<21);while(f===0);return f},c.int32=l.next,c.quick=c,u&&(u.X&&o(u,l),c.state=function(){return o(l,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xor4096=s})(rA,typeof R_=="object"&&R_,typeof define=="function"&&define)});var sA=dt((oA,F_)=>{(function(r,e,t){function n(a){var i=this,l="";i.next=function(){var c=i.b,p=i.c,m=i.d,f=i.a;return c=c<<25^c>>>7^p,p=p-m|0,m=m<<24^m>>>8^f,f=f-c|0,i.b=c=c<<20^c>>>12^p,i.c=p=p-m|0,i.d=m<<16^p>>>16^f,i.a=f-c|0},i.a=0,i.b=0,i.c=2654435769|0,i.d=1367130551,a===Math.floor(a)?(i.a=a/4294967296|0,i.b=a|0):l+=a;for(var u=0;u>>0)/4294967296};return c.double=function(){do var p=l.next()>>>11,m=(l.next()>>>0)/4294967296,f=(p+m)/(1<<21);while(f===0);return f},c.int32=l.next,c.quick=c,u&&(typeof u=="object"&&o(u,l),c.state=function(){return o(l,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.tychei=s})(oA,typeof F_=="object"&&F_,typeof define=="function"&&define)});var iA=dt((Fze,kg)=>{(function(r,e){var t=this,n=256,o=6,s=52,a="random",i=e.pow(n,o),l=e.pow(2,s),u=l*2,c=n-1,p;function m(b,_,k){var A=[];_=_==!0?{entropy:!0}:_||{};var S=g(h(_.entropy?[b,w(r)]:b==null?x():b,3),A),$=new f(A),O=function(){for(var M=$.g(o),G=i,j=0;M=u;)M/=2,G/=2,j>>>=1;return(M+j)/G};return O.int32=function(){return $.g(4)|0},O.quick=function(){return $.g(4)/4294967296},O.double=O,g(w($.S),r),(_.pass||k||function(M,G,j,U){return U&&(U.S&&d(U,$),M.state=function(){return d($,{})}),j?(e[a]=M,G):M})(O,S,"global"in _?_.global:this==e,_.state)}e["seed"+a]=m;function f(b){var _,k=b.length,A=this,S=0,$=A.i=A.j=0,O=A.S=[];for(k||(b=[k++]);S{var AK=X1(),EK=Z1(),DK=Q1(),$K=tA(),RK=nA(),FK=sA(),qu=iA();qu.alea=AK;qu.xor128=EK;qu.xorwow=DK;qu.xorshift7=$K;qu.xor4096=RK;qu.tychei=FK;aA.exports=qu});var Cp=dt(()=>{});var PO=dt(()=>{});var MO=dt(()=>{});var LO=dt((tx,l0)=>{var u0=function(){var r=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!="undefined"&&(r=r||__filename),function(e){e=e||{};function t(){return te.buffer!=We&&nr(te.buffer),ut}function n(){return te.buffer!=We&&nr(te.buffer),mt}function o(){return te.buffer!=We&&nr(te.buffer),Xt}function s(){return te.buffer!=We&&nr(te.buffer),tn}function a(){return te.buffer!=We&&nr(te.buffer),Wn}var i=typeof e!="undefined"?e:{},l,u;i.ready=new Promise(function(I,R){l=I,u=R});var c={},p;for(p in i)i.hasOwnProperty(p)&&(c[p]=i[p]);var m=[],f="./this.program",d=function(I,R){throw R},h=!1,g=!1,x=!1,w=!1;h=typeof window=="object",g=typeof importScripts=="function",x=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",w=!h&&!x&&!g;var b=i.ENVIRONMENT_IS_PTHREAD||!1;b&&(We=i.buffer);var _="";function k(I){return i.locateFile?i.locateFile(I,_):_+I}var A,S,$,O,M,G;if(x){g?_=Cp().dirname(_)+"/":_=__dirname+"/",A=function(R,B){return M||(M=require("fs")),G||(G=Cp()),R=G.normalize(R),M.readFileSync(R,B?null:"utf8")},$=function(R){var B=A(R,!0);return B.buffer||(B=new Uint8Array(B)),fe(B.buffer),B},process.argv.length>1&&(f=process.argv[1].replace(/\\/g,"/")),m=process.argv.slice(2),process.on("uncaughtException",function(I){if(!(I instanceof um))throw I}),process.on("unhandledRejection",Zi),d=function(I){process.exit(I)},i.inspect=function(){return"[Emscripten Module object]"};var j;try{j=PO()}catch(I){throw console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?'),I}global.Worker=j.Worker}else w?(typeof read!="undefined"&&(A=function(R){return read(R)}),$=function(R){var B;return typeof readbuffer=="function"?new Uint8Array(readbuffer(R)):(B=read(R,"binary"),fe(typeof B=="object"),B)},typeof scriptArgs!="undefined"?m=scriptArgs:typeof arguments!="undefined"&&(m=arguments),typeof quit=="function"&&(d=function(I){quit(I)}),typeof print!="undefined"&&(typeof console=="undefined"&&(console={}),console.log=print,console.warn=console.error=typeof printErr!="undefined"?printErr:print)):(h||g)&&(g?_=self.location.href:typeof document!="undefined"&&document.currentScript&&(_=document.currentScript.src),typeof r!="undefined"&&r&&(_=r),_.indexOf("blob:")!==0?_=_.substr(0,_.lastIndexOf("/")+1):_="",x?(A=function(R,B){return M||(M=require("fs")),G||(G=Cp()),R=G.normalize(R),M.readFileSync(R,B?null:"utf8")},$=function(R){var B=A(R,!0);return B.buffer||(B=new Uint8Array(B)),fe(B.buffer),B}):(A=function(I){var R=new XMLHttpRequest;return R.open("GET",I,!1),R.send(null),R.responseText},g&&($=function(I){var R=new XMLHttpRequest;return R.open("GET",I,!1),R.responseType="arraybuffer",R.send(null),new Uint8Array(R.response)}),S=function(I,R,B){var K=new XMLHttpRequest;K.open("GET",I,!0),K.responseType="arraybuffer",K.onload=function(){if(K.status==200||K.status==0&&K.response){R(K.response);return}B()},K.onerror=B,K.send(null)}),O=function(I){document.title=I});x&&typeof performance=="undefined"&&(global.performance=MO().performance);var U=i.print||console.log.bind(console),q=i.printErr||console.warn.bind(console);for(p in c)c.hasOwnProperty(p)&&(i[p]=c[p]);c=null,i.arguments&&(m=i.arguments),i.thisProgram&&(f=i.thisProgram),i.quit&&(d=i.quit);var H=Atomics.load,X=Atomics.store,ne=Atomics.compareExchange,Y;i.wasmBinary&&(Y=i.wasmBinary);var re=i.noExitRuntime||!0;typeof WebAssembly!="object"&&Zi("no native wasm support detected");var te,ie,le=!1,ae;function fe(I,R){I||Zi("Assertion failed: "+R)}function de(I){var R=i["_"+I];return fe(R,"Cannot call unknown function "+I+", make sure it is exported"),R}function xe(I,R,B,K,be){var he={string:function(jr){var Sc=0;if(jr!=null&&jr!==0){var hI=(jr.length<<2)+1;Sc=Cc(hI),He(jr,Sc,hI)}return Sc},array:function(jr){var Sc=Cc(jr.length);return At(jr,Sc),Sc}};function ye(jr){return R==="string"?Ne(jr):R==="boolean"?Boolean(jr):jr}var Te=de(I),_t=[],wr=0;if(K)for(var fr=0;fr=K);){var he=I[R++];if(!he)return be;if(!(he&128)){be+=String.fromCharCode(he);continue}var ye=I[R++]&63;if((he&224)==192){be+=String.fromCharCode((he&31)<<6|ye);continue}var Te=I[R++]&63;if((he&240)==224?he=(he&15)<<12|ye<<6|Te:he=(he&7)<<18|ye<<12|Te<<6|I[R++]&63,he<65536)be+=String.fromCharCode(he);else{var _t=he-65536;be+=String.fromCharCode(55296|_t>>10,56320|_t&1023)}}return be}function Ne(I,R){return I?De(n(),I,R):""}function ze(I,R,B,K){if(!(K>0))return 0;for(var be=B,he=B+K-1,ye=0;ye=55296&&Te<=57343){var _t=I.charCodeAt(++ye);Te=65536+((Te&1023)<<10)|_t&1023}if(Te<=127){if(B>=he)break;R[B++]=Te}else if(Te<=2047){if(B+1>=he)break;R[B++]=192|Te>>6,R[B++]=128|Te&63}else if(Te<=65535){if(B+2>=he)break;R[B++]=224|Te>>12,R[B++]=128|Te>>6&63,R[B++]=128|Te&63}else{if(B+3>=he)break;R[B++]=240|Te>>18,R[B++]=128|Te>>12&63,R[B++]=128|Te>>6&63,R[B++]=128|Te&63}}return R[B]=0,B-be}function He(I,R,B){return ze(I,n(),R,B)}function it(I){for(var R=0,B=0;B=55296&&K<=57343&&(K=65536+((K&1023)<<10)|I.charCodeAt(++B)&1023),K<=127?++R:K<=2047?R+=2:K<=65535?R+=3:R+=4}return R}function At(I,R){t().set(I,R)}function Et(I,R){return I%R>0&&(I+=R-I%R),I}var We,ut,mt,Mt,xn,Xt,tn,$r,Wn;function nr(I){We=I,i.HEAP8=ut=new Int8Array(I),i.HEAP16=Mt=new Int16Array(I),i.HEAP32=Xt=new Int32Array(I),i.HEAPU8=mt=new Uint8Array(I),i.HEAPU16=xn=new Uint16Array(I),i.HEAPU32=tn=new Uint32Array(I),i.HEAPF32=$r=new Float32Array(I),i.HEAPF64=Wn=new Float64Array(I)}var yn=i.INITIAL_MEMORY||16777216;if(b)te=i.wasmMemory,We=i.buffer;else if(i.wasmMemory)te=i.wasmMemory;else if(te=new WebAssembly.Memory({initial:yn/65536,maximum:2147483648/65536,shared:!0}),!(te.buffer instanceof SharedArrayBuffer))throw q("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"),x&&console.log("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and also use a recent version)"),Error("bad memory");te&&(We=te.buffer),yn=We.byteLength,nr(We);var Gr,br=[],rn=[],En=[],Dl=[],Ua=[],os=!1,Xi=!1;b||rn.push({func:function(){Ah()}}),b&&(os=!0);function em(){if(!b){if(i.preRun)for(typeof i.preRun=="function"&&(i.preRun=[i.preRun]);i.preRun.length;)gh(i.preRun.shift());yc(br)}}function gc(){os=!0,yc(rn)}function cy(){b||yc(En)}function hh(){b||(Xi=!0)}function nn(){if(!b){if(i.postRun)for(typeof i.postRun=="function"&&(i.postRun=[i.postRun]);i.postRun.length;)py(i.postRun.shift());yc(Ua)}}function gh(I){br.unshift(I)}function py(I){Ua.unshift(I)}var Yi=0,qa=null,$l=null;function my(I){fe(!b,"addRunDependency cannot be used in a pthread worker"),Yi++,i.monitorRunDependencies&&i.monitorRunDependencies(Yi)}function fy(I){if(Yi--,i.monitorRunDependencies&&i.monitorRunDependencies(Yi),Yi==0&&(qa!==null&&(clearInterval(qa),qa=null),$l)){var R=$l;$l=null,R()}}i.preloadedImages={},i.preloadedAudios={};function Zi(I){i.onAbort&&i.onAbort(I),b&&console.error("Pthread aborting at "+new Error().stack),I+="",q(I),le=!0,ae=1,I="abort("+I+"). Build with -s ASSERTIONS=1 for more info.";var R=new WebAssembly.RuntimeError(I);throw u(R),R}function xh(I,R){return String.prototype.startsWith?I.startsWith(R):I.indexOf(R)===0}var xc="data:application/octet-stream;base64,";function yh(I){return xh(I,xc)}var dy="file://";function bh(I){return xh(I,dy)}var on="tfjs-backend-wasm-threaded-simd.wasm";yh(on)||(on=k(on));function hy(I){try{if(I==on&&Y)return new Uint8Array(Y);if($)return $(I);throw"both async and sync fetching of the wasm failed"}catch(R){Zi(R)}}function wh(){if(!Y&&(h||g)){if(typeof fetch=="function"&&!bh(on))return fetch(on,{credentials:"same-origin"}).then(function(I){if(!I.ok)throw"failed to load wasm binary file at '"+on+"'";return I.arrayBuffer()}).catch(function(){return hy(on)});if(S)return new Promise(function(I,R){S(on,function(B){I(new Uint8Array(B))},R)})}return Promise.resolve().then(function(){return hy(on)})}function gy(){var I={a:ib};function R(ye,Te){var _t=ye.exports;if(i.asm=_t,Gr=i.asm.F,ie=Te,!b){var wr=Ee.unusedWorkers.length;Ee.unusedWorkers.forEach(function(fr){Ee.loadWasmModuleToWorker(fr,function(){--wr||fy("wasm-instantiate")})})}}b||my("wasm-instantiate");function B(ye){R(ye.instance,ye.module)}function K(ye){return wh().then(function(Te){return WebAssembly.instantiate(Te,I)}).then(ye,function(Te){q("failed to asynchronously prepare wasm: "+Te),Zi(Te)})}function be(){return!Y&&typeof WebAssembly.instantiateStreaming=="function"&&!yh(on)&&!bh(on)&&typeof fetch=="function"?fetch(on,{credentials:"same-origin"}).then(function(ye){var Te=WebAssembly.instantiateStreaming(ye,I);return Te.then(B,function(_t){return q("wasm streaming compile failed: "+_t),q("falling back to ArrayBuffer instantiation"),K(B)})}):K(B)}if(i.instantiateWasm)try{var he=i.instantiateWasm(I,R);return he}catch(ye){return q("Module.instantiateWasm callback failed with error: "+ye),!1}return be().catch(u),{}}var _h={8991:function(I,R){setTimeout(function(){uI(I,R)},0)}};function xy(){Ee.initRuntime()}function yc(I){for(;I.length>0;){var R=I.shift();if(typeof R=="function"){R(i);continue}var B=R.func;typeof B=="number"?R.arg===void 0?Gr.get(B)():Gr.get(B)(R.arg):B(R.arg===void 0?null:R.arg)}}function bc(I,R){if(I<=0||I>t().length||I&!0||R<0)return-28;if(R==0)return 0;R>=2147483647&&(R=Infinity);var B=Atomics.load(o(),Ic>>2),K=0;if(B==I){var be=Atomics.compareExchange(o(),Ic>>2,B,0);if(be==B&&(--R,K=1,R<=0))return 1}var he=Atomics.notify(o(),I>>2,R);if(he>=0)return he+K;throw"Atomics.notify returned an unexpected value "+he}i._emscripten_futex_wake=bc;function yy(I){if(b)throw"Internal Error! killThread() can only ever be called from main application thread!";if(!I)throw"Internal Error! Null pthread_ptr in killThread!";o()[I+12>>2]=0;var R=Ee.pthreads[I];R.worker.terminate(),Ee.freeThreadData(R),Ee.runningWorkers.splice(Ee.runningWorkers.indexOf(R.worker),1),R.worker.pthread=void 0}function by(I){if(b)throw"Internal Error! cancelThread() can only ever be called from main application thread!";if(!I)throw"Internal Error! Null pthread_ptr in cancelThread!";var R=Ee.pthreads[I];R.worker.postMessage({cmd:"cancel"})}function wy(I){if(b)throw"Internal Error! cleanupThread() can only ever be called from main application thread!";if(!I)throw"Internal Error! Null pthread_ptr in cleanupThread!";o()[I+12>>2]=0;var R=Ee.pthreads[I];if(R){var B=R.worker;Ee.returnWorkerToPool(B)}}var Ee={unusedWorkers:[],runningWorkers:[],initMainThreadBlock:function(){for(var I=8,R=0;R>2]=I;var B=I+152;o()[B>>2]=B;for(var K=Fl(512),R=0;R<128;++R)s()[K/4+R]=0;Atomics.store(s(),I+100>>2,K),Atomics.store(s(),I+40>>2,I),Fh(I,!g,1),lI(I)},initWorker:function(){},pthreads:{},threadExitHandlers:[],setThreadStatus:function(){},runExitHandlers:function(){for(;Ee.threadExitHandlers.length>0;)Ee.threadExitHandlers.pop()();b&&kc()&&aI()},threadExit:function(I){var R=kc();R&&(Atomics.store(s(),R+4>>2,I),Atomics.store(s(),R+0>>2,1),Atomics.store(s(),R+56>>2,1),Atomics.store(s(),R+60>>2,0),Ee.runExitHandlers(),bc(R+0,2147483647),Fh(0,0,0),b&&postMessage({cmd:"exit"}))},threadCancel:function(){Ee.runExitHandlers();var I=kc();Atomics.store(s(),I+4>>2,-1),Atomics.store(s(),I+0>>2,1),bc(I+0,2147483647),Fh(0,0,0),postMessage({cmd:"cancelDone"})},terminateAllThreads:function(){for(var I in Ee.pthreads){var R=Ee.pthreads[I];R&&R.worker&&Ee.returnWorkerToPool(R.worker)}Ee.pthreads={};for(var B=0;B>2];o()[I.threadInfoStruct+100>>2]=0,am(R),am(I.threadInfoStruct)}I.threadInfoStruct=0,I.allocatedOwnStack&&I.stackBase&&am(I.stackBase),I.stackBase=0,I.worker&&(I.worker.pthread=null)}},returnWorkerToPool:function(I){Ee.runWithoutMainThreadQueuedCalls(function(){delete Ee.pthreads[I.pthread.threadInfoStruct],Ee.unusedWorkers.push(I),Ee.runningWorkers.splice(Ee.runningWorkers.indexOf(I),1),Ee.freeThreadData(I.pthread),I.pthread=void 0})},runWithoutMainThreadQueuedCalls:function(I){o()[dI>>2]=0;try{I()}finally{o()[dI>>2]=1}},receiveObjectTransfer:function(I){},loadWasmModuleToWorker:function(I,R){I.onmessage=function(B){var K=B.data,be=K.cmd;if(I.pthread&&(Ee.currentProxiedOperationCallerThread=I.pthread.threadInfoStruct),K.targetThread&&K.targetThread!=kc()){var he=Ee.pthreads[K.targetThread];he?he.worker.postMessage(B.data,K.transferList):console.error('Internal error! Worker sent a message "'+be+'" to target pthread '+K.targetThread+", but that thread no longer exists!"),Ee.currentProxiedOperationCallerThread=void 0;return}if(be==="processQueuedMainThreadWork")_b();else if(be==="spawnThread")Sh(B.data);else if(be==="cleanupThread")wy(K.thread);else if(be==="killThread")yy(K.thread);else if(be==="cancelThread")by(K.thread);else if(be==="loaded")I.loaded=!0,R&&R(I),I.runPthread&&(I.runPthread(),delete I.runPthread);else if(be==="print")U("Thread "+K.threadId+": "+K.text);else if(be==="printErr")q("Thread "+K.threadId+": "+K.text);else if(be==="alert")alert("Thread "+K.threadId+": "+K.text);else if(be==="exit"){var ye=I.pthread&&Atomics.load(s(),I.pthread.threadInfoStruct+64>>2);ye&&Ee.returnWorkerToPool(I)}else if(be==="exitProcess")try{yB(K.returnCode)}catch(Te){if(Te instanceof um)return;throw Te}else be==="cancelDone"?Ee.returnWorkerToPool(I):be==="objectTransfer"?Ee.receiveObjectTransfer(B.data):B.data.target==="setimmediate"?I.postMessage(B.data):q("worker sent an unknown command "+be);Ee.currentProxiedOperationCallerThread=void 0},I.onerror=function(B){q("pthread sent an error! "+B.filename+":"+B.lineno+": "+B.message)},x&&(I.on("message",function(B){I.onmessage({data:B})}),I.on("error",function(B){I.onerror(B)}),I.on("exit",function(B){})),I.postMessage({cmd:"load",urlOrBlob:i.mainScriptUrlOrBlob||r,wasmMemory:te,wasmModule:ie})},allocateUnusedWorker:function(){var I=k("tfjs-backend-wasm-threaded-simd.worker.js");Ee.unusedWorkers.push(new Worker(I))},getNewWorker:function(){return Ee.unusedWorkers.length==0&&(Ee.allocateUnusedWorker(),Ee.loadWasmModuleToWorker(Ee.unusedWorkers[0])),Ee.unusedWorkers.length>0?Ee.unusedWorkers.pop():null},busySpinWait:function(I){for(var R=performance.now()+I;performance.now()>2]=I,I}function Sy(I,R){if(b)return Ha(1,1,I,R)}function Ty(I,R){if(I==R)postMessage({cmd:"processQueuedMainThreadWork"});else if(b)postMessage({targetThread:I,cmd:"processThreadQueue"});else{var B=Ee.pthreads[I],K=B&&B.worker;if(!K)return;K.postMessage({cmd:"processThreadQueue"})}return 1}function Ay(){Zi()}function Ey(I,R,B){var K=Oy(R,B);return _h[I].apply(null,K)}function Dy(I,R){}function $y(I,R,B){if(I<=0||I>t().length||I&!0)return-28;if(h){if(Atomics.load(o(),I>>2)!=R)return-6;for(var be=performance.now(),he=be+B,ye=Atomics.exchange(o(),Ic>>2,I);;){if(be=performance.now(),be>he)return ye=Atomics.exchange(o(),Ic>>2,0),-73;if(ye=Atomics.exchange(o(),Ic>>2,0),ye==0)break;if(_b(),Atomics.load(o(),I>>2)!=R)return-6;ye=Atomics.exchange(o(),Ic>>2,I)}return 0}else{var K=Atomics.wait(o(),I>>2,R,B);if(K==="timed-out")return-73;if(K==="not-equal")return-6;if(K==="ok")return 0;throw"Atomics.wait returned an unexpected value "+K}}function Ry(I,R,B){n().copyWithin(I,R,R+B)}function Fy(){return x?require("os").cpus().length:navigator.hardwareConcurrency}function Ha(I,R){for(var B=arguments.length-2,K=lm(),be=B,he=Cc(be*8),ye=he>>3,Te=0;Te>=2;B=n()[I++];){var K=B<105;K&&R&1&&R++,rm.push(K?a()[R++>>1]:o()[R]),++R}return rm}function Py(I,R,B){tm.length=R;for(var K=B>>3,be=0;be>>16),nr(te.buffer),1}catch(R){}}function zy(I){var R=My();if(I<=R)return!1;var B=2147483648;if(I>B)return!1;for(var K=1;K<=4;K*=2){var be=R*(1+.2/K);be=Math.min(be,I+100663296);var he=Math.min(B,Et(Math.max(I,be),65536)),ye=Ly(he);if(ye)return!0}return!1}var Ye={inEventHandler:0,removeAllEventListeners:function(){for(var I=Ye.eventHandlers.length-1;I>=0;--I)Ye._removeHandler(I);Ye.eventHandlers=[],Ye.deferredCalls=[]},registerRemoveEventListeners:function(){Ye.removeEventListenersRegistered||(Dl.push(Ye.removeAllEventListeners),Ye.removeEventListenersRegistered=!0)},deferredCalls:[],deferCall:function(I,R,B){function K(ye,Te){if(ye.length!=Te.length)return!1;for(var _t in ye)if(ye[_t]!=Te[_t])return!1;return!0}for(var be in Ye.deferredCalls){var he=Ye.deferredCalls[be];if(he.targetFunction==I&&K(he.argsList,B))return}Ye.deferredCalls.push({targetFunction:I,precedence:R,argsList:B}),Ye.deferredCalls.sort(function(ye,Te){return ye.precedence>2]=B,o()[ye+4>>2]=K,o()[ye+8>>2]=be,kb(0,I,637534208,R,K,ye),vc(he)},getTargetThreadForEventCallback:function(I){switch(I){case 1:return 0;case 2:return Ee.currentProxiedOperationCallerThread;default:return I}},getNodeNameForTarget:function(I){return I?I==window?"#window":I==screen?"#screen":I&&I.nodeName?I.nodeName:"":""},fullscreenEnabled:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled}};function By(I){var R=it(I)+1,B=Fl(R);return He(I,B,R),B}function Vy(I,R,B,K){var be=lm(),he=Cc(12),ye=0;R&&(ye=By(R)),o()[he>>2]=ye,o()[he+4>>2]=B,o()[he+8>>2]=K,kb(0,I,657457152,0,ye,he),vc(be)}function Gy(I,R,B,K){R=R?Ne(R):"",Vy(I,R,B,K)}function jy(I){return I>2?Ne(I):I}var Wy=[0,typeof document!="undefined"?document:0,typeof window!="undefined"?window:0];function Uy(I){I=jy(I);var R=Wy[I]||(typeof document!="undefined"?document.querySelector(I):void 0);return R}function nm(I){return Uy(I)}function kh(I,R,B){var K=nm(I);if(!K)return-4;if(K.canvasSharedPtr&&(o()[K.canvasSharedPtr>>2]=R,o()[K.canvasSharedPtr+4>>2]=B),K.offscreenCanvas||!K.controlTransferredOffscreen){K.offscreenCanvas&&(K=K.offscreenCanvas);var be=!1;if(K.GLctxObject&&K.GLctxObject.GLctx){var he=K.GLctxObject.GLctx.getParameter(2978);be=he[0]===0&&he[1]===0&&he[2]===K.width&&he[3]===K.height}K.width=R,K.height=B,be&&K.GLctxObject.GLctx.viewport(0,0,R,B)}else if(K.canvasSharedPtr){var ye=o()[K.canvasSharedPtr+8>>2];return Gy(ye,I,R,B),1}else return-4;return 0}function vh(I,R,B){return b?Ha(2,1,I,R,B):kh(I,R,B)}function qy(I,R,B){var K=nm(I);return K?kh(I,R,B):vh(I,R,B)}function Hy(I){}function Ky(I,R){}function Xy(I){var R=I.getExtension("ANGLE_instanced_arrays");if(R)return I.vertexAttribDivisor=function(B,K){R.vertexAttribDivisorANGLE(B,K)},I.drawArraysInstanced=function(B,K,be,he){R.drawArraysInstancedANGLE(B,K,be,he)},I.drawElementsInstanced=function(B,K,be,he,ye){R.drawElementsInstancedANGLE(B,K,be,he,ye)},1}function Yy(I){var R=I.getExtension("OES_vertex_array_object");if(R)return I.createVertexArray=function(){return R.createVertexArrayOES()},I.deleteVertexArray=function(B){R.deleteVertexArrayOES(B)},I.bindVertexArray=function(B){R.bindVertexArrayOES(B)},I.isVertexArray=function(B){return R.isVertexArrayOES(B)},1}function Zy(I){var R=I.getExtension("WEBGL_draw_buffers");if(R)return I.drawBuffers=function(B,K){R.drawBuffersWEBGL(B,K)},1}function Jy(I){return!!(I.multiDrawWebgl=I.getExtension("WEBGL_multi_draw"))}var ft={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,recordError:function(R){ft.lastError||(ft.lastError=R)},getNewId:function(I){for(var R=ft.counter++,B=I.length;B>2]:-1;be+=Ne(o()[B+he*4>>2],ye<0?void 0:ye)}return be},createContext:function(I,R){var B=I.getContext("webgl",R);if(!B)return 0;var K=ft.registerContext(B,R);return K},registerContext:function(I,R){var B=Fl(8);o()[B+4>>2]=kc();var K={handle:B,attributes:R,version:R.majorVersion,GLctx:I};return I.canvas&&(I.canvas.GLctxObject=K),ft.contexts[B]=K,(typeof R.enableExtensionsByDefault=="undefined"||R.enableExtensionsByDefault)&&ft.initExtensions(K),B},makeContextCurrent:function(I){return ft.currentContext=ft.contexts[I],i.ctx=Ka=ft.currentContext&&ft.currentContext.GLctx,!(I&&!Ka)},getContext:function(I){return ft.contexts[I]},deleteContext:function(I){ft.currentContext===ft.contexts[I]&&(ft.currentContext=null),typeof Ye=="object"&&Ye.removeAllHandlersOnTarget(ft.contexts[I].GLctx.canvas),ft.contexts[I]&&ft.contexts[I].GLctx.canvas&&(ft.contexts[I].GLctx.canvas.GLctxObject=void 0),am(ft.contexts[I].handle),ft.contexts[I]=null},initExtensions:function(I){if(I||(I=ft.currentContext),!I.initExtensionsDone){I.initExtensionsDone=!0;var R=I.GLctx;Xy(R),Yy(R),Zy(R),R.disjointTimerQueryExt=R.getExtension("EXT_disjoint_timer_query"),Jy(R);var B=R.getSupportedExtensions()||[];B.forEach(function(K){K.indexOf("lose_context")<0&&K.indexOf("debug")<0&&R.getExtension(K)})}},populateUniformTable:function(I){for(var R=ft.programs[I],B=ft.programInfos[I]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1},K=B.uniforms,be=Ka.getProgramParameter(R,35718),he=0;he>2,K=o()[B+(24>>2)],be={alpha:!!o()[B+(0>>2)],depth:!!o()[B+(4>>2)],stencil:!!o()[B+(8>>2)],antialias:!!o()[B+(12>>2)],premultipliedAlpha:!!o()[B+(16>>2)],preserveDrawingBuffer:!!o()[B+(20>>2)],powerPreference:Qy[K],failIfMajorPerformanceCaveat:!!o()[B+(28>>2)],majorVersion:o()[B+(32>>2)],minorVersion:o()[B+(36>>2)],enableExtensionsByDefault:o()[B+(40>>2)],explicitSwapControl:o()[B+(44>>2)],proxyContextToMainThread:o()[B+(48>>2)],renderViaOffscreenBackBuffer:o()[B+(52>>2)]},he=nm(I);if(!he||be.explicitSwapControl)return 0;var ye=ft.createContext(he,be);return ye}function tb(I,R){return eb(I,R)}var wc={mappings:{},buffers:[null,[],[]],printChar:function(I,R){var B=wc.buffers[I];R===0||R===10?((I===1?U:q)(De(B,0)),B.length=0):B.push(R)},varargs:void 0,get:function(){wc.varargs+=4;var I=o()[wc.varargs-4>>2];return I},getStr:function(I){var R=Ne(I);return R},get64:function(I,R){return I}};function Ch(I){return b?Ha(3,1,I):0}function Ih(I,R,B,K,be){if(b)return Ha(4,1,I,R,B,K,be)}function Nh(I,R,B,K){if(b)return Ha(5,1,I,R,B,K);for(var be=0,he=0;he>2],Te=o()[R+(he*8+4)>>2],_t=0;_t>2]=be,0}function rb(I){var R=Ee.threadExitHandlers.pop();I&&R()}function nb(I,R){Ee.threadExitHandlers.push(function(){Gr.get(I)(R)})}function Sh(I){if(b)throw"Internal Error! spawnThread() can only ever be called from main application thread!";var R=Ee.getNewWorker();if(R.pthread!==void 0)throw"Internal error!";if(!I.pthread_ptr)throw"Internal error, no pthread ptr!";Ee.runningWorkers.push(R);for(var B=Fl(128*4),K=0;K<128;++K)o()[B+K*4>>2]=0;var be=I.stackBase+I.stackSize,he=Ee.pthreads[I.pthread_ptr]={worker:R,stackBase:I.stackBase,stackSize:I.stackSize,allocatedOwnStack:I.allocatedOwnStack,threadInfoStruct:I.pthread_ptr},ye=he.threadInfoStruct>>2;Atomics.store(s(),ye+(64>>2),I.detached),Atomics.store(s(),ye+(100>>2),B),Atomics.store(s(),ye+(40>>2),he.threadInfoStruct),Atomics.store(s(),ye+(80>>2),I.stackSize),Atomics.store(s(),ye+(76>>2),be),Atomics.store(s(),ye+(104>>2),I.stackSize),Atomics.store(s(),ye+(104+8>>2),be),Atomics.store(s(),ye+(104+12>>2),I.detached);var Te=iI(),_t=Te+40;Atomics.store(s(),ye+(172>>2),_t),R.pthread=he;var wr={cmd:"run",start_routine:I.startRoutine,arg:I.arg,threadInfoStruct:I.pthread_ptr,stackBase:I.stackBase,stackSize:I.stackSize};R.runPthread=function(){wr.time=performance.now(),R.postMessage(wr,I.transferList)},R.loaded&&(R.runPthread(),delete R.runPthread)}function ob(I,R,B,K){if(typeof SharedArrayBuffer=="undefined")return q("Current environment does not support SharedArrayBuffer, pthreads are not available!"),6;if(!I)return q("pthread_create called with a null thread pointer!"),28;var be=[],he=0;if(b&&(be.length===0||he))return cI(687865856,I,R,B,K);if(he)return he;var ye=0,Te=0,_t=0;R&&R!=-1?(ye=o()[R>>2],ye+=81920,Te=o()[R+8>>2],_t=o()[R+12>>2]!==0):ye=2097152;var wr=Te==0;wr?Te=fI(16,ye):(Te-=ye,fe(Te>0));for(var fr=Fl(228),Ya=0;Ya<228>>2;++Ya)s()[(fr>>2)+Ya]=0;o()[I>>2]=fr,o()[fr+12>>2]=fr;var Nc=fr+152;o()[Nc>>2]=Nc;var jr={stackBase:Te,stackSize:ye,allocatedOwnStack:wr,detached:_t,startRoutine:B,pthread_ptr:fr,arg:K,transferList:be};return b?(jr.cmd="spawnThread",postMessage(jr,be)):Sh(jr),0}function Th(I){if(b)return Ha(6,1,I);switch(I){case 30:return 16384;case 85:var R=2147483648;return R/16384;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:case 80:case 81:case 79:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:return typeof navigator=="object"&&navigator.hardwareConcurrency||1}return Ny(28),-1}b||Ee.initMainThreadBlock();var Ka,sb=[null,Sy,vh,Ch,Ih,Nh,Th],ib={e:Cy,r:Iy,x:Ty,b:Ay,y:Ey,j:Dy,c:$y,d:bc,f:Rl,p:Ry,z:Fy,u:Py,q:zy,v:qy,i:Hy,t:Ky,w:tb,m:Ch,n:Ih,g:Nh,o:xy,a:te||i.wasmMemory,k:rb,l:nb,h:ob,s:Th},oI=gy(),Ah=i.___wasm_call_ctors=function(){return(Ah=i.___wasm_call_ctors=i.asm.A).apply(null,arguments)},ab=i._init=function(){return(ab=i._init=i.asm.B).apply(null,arguments)},lb=i._register_tensor=function(){return(lb=i._register_tensor=i.asm.C).apply(null,arguments)},ub=i._dispose_data=function(){return(ub=i._dispose_data=i.asm.D).apply(null,arguments)},cb=i._dispose=function(){return(cb=i._dispose=i.asm.E).apply(null,arguments)},pb=i._Abs=function(){return(pb=i._Abs=i.asm.G).apply(null,arguments)},mb=i._Add=function(){return(mb=i._Add=i.asm.H).apply(null,arguments)},fb=i._AddN=function(){return(fb=i._AddN=i.asm.I).apply(null,arguments)},db=i._ArgMax=function(){return(db=i._ArgMax=i.asm.J).apply(null,arguments)},hb=i._AvgPool=function(){return(hb=i._AvgPool=i.asm.K).apply(null,arguments)},gb=i._BatchMatMul=function(){return(gb=i._BatchMatMul=i.asm.L).apply(null,arguments)},xb=i._Ceil=function(){return(xb=i._Ceil=i.asm.M).apply(null,arguments)},yb=i._ClipByValue=function(){return(yb=i._ClipByValue=i.asm.N).apply(null,arguments)},bb=i._Conv2D=function(){return(bb=i._Conv2D=i.asm.O).apply(null,arguments)},Eh=i._Conv2DBackpropInput=function(){return(Eh=i._Conv2DBackpropInput=i.asm.P).apply(null,arguments)},Dh=i._Cos=function(){return(Dh=i._Cos=i.asm.Q).apply(null,arguments)},om=i._CropAndResize=function(){return(om=i._CropAndResize=i.asm.R).apply(null,arguments)},_c=i._Cumsum=function(){return(_c=i._Cumsum=i.asm.S).apply(null,arguments)},wb=i._DepthToSpace=function(){return(wb=i._DepthToSpace=i.asm.T).apply(null,arguments)},sm=i._DepthwiseConv2dNative=function(){return(sm=i._DepthwiseConv2dNative=i.asm.U).apply(null,arguments)},Z=i._Equal=function(){return(Z=i._Equal=i.asm.V).apply(null,arguments)},se=i._Exp=function(){return(se=i._Exp=i.asm.W).apply(null,arguments)},ke=i._FlipLeftRight=function(){return(ke=i._FlipLeftRight=i.asm.X).apply(null,arguments)},at=i._Floor=function(){return(at=i._Floor=i.asm.Y).apply(null,arguments)},Yt=i._FloorDiv=function(){return(Yt=i._FloorDiv=i.asm.Z).apply(null,arguments)},Bt=i._FusedBatchNorm=function(){return(Bt=i._FusedBatchNorm=i.asm._).apply(null,arguments)},tt=i._FusedConv2D=function(){return(tt=i._FusedConv2D=i.asm.$).apply(null,arguments)},rt=i._FusedDepthwiseConv2D=function(){return(rt=i._FusedDepthwiseConv2D=i.asm.aa).apply(null,arguments)},vr=i._Gather=function(){return(vr=i._Gather=i.asm.ba).apply(null,arguments)},Ji=i._GatherNd=function(){return(Ji=i._GatherNd=i.asm.ca).apply(null,arguments)},Qi=i._Greater=function(){return(Qi=i._Greater=i.asm.da).apply(null,arguments)},$h=i._GreaterEqual=function(){return($h=i._GreaterEqual=i.asm.ea).apply(null,arguments)},im=i._LeakyRelu=function(){return(im=i._LeakyRelu=i.asm.fa).apply(null,arguments)},bn=i._Less=function(){return(bn=i._Less=i.asm.ga).apply(null,arguments)},Xa=i._LessEqual=function(){return(Xa=i._LessEqual=i.asm.ha).apply(null,arguments)},Rh=i._Log=function(){return(Rh=i._Log=i.asm.ia).apply(null,arguments)},S3=i._LogicalAnd=function(){return(S3=i._LogicalAnd=i.asm.ja).apply(null,arguments)},T3=i._Max=function(){return(T3=i._Max=i.asm.ka).apply(null,arguments)},A3=i._MaxPool=function(){return(A3=i._MaxPool=i.asm.la).apply(null,arguments)},E3=i._Maximum=function(){return(E3=i._Maximum=i.asm.ma).apply(null,arguments)},D3=i._Mean=function(){return(D3=i._Mean=i.asm.na).apply(null,arguments)},$3=i._Min=function(){return($3=i._Min=i.asm.oa).apply(null,arguments)},R3=i._Minimum=function(){return(R3=i._Minimum=i.asm.pa).apply(null,arguments)},F3=i._Multiply=function(){return(F3=i._Multiply=i.asm.qa).apply(null,arguments)},O3=i._Neg=function(){return(O3=i._Neg=i.asm.ra).apply(null,arguments)},P3=i._NonMaxSuppressionV3=function(){return(P3=i._NonMaxSuppressionV3=i.asm.sa).apply(null,arguments)},M3=i._NonMaxSuppressionV4=function(){return(M3=i._NonMaxSuppressionV4=i.asm.ta).apply(null,arguments)},L3=i._NonMaxSuppressionV5=function(){return(L3=i._NonMaxSuppressionV5=i.asm.ua).apply(null,arguments)},z3=i._NotEqual=function(){return(z3=i._NotEqual=i.asm.va).apply(null,arguments)},B3=i._OneHot=function(){return(B3=i._OneHot=i.asm.wa).apply(null,arguments)},V3=i._PadV2=function(){return(V3=i._PadV2=i.asm.xa).apply(null,arguments)},G3=i._Pow=function(){return(G3=i._Pow=i.asm.ya).apply(null,arguments)},j3=i._Prelu=function(){return(j3=i._Prelu=i.asm.za).apply(null,arguments)},W3=i._Prod=function(){return(W3=i._Prod=i.asm.Aa).apply(null,arguments)},U3=i._RealDiv=function(){return(U3=i._RealDiv=i.asm.Ba).apply(null,arguments)},q3=i._Relu=function(){return(q3=i._Relu=i.asm.Ca).apply(null,arguments)},H3=i._Relu6=function(){return(H3=i._Relu6=i.asm.Da).apply(null,arguments)},K3=i._ResizeBilinear=function(){return(K3=i._ResizeBilinear=i.asm.Ea).apply(null,arguments)},X3=i._Reverse=function(){return(X3=i._Reverse=i.asm.Fa).apply(null,arguments)},Y3=i._RotateWithOffset=function(){return(Y3=i._RotateWithOffset=i.asm.Ga).apply(null,arguments)},Z3=i._Round=function(){return(Z3=i._Round=i.asm.Ha).apply(null,arguments)},J3=i._Rsqrt=function(){return(J3=i._Rsqrt=i.asm.Ia).apply(null,arguments)},Q3=i._ScatterNd=function(){return(Q3=i._ScatterNd=i.asm.Ja).apply(null,arguments)},eB=i._SelectV2=function(){return(eB=i._SelectV2=i.asm.Ka).apply(null,arguments)},tB=i._Sigmoid=function(){return(tB=i._Sigmoid=i.asm.La).apply(null,arguments)},rB=i._Sin=function(){return(rB=i._Sin=i.asm.Ma).apply(null,arguments)},nB=i._Softmax=function(){return(nB=i._Softmax=i.asm.Na).apply(null,arguments)},oB=i._Sqrt=function(){return(oB=i._Sqrt=i.asm.Oa).apply(null,arguments)},sB=i._Square=function(){return(sB=i._Square=i.asm.Pa).apply(null,arguments)},iB=i._SquaredDifference=function(){return(iB=i._SquaredDifference=i.asm.Qa).apply(null,arguments)},aB=i._Step=function(){return(aB=i._Step=i.asm.Ra).apply(null,arguments)},lB=i._StridedSlice=function(){return(lB=i._StridedSlice=i.asm.Sa).apply(null,arguments)},uB=i._Sub=function(){return(uB=i._Sub=i.asm.Ta).apply(null,arguments)},cB=i._Sum=function(){return(cB=i._Sum=i.asm.Ua).apply(null,arguments)},pB=i._Tanh=function(){return(pB=i._Tanh=i.asm.Va).apply(null,arguments)},mB=i._Tile=function(){return(mB=i._Tile=i.asm.Wa).apply(null,arguments)},fB=i._TopK=function(){return(fB=i._TopK=i.asm.Xa).apply(null,arguments)},dB=i._Transpose=function(){return(dB=i._Transpose=i.asm.Ya).apply(null,arguments)},hB=i.__FusedMatMul=function(){return(hB=i.__FusedMatMul=i.asm.Za).apply(null,arguments)},Fl=i._malloc=function(){return(Fl=i._malloc=i.asm._a).apply(null,arguments)},am=i._free=function(){return(am=i._free=i.asm.$a).apply(null,arguments)},sI=i.___errno_location=function(){return(sI=i.___errno_location=i.asm.ab).apply(null,arguments)},iI=i._emscripten_get_global_libc=function(){return(iI=i._emscripten_get_global_libc=i.asm.bb).apply(null,arguments)},kc=i._pthread_self=function(){return(kc=i._pthread_self=i.asm.cb).apply(null,arguments)},aI=i.___pthread_tsd_run_dtors=function(){return(aI=i.___pthread_tsd_run_dtors=i.asm.db).apply(null,arguments)},_b=i._emscripten_main_thread_process_queued_calls=function(){return(_b=i._emscripten_main_thread_process_queued_calls=i.asm.eb).apply(null,arguments)},gB=i._emscripten_current_thread_process_queued_calls=function(){return(gB=i._emscripten_current_thread_process_queued_calls=i.asm.fb).apply(null,arguments)},lI=i._emscripten_register_main_browser_thread_id=function(){return(lI=i._emscripten_register_main_browser_thread_id=i.asm.gb).apply(null,arguments)},uI=i.__emscripten_do_dispatch_to_thread=function(){return(uI=i.__emscripten_do_dispatch_to_thread=i.asm.hb).apply(null,arguments)},cI=i._emscripten_sync_run_in_main_thread_4=function(){return(cI=i._emscripten_sync_run_in_main_thread_4=i.asm.ib).apply(null,arguments)},pI=i._emscripten_run_in_main_runtime_thread_js=function(){return(pI=i._emscripten_run_in_main_runtime_thread_js=i.asm.jb).apply(null,arguments)},kb=i.__emscripten_call_on_thread=function(){return(kb=i.__emscripten_call_on_thread=i.asm.kb).apply(null,arguments)},xB=i._emscripten_tls_init=function(){return(xB=i._emscripten_tls_init=i.asm.lb).apply(null,arguments)},Fh=i.__emscripten_thread_init=function(){return(Fh=i.__emscripten_thread_init=i.asm.mb).apply(null,arguments)},lm=i.stackSave=function(){return(lm=i.stackSave=i.asm.nb).apply(null,arguments)},vc=i.stackRestore=function(){return(vc=i.stackRestore=i.asm.ob).apply(null,arguments)},Cc=i.stackAlloc=function(){return(Cc=i.stackAlloc=i.asm.pb).apply(null,arguments)},mI=i._emscripten_stack_set_limits=function(){return(mI=i._emscripten_stack_set_limits=i.asm.qb).apply(null,arguments)},fI=i._memalign=function(){return(fI=i._memalign=i.asm.rb).apply(null,arguments)},dI=i.__emscripten_allow_main_runtime_queued_calls=9880,Ic=i.__emscripten_main_thread_futex=11368;i.cwrap=we,i.PThread=Ee,i.PThread=Ee,i.wasmMemory=te,i.ExitStatus=um;var Oh;function um(I){this.name="ExitStatus",this.message="Program terminated with exit("+I+")",this.status=I}$l=function I(){Oh||vb(),Oh||($l=I)};function vb(I){if(I=I||m,Yi>0)return;if(b){l(i),postMessage({cmd:"loaded"});return}if(em(),Yi>0)return;function R(){Oh||(Oh=!0,i.calledRun=!0,!le&&(gc(),cy(),l(i),i.onRuntimeInitialized&&i.onRuntimeInitialized(),nn()))}i.setStatus?(i.setStatus("Running..."),setTimeout(function(){setTimeout(function(){i.setStatus("")},1),R()},1)):R()}i.run=vb;function yB(I,R){if(!(R&&re&&I===0)){if(!R&&b)throw postMessage({cmd:"exitProcess",returnCode:I}),new um(I);re||(Ee.terminateAllThreads(),ae=I,hh(),i.onExit&&i.onExit(I),le=!0),d(I,new um(I))}}if(i.preInit)for(typeof i.preInit=="function"&&(i.preInit=[i.preInit]);i.preInit.length>0;)i.preInit.pop()();return b&&(re=!1,Ee.initWorker()),vb(),e.ready}}();typeof tx=="object"&&typeof l0=="object"?l0.exports=u0:typeof define=="function"&&define.amd?define([],function(){return u0}):typeof tx=="object"&&(tx.WasmBackendModuleThreadedSimd=u0)});var BO=dt((rx,c0)=>{var p0=function(){var r=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!="undefined"&&(r=r||__filename),function(e){e=e||{};var t=typeof e!="undefined"?e:{},n,o;t.ready=new Promise(function(Z,se){n=Z,o=se});var s={},a;for(a in t)t.hasOwnProperty(a)&&(s[a]=t[a]);var i=[],l="./this.program",u=function(Z,se){throw se},c=!1,p=!1,m=!1,f=!1;c=typeof window=="object",p=typeof importScripts=="function",m=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",f=!c&&!m&&!p;var d="";function h(Z){return t.locateFile?t.locateFile(Z,d):d+Z}var g,x,w,b,_,k;m?(p?d=Cp().dirname(d)+"/":d=__dirname+"/",g=function(se,ke){return _||(_=require("fs")),k||(k=Cp()),se=k.normalize(se),_.readFileSync(se,ke?null:"utf8")},w=function(se){var ke=g(se,!0);return ke.buffer||(ke=new Uint8Array(ke)),U(ke.buffer),ke},process.argv.length>1&&(l=process.argv[1].replace(/\\/g,"/")),i=process.argv.slice(2),process.on("uncaughtException",function(Z){if(!(Z instanceof wb))throw Z}),process.on("unhandledRejection",os),u=function(Z){process.exit(Z)},t.inspect=function(){return"[Emscripten Module object]"}):f?(typeof read!="undefined"&&(g=function(se){return read(se)}),w=function(se){var ke;return typeof readbuffer=="function"?new Uint8Array(readbuffer(se)):(ke=read(se,"binary"),U(typeof ke=="object"),ke)},typeof scriptArgs!="undefined"?i=scriptArgs:typeof arguments!="undefined"&&(i=arguments),typeof quit=="function"&&(u=function(Z){quit(Z)}),typeof print!="undefined"&&(typeof console=="undefined"&&(console={}),console.log=print,console.warn=console.error=typeof printErr!="undefined"?printErr:print)):(c||p)&&(p?d=self.location.href:typeof document!="undefined"&&document.currentScript&&(d=document.currentScript.src),r&&(d=r),d.indexOf("blob:")!==0?d=d.substr(0,d.lastIndexOf("/")+1):d="",g=function(Z){var se=new XMLHttpRequest;return se.open("GET",Z,!1),se.send(null),se.responseText},p&&(w=function(Z){var se=new XMLHttpRequest;return se.open("GET",Z,!1),se.responseType="arraybuffer",se.send(null),new Uint8Array(se.response)}),x=function(Z,se,ke){var at=new XMLHttpRequest;at.open("GET",Z,!0),at.responseType="arraybuffer",at.onload=function(){if(at.status==200||at.status==0&&at.response){se(at.response);return}ke()},at.onerror=ke,at.send(null)},b=function(Z){document.title=Z});var A=t.print||console.log.bind(console),S=t.printErr||console.warn.bind(console);for(a in s)s.hasOwnProperty(a)&&(t[a]=s[a]);s=null,t.arguments&&(i=t.arguments),t.thisProgram&&(l=t.thisProgram),t.quit&&(u=t.quit);var $;t.wasmBinary&&($=t.wasmBinary);var O=t.noExitRuntime||!0;typeof WebAssembly!="object"&&os("no native wasm support detected");var M,G=!1,j;function U(Z,se){Z||os("Assertion failed: "+se)}function q(Z){var se=t["_"+Z];return U(se,"Cannot call unknown function "+Z+", make sure it is exported"),se}function H(Z,se,ke,at,Yt){var Bt={string:function(bn){var Xa=0;if(bn!=null&&bn!==0){var Rh=(bn.length<<2)+1;Xa=om(Rh),ie(bn,Xa,Rh)}return Xa},array:function(bn){var Xa=om(bn.length);return le(bn,Xa),Xa}};function tt(bn){return se==="string"?re(bn):se==="boolean"?Boolean(bn):bn}var rt=q(Z),vr=[],Ji=0;if(at)for(var Qi=0;Qi=at);)++Yt;if(Yt-se>16&&Z.subarray&&ne)return ne.decode(Z.subarray(se,Yt));for(var Bt="";se>10,56320|Ji&1023)}}return Bt}function re(Z,se){return Z?Y(xe,Z,se):""}function te(Z,se,ke,at){if(!(at>0))return 0;for(var Yt=ke,Bt=ke+at-1,tt=0;tt=55296&&rt<=57343){var vr=Z.charCodeAt(++tt);rt=65536+((rt&1023)<<10)|vr&1023}if(rt<=127){if(ke>=Bt)break;se[ke++]=rt}else if(rt<=2047){if(ke+1>=Bt)break;se[ke++]=192|rt>>6,se[ke++]=128|rt&63}else if(rt<=65535){if(ke+2>=Bt)break;se[ke++]=224|rt>>12,se[ke++]=128|rt>>6&63,se[ke++]=128|rt&63}else{if(ke+3>=Bt)break;se[ke++]=240|rt>>18,se[ke++]=128|rt>>12&63,se[ke++]=128|rt>>6&63,se[ke++]=128|rt&63}}return se[ke]=0,ke-Yt}function ie(Z,se,ke){return te(Z,xe,se,ke)}function le(Z,se){de.set(Z,se)}function ae(Z,se){return Z%se>0&&(Z+=se-Z%se),Z}var fe,de,xe,we,De,Ne,ze,He,it;function At(Z){fe=Z,t.HEAP8=de=new Int8Array(Z),t.HEAP16=we=new Int16Array(Z),t.HEAP32=Ne=new Int32Array(Z),t.HEAPU8=xe=new Uint8Array(Z),t.HEAPU16=De=new Uint16Array(Z),t.HEAPU32=ze=new Uint32Array(Z),t.HEAPF32=He=new Float32Array(Z),t.HEAPF64=it=new Float64Array(Z)}var Et=t.INITIAL_MEMORY||16777216,We,ut=[],mt=[],Mt=[],xn=[],Xt=!1;mt.push({func:function(){wh()}});function tn(){if(t.preRun)for(typeof t.preRun=="function"&&(t.preRun=[t.preRun]);t.preRun.length;)yn(t.preRun.shift());qa(ut)}function $r(){Xt=!0,qa(mt)}function Wn(){qa(Mt)}function nr(){if(t.postRun)for(typeof t.postRun=="function"&&(t.postRun=[t.postRun]);t.postRun.length;)Gr(t.postRun.shift());qa(xn)}function yn(Z){ut.unshift(Z)}function Gr(Z){xn.unshift(Z)}var br=0,rn=null,En=null;function Dl(Z){br++,t.monitorRunDependencies&&t.monitorRunDependencies(br)}function Ua(Z){if(br--,t.monitorRunDependencies&&t.monitorRunDependencies(br),br==0&&(rn!==null&&(clearInterval(rn),rn=null),En)){var se=En;En=null,se()}}t.preloadedImages={},t.preloadedAudios={};function os(Z){t.onAbort&&t.onAbort(Z),Z+="",S(Z),G=!0,j=1,Z="abort("+Z+"). Build with -s ASSERTIONS=1 for more info.";var se=new WebAssembly.RuntimeError(Z);throw o(se),se}function Xi(Z,se){return String.prototype.startsWith?Z.startsWith(se):Z.indexOf(se)===0}var em="data:application/octet-stream;base64,";function gc(Z){return Xi(Z,em)}var cy="file://";function hh(Z){return Xi(Z,cy)}var nn="tfjs-backend-wasm.wasm";gc(nn)||(nn=h(nn));function gh(Z){try{if(Z==nn&&$)return new Uint8Array($);if(w)return w(Z);throw"both async and sync fetching of the wasm failed"}catch(se){os(se)}}function py(){if(!$&&(c||p)){if(typeof fetch=="function"&&!hh(nn))return fetch(nn,{credentials:"same-origin"}).then(function(Z){if(!Z.ok)throw"failed to load wasm binary file at '"+nn+"'";return Z.arrayBuffer()}).catch(function(){return gh(nn)});if(x)return new Promise(function(Z,se){x(nn,function(ke){Z(new Uint8Array(ke))},se)})}return Promise.resolve().then(function(){return gh(nn)})}function Yi(){var Z={a:on};function se(tt,rt){var vr=tt.exports;t.asm=vr,M=t.asm.g,At(M.buffer),We=t.asm.m,Ua("wasm-instantiate")}Dl("wasm-instantiate");function ke(tt){se(tt.instance)}function at(tt){return py().then(function(rt){return WebAssembly.instantiate(rt,Z)}).then(tt,function(rt){S("failed to asynchronously prepare wasm: "+rt),os(rt)})}function Yt(){return!$&&typeof WebAssembly.instantiateStreaming=="function"&&!gc(nn)&&!hh(nn)&&typeof fetch=="function"?fetch(nn,{credentials:"same-origin"}).then(function(tt){var rt=WebAssembly.instantiateStreaming(tt,Z);return rt.then(ke,function(vr){return S("wasm streaming compile failed: "+vr),S("falling back to ArrayBuffer instantiation"),at(ke)})}):at(ke)}if(t.instantiateWasm)try{var Bt=t.instantiateWasm(Z,se);return Bt}catch(tt){return S("Module.instantiateWasm callback failed with error: "+tt),!1}return Yt().catch(o),{}}function qa(Z){for(;Z.length>0;){var se=Z.shift();if(typeof se=="function"){se(t);continue}var ke=se.func;typeof ke=="number"?se.arg===void 0?We.get(ke)():We.get(ke)(se.arg):ke(se.arg===void 0?null:se.arg)}}function $l(){os()}function my(Z,se,ke){xe.copyWithin(Z,se,se+ke)}function fy(){return xe.length}function Zi(Z){try{return M.grow(Z-fe.byteLength+65535>>>16),At(M.buffer),1}catch(se){}}function xh(Z){var se=fy(),ke=2147483648;if(Z>ke)return!1;for(var at=1;at<=4;at*=2){var Yt=se*(1+.2/at);Yt=Math.min(Yt,Z+100663296);var Bt=Math.min(ke,ae(Math.max(Z,Yt),65536)),tt=Zi(Bt);if(tt)return!0}return!1}var xc={mappings:{},buffers:[null,[],[]],printChar:function(Z,se){var ke=xc.buffers[Z];se===0||se===10?((Z===1?A:S)(Y(ke,0)),ke.length=0):ke.push(se)},varargs:void 0,get:function(){xc.varargs+=4;var Z=Ne[xc.varargs-4>>2];return Z},getStr:function(Z){var se=re(Z);return se},get64:function(Z,se){return Z}};function yh(Z){return 0}function dy(Z,se,ke,at,Yt){}function bh(Z,se,ke,at){for(var Yt=0,Bt=0;Bt>2],rt=Ne[se+(Bt*8+4)>>2],vr=0;vr>2]=Yt,0}var on={a:$l,d:my,e:xh,f:yh,c:dy,b:bh},hy=Yi(),wh=t.___wasm_call_ctors=function(){return(wh=t.___wasm_call_ctors=t.asm.h).apply(null,arguments)},gy=t._init=function(){return(gy=t._init=t.asm.i).apply(null,arguments)},_h=t._register_tensor=function(){return(_h=t._register_tensor=t.asm.j).apply(null,arguments)},xy=t._dispose_data=function(){return(xy=t._dispose_data=t.asm.k).apply(null,arguments)},yc=t._dispose=function(){return(yc=t._dispose=t.asm.l).apply(null,arguments)},bc=t._Abs=function(){return(bc=t._Abs=t.asm.n).apply(null,arguments)},yy=t._Add=function(){return(yy=t._Add=t.asm.o).apply(null,arguments)},by=t._AddN=function(){return(by=t._AddN=t.asm.p).apply(null,arguments)},wy=t._ArgMax=function(){return(wy=t._ArgMax=t.asm.q).apply(null,arguments)},Ee=t._AvgPool=function(){return(Ee=t._AvgPool=t.asm.r).apply(null,arguments)},_y=t._BatchMatMul=function(){return(_y=t._BatchMatMul=t.asm.s).apply(null,arguments)},ky=t._Ceil=function(){return(ky=t._Ceil=t.asm.t).apply(null,arguments)},vy=t._ClipByValue=function(){return(vy=t._ClipByValue=t.asm.u).apply(null,arguments)},Cy=t._Conv2D=function(){return(Cy=t._Conv2D=t.asm.v).apply(null,arguments)},Iy=t._Conv2DBackpropInput=function(){return(Iy=t._Conv2DBackpropInput=t.asm.w).apply(null,arguments)},Rl=t._Cos=function(){return(Rl=t._Cos=t.asm.x).apply(null,arguments)},Ny=t._CropAndResize=function(){return(Ny=t._CropAndResize=t.asm.y).apply(null,arguments)},Sy=t._Cumsum=function(){return(Sy=t._Cumsum=t.asm.z).apply(null,arguments)},Ty=t._DepthToSpace=function(){return(Ty=t._DepthToSpace=t.asm.A).apply(null,arguments)},Ay=t._DepthwiseConv2dNative=function(){return(Ay=t._DepthwiseConv2dNative=t.asm.B).apply(null,arguments)},Ey=t._Equal=function(){return(Ey=t._Equal=t.asm.C).apply(null,arguments)},Dy=t._Exp=function(){return(Dy=t._Exp=t.asm.D).apply(null,arguments)},$y=t._FlipLeftRight=function(){return($y=t._FlipLeftRight=t.asm.E).apply(null,arguments)},Ry=t._Floor=function(){return(Ry=t._Floor=t.asm.F).apply(null,arguments)},Fy=t._FloorDiv=function(){return(Fy=t._FloorDiv=t.asm.G).apply(null,arguments)},Ha=t._FusedBatchNorm=function(){return(Ha=t._FusedBatchNorm=t.asm.H).apply(null,arguments)},tm=t._FusedConv2D=function(){return(tm=t._FusedConv2D=t.asm.I).apply(null,arguments)},rm=t._FusedDepthwiseConv2D=function(){return(rm=t._FusedDepthwiseConv2D=t.asm.J).apply(null,arguments)},Oy=t._Gather=function(){return(Oy=t._Gather=t.asm.K).apply(null,arguments)},Py=t._GatherNd=function(){return(Py=t._GatherNd=t.asm.L).apply(null,arguments)},My=t._Greater=function(){return(My=t._Greater=t.asm.M).apply(null,arguments)},Ly=t._GreaterEqual=function(){return(Ly=t._GreaterEqual=t.asm.N).apply(null,arguments)},zy=t._LeakyRelu=function(){return(zy=t._LeakyRelu=t.asm.O).apply(null,arguments)},Ye=t._Less=function(){return(Ye=t._Less=t.asm.P).apply(null,arguments)},By=t._LessEqual=function(){return(By=t._LessEqual=t.asm.Q).apply(null,arguments)},Vy=t._Log=function(){return(Vy=t._Log=t.asm.R).apply(null,arguments)},Gy=t._LogicalAnd=function(){return(Gy=t._LogicalAnd=t.asm.S).apply(null,arguments)},jy=t._Max=function(){return(jy=t._Max=t.asm.T).apply(null,arguments)},Wy=t._MaxPool=function(){return(Wy=t._MaxPool=t.asm.U).apply(null,arguments)},Uy=t._Maximum=function(){return(Uy=t._Maximum=t.asm.V).apply(null,arguments)},nm=t._Mean=function(){return(nm=t._Mean=t.asm.W).apply(null,arguments)},kh=t._Min=function(){return(kh=t._Min=t.asm.X).apply(null,arguments)},vh=t._Minimum=function(){return(vh=t._Minimum=t.asm.Y).apply(null,arguments)},qy=t._Multiply=function(){return(qy=t._Multiply=t.asm.Z).apply(null,arguments)},Hy=t._Neg=function(){return(Hy=t._Neg=t.asm._).apply(null,arguments)},Ky=t._NonMaxSuppressionV3=function(){return(Ky=t._NonMaxSuppressionV3=t.asm.$).apply(null,arguments)},Xy=t._NonMaxSuppressionV4=function(){return(Xy=t._NonMaxSuppressionV4=t.asm.aa).apply(null,arguments)},Yy=t._NonMaxSuppressionV5=function(){return(Yy=t._NonMaxSuppressionV5=t.asm.ba).apply(null,arguments)},Zy=t._NotEqual=function(){return(Zy=t._NotEqual=t.asm.ca).apply(null,arguments)},Jy=t._OneHot=function(){return(Jy=t._OneHot=t.asm.da).apply(null,arguments)},ft=t._PadV2=function(){return(ft=t._PadV2=t.asm.ea).apply(null,arguments)},Qy=t._Pow=function(){return(Qy=t._Pow=t.asm.fa).apply(null,arguments)},eb=t._Prelu=function(){return(eb=t._Prelu=t.asm.ga).apply(null,arguments)},tb=t._Prod=function(){return(tb=t._Prod=t.asm.ha).apply(null,arguments)},wc=t._RealDiv=function(){return(wc=t._RealDiv=t.asm.ia).apply(null,arguments)},Ch=t._Relu=function(){return(Ch=t._Relu=t.asm.ja).apply(null,arguments)},Ih=t._Relu6=function(){return(Ih=t._Relu6=t.asm.ka).apply(null,arguments)},Nh=t._ResizeBilinear=function(){return(Nh=t._ResizeBilinear=t.asm.la).apply(null,arguments)},rb=t._Reverse=function(){return(rb=t._Reverse=t.asm.ma).apply(null,arguments)},nb=t._RotateWithOffset=function(){return(nb=t._RotateWithOffset=t.asm.na).apply(null,arguments)},Sh=t._Round=function(){return(Sh=t._Round=t.asm.oa).apply(null,arguments)},ob=t._Rsqrt=function(){return(ob=t._Rsqrt=t.asm.pa).apply(null,arguments)},Th=t._ScatterNd=function(){return(Th=t._ScatterNd=t.asm.qa).apply(null,arguments)},Ka=t._SelectV2=function(){return(Ka=t._SelectV2=t.asm.ra).apply(null,arguments)},sb=t._Sigmoid=function(){return(sb=t._Sigmoid=t.asm.sa).apply(null,arguments)},ib=t._Sin=function(){return(ib=t._Sin=t.asm.ta).apply(null,arguments)},oI=t._Softmax=function(){return(oI=t._Softmax=t.asm.ua).apply(null,arguments)},Ah=t._Sqrt=function(){return(Ah=t._Sqrt=t.asm.va).apply(null,arguments)},ab=t._Square=function(){return(ab=t._Square=t.asm.wa).apply(null,arguments)},lb=t._SquaredDifference=function(){return(lb=t._SquaredDifference=t.asm.xa).apply(null,arguments)},ub=t._Step=function(){return(ub=t._Step=t.asm.ya).apply(null,arguments)},cb=t._StridedSlice=function(){return(cb=t._StridedSlice=t.asm.za).apply(null,arguments)},pb=t._Sub=function(){return(pb=t._Sub=t.asm.Aa).apply(null,arguments)},mb=t._Sum=function(){return(mb=t._Sum=t.asm.Ba).apply(null,arguments)},fb=t._Tanh=function(){return(fb=t._Tanh=t.asm.Ca).apply(null,arguments)},db=t._Tile=function(){return(db=t._Tile=t.asm.Da).apply(null,arguments)},hb=t._TopK=function(){return(hb=t._TopK=t.asm.Ea).apply(null,arguments)},gb=t._Transpose=function(){return(gb=t._Transpose=t.asm.Fa).apply(null,arguments)},xb=t.__FusedMatMul=function(){return(xb=t.__FusedMatMul=t.asm.Ga).apply(null,arguments)},yb=t._malloc=function(){return(yb=t._malloc=t.asm.Ha).apply(null,arguments)},bb=t._free=function(){return(bb=t._free=t.asm.Ia).apply(null,arguments)},Eh=t.stackSave=function(){return(Eh=t.stackSave=t.asm.Ja).apply(null,arguments)},Dh=t.stackRestore=function(){return(Dh=t.stackRestore=t.asm.Ka).apply(null,arguments)},om=t.stackAlloc=function(){return(om=t.stackAlloc=t.asm.La).apply(null,arguments)};t.cwrap=X;var _c;function wb(Z){this.name="ExitStatus",this.message="Program terminated with exit("+Z+")",this.status=Z}En=function Z(){_c||sm(),_c||(En=Z)};function sm(Z){if(Z=Z||i,br>0||(tn(),br>0))return;function se(){_c||(_c=!0,t.calledRun=!0,!G&&($r(),Wn(),n(t),t.onRuntimeInitialized&&t.onRuntimeInitialized(),nr()))}t.setStatus?(t.setStatus("Running..."),setTimeout(function(){setTimeout(function(){t.setStatus("")},1),se()},1)):se()}if(t.run=sm,t.preInit)for(typeof t.preInit=="function"&&(t.preInit=[t.preInit]);t.preInit.length>0;)t.preInit.pop()();return sm(),e.ready}}();typeof rx=="object"&&typeof c0=="object"?c0.exports=p0:typeof define=="function"&&define.amd?define([],function(){return p0}):typeof rx=="object"&&(rx.WasmBackendModule=p0)});var Ez=dt((Az,WC)=>{(function(r,e,t){function n(i){var l=this,u=a();l.next=function(){var c=2091639*l.s0+l.c*23283064365386963e-26;return l.s0=l.s1,l.s1=l.s2,l.s2=c-(l.c=c|0)},l.c=1,l.s0=u(" "),l.s1=u(" "),l.s2=u(" "),l.s0-=u(i),l.s0<0&&(l.s0+=1),l.s1-=u(i),l.s1<0&&(l.s1+=1),l.s2-=u(i),l.s2<0&&(l.s2+=1),u=null}function o(i,l){return l.c=i.c,l.s0=i.s0,l.s1=i.s1,l.s2=i.s2,l}function s(i,l){var u=new n(i),c=l&&l.state,p=u.next;return p.int32=function(){return u.next()*4294967296|0},p.double=function(){return p()+(p()*2097152|0)*11102230246251565e-32},p.quick=p,c&&(typeof c=="object"&&o(c,u),p.state=function(){return o(u,{})}),p}function a(){var i=4022871197,l=function(u){u=String(u);for(var c=0;c>>0,p-=i,p*=i,i=p>>>0,p-=i,i+=p*4294967296}return(i>>>0)*23283064365386963e-26};return l}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.alea=s})(Az,typeof WC=="object"&&WC,typeof define=="function"&&define)});var $z=dt((Dz,UC)=>{(function(r,e,t){function n(a){var i=this,l="";i.x=0,i.y=0,i.z=0,i.w=0,i.next=function(){var c=i.x^i.x<<11;return i.x=i.y,i.y=i.z,i.z=i.w,i.w^=i.w>>>19^c^c>>>8},a===(a|0)?i.x=a:l+=a;for(var u=0;u>>0)/4294967296};return c.double=function(){do var p=l.next()>>>11,m=(l.next()>>>0)/4294967296,f=(p+m)/(1<<21);while(f===0);return f},c.int32=l.next,c.quick=c,u&&(typeof u=="object"&&o(u,l),c.state=function(){return o(l,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xor128=s})(Dz,typeof UC=="object"&&UC,typeof define=="function"&&define)});var Fz=dt((Rz,qC)=>{(function(r,e,t){function n(a){var i=this,l="";i.next=function(){var c=i.x^i.x>>>2;return i.x=i.y,i.y=i.z,i.z=i.w,i.w=i.v,(i.d=i.d+362437|0)+(i.v=i.v^i.v<<4^(c^c<<1))|0},i.x=0,i.y=0,i.z=0,i.w=0,i.v=0,a===(a|0)?i.x=a:l+=a;for(var u=0;u>>4),i.next()}function o(a,i){return i.x=a.x,i.y=a.y,i.z=a.z,i.w=a.w,i.v=a.v,i.d=a.d,i}function s(a,i){var l=new n(a),u=i&&i.state,c=function(){return(l.next()>>>0)/4294967296};return c.double=function(){do var p=l.next()>>>11,m=(l.next()>>>0)/4294967296,f=(p+m)/(1<<21);while(f===0);return f},c.int32=l.next,c.quick=c,u&&(typeof u=="object"&&o(u,l),c.state=function(){return o(l,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xorwow=s})(Rz,typeof qC=="object"&&qC,typeof define=="function"&&define)});var Pz=dt((Oz,HC)=>{(function(r,e,t){function n(a){var i=this;i.next=function(){var u=i.x,c=i.i,p,m,f;return p=u[c],p^=p>>>7,m=p^p<<24,p=u[c+1&7],m^=p^p>>>10,p=u[c+3&7],m^=p^p>>>3,p=u[c+4&7],m^=p^p<<7,p=u[c+7&7],p=p^p<<13,m^=p^p<<9,u[c]=m,i.i=c+1&7,m};function l(u,c){var p,m,f=[];if(c===(c|0))m=f[0]=c;else for(c=""+c,p=0;p0;--p)u.next()}l(i,a)}function o(a,i){return i.x=a.x.slice(),i.i=a.i,i}function s(a,i){a==null&&(a=+new Date);var l=new n(a),u=i&&i.state,c=function(){return(l.next()>>>0)/4294967296};return c.double=function(){do var p=l.next()>>>11,m=(l.next()>>>0)/4294967296,f=(p+m)/(1<<21);while(f===0);return f},c.int32=l.next,c.quick=c,u&&(u.x&&o(u,l),c.state=function(){return o(l,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xorshift7=s})(Oz,typeof HC=="object"&&HC,typeof define=="function"&&define)});var Lz=dt((Mz,KC)=>{(function(r,e,t){function n(a){var i=this;i.next=function(){var u=i.w,c=i.X,p=i.i,m,f;return i.w=u=u+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,i.i=p,f+(u^u>>>16)|0};function l(u,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>>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;u.w=h,u.X=g,u.i=f}l(i,a)}function o(a,i){return i.i=a.i,i.w=a.w,i.X=a.X.slice(),i}function s(a,i){a==null&&(a=+new Date);var l=new n(a),u=i&&i.state,c=function(){return(l.next()>>>0)/4294967296};return c.double=function(){do var p=l.next()>>>11,m=(l.next()>>>0)/4294967296,f=(p+m)/(1<<21);while(f===0);return f},c.int32=l.next,c.quick=c,u&&(u.X&&o(u,l),c.state=function(){return o(l,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xor4096=s})(Mz,typeof KC=="object"&&KC,typeof define=="function"&&define)});var Bz=dt((zz,XC)=>{(function(r,e,t){function n(a){var i=this,l="";i.next=function(){var c=i.b,p=i.c,m=i.d,f=i.a;return c=c<<25^c>>>7^p,p=p-m|0,m=m<<24^m>>>8^f,f=f-c|0,i.b=c=c<<20^c>>>12^p,i.c=p=p-m|0,i.d=m<<16^p>>>16^f,i.a=f-c|0},i.a=0,i.b=0,i.c=2654435769|0,i.d=1367130551,a===Math.floor(a)?(i.a=a/4294967296|0,i.b=a|0):l+=a;for(var u=0;u>>0)/4294967296};return c.double=function(){do var p=l.next()>>>11,m=(l.next()>>>0)/4294967296,f=(p+m)/(1<<21);while(f===0);return f},c.int32=l.next,c.quick=c,u&&(typeof u=="object"&&o(u,l),c.state=function(){return o(l,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.tychei=s})(zz,typeof XC=="object"&&XC,typeof define=="function"&&define)});var Gz=dt((Vz,ry)=>{(function(r,e,t){var n=256,o=6,s=52,a="random",i=t.pow(n,o),l=t.pow(2,s),u=l*2,c=n-1,p;function m(b,_,k){var A=[];_=_==!0?{entropy:!0}:_||{};var S=g(h(_.entropy?[b,w(e)]:b==null?x():b,3),A),$=new f(A),O=function(){for(var M=$.g(o),G=i,j=0;M=u;)M/=2,G/=2,j>>>=1;return(M+j)/G};return O.int32=function(){return $.g(4)|0},O.quick=function(){return $.g(4)/4294967296},O.double=O,g(w($.S),e),(_.pass||k||function(M,G,j,U){return U&&(U.S&&d(U,$),M.state=function(){return d($,{})}),j?(t[a]=M,G):M})(O,S,"global"in _?_.global:this==t,_.state)}function f(b){var _,k=b.length,A=this,S=0,$=A.i=A.j=0,O=A.S=[];for(k||(b=[k++]);S{var fte=Ez(),dte=$z(),hte=Fz(),gte=Pz(),xte=Lz(),yte=Bz(),hc=Gz();hc.alea=fte;hc.xor128=dte;hc.xorwow=hte;hc.xorshift7=gte;hc.xor4096=xte;hc.tychei=yte;jz.exports=hc});var x3=dt(()=>{});var gI="3.2.0";var xI="3.2.0";var yI="3.2.0";var bI="3.2.0";var wI="3.2.0";var NB=1e-7,SB=1e-4,Za=class{constructor(e,t){this.backend=e,this.dataMover=t,this.data=new WeakMap,this.dataIdsCount=0}get(e){return this.data.has(e)||this.dataMover.moveData(this.backend,e),this.data.get(e)}set(e,t){this.dataIdsCount++,this.data.set(e,t)}has(e){return this.data.has(e)}delete(e){return this.dataIdsCount--,this.data.delete(e)}numDataIds(){return this.dataIdsCount}},js=class{refCount(e){return Un("refCount")}incRef(e){return Un("incRef")}timerAvailable(){return!0}time(e){return Un("time")}read(e){return Un("read")}readSync(e){return Un("readSync")}numDataIds(){return Un("numDataIds")}disposeData(e,t){return Un("disposeData")}write(e,t,n){return Un("write")}move(e,t,n,o,s){return Un("move")}memory(){return Un("memory")}floatPrecision(){return Un("floatPrecision")}epsilon(){return this.floatPrecision()===32?NB:SB}dispose(){return Un("dispose")}};function Un(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 _I(r){let e=r.length,t=0,n=0;for(;e>0;)n=Math.random()*e|0,e--,t=r[e],r[e]=r[n],r[n]=t}function TB(r,e){if(r.length!==e.length)throw new Error(`Array sizes must match to be shuffled together First array length was ${r.length}Second array length was ${e.length}`);let t=r.length,n,o,s=0;for(;t>0;)s=Math.random()*t|0,t--,n=r[t],o=e[t],r[t]=r[s],e[t]=e[s],r[s]=n,e[s]=o}function Ac(r,e,t){return Math.max(r,Math.min(e,t))}function AB(r){return r%2==0?r:r+1}function EB(r){let e=0;for(let t=0;tt+` Shapes ${r} and ${e} must match`)}function Dn(r){E(r!=null,()=>"The input to the tensor constructor must be a non-null value.")}function ss(r,e=[],t=!1){if(e==null&&(e=[]),Array.isArray(r)||or(r)&&!t)for(let n=0;n0,t){return new Promise((n,o)=>{let s=0,a=()=>{if(r()){n();return}s++;let i=e(s);if(t!=null&&s>=t){o();return}setTimeout(a,i)};a()})}function LB(r,e){let t=1,n=-1;for(let s=0;s=0)t*=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(e>0&&e!==t)throw Error(`Size(${e}) must match the product of shape ${r}`);return r}if(t===0)throw Error(`Cannot infer the missing size in [${r}] when there are 0 elements`);if(e%t!=0)throw Error(`The implicit shape can't be a fractional number. Got ${e} / ${t}`);let o=r.slice();return o[n]=e/t,o}function Qt(r,e){let t=e.length;return r=r==null?e.map((n,o)=>o):[].concat(r),E(r.every(n=>n>=-t&&n`All values in axis param must be in range [-${t}, ${t}) but got axis ${r}`),E(r.every(n=>nt(n)),()=>`All values in axis param must be integers but got axis ${r}`),r.map(n=>n<0?t+n:n)}function Cb(r,e){let t=[],n=[],o=e!=null&&Array.isArray(e)&&e.length===0,s=e==null||o?null:Qt(e,r).sort(),a=0;for(let i=0;ii)&&r[i]===1&&(t.push(r[i]),n.push(i)),s[a]<=i&&a++}r[i]!==1&&(t.push(r[i]),n.push(i))}return{newShape:t,keptDims:n}}function Ib(r,e){let t=null;if(r==null||r==="float32")t=new Float32Array(e);else if(r==="int32")t=new Int32Array(e);else if(r==="bool")t=new Uint8Array(e);else throw new Error(`Unknown data type ${r}`);return t}function Nb(r,e){let t=null;if(r==null||r==="float32")t=new Float32Array(e);else if(r==="int32")t=new Int32Array(e);else if(r==="bool")t=new Uint8Array(e);else if(r==="string")t=new Array(e);else throw new Error(`Unknown data type ${r}`);return t}function Sb(r,e){for(let t=0;te+=t.length),e}function is(r){return typeof r=="string"||r instanceof String}function kI(r){return typeof r=="boolean"}function vI(r){return typeof r=="number"}function Ec(r){return Array.isArray(r)?Ec(r[0]):r instanceof Float32Array?"float32":r instanceof Int32Array||r instanceof Uint8Array?"int32":vI(r)?"float32":is(r)?"string":kI(r)?"bool":"float32"}function Ws(r){return!!(r&&r.constructor&&r.call&&r.apply)}function Dc(r,e){for(let t=e;t=0;--n)t[n]=t[n+1]*r[n+1];return t}function CI(r,e,t){let n=new Array;if(e.length===1){let o=e[0];for(let s=0;si*l);for(let i=0;in*o);if(t===0)return[];if(t!==e.length)throw new Error(`[${r}] does not match the input size ${e.length}.`);return CI(0,r,e)}function cm(r,e){let t=$c(r,e);for(let n=0;nn*o,1);if(e==null||e==="float32")return Pl(r,new Float32Array(t));if(e==="int32")return Pl(r,new Int32Array(t));if(e==="bool")return Pl(r,new Uint8Array(t));throw new Error(`Unknown data type ${e}`)}function pm(r){r.forEach(e=>{E(Number.isInteger(e)&&e>=0,()=>`Tensor must have a shape comprised of positive integers but got shape [${r}].`)})}function VB(r,e,t){if(e===0)return 0;if(e===1)return r[0];let n=r[r.length-1];for(let o=0;o{let[o,s]=n.split(":");this.urlFlags[o]=WB(o,s)})}};function jB(r){let e={};return r.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,(t,...n)=>(UB(e,n[0],n[1]),n.join("="))),e}function UB(r,e,t){r[decodeURIComponent(e)]=decodeURIComponent(t||"")}function WB(r,e){if(e=e.toLowerCase(),e==="true"||e==="false")return e==="true";if(`${+e}`===e)return+e;throw new Error(`Could not parse value flag value ${e} for flag ${r}.`)}function W(){return Eb}var Eb=null;function NI(r){Eb=r}var Db;function $b(){if(Db==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");Db=r}return Db}function qB(){let r=$b();return r._tfGlobals==null&&(r._tfGlobals=new Map),r._tfGlobals}function fm(r,e){let t=qB();if(t.has(r))return t.get(r);{let n=e();return t.set(r,n),t.get(r)}}var as="Abs",qs="Acos",Hs="Acosh",wn="Add",qn="AddN",Ml="All",Ll="Any",Hn="ArgMax",ea="ArgMin",Ks="Asin",Xs="Asinh",Ys="Atan",Zs="Atanh",Js="Atan2",Kn="AvgPool",zl="AvgPoolGrad",ta="AvgPool3D",Bl="AvgPool3DGrad",Xn="BatchMatMul",ra="BatchToSpaceND",Vl="Bincount",Rb="BroadcastTo",$n="Cast",Yn="Ceil",Rn="ClipByValue",Gl="Complex",na="ComplexAbs",ls="Concat",Zn="Conv2D",jl="Conv2DBackpropFilter",Jn="Conv2DBackpropInput",oa="Conv3D",Wl="Conv3DBackpropFilterV2",Ul="Conv3DBackpropInputV2",Qn="Cos",Qs="Cosh",eo="Cumsum",ei="CropAndResize",ql="DenseBincount",ti="DepthToSpace",to="DepthwiseConv2dNative",Hl="DepthwiseConv2dNativeBackpropFilter",Kl="DepthwiseConv2dNativeBackpropInput",Xl="Diag",sa="Dilation2D",Rc="Dilation2DBackpropInput",Fc="Dilation2DBackpropFilter",ro="RealDiv",ri="Elu",Yl="EluGrad",ni="Erf",oi="Equal",no="Exp",us="ExpandDims",si="Expm1",Zl="FFT",ia="Fill",ii="FlipLeftRight",oo="Floor",so="FloorDiv",io="FusedBatchNorm",cs="GatherV2",ai="GatherNd",li="Greater",ao="GreaterEqual",Fn="Identity",Jl="IFFT",Ql="Imag",ui="IsFinite",ci="IsInf",pi="IsNan",lo="LeakyRelu",mi="Less",fi="LessEqual",eu="LinSpace",uo="Log",di="Log1p",hi="LogicalAnd",Ja="LogicalNot",Qa="LogicalOr",Fb="LogSoftmax",aa="LRN",tu="LRNGrad",co="Max",po="Maximum",mo="MaxPool",ru="MaxPoolGrad",la="MaxPool3D",nu="MaxPool3DGrad",ou="MaxPoolWithArgmax",fo="Mean",ho="Min",go="Minimum",ua="MirrorPad",gi="Mod",su="Multinomial",xo="Multiply",ps="Neg",xi="NotEqual",yi="NonMaxSuppressionV3",bi="NonMaxSuppressionV4",wi="NonMaxSuppressionV5",ms="OnesLike",yo="OneHot",fs="Pack",bo="PadV2",HB="Pool",wo="Pow",_o="Prelu",_i="Prod",ca="Range",iu="Real",ki="Reciprocal",ko="Relu",ds="Reshape",pa="ResizeNearestNeighbor",au="ResizeNearestNeighborGrad",vo="ResizeBilinear",lu="ResizeBilinearGrad",Co="Relu6",Io="Reverse",No="Round",So="Rsqrt",vi="ScatterNd",hs="Select",Ci="Selu",gs="Slice",To="Sin",Ii="Sinh",Ni="Sign",Ao="Sigmoid",Si="Softplus",Eo="Sqrt",Do="Sum",ma="SpaceToBatchND",xs="SplitV",$o="Softmax",Ro="SquaredDifference",fa="Square",Fo="Sub",uu="SparseToDense",Ti="StridedSlice",Ai="Tan",Oo="Tanh",_n="Tile",Ei="TopK",Po="Transpose",cu="Unique",ys="Unpack",da="UnsortedSegmentSum",bs="ZerosLike",On="Step",Oc="FromPixels",Di="RotateWithOffset",ws="_FusedMatMul",_s="FusedConv2D",ks="FusedDepthwiseConv2D";var Pc=fm("kernelRegistry",()=>new Map),dm=fm("gradRegistry",()=>new Map);function Mc(r,e){let t=Ob(r,e);return Pc.get(t)}function zh(r){return dm.get(r)}function hm(r){let e=Pc.entries(),t=[];for(;;){let{done:n,value:o}=e.next();if(n)break;let[s,a]=o,[i]=s.split("_");i===r&&t.push(a)}return t}function el(r){let{kernelName:e,backendName:t}=r,n=Ob(e,t);Pc.has(n)&&console.warn(`The kernel '${e}' for backend '${t}' is already registered`),Pc.set(n,r)}function Pb(r){let{kernelName:e}=r;dm.has(e)&&W().getBool("DEBUG")&&console.warn(`Overriding the gradient for '${e}'`),dm.set(e,r)}function KB(r,e){let t=Ob(r,e);if(!Pc.has(t))throw new Error(`The kernel '${r}' for backend '${e}' is not registered`);Pc.delete(t)}function XB(r){if(!dm.has(r))throw new Error(`The gradient '${r}' for backend is not registered`);dm.delete(r)}function YB(r,e){hm(r).forEach(n=>{let o=Object.assign({},n,{backendName:e});el(o)})}function Ob(r,e){return`${e}_${r}`}var y={};Ke(y,{arraysEqual:()=>Wr,assert:()=>E,assertNonNegativeIntegerDimensions:()=>pm,assertNonNull:()=>Dn,assertShapesMatch:()=>Ct,bytesFromStringArray:()=>Ab,bytesPerElement:()=>Mh,checkConversionForErrors:()=>Sb,clamp:()=>Ac,computeStrides:()=>Us,createScalarValue:()=>ZB,createShuffledIndices:()=>PB,decodeString:()=>zc,distSquared:()=>$B,encodeString:()=>tl,fetch:()=>QB,flatten:()=>ss,getArrayFromDType:()=>Nb,getTypedArrayFromDType:()=>Ib,hasEncodingLoss:()=>zB,indexToLoc:()=>GB,inferDtype:()=>Ec,inferFromImplicitShape:()=>LB,isBoolean:()=>kI,isFunction:()=>Ws,isInt:()=>nt,isNumber:()=>vI,isPromise:()=>mm,isScalarShape:()=>RB,isString:()=>is,isTypedArray:()=>or,isValidDtype:()=>Tb,locToIndex:()=>VB,makeOnesTypedArray:()=>cm,makeZerosNestedTypedArray:()=>BB,makeZerosTypedArray:()=>$c,nearestDivisor:()=>Dc,nearestLargerEven:()=>AB,now:()=>pu,parseAxisParam:()=>Qt,randUniform:()=>DB,repeatedTry:()=>MB,rightPad:()=>Ol,shuffle:()=>_I,shuffleCombo:()=>TB,sizeFromShape:()=>ct,sizeToSquarishShape:()=>OB,squeezeShape:()=>Cb,sum:()=>EB,tanh:()=>FB,toNestedArray:()=>Pl,toTypedArray:()=>Lc});function ZB(r,e){return e==="string"?tl(r):Lc([r],e)}function JB(r,e){return r instanceof Float32Array&&e==="float32"||r instanceof Int32Array&&e==="int32"||r instanceof Uint8Array&&e==="bool"}function Lc(r,e){if(e==="string")throw new Error("Cannot convert a string[] to a TypedArray");if(Array.isArray(r)&&(r=ss(r)),W().getBool("DEBUG")&&Sb(r,e),JB(r,e))return r;if(e==null||e==="float32"||e==="complex64")return new Float32Array(r);if(e==="int32")return new Int32Array(r);if(e==="bool"){let t=new Uint8Array(r.length);for(let n=0;n{o=n()},a,i=pu();if(this.backendTimer.timerAvailable())a=this.backendTimer.time(s);else{s();for(let u of o)u.dataSync();a=Promise.resolve({kernelMs:pu()-i})}if(W().getBool("CHECK_COMPUTATION_FOR_ERRORS"))for(let u=0;u{eV(p,c.dtype,e)})}return{kernelName:e,outputs:o,inputs:t,timeMs:a.then(u=>u.kernelMs),extraInfo:a.then(u=>u.getExtraProfileInfo!=null?u.getExtraProfileInfo():"")}}logKernelProfile(e){let{kernelName:t,outputs:n,timeMs:o,inputs:s,extraInfo:a}=e;n.forEach(i=>{Promise.all([i.data(),o,a]).then(l=>{this.logger.logKernelProfile(t,i,l[0],l[1],s,l[2])})})}};function eV(r,e,t){if(e!=="float32")return!1;for(let n=0;n0?h:""} `}}console.log(`%c${l} %c${i} %c${u}D ${p} %c${c} %c${m} %c${a}`,"font-weight:bold","color:red","color:blue","color: orange","color: green","color: steelblue")}};function TI(r,e,t){let n={},o={};for(let l=0;ln[h.id]=!0),f=!0,o[u.id]=!0;break}if(f)break}}let s={};s[t.id]=!0;let a={};for(let l=r.length-1;l>=0;l--){let u=r[l],c=u.inputs;for(let p=0;p=0;o--){let s=e[o],a=[];if(s.outputs.forEach(l=>{let u=r[l.id];u!=null?a.push(u):a.push(null)}),s.gradient==null)throw new Error(`Cannot compute gradient: gradient function not found for ${s.kernelName}.`);let i=s.gradient(a);for(let l in s.inputs){if(!(l in i))throw new Error(`Cannot backprop through input ${l}. Available gradients found: ${Object.keys(i)}.`);let u=t(()=>i[l]());if(u.dtype!=="float32")throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input ${l} must have 'float32' dtype, but has '${u.dtype}'`);let c=s.inputs[l];if(!Wr(u.shape,c.shape))throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input '${l}' has shape '${u.shape}', which does not match the shape of the input '${c.shape}'`);if(r[c.id]==null)r[c.id]=u;else{let p=r[c.id];r[c.id]=n(p,u),p.dispose()}}}}var EI=20,gm=3,Lb=7;function DI(r,e,t,n){let o=Us(e),s=tV(r,e,t,o),a=e.length,i=Bh(r,e,t,o,s),l=["Tensor"];return n&&(l.push(` dtype: ${t}`),l.push(` rank: ${a}`),l.push(` shape: [${e}]`),l.push(" values:")),l.push(i.map(u=>" "+u).join(` `)),l.join(` `)}function tV(r,e,t,n){let o=ct(e),s=n[n.length-1],a=new Array(s).fill(0),i=e.length,l=t==="complex64"?ym(r):r;if(i>1)for(let u=0;uEI){let g=gm*a,x=Array.from(r.slice(0,g)),w=Array.from(r.slice((i-gm)*a,i*a));return t==="complex64"&&(x=ym(x),w=ym(w)),["["+x.map((b,_)=>xm(b,o[_],t)).join(", ")+", ..., "+w.map((b,_)=>xm(b,o[i-gm+_],t)).join(", ")+"]"]}let h=t==="complex64"?ym(r):Array.from(r);return["["+h.map((g,x)=>xm(g,o[x],t)).join(", ")+"]"]}let u=e.slice(1),c=n.slice(1),p=n[0]*a,m=[];if(i>EI){for(let h=0;h`Length of values '${o}' does not match the size inferred by the shape '${this.size}'.`)}if(t==="complex64")throw new Error("complex64 dtype TensorBuffers are not supported. Please create a TensorBuffer for the real and imaginary parts separately and call tf.complex(real, imag).");this.values=n||Nb(t,this.size),this.strides=Us(e)}set(e,...t){t.length===0&&(t=[0]),E(t.length===this.rank,()=>`The number of provided coordinates (${t.length}) must match the rank (${this.rank})`);let n=this.locToIndex(t);this.values[n]=e}get(...e){e.length===0&&(e=[0]);let t=0;for(let o of e){if(o<0||o>=this.shape[t]){let s=`Requested out of range element at ${e}. Buffer shape=${this.shape}`;throw new Error(s)}t++}let n=e[e.length-1];for(let o=0;ozc(n))}catch(n){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}}return e}dataSync(){this.throwIfDisposed();let e=$i().readSync(this.dataId);if(this.dtype==="string")try{return e.map(t=>zc(t))}catch(t){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}return e}async bytes(){this.throwIfDisposed();let e=await $i().read(this.dataId);return this.dtype==="string"?e:new Uint8Array(e.buffer)}dispose(){this.isDisposed||($i().disposeTensor(this),this.isDisposedInternal=!0)}get isDisposed(){return this.isDisposedInternal}throwIfDisposed(){if(this.isDisposed)throw new Error("Tensor is disposed.")}print(e=!1){return Bc.print(this,e)}clone(){return this.throwIfDisposed(),Bc.clone(this)}toString(e=!1){let t=this.dataSync();return DI(t,this.shape,this.dtype,e)}cast(e){return this.throwIfDisposed(),Bc.cast(this,e)}variable(e=!0,t,n){return this.throwIfDisposed(),$i().makeVariable(this,e,t,n)}};Object.defineProperty(Ve,Symbol.hasInstance,{value:r=>!!r&&r.data!=null&&r.dataSync!=null&&r.throwIfDisposed!=null});function F(){return fm("Tensor",()=>Ve)}F();var rl=class extends Ve{constructor(e,t,n,o){super(e.shape,e.dtype,e.dataId,o);this.trainable=t,this.name=n}assign(e){if(e.dtype!==this.dtype)throw new Error(`dtype of the new value (${e.dtype}) and previous value (${this.dtype}) must match`);if(!Wr(e.shape,this.shape))throw new Error(`shape of the new value (${e.shape}) and previous value (${this.shape}) must match`);$i().disposeTensor(this),this.dataId=e.dataId,$i().incRef(this,null)}dispose(){$i().disposeVariable(this),this.isDisposedInternal=!0}};Object.defineProperty(rl,Symbol.hasInstance,{value:r=>r instanceof Ve&&r.assign!=null&&r.assign instanceof Function});var Mo={};Ke(Mo,{assertTypesMatch:()=>Wb,getTensorsInContainer:()=>bm,isTensorInList:()=>oV,makeTypesMatch:()=>Ge});var zb;(function(r){r.R0="R0",r.R1="R1",r.R2="R2",r.R3="R3",r.R4="R4",r.R5="R5",r.R6="R6"})(zb||(zb={}));var Bb;(function(r){r.float32="float32",r.int32="int32",r.bool="int32",r.complex64="complex64"})(Bb||(Bb={}));var Vb;(function(r){r.float32="float32",r.int32="int32",r.bool="bool",r.complex64="complex64"})(Vb||(Vb={}));var Gb;(function(r){r.float32="float32",r.int32="float32",r.bool="float32",r.complex64="complex64"})(Gb||(Gb={}));var jb;(function(r){r.float32="complex64",r.int32="complex64",r.bool="complex64",r.complex64="complex64"})(jb||(jb={}));var nV={float32:Gb,int32:Bb,bool:Vb,complex64:jb};function dr(r,e){if(r==="string"||e==="string"){if(r==="string"&&e==="string")return"string";throw new Error(`Can not upcast ${r} with ${e}`)}return nV[r][e]}function mu(r){return dr(r,"int32")}function Ge(r,e){if(r.dtype===e.dtype)return[r,e];let t=dr(r.dtype,e.dtype);return[r.cast(t),e.cast(t)]}function Wb(r,e){E(r.dtype===e.dtype,()=>`The dtypes of the first(${r.dtype}) and second(${e.dtype}) input must match`)}function oV(r,e){return e.some(t=>t.id===r.id)}function bm(r){let e=[],t=new Set;return PI(r,e,t),e}function PI(r,e,t){if(r==null)return;if(r instanceof Ve){e.push(r);return}if(!sV(r))return;let n=r;for(let o in n){let s=n[o];t.has(s)||(t.add(s),PI(s,e,t))}}function sV(r){return Array.isArray(r)||typeof r=="object"}function Ub(r){return r.kernelName!=null}var qb=class{constructor(){this.registeredVariables={},this.nextTapeNodeId=0,this.numBytes=0,this.numTensors=0,this.numStringTensors=0,this.numDataBuffers=0,this.gradientDepth=0,this.kernelDepth=0,this.scopeStack=[],this.numDataMovesStack=[],this.nextScopeId=0,this.tensorInfo=new WeakMap,this.profiling=!1,this.activeProfile={newBytes:0,newTensors:0,peakBytes:0,kernels:[],result:null,get kernelNames(){return Array.from(new Set(this.kernels.map(e=>e.name)))}}}dispose(){for(let e in this.registeredVariables)this.registeredVariables[e].dispose()}},fu=class{constructor(e){this.ENV=e,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new qb}async ready(){if(this.pendingBackendInit!=null)return this.pendingBackendInit.then(()=>{});if(this.backendInstance!=null)return;let e=this.getSortedBackends();for(let t=0;t{t.setupFunc!=null&&t.setupFunc(this.backendInstance)})}disposeRegisteredKernels(e){hm(e).forEach(n=>{n.disposeFunc!=null&&n.disposeFunc(this.registry[e])})}initializeBackend(e){let t=this.registryFactory[e];if(t==null)throw new Error(`Cannot initialize backend ${e}, no registration found.`);try{let n=t.factory();if(n&&!(n instanceof js)&&typeof n.then=="function"){let o=++this.pendingBackendInitId,s=n.then(a=>o(othis.registryFactory[t].priority-this.registryFactory[e].priority)}initializeBackendsAndReturnBest(){let e=this.getSortedBackends();for(let t=0;tthis.startScope(n),()=>this.endScope(o),()=>(o=t(),o instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),o))}scopedRun(e,t,n){e();try{let o=n();return t(),o}catch(o){throw t(),o}}nextTensorId(){return fu.nextTensorId++}nextVariableId(){return fu.nextVariableId++}clone(e){let t=D.runKernel(Fn,{x:e}),n={x:e},o=a=>({x:()=>{let i="float32",l={x:a},u={dtype:i};return D.runKernel($n,l,u)}}),s=[];return this.addTapeNode(this.state.activeScope.name,n,[t],o,s,{}),t}runKernel(e,t,n){if(!(Mc(e,this.backendName)!=null))throw new Error(`Kernel '${e}' not registered for backend '${this.backendName}'`);return this.runKernelFunc({kernelName:e,inputs:t,attrs:n})}shouldCheckForMemLeaks(){return this.ENV.getBool("IS_TEST")}checkKernelForMemLeak(e,t,n){let o=this.backend.numDataIds(),s=0;n.forEach(l=>{s+=l.dtype==="complex64"?3:1});let a=this.state.numDataMovesStack[this.state.numDataMovesStack.length-1],i=o-t-s-a;if(i>0)throw new Error(`Backend '${this.backendName}' has an internal memory leak (${i} data ids) after running '${e}'`)}runKernelFunc(e){let t,n=[],o=this.isTapeOn(),s=this.state.numBytes,a=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);let i;this.backendName==null&&this.backend;let l,u=Ub(e)?e.kernelName:this.state.activeScope!=null?this.state.activeScope.name:"";if(Ub(e)){let{kernelName:d,inputs:h,attrs:g}=e;this.backendName==null&&this.backend;let x=Mc(d,this.backendName);E(x!=null,()=>`Cannot find registered kernel '${d}' for backend '${this.backendName}'`),i=()=>{let w=this.backend.numDataIds();l=x.kernelFunc({inputs:h,attrs:g,backend:this.backend});let b=Array.isArray(l)?l:[l];this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(d,w,b);let _=b.map(k=>{if(k.rank!=null)return k;let{dataId:A,shape:S,dtype:$}=k;return this.makeTensorFromDataId(A,S,$)});if(o){let k=this.getTensorsForGradient(d,h,_);n=this.saveTensorsForBackwardMode(k)}return _}}else{let{forwardFunc:d}=e,h=g=>{!o||(n=g.map(x=>this.keep(this.clone(x))))};i=()=>{let g=this.backend.numDataIds();l=this.tidy(()=>d(this.backend,h));let x=Array.isArray(l)?l:[l];return this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(u,g,x),x}}let{inputs:c,attrs:p}=e,m=Ub(e)?null:e.backwardsFunc,f;return this.scopedRun(()=>this.state.kernelDepth++,()=>this.state.kernelDepth--,()=>{!this.ENV.getBool("DEBUG")&&!this.state.profiling?t=i():(f=this.profiler.profileKernel(u,c,()=>i()),this.ENV.getBool("DEBUG")&&this.profiler.logKernelProfile(f),t=f.outputs)}),o&&this.addTapeNode(u,c,t,m,n,p),this.state.profiling&&this.state.activeProfile.kernels.push({name:u,bytesAdded:this.state.numBytes-s,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-a,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(c).map(d=>c[d]!=null?c[d].shape:null),outputShapes:t.map(d=>d.shape),kernelTimeMs:f.timeMs,extraInfo:f.extraInfo}),Array.isArray(l)?t:t[0]}saveTensorsForBackwardMode(e){return e.map(n=>this.keep(this.clone(n)))}getTensorsForGradient(e,t,n){let o=zh(e);if(o!=null){let s=o.inputsToSave||[],a=o.outputsToSave||[],i;o.saveAllInputs?(E(Array.isArray(t),()=>"saveAllInputs is true, expected inputs to be an array."),i=Object.keys(t).map(u=>t[u])):i=s.map(u=>t[u]);let l=n.filter((u,c)=>a[c]);return i.concat(l)}return[]}makeTensor(e,t,n,o){if(e==null)throw new Error("Values passed to engine.makeTensor() are null");n=n||"float32",o=o||this.backend;let s=e;n==="string"&&is(e[0])&&(s=e.map(l=>tl(l)));let a=o.write(s,t,n),i=new Ve(t,n,a,this.nextTensorId());if(this.trackTensor(i,o),n==="string"){let l=this.state.tensorInfo.get(a),u=Ab(s);this.state.numBytes+=u-l.bytes,l.bytes=u}return i}makeTensorFromDataId(e,t,n,o){n=n||"float32";let s=new Ve(t,n,e,this.nextTensorId());return this.trackTensor(s,o),s}makeVariable(e,t=!0,n,o){n=n||this.nextVariableId().toString(),o!=null&&o!==e.dtype&&(e=e.cast(o));let s=new rl(e,t,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(e,t){this.state.numTensors++,e.dtype==="string"&&this.state.numStringTensors++;let n=0;e.dtype!=="complex64"&&e.dtype!=="string"&&(n=e.size*Mh(e.dtype)),this.state.numBytes+=n,this.state.tensorInfo.has(e.dataId)||(this.state.numDataBuffers++,this.state.tensorInfo.set(e.dataId,{backend:t||this.backend,dtype:e.dtype,shape:e.shape,bytes:n})),e instanceof rl||this.track(e)}incRef(e,t){this.trackTensor(e,t),this.backend.incRef(e.dataId)}removeDataId(e,t){this.state.tensorInfo.has(e)&&this.state.tensorInfo.get(e).backend===t&&(this.state.tensorInfo.delete(e),this.state.numDataBuffers--)}disposeTensor(e){if(!this.state.tensorInfo.has(e.dataId))return;let t=this.state.tensorInfo.get(e.dataId);if(this.state.numTensors--,e.dtype==="string"&&(this.state.numStringTensors--,this.state.numBytes-=t.bytes),e.dtype!=="complex64"&&e.dtype!=="string"){let n=e.size*Mh(e.dtype);this.state.numBytes-=n}t.backend.disposeData(e.dataId)&&this.removeDataId(e.dataId,t.backend)}disposeVariables(){for(let e in this.state.registeredVariables){let t=this.state.registeredVariables[e];this.disposeVariable(t)}}disposeVariable(e){this.disposeTensor(e),this.state.registeredVariables[e.name]!=null&&delete this.state.registeredVariables[e.name]}memory(){let e=this.backend.memory();return e.numTensors=this.state.numTensors,e.numDataBuffers=this.state.numDataBuffers,e.numBytes=this.state.numBytes,this.state.numStringTensors>0&&(e.unreliable=!0,e.reasons==null&&(e.reasons=[]),e.reasons.push("Memory usage by string tensors is approximate (2 bytes per character)")),e}async profile(e){this.state.profiling=!0;let t=this.state.numBytes,n=this.state.numTensors;this.state.activeProfile.kernels=[],this.state.activeProfile.result=await e(),this.state.profiling=!1,this.state.activeProfile.peakBytes=Math.max(...this.state.activeProfile.kernels.map(o=>o.totalBytesSnapshot)),this.state.activeProfile.newBytes=this.state.numBytes-t,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(e,t,n,o,s,a){let i={id:this.state.nextTapeNodeId++,kernelName:e,inputs:t,outputs:n,saved:s},l=zh(e);l!=null&&(o=l.gradFunc),o!=null&&(i.gradient=u=>(u=u.map((c,p)=>{if(c==null){let m=n[p],f=$c(m.size,m.dtype);return this.makeTensor(f,m.shape,m.dtype)}return c}),o(u.length>1?u:u[0],s,a))),this.state.activeTape.push(i)}keep(e){return e.kept=!0,e}startTape(){this.state.gradientDepth===0&&(this.state.activeTape=[]),this.state.gradientDepth++}endTape(){this.state.gradientDepth--}startScope(e){let t={track:[],name:"unnamed scope",id:this.state.nextScopeId++};e&&(t.name=e),this.state.scopeStack.push(t),this.state.activeScope=t}endScope(e){let t=bm(e),n=new Set(t.map(s=>s.id));for(let s=0;s{!s.kept&&s.scopeId===o.id&&this.track(s)})}gradients(e,t,n,o=!1){if(E(t.length>0,()=>"gradients() received an empty list of xs."),n!=null&&n.dtype!=="float32")throw new Error(`dy must have 'float32' dtype, but has '${n.dtype}'`);let s=this.scopedRun(()=>this.startTape(),()=>this.endTape(),()=>this.tidy("forward",e));E(s instanceof Ve,()=>"The result y returned by f() must be a tensor.");let a=TI(this.state.activeTape,t,s);if(!o&&a.length===0&&t.length>0)throw new Error("Cannot compute gradient of y=f(x) with respect to x. Make sure that the f you passed encloses all operations that lead from x to y.");return this.tidy("backward",()=>{let i={};i[s.id]=n==null?iV(s.shape):n,AI(i,a,u=>this.tidy(u),aV);let l=t.map(u=>i[u.id]);return this.state.gradientDepth===0&&(this.state.activeTape.forEach(u=>{for(let c of u.saved)c.dispose()}),this.state.activeTape=null),{value:s,grads:l}})}customGrad(e){return E(Ws(e),()=>"The f passed in customGrad(f) must be a function."),(...t)=>{E(t.every(i=>i instanceof Ve),()=>"The args passed in customGrad(f)(x1, x2,...) must all be tensors");let n,o={};t.forEach((i,l)=>{o[l]=i});let s=(i,l)=>(n=e(...t,l),E(n.value instanceof Ve,()=>"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"),E(Ws(n.gradFunc),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function."),n.value),a=(i,l)=>{let u=n.gradFunc(i,l),c=Array.isArray(u)?u:[u];E(c.length===t.length,()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns the same number of tensors as inputs passed to f(...)."),E(c.every(m=>m instanceof Ve),()=>"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:a,inputs:o})}}readSync(e){return this.state.tensorInfo.get(e).backend.readSync(e)}read(e){return this.state.tensorInfo.get(e).backend.read(e)}async time(e){let t=pu(),n=await this.backend.time(e);return n.wallMs=pu()-t,n}track(e){return this.state.activeScope!=null&&(e.scopeId=this.state.activeScope.id,this.state.activeScope.track.push(e)),e}get registeredVariables(){return this.state.registeredVariables}reset(){this.pendingBackendInitId++,this.state.dispose(),this.ENV.reset(),this.state=new qb;for(let e in this.registry)this.disposeRegisteredKernels(e),this.registry[e].dispose(),delete this.registry[e];this.backendName=null,this.backendInstance=null,this.pendingBackendInit=null}};fu.nextTensorId=0;fu.nextVariableId=0;function iV(r){let e=cm(ct(r),"float32");return D.makeTensor(e,r,"float32")}function Hb(){let r=$b();if(r._tfengine==null){let e=new Lh(r);r._tfengine=new fu(e)}return NI(r._tfengine.ENV),RI(()=>r._tfengine),r._tfengine}var D=Hb();function aV(r,e){let t={a:r,b:e};return D.runKernel(wn,t)}var Vc={};Ke(Vc,{isBrowser:()=>Kb,isMobile:()=>uV});function lV(){return typeof navigator!="undefined"&&navigator!=null}function uV(){if(lV()){let r=navigator.userAgent||navigator.vendor||window.opera;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(r)||/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(r.substr(0,4))}return!1}function Kb(){return typeof window!="undefined"&&window.document!=null||typeof WorkerGlobalScope!="undefined"}var Ri=W();Ri.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.")});Ri.registerFlag("IS_BROWSER",()=>Kb());Ri.registerFlag("IS_NODE",()=>typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined");Ri.registerFlag("IS_CHROME",()=>typeof navigator!="undefined"&&navigator!=null&&navigator.userAgent!=null&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor));Ri.registerFlag("PROD",()=>!1);Ri.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY",()=>Ri.getBool("DEBUG"));Ri.registerFlag("DEPRECATION_WARNINGS_ENABLED",()=>!0);Ri.registerFlag("IS_TEST",()=>!1);Ri.registerFlag("CHECK_COMPUTATION_FOR_ERRORS",()=>!0);function Cr(r,e){let t=r;if(or(r))return e==="string"?[]:[r.length];if(!Array.isArray(r))return[];let n=[];for(;Array.isArray(t)||or(t)&&e!=="string";)n.push(t.length),t=t[0];return Array.isArray(r)&&W().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")&&MI(r,n,[]),n}function MI(r,e,t){if(t=t||[],!Array.isArray(r)&&!or(r)){E(e.length===0,()=>`Element arr[${t.join("][")}] is a primitive, but should be an array/TypedArray of ${e[0]} elements`);return}E(e.length>0,()=>`Element arr[${t.join("][")}] should be a primitive, but is an array of ${r.length} elements`),E(r.length===e[0],()=>`Element arr[${t.join("][")}] should have ${e[0]} elements, but has ${r.length} elements`);let n=e.slice(1);for(let o=0;o=0&&(o=n),LI(n,o,e,t),r==null||!or(r)&&!Array.isArray(r)&&typeof r!="number"&&typeof r!="boolean"&&typeof r!="string"){let l=r==null?"null":r.constructor.name;throw new Error(`Argument '${e}' passed to '${t}' must be a Tensor or TensorLike, but got '${l}'`)}let s=Cr(r,o);!or(r)&&!Array.isArray(r)&&(r=[r]);let i=o!=="string"?Lc(r,o):ss(r,[],!0);return D.makeTensor(i,s,o)}function ha(r,e,t,n="numeric"){if(!Array.isArray(r))throw new Error(`Argument ${e} passed to ${t} must be a \`Tensor[]\` or \`TensorLike[]\``);return r.map((s,a)=>v(s,`${e}[${a}]`,t,n))}var zI="__op";function T(r){let e=Object.keys(r);if(e.length!==1)throw new Error(`Please provide an object with a single key (operation name) mapping to a function. Got an object with ${e.length} keys.`);let t=e[0],n=r[t];t.endsWith("_")&&(t=t.substring(0,t.length-1)),t=t+zI;let o=(...s)=>{D.startScope(t);try{let a=n(...s);return mm(a)&&console.error("Cannot return a Promise inside of tidy."),D.endScope(a),a}catch(a){throw D.endScope(null),a}};return Object.defineProperty(o,"name",{value:t,configurable:!0}),o}function cV(r,e){let t=v(r,"real","complex"),n=v(e,"imag","complex");Ct(t.shape,n.shape,`real and imag shapes, ${t.shape} and ${n.shape}, must match in call to tf.complex().`);let o={real:t,imag:n};return D.runKernel(Gl,o)}var kn=T({complex_:cV});function Ur(r,e,t,n){if(n==null&&(n=Ec(r)),n==="complex64")throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).");if(!or(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(e!=null){pm(e);let o=ct(e),s=ct(t);E(o===s,()=>`Based on the provided shape, [${e}], the tensor should have ${o} values but has ${s}`);for(let a=0;a`Error creating a new Tensor. Inferred shape (${t}) does not match the provided shape (${e}). `)}}return!or(r)&&!Array.isArray(r)&&(r=[r]),e=e||t,r=n!=="string"?Lc(r,n):ss(r,[],!0),D.makeTensor(r,e,n)}function Rr(r,e,t){let n=Cr(r,t);return Ur(r,e,n,t)}var wm={float32:4,float16:2,int32:4,uint16:2,uint8:1,bool:1,complex64:8};var Vh=4;async function BI(r,e){let t=[],n=[],o=Array.isArray(r)?r.map(a=>a.name):Object.keys(r);for(let a=0;a{let m=await l.bytes(),f=m.reduce((g,x)=>g+x.length,0)+Vh*m.length,d=new Uint8Array(f),h=0;for(let g=0;g{if(e+=s.byteLength,t.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(e),o=0;return t.forEach(s=>{n.set(new Uint8Array(s.buffer),o),o+=s.byteLength}),n.buffer}var Xb=typeof Buffer!="undefined"&&(typeof Blob=="undefined"||typeof atob=="undefined"||typeof btoa=="undefined");function VI(r){return Xb?Buffer.byteLength(r):new Blob([r]).size}function GI(r){if(Xb)return Buffer.from(r).toString("base64");let e=new Uint8Array(r),t="";for(let n=0,o=e.length;n{e+=o.byteLength});let t=new Uint8Array(e),n=0;return r.forEach(o=>{t.set(new Uint8Array(o),n),n+=o.byteLength}),t.buffer}function Yb(r){let e="/";for(r=r.trim();r.endsWith(e);)r=r.slice(0,r.length-1);let t=r.split(e);return t[t.length-1]}function Fi(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:VI(JSON.stringify(r.modelTopology)),weightSpecsBytes:r.weightSpecs==null?0:VI(JSON.stringify(r.weightSpecs)),weightDataBytes:r.weightData==null?0:r.weightData.byteLength}}function fV(){let r=t=>{let n=t<<13,o=0;for(;(n&8388608)==0;)o-=8388608,n<<=1;return n&=~8388608,o+=947912704,n|o},e=new Uint32Array(2048);e[0]=0;for(let t=1;t<1024;t++)e[t]=r(t);for(let t=1024;t<2048;t++)e[t]=939524096+(t-1024<<13);return e}function dV(){let r=new Uint32Array(64);r[0]=0,r[31]=1199570944,r[32]=2147483648,r[63]=3347054592;for(let e=1;e<31;e++)r[e]=e<<23;for(let e=33;e<63;e++)r[e]=2147483648+(e-32<<23);return r}function hV(){let r=new Uint32Array(64);for(let e=0;e<64;e++)r[e]=1024;return r[0]=r[32]=0,r}function mV(){let r=fV(),e=dV(),t=hV();return n=>{let o=new ArrayBuffer(4*n.length),s=new Uint32Array(o);for(let a=0;a>10]+(i&1023)]+e[i>>10];s[a]=l}return new Float32Array(o)}}var It=class{constructor(){this.saveRouters=[],this.loadRouters=[]}static getInstance(){return It.instance==null&&(It.instance=new It),It.instance}static registerSaveRouter(e){It.getInstance().saveRouters.push(e)}static registerLoadRouter(e){It.getInstance().loadRouters.push(e)}static getSaveHandlers(e){return It.getHandlers(e,"save")}static getLoadHandlers(e,t){return It.getHandlers(e,"load",t)}static getHandlers(e,t,n){let o=[];return(t==="load"?It.getInstance().loadRouters:It.getInstance().saveRouters).forEach(a=>{let i=a(e,n);i!==null&&o.push(i)}),o}},WI=r=>It.registerSaveRouter(r),UI=r=>It.registerLoadRouter(r),qI=r=>It.getSaveHandlers(r),HI=(r,e)=>It.getLoadHandlers(r,e);var Zb="tensorflowjs",Jb=1,du="models_store",nl="model_info_store";function KI(){if(!W().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,e=r.indexedDB||r.mozIndexedDB||r.webkitIndexedDB||r.msIndexedDB||r.shimIndexedDB;if(e==null)throw new Error("The current browser does not appear to support IndexedDB.");return e}function Qb(r){let e=r.result;e.createObjectStore(du,{keyPath:"modelPath"}),e.createObjectStore(nl,{keyPath:"modelPath"})}var ga=class{constructor(e){if(this.indexedDB=KI(),e==null||!e)throw new Error("For IndexedDB, modelPath must not be null, undefined or empty.");this.modelPath=e}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");return this.databaseAction(this.modelPath,e)}async load(){return this.databaseAction(this.modelPath)}databaseAction(e,t){return new Promise((n,o)=>{let s=this.indexedDB.open(Zb,Jb);s.onupgradeneeded=()=>Qb(s),s.onsuccess=()=>{let a=s.result;if(t==null){let i=a.transaction(du,"readonly"),u=i.objectStore(du).get(this.modelPath);u.onsuccess=()=>{if(u.result==null)return a.close(),o(new Error(`Cannot find model with path '${this.modelPath}' in IndexedDB.`));n(u.result.modelArtifacts)},u.onerror=c=>(a.close(),o(u.error)),i.oncomplete=()=>a.close()}else{let i=Fi(t),l=a.transaction(nl,"readwrite"),u=l.objectStore(nl),c=u.put({modelPath:this.modelPath,modelArtifactsInfo:i}),p;c.onsuccess=()=>{p=a.transaction(du,"readwrite");let f=p.objectStore(du).put({modelPath:this.modelPath,modelArtifacts:t,modelArtifactsInfo:i});f.onsuccess=()=>n({modelArtifactsInfo:i}),f.onerror=d=>{u=l.objectStore(nl);let h=u.delete(this.modelPath);h.onsuccess=()=>(a.close(),o(f.error)),h.onerror=g=>(a.close(),o(f.error))}},c.onerror=m=>(a.close(),o(c.error)),l.oncomplete=()=>{p==null?a.close():p.oncomplete=()=>a.close()}}},s.onerror=a=>o(s.error)})}};ga.URL_SCHEME="indexeddb://";var XI=r=>W().getBool("IS_BROWSER")&&!Array.isArray(r)&&r.startsWith(ga.URL_SCHEME)?gV(r.slice(ga.URL_SCHEME.length)):null;It.registerSaveRouter(XI);It.registerLoadRouter(XI);function gV(r){return new ga(r)}function xV(r){return r.startsWith(ga.URL_SCHEME)?r.slice(ga.URL_SCHEME.length):r}var ew=class{constructor(){this.indexedDB=KI()}async listModels(){return new Promise((e,t)=>{let n=this.indexedDB.open(Zb,Jb);n.onupgradeneeded=()=>Qb(n),n.onsuccess=()=>{let o=n.result,s=o.transaction(nl,"readonly"),i=s.objectStore(nl).getAll();i.onsuccess=()=>{let l={};for(let u of i.result)l[u.modelPath]=u.modelArtifactsInfo;e(l)},i.onerror=l=>(o.close(),t(i.error)),s.oncomplete=()=>o.close()},n.onerror=o=>t(n.error)})}async removeModel(e){return e=xV(e),new Promise((t,n)=>{let o=this.indexedDB.open(Zb,Jb);o.onupgradeneeded=()=>Qb(o),o.onsuccess=()=>{let s=o.result,a=s.transaction(nl,"readwrite"),i=a.objectStore(nl),l=i.get(e),u;l.onsuccess=()=>{if(l.result==null)return s.close(),n(new Error(`Cannot find model with path '${e}' in IndexedDB.`));{let c=i.delete(e),p=()=>{u=s.transaction(du,"readwrite");let f=u.objectStore(du).delete(e);f.onsuccess=()=>t(l.result.modelArtifactsInfo),f.onerror=d=>n(l.error)};c.onsuccess=p,c.onerror=m=>(p(),s.close(),n(l.error))}},l.onerror=c=>(s.close(),n(l.error)),a.oncomplete=()=>{u==null?s.close():u.oncomplete=()=>s.close()}},o.onerror=s=>n(o.error)})}};var xa="/",jc="tensorflowjs_models",YI="info",yV="model_topology",bV="weight_specs",wV="weight_data",_V="model_metadata";function ZI(r){return{info:[jc,r,YI].join(xa),topology:[jc,r,yV].join(xa),weightSpecs:[jc,r,bV].join(xa),weightData:[jc,r,wV].join(xa),modelMetadata:[jc,r,_V].join(xa)}}function kV(r){let e=r.split(xa);if(e.length<3)throw new Error(`Invalid key format: ${r}`);return e.slice(1,e.length-1).join(xa)}function vV(r){return r.startsWith(ya.URL_SCHEME)?r.slice(ya.URL_SCHEME.length):r}var ya=class{constructor(e){if(!W().getBool("IS_BROWSER")||typeof window=="undefined"||typeof window.localStorage=="undefined")throw new Error("The current environment does not support local storage.");if(this.LS=window.localStorage,e==null||!e)throw new Error("For local storage, modelPath must not be null, undefined or empty.");this.modelPath=e,this.keys=ZI(this.modelPath)}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");{let t=JSON.stringify(e.modelTopology),n=JSON.stringify(e.weightSpecs),o=Fi(e);try{this.LS.setItem(this.keys.info,JSON.stringify(o)),this.LS.setItem(this.keys.topology,t),this.LS.setItem(this.keys.weightSpecs,n),this.LS.setItem(this.keys.weightData,GI(e.weightData));let s={format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy};return e.signature!=null&&(s.signature=e.signature),e.userDefinedMetadata!=null&&(s.userDefinedMetadata=e.userDefinedMetadata),e.modelInitializer!=null&&(s.modelInitializer=e.modelInitializer),this.LS.setItem(this.keys.modelMetadata,JSON.stringify(s)),{modelArtifactsInfo:o}}catch(s){throw this.LS.removeItem(this.keys.info),this.LS.removeItem(this.keys.topology),this.LS.removeItem(this.keys.weightSpecs),this.LS.removeItem(this.keys.weightData),this.LS.removeItem(this.keys.modelMetadata),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 e=JSON.parse(this.LS.getItem(this.keys.info));if(e==null)throw new Error(`In local storage, there is no model with name '${this.modelPath}'`);if(e.modelTopologyType!=="JSON")throw new Error("BrowserLocalStorage does not support loading non-JSON model topology yet.");let t={},n=JSON.parse(this.LS.getItem(this.keys.topology));if(n==null)throw new Error(`In local storage, the topology of model '${this.modelPath}' is missing.`);t.modelTopology=n;let 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.`);t.weightSpecs=o;let s=this.LS.getItem(this.keys.modelMetadata);if(s!=null){let i=JSON.parse(s);t.format=i.format,t.generatedBy=i.generatedBy,t.convertedBy=i.convertedBy,i.signature!=null&&(t.signature=i.signature),i.userDefinedMetadata!=null&&(t.userDefinedMetadata=i.userDefinedMetadata),i.modelInitializer!=null&&(t.modelInitializer=i.modelInitializer)}let a=this.LS.getItem(this.keys.weightData);if(a==null)throw new Error(`In local storage, the binary weight values of model '${this.modelPath}' are missing.`);return t.weightData=jI(a),t}};ya.URL_SCHEME="localstorage://";var JI=r=>W().getBool("IS_BROWSER")&&!Array.isArray(r)&&r.startsWith(ya.URL_SCHEME)?CV(r.slice(ya.URL_SCHEME.length)):null;It.registerSaveRouter(JI);It.registerLoadRouter(JI);function CV(r){return new ya(r)}var tw=class{constructor(){E(W().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 e={},t=jc+xa,n=xa+YI;for(let o=0;o"scheme must not be undefined or null."),e.endsWith(Wc)&&(e=e.slice(0,e.indexOf(Wc))),E(e.length>0,()=>"scheme must not be an empty string.");let n=qr.getInstance();E(n.managers[e]==null,()=>`A model store manager is already registered for scheme '${e}'.`),n.managers[e]=t}static getManager(e){let t=this.getInstance().managers[e];if(t==null)throw new Error(`Cannot find model manager for scheme '${e}'`);return t}static getSchemes(){return Object.keys(this.getInstance().managers)}};function jh(r){if(r.indexOf(Wc)===-1)throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${qr.getSchemes().join(",")}`);return{scheme:r.split(Wc)[0],path:r.split(Wc)[1]}}async function QI(r,e,t=!1){E(r!==e,()=>`Old path and new path are the same: '${r}'`);let n=It.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=It.getSaveHandlers(e);E(s.length>0,()=>`Copying failed because no save handler is found for destination URL ${e}.`),E(s.length<2,()=>`Copying failed because more than one (${n.length}) save handlers for destination URL ${e}.`);let a=s[0],i=jh(r).scheme,l=jh(r).path,u=i===jh(r).scheme,c=await o.load();t&&u&&await qr.getManager(i).removeModel(l);let p=await a.save(c);return t&&!u&&await qr.getManager(i).removeModel(l),p.modelArtifactsInfo}async function eN(){let r=qr.getSchemes(),e={};for(let t of r){let n=await qr.getManager(t).listModels();for(let o in n){let s=t+Wc+o;e[s]=n[o]}}return e}async function tN(r){let e=jh(r);return qr.getManager(e.scheme).removeModel(e.path)}async function rN(r,e){return QI(r,e,!1)}async function nN(r,e){return QI(r,e,!0)}var oN=class{fetch(e,t){return fetch(e,t)}now(){return performance.now()}encode(e,t){if(t!=="utf-8"&&t!=="utf8")throw new Error(`Browser's encoder only supports utf-8, but got ${t}`);return this.textEncoder==null&&(this.textEncoder=new TextEncoder),this.textEncoder.encode(e)}decode(e,t){return new TextDecoder(t).decode(e)}};if(W().get("IS_BROWSER")){W().setPlatform("browser",new oN);try{qr.registerManager(ya.URL_SCHEME,new tw)}catch(r){}try{qr.registerManager(ga.URL_SCHEME,new ew)}catch(r){}}var IV={importFetch:()=>sN()},rw;var iN=class{constructor(){this.util=require("util"),this.textEncoder=new this.util.TextEncoder}fetch(e,t){return W().global.fetch!=null?W().global.fetch(e,t):(rw==null&&(rw=IV.importFetch()),rw(e,t))}now(){let e=process.hrtime();return e[0]*1e3+e[1]/1e6}encode(e,t){if(t!=="utf-8"&&t!=="utf8")throw new Error(`Node built-in encoder only supports utf-8, but got ${t}`);return this.textEncoder.encode(e)}decode(e,t){return e.length===0?"":new this.util.TextDecoder(t).decode(e)}};W().get("IS_NODE")&&W().setPlatform("node",new iN);function ve(r,e="float32",t){return e=e||"float32",pm(r),new lt(r,e,t)}function NV(r,e){let t=v(r,"x","cast");if(!Tb(e))throw new Error(`Failed to cast to unknown dtype ${e}`);if(e==="string"&&t.dtype!=="string"||e!=="string"&&t.dtype==="string")throw new Error("Only strings can be casted to strings");let n={x:t},o={dtype:e};return D.runKernel($n,n,o)}var oe=T({cast_:NV});function SV(r){let t={x:v(r,"x","clone","string_or_numeric")};return D.runKernel(Fn,t)}var Pn=T({clone_:SV});function nw(r,e=!1){console.log(r.toString(e))}Hb();var TV={buffer:ve,cast:oe,clone:Pn,print:nw};FI(TV);var Ir={};Ke(Ir,{browserFiles:()=>uN,browserHTTPRequest:()=>mN,concatenateArrayBuffers:()=>Gc,copyModel:()=>rN,decodeWeights:()=>Gh,encodeWeights:()=>BI,fromMemory:()=>dN,getLoadHandlers:()=>HI,getModelArtifactsInfoForJSON:()=>Fi,getSaveHandlers:()=>qI,http:()=>qh,isHTTPScheme:()=>Uh,listModels:()=>eN,loadWeights:()=>cN,moveModel:()=>nN,registerLoadRouter:()=>UI,registerSaveRouter:()=>WI,removeModel:()=>tN,weightsLoaderFactory:()=>iw,withSaveHandler:()=>hN});var AV="model",EV=".json",DV=".weights.bin";function aN(r){return new Promise(e=>setTimeout(e)).then(r)}var ol=class{constructor(e){if(!W().getBool("IS_BROWSER"))throw new Error("browserDownloads() cannot proceed because the current environment is not a browser.");e.startsWith(ol.URL_SCHEME)&&(e=e.slice(ol.URL_SCHEME.length)),(e==null||e.length===0)&&(e=AV),this.modelTopologyFileName=e+EV,this.weightDataFileName=e+DV}async save(e){if(typeof document=="undefined")throw new Error("Browser downloads are not supported in this environment since `document` is not present");let t=window.URL.createObjectURL(new Blob([e.weightData],{type:"application/octet-stream"}));if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserDownloads.save() does not support saving model topology in binary formats yet.");{let n=[{paths:["./"+this.weightDataFileName],weights:e.weightSpecs}],o={modelTopology:e.modelTopology,format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy,weightsManifest:n};e.signature!=null&&(o.signature=e.signature),e.userDefinedMetadata!=null&&(o.userDefinedMetadata=e.userDefinedMetadata),e.modelInitializer!=null&&(o.modelInitializer=e.modelInitializer);let s=window.URL.createObjectURL(new Blob([JSON.stringify(o)],{type:"application/json"})),a=this.jsonAnchor==null?document.createElement("a"):this.jsonAnchor;if(a.download=this.modelTopologyFileName,a.href=s,await aN(()=>a.dispatchEvent(new MouseEvent("click"))),e.weightData!=null){let i=this.weightDataAnchor==null?document.createElement("a"):this.weightDataAnchor;i.download=this.weightDataFileName,i.href=t,await aN(()=>i.dispatchEvent(new MouseEvent("click")))}return{modelArtifactsInfo:Fi(e)}}}};ol.URL_SCHEME="downloads://";var lN=class{constructor(e){if(e==null||e.length<1)throw new Error(`When calling browserFiles, at least 1 file is required, but received ${e}`);this.files=e}async load(){let e=this.files[0],t=this.files.slice(1);return new Promise((n,o)=>{let s=new FileReader;s.onload=a=>{let i=JSON.parse(a.target.result),l=i.modelTopology;if(l==null){o(new Error(`modelTopology field is missing from file ${e.name}`));return}t.length===0&&n({modelTopology:l});let u=i.weightsManifest;if(u==null){o(new Error(`weightManifest field is missing from file ${e.name}`));return}let c;try{c=this.checkManifestAndWeightFiles(u,t)}catch(d){o(d);return}let p=[],m=[],f=[];u.forEach(d=>{d.paths.forEach(h=>{m.push(h),f.push(null)}),p.push(...d.weights)}),u.forEach(d=>{d.paths.forEach(h=>{let g=new FileReader;g.onload=x=>{let w=x.target.result,b=m.indexOf(h);if(f[b]=w,f.indexOf(null)===-1){let _={modelTopology:l,weightSpecs:p,weightData:Gc(f),format:i.format,generatedBy:i.generatedBy,convertedBy:i.convertedBy};i.signature!=null&&(_.signature=i.signature),i.userDefinedMetadata!=null&&(_.userDefinedMetadata=i.userDefinedMetadata),i.modelInitializer!=null&&(_.modelInitializer=i.modelInitializer),n(_)}},g.onerror=x=>o(`Failed to weights data from file of path '${h}'.`),g.readAsArrayBuffer(c[h])})})},s.onerror=a=>o(`Failed to read model topology and weights manifest JSON from file '${e.name}'. BrowserFiles supports loading Keras-style tf.Model artifacts only.`),s.readAsText(e)})}checkManifestAndWeightFiles(e,t){let n=[],o=t.map(a=>Yb(a.name)),s={};for(let a of e)a.paths.forEach(i=>{let l=Yb(i);if(n.indexOf(l)!==-1)throw new Error(`Duplicate file basename found in weights manifest: '${l}'`);if(n.push(l),o.indexOf(l)===-1)throw new Error(`Weight file with basename '${l}' is not provided.`);s[i]=t[o.indexOf(l)]});if(n.length!==t.length)throw new Error(`Mismatch in the number of files in weights manifest (${n.length}) and the number of weight files provided (${t.length}).`);return s}},RV=r=>W().getBool("IS_BROWSER")&&!Array.isArray(r)&&r.startsWith(ol.URL_SCHEME)?$V(r.slice(ol.URL_SCHEME.length)):null;It.registerSaveRouter(RV);function $V(r="model"){return new ol(r)}function uN(r){return new lN(r)}function ow(r,e,t,n){a(r),t=t==null?0:t,n=n==null?1:n,i(t,n);let o=0,s=l=>(l.then(u=>{let c=t+ ++o/r.length*(n-t);return e(c),u}),l);function a(l){E(l!=null&&Array.isArray(l)&&l.length>0,()=>"promises must be a none empty array")}function i(l,u){E(l>=0&&l<=1,()=>`Progress fraction must be in range [0, 1], but got startFraction ${l}`),E(u>=0&&u<=1,()=>`Progress fraction must be in range [0, 1], but got endFraction ${u}`),E(u>=l,()=>`startFraction must be no more than endFraction, but got startFraction ${l} and endFraction ${u}`)}return Promise.all(r.map(s))}async function sw(r,e){e==null&&(e={});let t=e.fetchFunc==null?W().platform.fetch:e.fetchFunc,n=r.map(p=>t(p,e.requestInit,{isBinary:!0})),o=0,s=.5,i=(e.onProgress==null?await Promise.all(n):await ow(n,e.onProgress,o,s)).map(p=>p.arrayBuffer()),l=.5,u=1;return e.onProgress==null?await Promise.all(i):await ow(i,e.onProgress,l,u)}async function cN(r,e="",t,n){return iw(a=>sw(a,{requestInit:n}))(r,e,t)}function iw(r){return async(e,t="",n)=>{let o=e.map(()=>!1),s={},a=n!=null?n.map(()=>!1):[],i=[];if(e.forEach((f,d)=>{let h=0;f.weights.forEach(g=>{let x="quantization"in g?g.quantization.dtype:g.dtype,w=wm[x]*ct(g.shape),b=()=>{o[d]=!0,s[d]==null&&(s[d]=[]),s[d].push({manifestEntry:g,groupOffset:h,sizeBytes:w})};n!=null?n.forEach((_,k)=>{_===g.name&&(b(),a[k]=!0)}):b(),i.push(g.name),h+=w})}),!a.every(f=>f)){let f=n.filter((d,h)=>!a[h]);throw new Error(`Could not find weights in manifest with names: ${f.join(", ")}. Manifest JSON has weights with names: ${i.join(", ")}.`)}let l=o.reduce((f,d,h)=>(d&&f.push(h),f),[]),u=[];l.forEach(f=>{e[f].paths.forEach(d=>{let h=t+(t.endsWith("/")?"":"/")+d;u.push(h)})});let c=await r(u),p={},m=0;return l.forEach(f=>{let d=e[f].paths.length,h=0;for(let _=0;_{let k=g.slice(_.groupOffset,_.groupOffset+_.sizeBytes),A=Gh(k,[_.manifestEntry]);for(let S in A)p[S]=A[S]}),m+=d}),p}}var FV="application/octet-stream",OV="application/json",Wh=class{constructor(e,t){if(this.DEFAULT_METHOD="POST",t==null&&(t={}),this.weightPathPrefix=t.weightPathPrefix,this.onProgress=t.onProgress,this.weightUrlConverter=t.weightUrlConverter,t.fetchFunc!=null?(E(typeof t.fetchFunc=="function",()=>"Must pass a function that matches the signature of `fetch` (see https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)"),this.fetch=t.fetchFunc):this.fetch=W().platform.fetch,E(e!=null&&e.length>0,()=>"URL path for http must not be null, undefined or empty."),Array.isArray(e)&&E(e.length===2,()=>`URL paths for http must have a length of 2, (actual length is ${e.length}).`),this.path=e,t.requestInit!=null&&t.requestInit.body!=null)throw new Error("requestInit is expected to have no pre-existing body, but has one.");this.requestInit=t.requestInit||{}}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserHTTPRequest.save() does not support saving model topology in binary formats yet.");let t=Object.assign({method:this.DEFAULT_METHOD},this.requestInit);t.body=new FormData;let n=[{paths:["./model.weights.bin"],weights:e.weightSpecs}],o={modelTopology:e.modelTopology,format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy,weightsManifest:n};e.signature!=null&&(o.signature=e.signature),e.userDefinedMetadata!=null&&(o.userDefinedMetadata=e.userDefinedMetadata),e.modelInitializer!=null&&(o.modelInitializer=e.modelInitializer),t.body.append("model.json",new Blob([JSON.stringify(o)],{type:OV}),"model.json"),e.weightData!=null&&t.body.append("model.weights.bin",new Blob([e.weightData],{type:FV}),"model.weights.bin");let s=await this.fetch(this.path,t);if(s.ok)return{modelArtifactsInfo:Fi(e),responses:[s]};throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${s.status}.`)}async load(){let e=await this.fetch(this.path,this.requestInit);if(!e.ok)throw new Error(`Request to ${this.path} failed with status code ${e.status}. Please verify this URL points to the model JSON of the model to load.`);let t;try{t=await e.json()}catch(d){let h=`Failed to parse model JSON of response from ${this.path}.`;throw this.path.endsWith(".pb")?h+=" 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.":h+=" Please make sure the server is serving valid JSON for this request.",new Error(h)}let n=t.modelTopology,o=t.weightsManifest,s=t.generatedBy,a=t.convertedBy,i=t.format,l=t.signature,u=t.userDefinedMetadata;if(n==null&&o==null)throw new Error(`The JSON from HTTP path ${this.path} contains neither model topology or manifest for weights.`);let c,p;o!=null&&([c,p]=await this.loadWeights(o));let m={modelTopology:n,weightSpecs:c,weightData:p,generatedBy:s,convertedBy:a,format:i};l!=null&&(m.signature=l),u!=null&&(m.userDefinedMetadata=u);let f=t.modelInitializer;return f&&(m.modelInitializer=f),m}async loadWeights(e){let t=Array.isArray(this.path)?this.path[1]:this.path,[n,o]=PV(t),s=this.weightPathPrefix||n,a=[];for(let c of e)a.push(...c.weights);let i=[],l=[];for(let c of e)for(let p of c.paths)this.weightUrlConverter!=null?l.push(this.weightUrlConverter(p)):i.push(s+p+o);this.weightUrlConverter&&i.push(...await Promise.all(l));let u=await sw(i,{requestInit:this.requestInit,fetchFunc:this.fetch,onProgress:this.onProgress});return[a,Gc(u)]}};Wh.URL_SCHEME_REGEX=/^https?:\/\//;function PV(r){let e=r.lastIndexOf("/"),t=r.lastIndexOf("?"),n=r.substring(0,e),o=t>e?r.substring(t):"";return[n+"/",o]}function Uh(r){return r.match(Wh.URL_SCHEME_REGEX)!=null}var pN=(r,e)=>{if(typeof fetch=="undefined"&&(e==null||e.fetchFunc==null))return null;{let t=!0;if(Array.isArray(r)?t=r.every(n=>Uh(n)):t=Uh(r),t)return qh(r,e)}return null};It.registerSaveRouter(pN);It.registerLoadRouter(pN);function qh(r,e){return new Wh(r,e)}function mN(r,e){return qh(r,e)}var Hh=class{constructor(e){this.modelArtifacts=e}async load(){return this.modelArtifacts}},fN=class{constructor(e){this.saveHandler=e}async save(e){return this.saveHandler(e)}};function dN(r,e,t,n){return arguments.length===1?r.modelTopology!=null||r.weightSpecs!=null?new Hh(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 Hh({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 Hh({modelTopology:r,weightSpecs:e,weightData:t,trainingConfig:n}))}function hN(r){return new fN(r)}var gN={};Ke(gN,{confusionMatrix:()=>VV});function MV(r,e,t=!1,n=!1){let o=v(r,"a","matMul"),s=v(e,"b","matMul");[o,s]=Ge(o,s);let a={a:o,b:s},i={transposeA:t,transposeB:n};return D.runKernel(Xn,a,i)}var je=T({matMul_:MV});function LV(r,e,t=1,n=0){if(e<2)throw new Error(`Error in oneHot: depth must be >=2, but it is ${e}`);let s={indices:v(r,"indices","oneHot","int32")},a={depth:e,onValue:t,offValue:n};return D.runKernel(yo,s,a)}var vs=T({oneHot_:LV});function zV(r,e){let t=v(r,"x","transpose");if(e==null&&(e=t.shape.map((s,a)=>a).reverse()),E(t.rank===e.length,()=>`Error in transpose: rank of input ${t.rank} must match length of perm ${e}.`),e.forEach(s=>{E(s>=0&&s`All entries in 'perm' must be between 0 and ${t.rank-1} but got ${e}`)}),t.rank<=1)return t.clone();let n={x:t},o={perm:e};return D.runKernel(Po,n,o)}var Ue=T({transpose_:zV});function BV(r,e,t){let n=v(r,"labels","confusionMatrix"),o=v(e,"predictions","confusionMatrix");E(t==null||t>0&&Number.isInteger(t),()=>`If provided, numClasses must be a positive integer, but got ${t}`),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(t>0&&Number.isInteger(t),()=>`numClasses is required to be a positive integer, but got ${t}`);let s=vs(oe(n,"int32"),t),a=vs(oe(o,"int32"),t),i=Ue(s),l=je(i,a);return oe(l,"int32")}var VV=T({confusionMatrix_:BV});var Kh={};Ke(Kh,{fromPixels:()=>WV,toPixels:()=>jV});function aw(r,e,t){if(Dn(r),e!=null&&e.length!==3)throw new Error("tensor3d() requires shape to have three numbers");let n=Cr(r,t);if(n.length!==3&&n.length!==1)throw new Error("tensor3d() requires values to be number[][][] or flat/TypedArray");if(n.length===1&&e==null)throw new Error("tensor3d() requires shape to be provided when `values` are a flat array");return Ur(r,e,n,t)}var Uc;function GV(r,e=3){if(e>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 t=!1,n=!1,o=!1,s=!1,a=!1,i=!1;if(r.data instanceof Uint8Array)t=!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)a=!0;else if(typeof ImageBitmap!="undefined"&&r instanceof ImageBitmap)i=!0;else throw new Error(`pixels passed to tf.browser.fromPixels() must be either an HTMLVideoElement, HTMLImageElement, HTMLCanvasElement, ImageData in browser, or OffscreenCanvas, ImageData in webworker or {data: Uint32Array, width: number, height: number}, but was ${r.constructor.name}`);if(o){let d=2;if(o&&r.readyState element.")}if(Mc(Oc,D.backendName)!=null){let d={pixels:r},h={numChannels:e};return D.runKernel(Oc,d,h)}let[u,c]=o?[r.videoWidth,r.videoHeight]:[r.width,r.height],p;a?p=r.getContext("2d").getImageData(0,0,u,c).data:n||t?p=r.data:(s||o||i)&&(Uc==null&&(Uc=document.createElement("canvas").getContext("2d")),Uc.canvas.width=u,Uc.canvas.height=c,Uc.drawImage(r,0,0,u,c),p=Uc.getImageData(0,0,u,c).data);let m;if(e===4)m=new Int32Array(p);else{let d=u*c;m=new Int32Array(d*e);for(let h=0;h4||s===2)throw new Error(`toPixels only supports depth of size 1, 3 or 4 but got ${s}`);if(t.dtype!=="float32"&&t.dtype!=="int32")throw new Error(`Unsupported type for toPixels: ${t.dtype}. Please use float32 or int32 tensors.`);let a=await t.data(),i=t.dtype==="float32"?255:1,l=new Uint8ClampedArray(o*n*4);for(let u=0;u1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${f}.`)}else if(t.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*i,c[1]=f*i,c[2]=f*i):c[m]=f*i}let p=u*4;l[p+0]=Math.round(c[0]),l[p+1]=Math.round(c[1]),l[p+2]=Math.round(c[2]),l[p+3]=Math.round(c[3])}if(e!=null){e.width=o,e.height=n;let u=e.getContext("2d"),c=new ImageData(l,o,n);u.putImageData(c,0,0)}return t!==r&&t.dispose(),l}var WV=T({fromPixels_:GV});var Xh={};Ke(Xh,{prepareAndValidate:()=>xN});function xN(r,e){let t=r.shape.length,n=e.shape.length;if(t<1)throw new Error(`tf.gatherND() expects the input to be rank 1 or higher, but the rank was ${t}.`);if(n<1)throw new Error(`tf.gatherND() expects the indices to be rank 1 or higher, but the rank was ${n}.`);if(e.dtype!=="int32")throw new Error(`tf.gatherND() expects the indices to be int32 type, but the dtype was ${e.dtype}.`);if(e.shape[n-1]>t)throw new Error(`index innermost dimension length must be <= tensor rank; saw: ${e.shape[n-1]} vs. ${t}`);if(ct(r.shape)===0)throw new Error(`Requested more than 0 entries, but input is empty. Input shape: ${r.shape}.`);let o=e.shape,s=o[o.length-1],a=1;for(let p=0;pp/u),1].slice(0,s);return[l,a,u,c]}var Yh={};Ke(Yh,{calculateShapes:()=>yN,validateInput:()=>Zh,validateUpdateShape:()=>lw});function lw(r,e,t){let n=e.rank>1?e.shape[e.rank-1]:1,o=e.rank>1?e.rank-1:1,s=`Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: ${t.shape}, indices.shape: ${e.shape}, shape: ${r}, sliceDim: ${n}, and batchDim: ${o}.`;if(t.rank1?e.shape[n-1]:1,s=t.length,a=1;for(let p=o;pUV,computeFlatOffset:()=>HV,computeOutShape:()=>bN,getNormalizedAxes:()=>TN,isSliceContinous:()=>qV,maskToAxes:()=>Jh,parseSliceParams:()=>uw,sliceInfo:()=>KV,startForAxis:()=>NN,startIndicesWithElidedDims:()=>vN,stopForAxis:()=>SN,stopIndicesWithElidedDims:()=>CN,stridesForAxis:()=>IN,stridesWithElidedDims:()=>wN});function UV(r,e,t){let n=r.shape.length;E(n===e.length,()=>`Error in slice${n}D: Length of begin ${e} must match the rank of the array (${n}).`),E(n===t.length,()=>`Error in slice${n}D: Length of size ${t} must match the rank of the array (${n}).`);for(let o=0;o`Error in slice${n}D: begin[${o}] + size[${o}] (${e[o]+t[o]}) would overflow input.shape[${o}] (${r.shape[o]})`)}function Jh(r){let e=[],t=0;for(;r>0;)r&1&&e.push(t),r/=2,t++;return e}function bN(r,e,t){let n=[];for(let o=0;o0){let f=e[0],d=t+1;c=vN(a,f,d,n,r),p=CN(i,f,d,o,r),m=wN(s,f,d,r)}else for(let f=0;f-1)s[i]=0;else{let l=_N(e,t,i),u=n[l];r&1<-1)s[i]=Number.MAX_SAFE_INTEGER;else{let l=_N(e,t,i),u=n[l];r&1<0?a=Number.MIN_SAFE_INTEGER:a=Number.MAX_SAFE_INTEGER);let l=n[o];return a<0&&(a+=l),a=Ac(0,a,l-1),a}function SN(r,e,t,n,o,s){let a=e[o],i=t[o]||1;(r&1<0?a=Number.MAX_SAFE_INTEGER:a=Number.MIN_SAFE_INTEGER);let l=n[o];return a<0&&(a+=l),i>0?a=Ac(0,a,l):a=Ac(-1,a,l-1),a}function qV(r,e,t){let n=t.length;for(let o=0;o1){n=o;break}for(let o=n+1;o0||t[o]!==r[o])return!1;return!0}function HV(r,e){let t=r.length>0?r[r.length-1]:1;for(let n=0;n{E(a!==-1,()=>"slice() does not support negative begin indexing.")});let s;return t==null?s=new Array(o).fill(-1):typeof t=="number"?s=[t,...new Array(o-1).fill(-1)]:t.lengtha>=0?a:(E(a===-1,()=>`Negative size values should be exactly -1 but got ${a} for the slice() size at index ${i}.`),r.shape[i]-n[i])),[n,s]}function KV(r,e,t,n,o,s,a,i,l){let u=e.slice(),c=t.slice(),p=n;n==null&&(p=new Array(u.length));let m=Jh(a);if(m.length>1)throw new Error("Multiple ellipses in slice is not allowed.");if(a!==0&&i!==0)throw new Error("Using both ellipsisMask and newAxisMask is not yet supported.");if(a!==0&&l!==0)throw new Error("Using both ellipsisMask and shrinkAxisMask is not yet supported.");let f=r.length-u.length,d=Jh(i),h=r.slice();d.forEach(S=>{u[S]=0,c[S]=1,h.splice(S,0,1)});let{begin:g,end:x,strides:w}=TN(h,m,f,u,c,p,o,s,a);u=g,c=x,p=w;let b=Jh(l);b.forEach(S=>{c[S]=u[S]+1,p[S]=1});let _=bN(u,c,p),k=_.filter((S,$)=>b.indexOf($)===-1);return{nonStrided:p.every(S=>S===1),$begin:u,$end:c,$strides:p,size:_,newShape:h,outShape:k}}var J={};Ke(J,{Serializable:()=>Qh,SerializationMap:()=>ba,registerClass:()=>sn});var Qh=class{getClassName(){return this.constructor.className}static fromConfig(e,t){return new e(t)}},ba=class{constructor(){this.classNameMap={}}static getMap(){return ba.instance==null&&(ba.instance=new ba),ba.instance}static register(e){ba.getMap().classNameMap[e.className]=[e,e.fromConfig]}};function sn(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."),ba.register(r)}var AN={};Ke(AN,{TEST_EPSILON_FLOAT16:()=>EN,encodeStrings:()=>DN,expectArrayBuffersEqual:()=>tG,expectArraysClose:()=>YV,expectArraysEqual:()=>JV,expectNumbersClose:()=>QV,expectPromiseToFail:()=>ZV,expectValuesInRange:()=>eG,testEpsilon:()=>cw});var XV=.001,EN=.1;function YV(r,e,t){return t==null&&(t=cw()),pw(r,e,(n,o)=>mw(n,o,t))}function cw(){return D.backend.floatPrecision()===32?XV:EN}function pw(r,e,t){let n=!0;if((or(r)||or(e))&&(n=!1),or(r)&&or(e)&&(n=!0),n){let a=r.constructor.name,i=e.constructor.name;if(a!==i)throw new Error(`Arrays are of different type. Actual: ${a}. Expected: ${i}`)}if(Array.isArray(r)&&Array.isArray(e)){let a=Cr(r),i=Cr(e);if(!Wr(a,i))throw new Error(`Arrays have different shapes. Actual: [${a}]. Expected: [${i}]`)}let o=or(r)?r:ss(r),s=or(e)?e:ss(e);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 a=0;ae.fail(),()=>e())}function JV(r,e){let t=typeof e=="string"||typeof e=="number"||typeof e=="boolean"?[e]:e;return is(r)||is(r[0])||is(e)||is(e[0])?pw(r,t,(n,o)=>n==o):pw(r,e,(n,o)=>mw(n,o,0))}function QV(r,e,t){if(t==null&&(t=cw()),!mw(r,e,t))throw new Error(`Numbers differ: actual === ${r}, expected === ${e}`)}function mw(r,e,t){return!isFinite(r)&&!isFinite(e)?!0:!(isNaN(r)||isNaN(e)||Math.abs(r-e)>t)}function eG(r,e,t){for(let n=0;nt)throw new Error(`Value out of range:${r[n]} low: ${e}, high: ${t}`)}function tG(r,e){expect(new Float32Array(r)).toEqual(new Float32Array(e))}function DN(r){for(let e=0;et.dispose())}function Dt(r){return D.keep(r)}function lG(r){return D.time(r)}function $N(r){return D.setBackend(r)}function uG(){return D.ready()}function cG(){return D.backendName}function pG(r){D.removeBackend(r)}function mG(r){return D.findBackend(r)}function fG(r){return D.findBackendFactory(r)}function hu(r,e,t=1){return D.registerBackend(r,e,t)}function fw(){return D.backend}function dG(r,e){W().setPlatform(r,e)}function hG(r,e){let t=v(r,"a","add"),n=v(e,"b","add");[t,n]=Ge(t,n);let o={a:t,b:n};return D.runKernel(wn,o)}var Q=T({add_:hG});function gG(r,e){let t=v(r,"a","floorDiv"),n=v(e,"b","floorDiv");[t,n]=Ge(t,n);let o={a:t,b:n};return D.runKernel(so,o)}var gu=T({floorDiv_:gG});function xG(r,e){let t=v(r,"a","div"),n=v(e,"b","div");if([t,n]=Ge(t,n),t.dtype==="int32"&&n.dtype==="int32")return gu(t,n);let o={a:t,b:n},s={};return D.runKernel(ro,o,s)}var me=T({div_:xG});function yG(r,e){let t=v(r,"a","mul"),n=v(e,"b","mul");[t,n]=Ge(t,n);let o={a:t,b:n};return D.runKernel(xo,o)}var P=T({mul_:yG});function bG(r){let e=v(r,"x","abs");if(e.dtype==="complex64"){let t={x:e};return D.runKernel(na,t)}else{let t={x:e};return D.runKernel(as,t)}}var Nt=T({abs_:bG});function wG(r){let t={x:v(r,"x","acos")};return D.runKernel(qs,t)}var _m=T({acos_:wG});function _G(r){let t={x:v(r,"x","acosh")};return D.runKernel(Hs,t)}var km=T({acosh_:_G});function kG(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 e=r.map((o,s)=>v(o,`tensors${s}`,"addN")),t=e[0];e.forEach(o=>{if(o.dtype!==t.dtype)throw new Error("All tensors passed to tf.addN() must have the same dtype")}),e.forEach(o=>{if(!Wr(o.shape,t.shape))throw new Error("All tensors passed to tf.addN() must have the same shape")});let n=e;return D.runKernel(qn,n)}var dw=T({addN_:kG});function vG(r,e=null,t=!1){let o={x:v(r,"x","all","bool")},s={axis:e,keepDims:t};return D.runKernel(Ml,o,s)}var xu=T({all_:vG});function CG(r,e=null,t=!1){let o={x:v(r,"x","any","bool")},s={axis:e,keepDims:t};return D.runKernel(Ll,o,s)}var sl=T({any_:CG});function IG(r,e=0){let n={x:v(r,"x","argMax")},o={axis:e};return D.runKernel(Hn,n,o)}var il=T({argMax_:IG});function NG(r,e=0){let n={x:v(r,"x","argMin")},o={axis:e};return D.runKernel(ea,n,o)}var vm=T({argMin_:NG});function SG(r){let t={x:v(r,"x","asin")};return D.runKernel(Ks,t)}var Cm=T({asin_:SG});function TG(r){let t={x:v(r,"x","asinh")};return D.runKernel(Xs,t)}var Im=T({asinh_:TG});function AG(r){let t={x:v(r,"x","atan")};return D.runKernel(Ys,t)}var Nm=T({atan_:AG});function EG(r,e){let t=v(r,"a","atan2"),n=v(e,"b","atan2");[t,n]=Ge(t,n);let o={a:t,b:n};return D.runKernel(Js,o)}var Sm=T({atan2_:EG});function DG(r){let t={x:v(r,"x","atanh")};return D.runKernel(Zs,t)}var Tm=T({atanh_:DG});function $G(r,e,t,n,o="NHWC",s){let a=r[3],i=[...e,a],l=RN(o);return yu(r,i,t,s,n,null,null,l)}function hw(r,e,t,n,o,s,a="channelsLast"){let[i,l]=tg(e),u;if(a==="channelsLast")u=[i,l,r[3],r[3]];else if(a==="channelsFirst")u=[i,l,r[1],r[1]];else throw new Error(`Unknown dataFormat ${a}`);return yu(r,u,t,n,o,s,!1,a)}function RG(r,e,t,n,o,s,a="NDHWC"){let[i,l,u]=gw(e),c,p;if(a==="NDHWC")p="channelsLast",c=[i,l,u,r[4],r[4]];else if(a==="NCDHW")p="channelsFirst",c=[i,l,u,r[1],r[1]];else throw new Error(`Unknown dataFormat ${a}`);return FN(r,c,t,n,o,!1,p,s)}function yu(r,e,t,n,o,s,a=!1,i="channelsLast"){let[l,u,c,p]=[-1,-1,-1,-1];if(i==="channelsLast")[l,u,c,p]=r;else if(i==="channelsFirst")[l,p,u,c]=r;else throw new Error(`Unknown dataFormat ${i}`);let[m,f,,d]=e,[h,g]=tg(t),[x,w]=tg(n),b=Hc(m,x),_=Hc(f,w),{padInfo:k,outHeight:A,outWidth:S}=FG(o,u,c,h,g,b,_,s,i),$=a?d*p:d,O;return i==="channelsFirst"?O=[l,$,A,S]:i==="channelsLast"&&(O=[l,A,S,$]),{batchSize:l,dataFormat:i,inHeight:u,inWidth:c,inChannels:p,outHeight:A,outWidth:S,outChannels:$,padInfo:k,strideHeight:h,strideWidth:g,filterHeight:m,filterWidth:f,effectiveFilterHeight:b,effectiveFilterWidth:_,dilationHeight:x,dilationWidth:w,inShape:r,outShape:O,filterShape:e}}function FN(r,e,t,n,o,s=!1,a="channelsLast",i){let[l,u,c,p,m]=[-1,-1,-1,-1,-1];if(a==="channelsLast")[l,u,c,p,m]=r;else if(a==="channelsFirst")[l,m,u,c,p]=r;else throw new Error(`Unknown dataFormat ${a}`);let[f,d,h,,g]=e,[x,w,b]=gw(t),[_,k,A]=gw(n),S=Hc(f,_),$=Hc(d,k),O=Hc(h,A),{padInfo:M,outDepth:G,outHeight:j,outWidth:U}=OG(o,u,c,p,x,w,b,S,$,O,i),q=s?g*m:g,H;return a==="channelsFirst"?H=[l,q,G,j,U]:a==="channelsLast"&&(H=[l,G,j,U,q]),{batchSize:l,dataFormat:a,inDepth:u,inHeight:c,inWidth:p,inChannels:m,outDepth:G,outHeight:j,outWidth:U,outChannels:q,padInfo:M,strideDepth:x,strideHeight:w,strideWidth:b,filterDepth:f,filterHeight:d,filterWidth:h,effectiveFilterDepth:S,effectiveFilterHeight:$,effectiveFilterWidth:O,dilationDepth:_,dilationHeight:k,dilationWidth:A,inShape:r,outShape:H,filterShape:e}}function PG(r,e,t,n,o){n==null&&(n=xw(r,e,t));let s=r[0],a=r[1],i=bu((s-e+2*n)/t+1,o),l=bu((a-e+2*n)/t+1,o);return[i,l]}function MG(r,e,t,n,o,s){o==null&&(o=xw(r,e,n));let a=r[0],i=r[1],l=r[2],u=bu((a-e+2*o)/n+1,s),c=bu((i-e+2*o)/n+1,s),p=bu((l-e+2*o)/n+1,s);return[u,c,p,t]}function xw(r,e,t,n=1){let o=Hc(e,n);return Math.floor((r[0]*(t-1)-t+o)/2)}function tg(r){return typeof r=="number"?[r,r,r]:r.length===2?[r[0],r[1],1]:r}function gw(r){return typeof r=="number"?[r,r,r]:r}function Hc(r,e){return e<=1?r:r+(r-1)*(e-1)}function FG(r,e,t,n,o,s,a,i,l){let u,c,p;if(typeof r=="number"){u={top:r,bottom:r,left:r,right:r,type:r===0?"VALID":"NUMBER"};let f=PG([e,t],s,n,r,i);c=f[0],p=f[1]}else if(r==="same"){c=Math.ceil(e/n),p=Math.ceil(t/o);let m=Math.max(0,(c-1)*n+s-e),f=Math.max(0,(p-1)*o+a-t),d=Math.floor(m/2),h=m-d,g=Math.floor(f/2),x=f-g;u={top:d,bottom:h,left:g,right:x,type:"SAME"}}else if(r==="valid")u={top:0,bottom:0,left:0,right:0,type:"VALID"},c=Math.ceil((e-s+1)/n),p=Math.ceil((t-a+1)/o);else if(typeof r=="object"){let m=l==="channelsLast"?r[1][0]:r[2][0],f=l==="channelsLast"?r[1][1]:r[2][1],d=l==="channelsLast"?r[2][0]:r[3][0],h=l==="channelsLast"?r[2][1]:r[3][1];u={top:m,bottom:f,left:d,right:h,type:m===0&&f===0&&d===0&&h===0?"VALID":"EXPLICIT"},c=bu((e-s+m+f)/n+1,i),p=bu((t-a+d+h)/o+1,i)}else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:u,outHeight:c,outWidth:p}}function OG(r,e,t,n,o,s,a,i,l,u,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=MG([e,t,n,1],i,1,o,r,c);m=g[0],f=g[1],d=g[2]}else if(r==="same"){m=Math.ceil(e/o),f=Math.ceil(t/s),d=Math.ceil(n/a);let h=(m-1)*o+i-e,g=(f-1)*s+l-t,x=(d-1)*a+u-n,w=Math.floor(h/2),b=h-w,_=Math.floor(g/2),k=g-_,A=Math.floor(x/2),S=x-A;p={top:_,bottom:k,left:A,right:S,front:w,back:b,type:"SAME"}}else if(r==="valid")p={top:0,bottom:0,left:0,right:0,front:0,back:0,type:"VALID"},m=Math.ceil((e-i+1)/o),f=Math.ceil((t-l+1)/s),d=Math.ceil((n-u+1)/a);else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:p,outDepth:m,outHeight:f,outWidth:d}}function bu(r,e){if(!e)return Math.trunc(r);switch(e){case"round":return Math.round(r);case"ceil":return Math.ceil(r);case"floor":return Math.floor(r);default:throw new Error(`Unknown roundingMode ${e}`)}}function Ln(r){let[e,t,n]=tg(r);return e===1&&t===1&&n===1}function _r(r,e){return Ln(r)||Ln(e)}function RN(r){if(r==="NHWC")return"channelsLast";if(r==="NCHW")return"channelsFirst";throw new Error(`Unknown dataFormat ${r}`)}function LG(r,e){let n={x:v(r,"x","reshape","string_or_numeric")},o={shape:e};return D.runKernel(ds,n,o)}var L=T({reshape_:LG});function zG(r,e,t,n,o){let s=v(r,"x","avgPool","float32"),a=1;E(_r(t,a),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${t} and dilations '${a}'`);let i=s,l=!1;s.rank===3&&(l=!0,i=L(s,[1,s.shape[0],s.shape[1],s.shape[2]])),E(i.rank===4,()=>`Error in avgPool: x must be rank 4 but got rank ${i.rank}.`),o!=null&&E(nt(n),()=>`Error in avgPool: pad must be an integer when using, dimRoundingMode ${o} but got pad ${n}.`);let u={x:i},c={filterSize:e,strides:t,pad:n,dimRoundingMode:o},p=D.runKernel(Kn,u,c);return p=oe(p,s.dtype),l?L(p,[p.shape[1],p.shape[2],p.shape[3]]):p}var wa=T({avgPool_:zG});function BG(r,e,t,n,o,s="NDHWC"){let a=v(r,"x","avgPool3d","float32"),i=a,l=!1;a.rank===4&&(l=!0,i=L(a,[1,a.shape[0],a.shape[1],a.shape[2],a.shape[3]])),E(i.rank===5,()=>`Error in avgPool3d: x must be rank 5 but got rank ${i.rank}.`),E(s==="NDHWC",()=>`Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),o!=null&&E(nt(n),()=>`Error in avgPool3d: pad must be an integer when using, dimRoundingMode ${o} but got pad ${n}.`);let u={x:i},c={filterSize:e,strides:t,pad:n,dimRoundingMode:o,dataFormat:s},p=D.runKernel(ta,u,c);return p=oe(p,i.dtype),l?L(p,[p.shape[1],p.shape[2],p.shape[3],p.shape[4]]):p}var Am=T({avgPool3d_:BG});function VG(r,e=0){E(r.length>=1,()=>"Pass at least one tensor to concat");let t=ha(r,"tensors","concat","string_or_numeric");if(t[0].dtype==="complex64"&&t.forEach(s=>{if(s.dtype!=="complex64")throw new Error(`Cannot concatenate complex64 tensors with a tensor with dtype ${s.dtype}. `)}),t.length===1)return Pn(t[0]);let n=t,o={axis:e};return D.runKernel(ls,n,o)}var Ze=T({concat_:VG});function GG(r){let t={x:v(r,"x","sigmoid")};return D.runKernel(Ao,t)}var Hr=T({sigmoid_:GG});function jG(r,e,t){let n=v(r,"x","slice","string_or_numeric");if(n.rank===0)throw new Error("Slicing scalar is not possible");let o={x:n},s={begin:e,size:t};return D.runKernel(gs,o,s)}var Re=T({slice_:jG});function WG(r){let t={x:v(r,"x","tanh")};return D.runKernel(Oo,t)}var Oi=T({tanh_:WG});function UG(r,e,t,n,o,s){let a=v(r,"forgetBias","basicLSTMCell"),i=v(e,"lstmKernel","basicLSTMCell"),l=v(t,"lstmBias","basicLSTMCell"),u=v(n,"data","basicLSTMCell"),c=v(o,"c","basicLSTMCell"),p=v(s,"h","basicLSTMCell"),m=Ze([u,p],1),f=je(m,i),d=Q(f,l),h=d.shape[0],g=d.shape[1]/4,x=[h,g],w=Re(d,[0,0],x),b=Re(d,[0,g],x),_=Re(d,[0,g*2],x),k=Re(d,[0,g*3],x),A=Q(P(Hr(w),Oi(b)),P(c,Hr(Q(a,_)))),S=P(Oi(A),Hr(k));return[A,S]}var qG=T({basicLSTMCell_:UG});function HG(r,e,t){let n=v(r,"x","batchToSpaceND"),o=e.reduce((i,l)=>i*l);E(n.rank>=1+e.length,()=>`input rank is ${n.rank} but should be > than blockShape.length ${e.length}`),E(t.length===e.length,()=>`crops.length is ${t.length} but should be equal to blockShape.length ${e.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 ${e.join(" * ")} === ${o}`);let s={x:n},a={blockShape:e,crops:t};return D.runKernel(ra,s,a)}var _a=T({batchToSpaceND_:HG});function ON(r){let e;return r.rank===0||r.rank===1?e=L(r,[1,1,1,r.size]):r.rank===2?e=L(r,[1,1,r.shape[0],r.shape[1]]):r.rank===3?e=L(r,[1,r.shape[0],r.shape[1],r.shape[2]]):e=r,e}function KG(r,e,t,n,o,s){s==null&&(s=.001);let a=v(r,"x","batchNorm"),i=v(e,"mean","batchNorm"),l=v(t,"variance","batchNorm"),u;o!=null&&(u=v(o,"scale","batchNorm"));let c;n!=null&&(c=v(n,"offset","batchNorm")),E(i.rank===l.rank,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),E(c==null||i.rank===c.rank,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),E(u==null||i.rank===u.rank,()=>"Batch normalization gradient requires mean and scale to have equal ranks.");let m={x:ON(a),scale:u,offset:c,mean:i,variance:l},f={varianceEpsilon:s},d=D.runKernel(io,m,f);return L(d,a.shape)}var Lo=T({batchNorm_:KG});function XG(r,e,t,n,o,s){let a=v(r,"x","batchNorm"),i=v(e,"mean","batchNorm"),l=v(t,"variance","batchNorm"),u;o!=null&&(u=v(o,"scale","batchNorm"));let c;return n!=null&&(c=v(n,"offset","batchNorm")),E(a.rank===2,()=>`Error in batchNorm2D: x must be rank 2 but got rank ${a.rank}.`),E(i.rank===2||i.rank===1,()=>`Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank ${i.rank}.`),E(l.rank===2||l.rank===1,()=>`Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank ${l.rank}.`),u!=null&&E(u.rank===2||u.rank===1,()=>`Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank ${u.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}.`),Lo(a,i,l,c,u,s)}var yw=T({batchNorm2d_:XG});function YG(r,e,t,n,o,s){let a=v(r,"x","batchNorm"),i=v(e,"mean","batchNorm"),l=v(t,"variance","batchNorm"),u;o!=null&&(u=v(o,"scale","batchNorm"));let c;return n!=null&&(c=v(n,"offset","batchNorm")),E(a.rank===3,()=>`Error in batchNorm3D: x must be rank 3 but got rank ${a.rank}.`),E(i.rank===3||i.rank===1,()=>`Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank ${i.rank}.`),E(l.rank===3||l.rank===1,()=>`Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank ${l.rank}.`),u!=null&&E(u.rank===3||u.rank===1,()=>`Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank ${u.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}.`),Lo(a,i,l,c,u,s)}var bw=T({batchNorm3d_:YG});function ZG(r,e,t,n,o,s){let a=v(r,"x","batchNorm"),i=v(e,"mean","batchNorm"),l=v(t,"variance","batchNorm"),u;o!=null&&(u=v(o,"scale","batchNorm"));let c;return n!=null&&(c=v(n,"offset","batchNorm")),E(a.rank===4,()=>`Error in batchNorm4D: x must be rank 4 but got rank ${a.rank}.`),E(i.rank===4||i.rank===1,()=>`Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank ${i.rank}.`),E(l.rank===4||l.rank===1,()=>`Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank ${l.rank}.`),u!=null&&E(u.rank===4||u.rank===1,()=>`Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank ${u.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}.`),Lo(a,i,l,c,u,s)}var ww=T({batchNorm4d_:ZG});function JG(r,e,t){let n=v(r,"x","bincount"),o=v(e,"weights","bincount");E(n.dtype==="int32",()=>`Error in bincount: input dtype must be int32, but got ${n.dtype}`),E(t>=0,()=>`size must be non-negative, but got ${t}.`),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},a={size:t};return D.runKernel(Vl,s,a)}var _w=T({bincount_:JG});function QG(r,e){let t=v(r,"broadcastTo","x"),n=t.shape;if(e.some(u=>!(u>0)||u%1!=0))throw new Error(`broadcastTo(): Invalid broadcast shape [${e}].`);if(e.lengtht.rank){let u=t.shape.slice();for(;u.length=0;u--)if(o[u]===e[u])s[u]=1;else if(t.shape[u]!==1)throw new Error(`broadcastTo(): [${n}] cannot be broadcast to [${e}].`);if(s.map((u,c)=>u>1?c:-1).filter(u=>u>=0).length===0)return Pn(t);let i={x:t},l={reps:s};return D.runKernel(_n,i,l)}var al=T({broadcastTo_:QG});function ej(r){let t={x:v(r,"x","ceil")};return D.runKernel(Yn,t)}var Em=T({ceil_:ej});function tj(r,e,t){let n=v(r,"x","clipByValue");E(e<=t,()=>`Error in clip: min (${e}) must be less than or equal to max (${t}).`);let o={x:n},s={clipValueMin:e,clipValueMax:t};return D.runKernel(Rn,o,s)}var ir=T({clipByValue_:tj});function rj(r){return Ze(r,0)}var kw=T({concat1d_:rj});function nj(r,e){return Ze(r,e)}var vw=T({concat2d_:nj});function oj(r,e){return Ze(r,e)}var Cw=T({concat3d_:oj});function sj(r,e){return Ze(r,e)}var Iw=T({concat4d_:sj});function ij(r,e,t,n,o="NHWC",s=[1,1],a){let i=v(r,"x","conv2d"),l=v(e,"filter","conv2d"),u=i,c=!1;i.rank===3&&(c=!0,u=L(i,[1,i.shape[0],i.shape[1],i.shape[2]])),E(u.rank===4,()=>`Error in conv2d: input must be rank 4, but got rank ${u.rank}.`),E(l.rank===4,()=>`Error in conv2d: filter must be rank 4, but got rank ${l.rank}.`),a!=null&&E(nt(n),()=>`Error in conv2d: pad must be an integer when using, dimRoundingMode ${a} but got pad ${n}.`);let p=o==="NHWC"?u.shape[3]:u.shape[1];E(p===l.shape[2],()=>`Error in conv2d: depth of input (${p}) must match input depth for filter ${l.shape[2]}.`),E(_r(t,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${t} and dilations '${s}'`);let m={x:u,filter:l},f={strides:t,pad:n,dataFormat:o,dilations:s,dimRoundingMode:a},d=D.runKernel(Zn,m,f);return c?L(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var Kr=T({conv2d_:ij});function aj(r,e,t,n,o="NWC",s=1,a){let i=v(r,"x","conv1d"),l=v(e,"filter","conv1d"),u=i,c=!1;i.rank===2&&(c=!0,u=L(i,[1,i.shape[0],i.shape[1]])),E(u.rank===3,()=>`Error in conv1d: input must be rank 3, but got rank ${u.rank}.`),E(l.rank===3,()=>`Error in conv1d: filter must be rank 3, but got rank ${l.rank}.`),a!=null&&E(nt(n),()=>`Error in conv1d: pad must be an integer when using, dimRoundingMode ${a} but got pad ${n}.`),E(u.shape[2]===l.shape[1],()=>`Error in conv1d: depth of input (${u.shape[2]}) must match input depth for filter ${l.shape[1]}.`),E(_r(t,s),()=>`Error in conv1D: Either stride or dilation must be 1. Got stride ${t} and dilation '${s}'`),E(o==="NWC",()=>`Error in conv1d: got dataFormat of ${o} but only NWC is currently supported.`);let p=L(l,[1,l.shape[0],l.shape[1],l.shape[2]]),m=L(u,[u.shape[0],1,u.shape[1],u.shape[2]]),g=Kr(m,p,[1,t],n,"NHWC",[1,s],a);return c?L(g,[g.shape[2],g.shape[3]]):L(g,[g.shape[0],g.shape[2],g.shape[3]])}var wu=T({conv1d_:aj});function lj(r,e,t,n,o,s="NHWC",a){E(r.length===e.rank,()=>`Length of inShape (${r.length}) and rank of dy (${e.rank}) must match`);let i=r,l=e,u=!1;e.rank===3&&(u=!0,l=L(e,[1,e.shape[0],e.shape[1],e.shape[2]]),i=[1,r[0],r[1],r[2]]),E(i.length===4,()=>`Error in conv2dDerInput: inShape must be length 4, but got length ${i.length}.`),E(l.rank===4,()=>`Error in conv2dDerInput: dy must be rank 4, but got rank ${l.rank}`),E(t.rank===4,()=>`Error in conv2dDerInput: filter must be rank 4, but got rank ${t.rank}`);let c=s==="NHWC"?i[3]:i[1],p=s==="NHWC"?l.shape[3]:l.shape[1];E(c===t.shape[2],()=>`Error in conv2dDerInput: depth of input (${c}) must match input depth for filter ${t.shape[2]}.`),E(p===t.shape[3],()=>`Error in conv2dDerInput: depth of output (${p}) must match output depth for filter ${t.shape[3]}.`),a!=null&&E(nt(o),()=>`Error in conv2dDerInput: pad must be an integer when using, dimRoundingMode ${a} but got pad ${o}.`);let m={dy:l,filter:t},f={strides:n,pad:o,dataFormat:s,dimRoundingMode:a,inputShape:i},d=D.runKernel(Jn,m,f);return u?L(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var Kc=T({conv2DBackpropInput_:lj});function uj(r,e,t,n,o,s){let a=v(r,"x","conv2dTranspose"),i=v(e,"filter","conv2dTranspose");return Kc(t,a,i,n,o,"NHWC",s)}var _u=T({conv2dTranspose_:uj});function cj(r,e,t,n,o="NDHWC",s=[1,1,1]){let a=v(r,"x","conv3d"),i=v(e,"filter","conv3d"),l=a,u=!1;a.rank===4&&(u=!0,l=L(a,[1,a.shape[0],a.shape[1],a.shape[2],a.shape[3]])),E(l.rank===5,()=>`Error in conv3d: input must be rank 5, but got rank ${l.rank}.`),E(i.rank===5,()=>`Error in conv3d: filter must be rank 5, but got rank ${i.rank}.`),E(l.shape[4]===i.shape[3],()=>`Error in conv3d: depth of input (${l.shape[4]}) must match input depth for filter ${i.shape[3]}.`),E(_r(t,s),()=>`Error in conv3D: Either strides or dilations must be 1. Got strides ${t} and dilations '${s}'`),E(o==="NDHWC",()=>`Error in conv3d: got dataFormat of ${o} but only NDHWC is currently supported.`);let c={x:l,filter:i},p={strides:t,pad:n,dataFormat:o,dilations:s},m=D.runKernel(oa,c,p);return u?L(m,[m.shape[1],m.shape[2],m.shape[3],m.shape[4]]):m}var Dm=T({conv3d_:cj});function pj(r,e,t,n,o){E(r.length===e.rank,()=>`Length of inShape (${r.length}) and rank of dy (${e.rank}) must match`);let s=r,a=e,i=!1;e.rank===4&&(i=!0,a=L(e,[1,e.shape[0],e.shape[1],e.shape[2],e.shape[3]]),s=[1,r[0],r[1],r[2],r[3]]);let l=s[4],u=a.shape[4];E(s.length===5,()=>`Error in conv3dDerInput: inShape must be length 5, but got length ${s.length}.`),E(a.rank===5,()=>`Error in conv3dDerInput: dy must be rank 5, but got rank ${a.rank}`),E(t.rank===5,()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${t.rank}`),E(l===t.shape[3],()=>`Error in conv3dDerInput: depth of input (${l}) must match input depth for filter ${t.shape[3]}.`),E(u===t.shape[4],()=>`Error in conv3dDerInput: depth of output (${u}) must match output depth for filter ${t.shape[4]}.`);let c={dy:a,filter:t},p={pad:o,strides:n,inputShape:s},m=D.runKernel(Ul,c,p);return i?L(m,[m.shape[1],m.shape[2],m.shape[3],m.shape[4]]):m}var rg=T({conv3DBackpropInput_:pj});function mj(r,e,t,n,o){let s=v(r,"x","conv3dTranspose"),a=v(e,"filter","conv3dTranspose");return rg(t,s,a,n,o)}var fj=T({conv3dTranspose_:mj});function dj(r){let t={x:v(r,"x","cos")};return D.runKernel(Qn,t)}var ka=T({cos_:dj});function hj(r){let t={x:v(r,"x","cosh")};return D.runKernel(Qs,t)}var ku=T({cosh_:hj});function gj(r,e=0,t=!1,n=!1){let s={x:v(r,"x","cumsum")},a={axis:e,exclusive:t,reverse:n};return D.runKernel(eo,s,a)}var vu=T({cumsum_:gj});function xj(r,e,t,n=!1){let o=v(r,"x","denseBincount"),s=v(e,"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(t>=0,()=>`size must be non-negative, but got ${t}.`),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 a={x:o,weights:s},i={size:t,binaryOutput:n};return D.runKernel(ql,a,i)}var Nw=T({denseBincount_:xj});function yj(r,e,t="NHWC"){let n=v(r,"x","depthToSpace"),o=t==="NHWC"?n.shape[1]:n.shape[2],s=t==="NHWC"?n.shape[2]:n.shape[3],a=t==="NHWC"?n.shape[3]:n.shape[1];E(o*e>=0,()=>`Negative dimension size caused by overflow when multiplying ${o} and ${e} for depthToSpace with input shape ${n.shape}`),E(s*e>=0,()=>`Negative dimension size caused by overflow when multiplying ${s} and ${e} for depthToSpace with input shape ${n.shape}`),E(a%(e*e)==0,()=>`Dimension size must be evenly divisible by ${e*e} but is ${a} for depthToSpace with input shape ${n.shape}`);let i={x:n},l={blockSize:e,dataFormat:t};return D.runKernel(ti,i,l)}var $m=T({depthToSpace_:yj});function bj(r,e,t,n,o="NHWC",s=[1,1],a){let i=v(r,"x","depthwiseConv2d"),l=v(e,"filter","depthwiseConv2d"),u=i,c=!1;i.rank===3&&(c=!0,u=L(i,[1,i.shape[0],i.shape[1],i.shape[2]])),E(u.rank===4,()=>`Error in depthwiseConv2d: input must be rank 4, but got rank ${u.rank}.`),E(l.rank===4,()=>`Error in depthwiseConv2d: filter must be rank 4, but got rank ${l.rank}.`),E(u.shape[3]===l.shape[2],()=>`Error in depthwiseConv2d: number of input channels (${u.shape[3]}) must match the inChannels dimension in filter ${l.shape[2]}.`),a!=null&&E(nt(n),()=>`Error in depthwiseConv2d: pad must be an integer when using, dimRoundingMode ${a} but got pad ${n}.`);let p={x:u,filter:l},m={strides:t,pad:n,dataFormat:o,dilations:s,dimRoundingMode:a},f=D.runKernel(to,p,m);return c?L(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var Cs=T({depthwiseConv2d_:bj});function wj(r){let t={x:v(r,"x","diag")};return D.runKernel(Xl,t)}var _j=T({diag_:wj});function kj(r,e,t,n,o=[1,1],s="NHWC"){let a=v(r,"x","dilation2d"),i=v(e,"filter","dilation2d");E(a.rank===3||a.rank===4,()=>`Error in dilation2d: input must be rank 3 or 4, but got rank ${a.rank}.`),E(i.rank===3,()=>`Error in dilation2d: filter must be rank 3, but got rank ${i.rank}.`),E(s==="NHWC",()=>`Error in dilation2d: Only NHWC is currently supported, but got dataFormat of ${s}`);let l=a,u=!1;a.rank===3&&(l=L(a,[1,a.shape[0],a.shape[1],a.shape[2]]),u=!0);let c={x:l,filter:i},p={strides:t,pad:n,dilations:o},m=D.runKernel(sa,c,p);return u?L(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var Rm=T({dilation2d_:kj});function vj(r,e){let t=r.length,n=[];for(let o=0;o1&&a===1&&n.unshift(s)}return n}function kt(r,e){let t=[];for(let n=0;n1)&&t.unshift(s)}return t}function Be(r,e){let t=[],n=Math.max(r.length,e.length);for(let o=0;o"The first dimension of `a` must match the size of `condition`."),s.rank!==1&&Ct(s.shape,l.shape,"Error in where: ");let u={condition:s,t:i,e:l};return D.runKernel(hs,u)}var $t=T({where_:Ij});function Nj(r){let t={x:v(r,"x","zerosLike")};return D.runKernel(bs,t)}var Ce=T({zerosLike_:Nj});function Sj(r,e){let t=v(r,"a","div"),n=v(e,"b","div");[t,n]=Ge(t,n);let o=me(t,n),s=Ce(o),a=vn(n,s);return $t(a,s,o)}var Fm=T({divNoNan_:Sj});function Tj(r,e){let t=v(r,"t1","dot"),n=v(e,"t2","dot");E((t.rank===1||t.rank===2)&&(n.rank===1||n.rank===2),()=>`Error in dot: inputs must all be rank 1 or 2, but got ranks ${t.rank} and ${n.rank}.`);let o=t.rank===1?t.size:t.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}.`),t.rank===1&&n.rank===1){let a=L(t,[1,-1]),i=L(n,[-1,1]),l=je(a,i);return L(l,[])}else if(t.rank===1&&n.rank===2){let a=L(t,[1,-1]),i=L(n,[n.shape[0],n.shape[1]]),l=je(a,i);return L(l,[l.size])}else if(t.rank===2&&n.rank===1){let a=L(n,[-1,1]),i=je(t,a);return L(i,[i.size])}else{let a=L(n,[n.shape[0],n.shape[1]]);return je(t,a)}}var Sw=T({dot_:Tj});function Aj(r){let t={x:v(r,"x","elu")};return D.runKernel(ri,t)}var Is=T({elu_:Aj});function Ej(r){let e=v(r,"x","erf");E(e.dtype==="int32"||e.dtype==="float32",()=>"Input dtype must be `int32` or `float32`."),e.dtype==="int32"&&(e=oe(e,"float32"));let t={x:e};return D.runKernel(ni,t)}var Om=T({erf_:Ej});function Dj(r){let t={x:v(r,"x","exp")};return D.runKernel(no,t)}var Zt=T({exp_:Dj});function $j(r,e=0){let t=v(r,"x","expandDims","string_or_numeric");E(e<=t.rank,()=>"Axis must be <= rank of the tensor");let n={input:t},o={dim:e};return D.runKernel(us,n,o)}var ar=T({expandDims_:$j});function Rj(r){let t={x:v(r,"x","expm1")};return D.runKernel(si,t)}var Pm=T({expm1_:Rj});function Fj(r,e){let t=v(r,"x","tile","string_or_numeric");E(t.rank===e.length,()=>`Error in transpose: rank of input ${t.rank} must match length of reps ${e}.`);let n={x:t},o={reps:e};return D.runKernel(_n,n,o)}var zn=T({tile_:Fj});function Oj(r,e,t,n="float32"){e==null&&(e=r);let o=ve([r,e],n),s=r<=e?r:e;for(let i=0;i`Error in localResponseNormalization: x must be rank 3 or 4 but got rank ${s.rank}.`),E(nt(e),()=>`Error in localResponseNormalization: depthRadius must be an integer but got depthRadius ${e}.`);let a=s,i=!1;s.rank===3&&(i=!0,a=L(s,[1,s.shape[0],s.shape[1],s.shape[2]]));let l={x:a},u={depthRadius:e,bias:t,alpha:n,beta:o},c=D.runKernel(aa,l,u);return i?L(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var Mm=T({localResponseNormalization_:Hj});function Kj(r){let t={x:v(r,"x","log")};return D.runKernel(uo,t)}var lr=T({log_:Kj});function Xj(r){let t={x:v(r,"x","log1p")};return D.runKernel(di,t)}var Nu=T({log1p_:Xj});function Yj(r){return E(Ws(r),()=>"The f passed in grad(f) must be a function"),(e,t)=>{let n=v(e,"x","tf.grad","string_or_numeric"),o=t!=null?v(t,"dy","tf.grad"):null;return D.tidy(()=>{let{value:s,grads:a}=D.gradients(()=>r(n),[n],o);return o!=null&&Ct(s.shape,o.shape,"The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)"),ng(a),a[0]})}}function Zj(r){return E(Ws(r),()=>"The f passed in grads(f) must be a function"),(e,t)=>{E(Array.isArray(e),()=>"The args passed in grads(f)(args) must be an array of `Tensor`s or `TensorLike`s");let n=ha(e,"args","tf.grads","string_or_numeric"),o=t!=null?v(t,"dy","tf.grads"):null;return D.tidy(()=>{let{value:s,grads:a}=D.gradients(()=>r(...n),n,o);return o!=null&&Ct(s.shape,o.shape,"The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),ng(a),a})}}function Jj(r){return E(Ws(r),()=>"The f passed in valueAndGrad(f) must be a function"),(e,t)=>{E(e instanceof Ve,()=>"The x passed in valueAndGrad(f)(x) must be a tensor"),E(t==null||t instanceof Ve,()=>"The dy passed in valueAndGrad(f)(x, dy) must be a tensor");let{grads:n,value:o}=D.gradients(()=>r(e),[e],t);return ng(n),{grad:n[0],value:o}}}function Qj(r){return E(Ws(r),()=>"The f passed in valueAndGrads(f) must be a function"),(e,t)=>{E(Array.isArray(e)&&e.every(o=>o instanceof Ve),()=>"The args passed in valueAndGrads(f)(args) must be array of tensors"),E(t==null||t instanceof Ve,()=>"The dy passed in valueAndGrads(f)(args, dy) must be a tensor");let n=D.gradients(()=>r(...e),e,t);return t!=null&&Ct(n.value.shape,t.shape,"The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),ng(n.grads),n}}function og(r,e){E(Ws(r),()=>"The f passed in variableGrads(f) must be a function"),E(e==null||Array.isArray(e)&&e.every(u=>u instanceof rl),()=>"The varList passed in variableGrads(f, varList) must be an array of variables");let t=e!=null;if(!t){e=[];for(let u in D.registeredVariables)e.push(D.registeredVariables[u])}let n=t?e.filter(u=>!u.trainable):null,o=e.length;e=e.filter(u=>u.trainable),E(e.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:a,grads:i}=D.gradients(r,e,null,s);E(i.some(u=>u!=null),()=>"Cannot find a connection between any variable and the result of the loss function y=f(x). Please make sure the operations that use variables are inside the function f passed to minimize()."),E(a.rank===0,()=>`The f passed in variableGrads(f) must return a scalar, but it returned a rank-${a.rank} tensor`);let l={};return e.forEach((u,c)=>{i[c]!=null&&(l[u.name]=i[c])}),n!=null&&n.forEach(u=>l[u.name]=null),{value:a,grads:l}}function Xr(r){return D.customGrad(r)}function ng(r){if(r.filter(t=>t==null).length>0)throw new Error(`Cannot compute gradient of y=f(x) with respect to x. Make sure that the f you passed encloses all operations that lead from x to y.`)}function eW(r){let t={x:v(r,"x","neg")};return D.runKernel(ps,t)}var qe=T({neg_:eW});function tW(r){let t={x:v(r,"x","softplus")};return D.runKernel(Si,t)}var Ss=T({softplus_:tW});function rW(r){let e=v(r,"x","logSigmoid");return Xr(n=>({value:qe(Ss(qe(n))),gradFunc:a=>P(a,Hr(qe(n)))}))(e)}var $w=T({logSigmoid_:rW});function nW(r,e=null,t=!1){let o={x:v(r,"x","max")},s={reductionIndices:e,keepDims:t};return D.runKernel(co,o,s)}var ur=T({max_:nW});function oW(r,e){let t=v(r,"a","sub"),n=v(e,"b","sub");[t,n]=Ge(t,n);let o={a:t,b:n};return D.runKernel(Fo,o)}var ce=T({sub_:oW});function sW(r,e=null,t=!1){let n=v(r,"x","sum");n.dtype==="bool"&&(n=oe(n,"int32"));let o={x:n},s={axis:e,keepDims:t};return D.runKernel(Do,o,s)}var ge=T({sum_:sW});function iW(r,e=-1){let t=v(r,"logits","logSoftmax");if(e===-1&&(e=t.rank-1),e!==t.rank-1)throw Error(`Log Softmax along a non-last dimension is not yet supported. Logits was rank ${t.rank} and axis was ${e}`);return Xr((o,s)=>{let a=!0,i=ur(o,e,!0),l=ce(o,i),u=ce(oe(l,"float32"),lr(ge(Zt(l),e,a)));return s([u]),{value:u,gradFunc:(p,m)=>{let[f]=m,d=!0,h=Zt(f);return ce(p,P(ge(p,e,d),h))}}})(t)}var Su=T({logSoftmax_:iW});function Rw(r,e){for(let t=0;tr[s]);return[t,o]}function Bo(r,e){let t=e.map(n=>1);return PN(r,t,e)}function aW(r,e,t){E(Rw(e,t),()=>`${r} supports only inner-most axes for now. Got axes ${e} and rank-${t} input.`)}function Ow(r,e){if(Rw(r,e))return null;let t=[];for(let n=0;nt.push(n)),t}function Lm(r){return r.map((e,t)=>[t,e]).sort((e,t)=>e[1]-t[1]).map(e=>e[0])}function lW(r,e){let t=[];for(let n=e-r;n`Error in maxPool: input must be rank 4 but got rank ${i.rank}.`),E(_r(t,a),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${t} and dilations '${a}'`),o!=null&&E(nt(n),()=>`Error in maxPool: pad must be an integer when using, dimRoundingMode ${o} but got pad ${n}.`);let u={x:i},c={filterSize:e,strides:t,pad:n,dimRoundingMode:o},p=D.runKernel(mo,u,c);return l?L(p,[p.shape[1],p.shape[2],p.shape[3]]):p}var Na=T({maxPool_:dW});function hW(r,e=[1,1,1],t,n,o,s="NDHWC"){let a=v(r,"x","maxPool3d"),i=a,l=!1;a.rank===4&&(l=!0,i=L(a,[1,a.shape[0],a.shape[1],a.shape[2],a.shape[3]])),E(i.rank===5,()=>`Error in maxPool3d: x must be rank 5 but got rank ${i.rank}.`),E(s==="NDHWC",()=>`Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),o!=null&&E(nt(n),()=>`Error in maxPool3d: pad must be an integer when using, dimRoundingMode ${o} but got pad ${n}.`);let u={x:i},c={filterSize:e,strides:t,pad:n,dimRoundingMode:o,dataFormat:s},p=D.runKernel(la,u,c);return l?L(p,[p.shape[1],p.shape[2],p.shape[3],p.shape[4]]):p}var Bm=T({maxPool3d_:hW});function gW(r,e,t,n,o=!1){let a={x:v(r,"x","maxPoolWithArgmax")},i={filterSize:e,strides:t,pad:n,includeBatchInIndex:o},l=D.runKernel(ou,a,i);return{result:l[0],indexes:l[1]}}var Mw=T({maxPoolWithArgmax_:gW});function xW(r,e){let t=v(r,"a","maximum"),n=v(e,"b","maximum");[t,n]=Ge(t,n),t.dtype==="bool"&&(t=oe(t,"int32"),n=oe(n,"int32")),Be(t.shape,n.shape);let o={a:t,b:n};return D.runKernel(po,o)}var Yr=T({maximum_:xW});function yW(r,e=null,t=!1){let o={x:v(r,"x","mean")},s={axis:e,keepDims:t};return D.runKernel(fo,o,s)}var ht=T({mean_:yW});function bW(r,e=null,t=!1){let o={x:v(r,"x","min")},s={axis:e,keepDims:t};return D.runKernel(ho,o,s)}var Pi=T({min_:bW});function wW(r,e){let t=v(r,"a","minimum"),n=v(e,"b","minimum");[t,n]=Ge(t,n),t.dtype==="bool"&&(t=oe(t,"int32"),n=oe(n,"int32")),Be(t.shape,n.shape);let o={a:t,b:n};return D.runKernel(go,o)}var Ts=T({minimum_:wW});function _W(r,e,t){E(t==="reflect"||t==="symmetric",()=>`Invalid mode. Mode must be either reflect or symmetric. Got ${t}.`);let n=v(r,"x","mirrorPad");if(n.rank===0)throw new Error("mirrorPad(scalar) is not defined. Pass non-scalar to mirrorPad");E(e.length===n.rank,()=>`Padding doesn't match input. Must be ${n.rank}. Got ${e.length}.`);let o=t==="reflect"?1:0;for(let i=0;i"Invalid number of paddings. Must be length of 2 each."),E(e[i][0]>=0&&e[i][0]<=n.shape[i]-o&&e[i][1]>=0&&e[i][1]<=n.shape[i]-o,()=>`Padding in dimension ${i} cannot be greater than or equal to ${n.shape[i]-o} or less than 0 for input of shape ${n.shape}`);let s={paddings:e,mode:t},a={x:n};return D.runKernel(ua,a,s)}var Vm=T({mirrorPad_:_W});function kW(r,e){let t=v(r,"a","mod"),n=v(e,"b","mod");[t,n]=Ge(t,n);let o={a:t,b:n};return D.runKernel(gi,o)}var Gm=T({mod_:kW});function vW(r){let e=v(r,"x","square"),t={};return D.runKernel("Square",{x:e},t)}var Oe=T({square_:vW});function CW(r,e=null,t=!1){r=v(r,"x","moments");let n=Qt(e,r.shape),o=ht(r,n,t),s=o.shape;t||(s=Bo(o.shape,n));let a=Oe(ce(oe(r,"float32"),L(o,s))),i=ht(a,n,t);return{mean:o,variance:i}}var Yc=T({moments_:CW});function IW(r,e,t,n){let o=v(e,"data","multiRNNCell"),s=ha(t,"c","multiRNNCell"),a=ha(n,"h","multiRNNCell"),i=o,l=[];for(let p=0;p2)throw new Error(`Rank of probabilities must be 1 or 2, but is ${a}`);t=t||Math.random();let l={logits:a===1?L(o,[1,-1]):o},u={numSamples:e,seed:t,normalized:n},c=D.runKernel(su,l,u);return a===1?L(c,[c.size]):c}var Lw=T({multinomial_:SW});function TW(r,e){let t=v(r,"a","notEqual"),n=v(e,"b","notEqual");[t,n]=Ge(t,n),Be(t.shape,n.shape);let o={a:t,b:n};return D.runKernel(xi,o)}var Vo=T({notEqual_:TW});function gt(r,e="float32"){if(e==="complex64"){let n=gt(r,"float32"),o=gt(r,"float32");return kn(n,o)}let t=$c(ct(r),e);return D.makeTensor(t,r,e)}function Nr(r,e="float32"){if(e==="complex64"){let n=Nr(r,"float32"),o=gt(r,"float32");return kn(n,o)}let t=cm(ct(r),e);return D.makeTensor(t,r,e)}function AW(r){let t={x:v(r,"x","onesLike")};return D.runKernel(ms,t)}var tr=T({onesLike_:AW});function EW(r,e){let t=v(r,"v1","outerProduct"),n=v(e,"v2","outerProduct");E(t.rank===1&&n.rank===1,()=>`Error in outerProduct: inputs must be rank 1, but got ranks ${t.rank} and ${n.rank}.`);let o=L(t,[-1,1]),s=L(n,[1,-1]);return je(o,s)}var DW=T({outerProduct_:EW});function $W(r,e,t=0){let n=v(r,"x","pad");if(n.rank===0)throw new Error("pad(scalar) is not defined. Pass non-scalar to pad");let o={paddings:e,constantValue:t},s={x:n};return D.runKernel(bo,s,o)}var Fr=T({pad_:$W});function RW(r,e,t=0){return E(e.length===2,()=>"Invalid number of paddings. Must be length of 2."),Fr(r,[e],t)}var FW=T({pad1d_:RW});function OW(r,e,t=0){return E(e.length===2&&e[0].length===2&&e[1].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),Fr(r,e,t)}var PW=T({pad2d_:OW});function MW(r,e,t=0){return E(e.length===3&&e[0].length===2&&e[1].length===2&&e[2].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),Fr(r,e,t)}var LW=T({pad3d_:MW});function zW(r,e,t=0){return E(e.length===4&&e[0].length===2&&e[1].length===2&&e[2].length===2&&e[3].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),Fr(r,e,t)}var BW=T({pad4d_:zW});function VW(r,e,t){let n=v(r,"x","spaceToBatchND");E(n.rank>=1+e.length,()=>`input rank ${n.rank} should be > than [blockShape] ${e.length}`),E(t.length===e.length,()=>`paddings.shape[0] ${t.length} must be equal to [blockShape] ${e.length}`),E(n.shape.reduce((a,i,l)=>l>0&&l<=e.length?a&&(i+t[l-1][0]+t[l-1][1])%e[l-1]==0:a,!0),()=>`input spatial dimensions ${n.shape.slice(1)} with paddings ${t.toString()} must be divisible by blockShapes ${e.toString()}`);let o={x:n},s={blockShape:e,paddings:t};return D.runKernel(ma,o,s)}var Sa=T({spaceToBatchND_:VW});function WW(r,e,t,n,o,s){o==null&&(o=[1,1]),s==null&&(s=1),n===0&&(n="valid");let a=v(r,"x","maxPool"),i=a,l=!1;a.rank===3&&(l=!0,i=L(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 u=hw(i.shape,e,s,o,n),c=[u.dilationHeight,u.dilationWidth],p;n==="same"?p=jW([u.filterHeight,u.filterWidth],c):p=[[0,0],[0,0]];let m=c[0]===1&&c[1]===1,[f,d]=GW([u.inHeight,u.inWidth],c,p),h=m?n:"valid",g=m?i:Sa(i,c,f),w=(t==="avg"?()=>wa(g,e,s,h):()=>Na(g,e,s,h))(),b=m?w:_a(w,c,d);return l?L(b,[b.shape[1],b.shape[2],b.shape[3]]):b}function GW(r,e,t){let n=t.map(c=>c[0]),o=t.map(c=>c[1]),s=r.concat(n,o),a=e.map((c,p)=>(c-s[p]%c)%c),i=o.map((c,p)=>c+a[p]),l=e.map((c,p)=>[n[p],i[p]]),u=e.map((c,p)=>[0,a[p]]);return[l,u]}function jW(r,e){let n=r.map((a,i)=>a+(a-1)*(e[i]-1)).map(a=>a-1),o=n.map(a=>Math.floor(a/2)),s=n.map((a,i)=>a-o[i]);return n.map((a,i)=>[o[i],s[i]])}var zw=T({pool_:WW});function UW(r,e){let t=v(r,"base","pow"),n=v(e,"exp","pow");[t,n]=Ge(t,n);let o={a:t,b:n};return D.runKernel(wo,o)}var Or=T({pow_:UW});function qW(r,e){let t=v(r,"x","prelu"),n=v(e,"alpha","prelu"),o={x:t,alpha:n};return D.runKernel(_o,o)}var Ta=T({prelu_:qW});function HW(r,e=null,t=!1){let n=v(r,"x","prod");n.dtype==="bool"&&(n=oe(n,"int32"));let o={x:n},s={axis:e,keepDims:t};return D.runKernel(_i,o,s)}var Au=T({prod_:HW});function KW(r,e,t){let n=ct(r),o=null;if(t==null||t==="float32")o=new Float32Array(n);else if(t==="int32")o=new Int32Array(n);else if(t==="bool")o=new Uint8Array(n);else throw new Error(`Unknown data type ${t}`);for(let s=0;s=1||a===0);let i=Math.sqrt(-2*Math.log(a)/a);e=this.mean+this.stdDev*o*i,t=this.mean+this.stdDev*s*i,(!this.truncated||this.isValidTruncated(e))&&(n=!0)}return(!this.truncated||this.isValidTruncated(t))&&(this.nextVal=this.convertValue(t)),this.convertValue(e)}convertValue(e){return this.dtype==null||this.dtype==="float32"?e:Math.round(e)}isValidTruncated(e){return e<=this.upper&&e>=this.lower}},qw=class{constructor(e,t,n,o){this.alpha=e,this.beta=1/t,this.dtype=n;let s=o||Math.random();this.randu=ag.alea(s.toString()),this.randn=new Zc(0,1,n,!1,this.randu()),e<1?this.d=e+2/3:this.d=e-1/3,this.c=1/Math.sqrt(9*this.d)}nextValue(){let e,t,n,o,s,a;for(;;){do o=this.randn.nextValue(),a=1+this.c*o;while(a<=0);if(a*=a*a,e=o*o,t=1-.331*e*e,n=.5*e+this.d*(1-a+Math.log(a)),s=this.randu(),sthis.dtype==null||this.dtype==="float32",this.min=e,this.range=t-e,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 ${e} - ${t} <= 1 and dtype is not float`);this.random=ag.alea(o)}convertValue(e){return this.canReturnFloat()?e:Math.round(e)}nextValue(){return this.convertValue(this.min+this.range*this.random())}};function r4(r,e,t=1,n="float32",o){if(t==null&&(t=1),n==null&&(n="float32"),n!=="float32"&&n!=="int32")throw new Error(`Unsupported data type ${n}`);let s=new qw(e,t,n,o),a=ve(r,n);for(let i=0;i`Error in reverse1D: x must be rank 1 but got rank ${e.rank}.`),Ht(e,0)}var m4=T({reverse1d_:p4});function f4(r,e){let t=v(r,"x","reverse");return E(t.rank===2,()=>`Error in reverse2D: x must be rank 2 but got rank ${t.rank}.`),Ht(t,e)}var d4=T({reverse2d_:f4});function h4(r,e){let t=v(r,"x","reverse");return E(t.rank===3,()=>`Error in reverse3D: x must be rank 3 but got rank ${t.rank}.`),Ht(t,e)}var g4=T({reverse3d_:h4});function x4(r,e){let t=v(r,"x","reverse");return E(t.rank===4,()=>`Error in reverse4D: x must be rank 4 but got rank ${t.rank}.`),Ht(t,e)}var y4=T({reverse4d_:x4});function b4(r){let t={x:v(r,"x","round")};return D.runKernel(No,t)}var Wm=T({round_:b4});function w4(r){let t={x:v(r,"x","rsqrt")};return D.runKernel(So,t)}var $u=T({rsqrt_:w4});function ue(r,e){if((or(r)&&e!=="string"||Array.isArray(r))&&e!=="complex64")throw new Error("Error creating a new Scalar: value must be a primitive (number|boolean|string)");if(e==="string"&&or(r)&&!(r instanceof Uint8Array))throw new Error("When making a scalar from encoded string, the value must be `Uint8Array`.");return Ur(r,[],[],e)}function _4(r){let t={x:v(r,"x","selu")};return D.runKernel(Ci,t)}var Ru=T({selu_:_4});function k4(r,e,t,n,o,s=[1,1],a="NHWC"){let i=v(r,"x","separableConv2d"),l=v(e,"depthwiseFilter","separableConv2d"),u=v(t,"pointwiseFilter","separableConv2d"),c=i,p=!1;if(i.rank===3&&(p=!0,c=L(i,[1,i.shape[0],i.shape[1],i.shape[2]])),a==="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(l.rank===4,()=>`Error in separableConv2d: depthwise filter must be rank 4, but got rank ${l.rank}.`),E(u.rank===4,()=>`Error in separableConv2d: pointwise filter must be rank 4, but got rank ${l.rank}.`),E(u.shape[0]===1,()=>`Error in separableConv2d: the first dimension of pointwise filter must be 1, but got ${u.shape[0]}.`),E(u.shape[1]===1,()=>`Error in separableConv2d: the second dimension of pointwise filter must be 1, but got ${u.shape[1]}.`);let m=l.shape[2],f=l.shape[3];E(u.shape[2]===m*f,()=>`Error in separableConv2d: the third dimension of pointwise filter must be ${m*f}, but got ${u.shape[2]}.`);let d=Cs(c,l,n,o,a,s),g=Kr(d,u,1,"valid",a);return p?L(g,[g.shape[1],g.shape[2],g.shape[3]]):g}var Um=T({separableConv2d_:k4});async function v4(r,e){let t=v(r,"x","setdiff1d"),n=v(e,"y","setdiff1d");E(t.dtype===n.dtype,()=>`x and y should have the same dtype, but got x (${t.dtype}) and y (${n.dtype}).`),E(t.rank===1,()=>`x should be 1D tensor, but got x (${t.shape}).`),E(n.rank===1,()=>`y should be 1D tensor, but got y (${n.shape}).`);let o=await t.data(),s=await n.data(),a=new Set(s),i=0;for(let c=0;c`slice1d expects a rank-1 tensor, but got a rank-${n.rank} tensor`),Re(n,[e],[t])}var Hm=T({slice1d_:S4});function T4(r,e,t){let n=v(r,"x","slice2d");return E(n.rank===2,()=>`slice2d expects a rank-2 tensor, but got a rank-${n.rank} tensor`),Re(n,e,t)}var ug=T({slice2d_:T4});function A4(r,e,t){let n=v(r,"x","slice3d");return E(n.rank===3,()=>`slice3d expects a rank-3 tensor, but got a rank-${n.rank} tensor`),Re(n,e,t)}var Km=T({slice3d_:A4});function E4(r,e,t){let n=v(r,"x","slice4d");return E(n.rank===4,()=>`slice4d expects a rank-4 tensor, but got a rank-${n.rank} tensor`),Re(n,e,t)}var Qc=T({slice4d_:E4});function D4(r,e=-1){let t=v(r,"logits","softmax","float32");if(e===-1&&(e=t.rank-1),e!==t.rank-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${t.rank} and dim was ${e}`);let n={logits:t},o={dim:e};return D.runKernel($o,n,o)}var Aa=T({softmax_:D4});function $4(r){E(r.dtype==="complex64",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${r.dtype}.`);let e={input:r};return D.runKernel(Zl,e)}var Ea=T({fft_:$4});function R4(r){E(r.dtype==="complex64",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${r.dtype}.`);let e={input:r};return D.runKernel(Jl,e)}var Mi=T({ifft_:R4});function F4(r){let e=r.shape[r.shape.length-1],t=r.size/e,n;if(e<=2){let o=L(r,[t,e]);n=Mi(o)}else{let o=[t,2*(e-1)],s=L(ll(r),[t,e]),a=L(Cu(r),[t,e]),i=Ht(Re(s,[0,1],[t,e-2]),1),l=P(Ht(Re(a,[0,1],[t,e-2]),1),ue(-1)),u=Ze([s,i],1),c=Ze([a,l],1),p=L(kn(u,c),[o[0],o[1]]);n=Mi(p)}if(n=ll(n),r.rank===3&&r.shape[0]!==0){let o=n,s=r.shape[0];n=L(n,[s,n.shape[0]/s,n.shape[1]]),o.dispose()}return n}var Pu=T({irfft_:F4});function O4(r,e,t=0){let o={x:v(r,"x","split")},s={numOrSizeSplits:e,axis:t};return D.runKernel(xs,o,s)}var cr=T({split_:O4});function P4(r,e){E(r.dtype==="float32",()=>`The dtype for rfft() must be real value but got ${r.dtype}`);let t=r.shape[r.shape.length-1],n=r.size/t,o;if(e!=null&&e0),h=r.shape.map(g=>g);h[r.shape.length-1]=e,o=Re(r,d,h),t=e}else if(e!=null&&e>t){let d=r.shape.map(h=>h);d[r.shape.length-1]=e-t,o=Ze([r,gt(d)],r.shape.length-1),t=e}else o=r;let s=Ce(o),a=L(kn(o,s),[n,t]),i=Ea(a),l=Math.floor(t/2)+1,u=ll(i),c=Cu(i),p=cr(u,[l,t-l],u.shape.length-1),m=cr(c,[l,t-l],c.shape.length-1),f=o.shape.slice();return f[o.shape.length-1]=l,L(kn(p[0],m[0]),f)}var Da=T({rfft_:P4});function M4(r){let t={x:v(r,"x","sqrt")};return D.runKernel(Eo,t)}var xt=T({sqrt_:M4});function L4(r,e){let t=v(r,"a","squaredDifference"),n=v(e,"b","squaredDifference");[t,n]=Ge(t,n),Be(t.shape,n.shape);let o={a:t,b:n},s={};return D.runKernel(Ro,o,s)}var Mu=T({squaredDifference_:L4});function z4(r,e){let t=v(r,"x","squeeze");return L(t,Cb(t.shape,e).newShape)}var Cn=T({squeeze_:z4});function B4(r,e=0){let t=ha(r,"tensors","stack","string_or_numeric");E(t.length>=1,()=>"Pass at least one tensor to tf.stack"),t.length>0&&E(e<=t[0].rank,()=>"Axis must be <= rank of the tensor");let n=t,o={axis:e};return D.runKernel(fs,n,o)}var Vt=T({stack_:B4});function V4(r,e=0){let n={x:v(r,"x","step")},o={alpha:e};return D.runKernel(On,n,o)}var Es=T({step_:V4});function G4(r,e,t,n,o=0,s=0,a=0,i=0,l=0){let c={x:v(r,"x","stridedSlice")},p={begin:e,end:t,strides:n,beginMask:o,endMask:s,ellipsisMask:a,newAxisMask:i,shrinkAxisMask:l};return D.runKernel(Ti,c,p)}var Xm=T({stridedSlice_:G4});function j4(r){let t={x:v(r,"x","tan")};return D.runKernel(Ai,t)}var Ym=T({tan_:j4});function Gt(r,e){Dn(r);let t=Cr(r,e);if(t.length!==1)throw new Error("tensor1d() requires values to be a flat/TypedArray");return Ur(r,null,t,e)}function Li(r,e,t){if(Dn(r),e!=null&&e.length!==2)throw new Error("tensor2d() requires shape to have two numbers");let n=Cr(r,t);if(n.length!==2&&n.length!==1)throw new Error("tensor2d() requires values to be number[][] or flat/TypedArray");if(n.length===1&&e==null)throw new Error("tensor2d() requires shape to be provided when `values` are a flat/TypedArray");return Ur(r,e,n,t)}function W4(r,e,t){if(Dn(r),e!=null&&e.length!==4)throw new Error("tensor4d() requires shape to have four numbers");let n=Cr(r,t);if(n.length!==4&&n.length!==1)throw new Error("tensor4d() requires values to be number[][][][] or flat/TypedArray");if(n.length===1&&e==null)throw new Error("tensor4d() requires shape to be provided when `values` are a flat array");return Ur(r,e,n,t)}function U4(r,e,t){if(Dn(r),e!=null&&e.length!==5)throw new Error("tensor5d() requires shape to have five numbers");let n=Cr(r,t);if(n.length!==5&&n.length!==1)throw new Error("tensor5d() requires values to be number[][][][][] or flat/TypedArray");if(n.length===1&&e==null)throw new Error("tensor5d() requires shape to be provided when `values` are a flat array");return Ur(r,e,n,t)}function q4(r,e,t){if(Dn(r),e!=null&&e.length!==6)throw new Error("tensor6d() requires shape to have six numbers");let n=Cr(r,t);if(n.length!==6&&n.length!==1)throw new Error("tensor6d() requires values to be number[][][][][][] or flat/TypedArray");if(n.length===1&&e==null)throw new Error("tensor6d() requires shape to be provided when `values` are a flat array");return e=e||n,Ur(r,e,n,t)}function H4(r,e=1,t=!0){let n=v(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(e>o)throw new Error(`'k' passed to topk() must be <= the last dimension (${o}) but got ${e}`);let s={x:n},a={k:e,sorted:t},[i,l]=D.runKernel(Ei,s,a);return{values:i,indices:l}}var Zm=T({topk_:H4});function K4(r,e=0,t=1,n,o){if(n!=null&&n==="bool")throw new Error("Unsupported data type $ { dtype }");let s=new Zc(e,t,n,!0,o),a=ve(r,n);for(let i=0;i0,()=>"The input tensor must be at least 1D");let n={x:t},o={axis:e},[s,a]=D.runKernel(cu,n,o);return{values:s,indices:a}}var ep=T({unique_:X4});function Y4(r,e,t){let n=v(r,"x","unsortedSegmentSum"),o=v(e,"segmentIds","unsortedSegmentSum","int32");E(nt(t),()=>"numSegments must be of dtype int");let s={x:n,segmentIds:o},a={numSegments:t};return D.runKernel(da,s,a)}var Jm=T({unsortedSegmentSum_:Y4});function Z4(r,e=0){let t=v(r,"x","unstack","string_or_numeric");E(e>=-t.shape.length&&e`Axis = ${e} is not in [-${t.shape.length}, ${t.shape.length})`);let n={value:t},o={axis:e};return D.runKernel(ys,n,o)}var pr=T({unstack_:Z4});function Xw(r,e=!0,t,n){return D.makeVariable(r,e,t,n)}function Yw(r,e){let t=[];for(let s=0;s0,()=>"mask cannot be scalar"),Ct(i.slice(s,s+a),o.shape,"mask's shape must match the first K dimensions of tensor's shape,");let l=1;for(let h=s;h"Shape mismatch in v and x");let l=ue(1),u=ce(l,i),c=P(ce(a,s),u);if(o){E(n!=null,()=>"When using zeroDebias: true, step is required.");let p=v(n,"step","movingAverage");c=me(c,ce(l,Or(i,p)))}return Q(s,c)}var nU=T({movingAverage_:rU});function oU(r,e,t){let n=v(r,"indices","scatterND","int32"),o=v(e,"updates","scatterND");Zh(o,n,t);let s={indices:n,updates:o},a={shape:t};return D.runKernel(vi,s,a)}var Zw=T({scatterND_:oU});function QN(r,e,t,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(t.length!==s)throw new Error(`outputShape has incorrect number of elements:, ${t.length}, should be: ${s}.`);let a=e.size;if(!(e.rank===0||e.rank===1&&a===o))throw new Error(`sparseValues has incorrect shape ${e.shape}, should be [] or [${o}]`);if(e.dtype!==n.dtype)throw new Error("sparseValues.dtype must match defaultValues.dtype")}function sU(r,e,t,n=0){let o=v(r,"sparseIndices","sparseToDense","int32"),s=v(e,"sparseValues","sparseToDense"),a=v(n,"defaultValue","sparseToDense",s.dtype);QN(o,s,t,a);let i={sparseIndices:o,sparseValues:s,defaultValue:a},l={outputShape:t};return D.runKernel(uu,i,l)}var ef=T({sparseToDense_:sU});function iU(r,e){let t=v(e,"indices","gatherND","int32"),o={params:v(r,"x","gatherND"),indices:t};return D.runKernel(ai,o)}var Jw=T({gatherND_:iU});function eS(r,e){if(e==null)return r.shape.slice();if(Wr(r.shape,e))return e;if(r.shape.length===e.length){let t=[];for(let n=0;n`x has to be a floating point tensor since it's going to be scaled, but got a ${o.dtype} tensor instead.`),E(e>=0&&e<1,()=>`rate must be a float in the range [0, 1), but got ${e}.`),e===0)return r instanceof Ve?o.clone():o;let s=eS(o,t),a=1-e,i=me(Ns(Q(As(s,0,1,"float32",n),a)),a);return P(o,i)}var Qw=T({dropout_:aU});function e_(r){return Math.floor(Math.pow(2,Math.ceil(Math.log(r)/Math.log(2))))}function tf(r,e,t){let n=1-r%2,o=new Float32Array(r);for(let s=0;s1,()=>`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}`),Ct(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(t>0&&t<=s,()=>`'k' passed to inTopK() must be > 0 && <= the predictions last dimension (${s}), but got ${t}`);let a=await n.data(),i=await o.data(),[l,u]=[a.length/s,s],c=Ib("bool",l);for(let p=0;pg.value-h.value),c[p]=0;for(let h=0;hmU,depthwiseConv2d:()=>gU,matMul:()=>yU});function cU(r,e,t,n,o,s="NHWC",a){let i=r;r.rank===3&&(i=L(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let l=e;l.rank===3&&(l=L(e,[1,e.shape[0],e.shape[1],e.shape[2]])),E(i.rank===4,()=>`Error in conv2dDerFilter: input must be rank 4, but got shape ${i.shape}.`),E(l.rank===4,()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${l.shape}.`),E(t.length===4,()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${t}.`);let u=s==="NHWC"?i.shape[3]:i.shape[1],c=s==="NHWC"?l.shape[3]:l.shape[1];E(u===t[2],()=>`Error in conv2dDerFilter: depth of input ${u}) must match input depth in filter (${t[2]}.`),E(c===t[3],()=>`Error in conv2dDerFilter: depth of dy (${c}) must match output depth for filter (${t[3]}).`),a!=null&&E(nt(o),()=>`Error in conv2dDerFilter: pad must be an integer when using, dimRoundingMode ${a} but got pad ${o}.`);let p={x:i,dy:l},m={strides:n,pad:o,dataFormat:s,dimRoundingMode:a,filterShape:t};return D.runKernel(jl,p,m)}var tp=T({conv2DBackpropFilter_:cU});function Bu(r,e,t){if(t==null||t==="linear")return r;if(t==="relu")return P(r,Es(e));throw new Error(`Cannot compute gradient for fused activation ${t}.`)}function Vu(r,e){let t=e,n=kt(r.shape,e.shape);return n.length>0&&(t=ge(t,n)),L(t,r.shape)}function Gu(r,e,t,n){if(e==="linear")return r;if(e==="relu")return Sr(r);if(e==="elu")return Is(r);if(e==="relu6")return Du(r);if(e==="prelu")return Ta(r,t);if(e==="leakyrelu")return Ca(r,n);throw new Error(`Unknown fused activation ${e}.`)}var ju=(r,e)=>!(r>0)||e==="linear";function pU({x:r,filter:e,strides:t,pad:n,dataFormat:o="NHWC",dilations:s=[1,1],dimRoundingMode:a,bias:i,activation:l="linear",preluActivationWeights:u,leakyreluAlpha:c}){if(l=l||"linear",ju(D.state.gradientDepth,l)===!1){let k=Kr(r,e,t,n,o,s,a);return i!=null&&(k=Q(k,i)),Gu(k,l,u,c)}let p=v(r,"x","conv2d"),m=v(e,"filter","conv2d"),f=p,d=!1;p.rank===3&&(d=!0,f=L(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}.`),a!=null&&E(nt(n),()=>`Error in fused conv2d: pad must be an integer when using, dimRoundingMode ${a} but got pad ${n}.`),E(f.shape[3]===m.shape[2],()=>`Error in conv2d: depth of input (${f.shape[3]}) must match input depth for filter ${m.shape[2]}.`),E(_r(t,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${t} and dilations '${s}'`),E(o==="NHWC",()=>`Error in conv2d: got dataFormat of ${o} but only NHWC is currently supported.`);let h=yu(f.shape,m.shape,t,s,n,a),g;i!=null&&(g=v(i,"bias","fused conv2d"),[g]=Ge(g,p),Be(h.outShape,g.shape));let x;u!=null&&(x=v(u,"prelu weights","fused conv2d"));let w=(k,A)=>{let[S,$,O,M]=A,G=Bu(k,O,l);E(Ln(s),()=>`Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`);let j=Kc($.shape,G,S,t,n),U=tp($,G,S.shape,t,n),q=[j,U];if(M!=null){let H=Vu(M,G);q.push(H)}return q},b={x:f,filter:m,bias:g,preluActivationWeights:x},_={strides:t,pad:n,dataFormat:o,dilations:s,dimRoundingMode:a,activation:l,leakyreluAlpha:c};return i==null?Xr((A,S,$)=>{let O=D.runKernel(_s,b,_);return $([S,A,O]),d&&(O=L(O,[O.shape[1],O.shape[2],O.shape[3]])),{value:O,gradFunc:w}})(f,m):Xr((A,S,$,O)=>{let M=D.runKernel(_s,b,_);return O([S,A,M,$]),d&&(M=L(M,[M.shape[1],M.shape[2],M.shape[3]])),{value:M,gradFunc:w}})(f,m,g)}var mU=T({fusedConv2d_:pU});function fU(r,e,t,n,o,s=[1,1],a){let i=r;r.rank===3&&(i=L(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let l=e;l.rank===3&&(l=L(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let u={x:i,dy:l},c={strides:n,pad:o,dimRoundingMode:a,dilations:s,filterShape:t};return D.runKernel(Hl,u,c)}var cg=T({depthwiseConv2dNativeBackpropFilter_:fU});function dU(r,e,t,n,o,s=[1,1],a){let i=e,l=!1;e.rank===3&&(l=!0,i=L(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let u={dy:i,filter:t},c={strides:n,pad:o,dimRoundingMode:a,dilations:s,inputShape:r},p=D.runKernel(Kl,u,c);return l?L(p,[p.shape[1],p.shape[2],p.shape[3]]):p}var pg=T({depthwiseConv2dNativeBackpropInput_:dU});function hU({x:r,filter:e,strides:t,pad:n,dataFormat:o="NHWC",dilations:s=[1,1],dimRoundingMode:a,bias:i,activation:l="linear",preluActivationWeights:u,leakyreluAlpha:c}){if(ju(D.state.gradientDepth,l)===!1){let k=Cs(r,e,t,n,o,s,a);return i!=null&&(k=Q(k,i)),Gu(k,l,u,c)}let p=v(r,"x","depthwiseConv2d"),m=v(e,"filter","depthwiseConv2d"),f=p,d=!1;p.rank===3&&(d=!0,f=L(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(t,s),()=>`Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${t} and dilations '${s}'`),a!=null&&E(nt(n),()=>`Error in fused depthwiseConv2d: pad must be an integer when using dimRoundingMode ${a} but got pad ${n}.`);let h=yu(f.shape,m.shape,t,s,n,a,!0),g;i!=null&&(g=v(i,"bias","fused conv2d"),[g]=Ge(g,p),Be(h.outShape,g.shape));let x;u!=null&&(x=v(u,"prelu weights","fused depthwiseConv2d"));let w=(k,A)=>{E(Ln(s),()=>`Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${s}'`);let[S,$,O,M]=A,G=Bu(k,O,l),j=pg($.shape,G,S,t,n,s,a),U=cg($,G,S.shape,t,n,s,a);if(M!=null){let q=Vu(g,G);return[j,U,q]}return[j,U]},b={x:f,filter:m,bias:g,preluActivationWeights:x},_={strides:t,pad:n,dataFormat:o,dilations:s,dimRoundingMode:a,activation:l,leakyreluAlpha:c};return i==null?Xr((A,S,$)=>{let O=D.runKernel(ks,b,_);return $([S,A,O]),d&&(O=L(O,[O.shape[1],O.shape[2],O.shape[3]])),{value:O,gradFunc:w}})(f,m):Xr((A,S,$,O)=>{let M=D.runKernel(ks,b,_);return O([S,A,M,$]),d&&(M=L(M,[M.shape[1],M.shape[2],M.shape[3]])),{value:M,gradFunc:w}})(f,m,g)}var gU=T({fusedDepthwiseConv2d_:hU});function xU({a:r,b:e,transposeA:t=!1,transposeB:n=!1,bias:o,activation:s="linear",preluActivationWeights:a,leakyreluAlpha:i}){if(ju(D.state.gradientDepth,s)===!1){let M=je(r,e,t,n);return o!=null&&(M=Q(M,o)),Gu(M,s,a,i)}let l=v(r,"a","fused matMul"),u=v(e,"b","fused matMul");[l,u]=Ge(l,u);let c=t?l.shape[l.rank-2]:l.shape[l.rank-1],p=n?u.shape[u.rank-1]:u.shape[u.rank-2],m=t?l.shape[l.rank-1]:l.shape[l.rank-2],f=n?u.shape[u.rank-2]:u.shape[u.rank-1],d=l.shape.slice(0,-2),h=u.shape.slice(0,-2),g=ct(d),x=ct(h);E(l.rank>=2&&u.rank>=2&&l.rank===u.rank,()=>`Error in fused matMul: inputs must have the same rank of at least 2, got ranks ${l.rank} and ${u.rank}.`),E(Wr(d,h),()=>`Error in fused matMul: outer dimensions (${d}) and (${h}) of Tensors with shapes ${l.shape} and ${u.shape} must match.`),E(c===p,()=>`Error in fused matMul: inner shapes (${c}) and (${p}) of Tensors with shapes ${l.shape} and ${u.shape} and transposeA=${t} and transposeB=${n} must match.`);let w=l.shape.slice(0,-2).concat([m,f]),b=t?L(l,[g,c,m]):L(l,[g,m,c]),_=n?L(u,[x,f,p]):L(u,[x,p,f]),k;o!=null&&(k=v(o,"bias","fused matMul"),[k]=Ge(k,l),Be(w,k.shape));let A;a!=null&&(A=v(a,"prelu weights","fused matMul"));let S=(M,G)=>{let[j,U,q,H]=G,X=Bu(L(M,q.shape),q,s),ne,Y;if(!t&&!n?(ne=je(X,U,!1,!0),Y=je(j,X,!0,!1)):!t&&n?(ne=je(X,U,!1,!1),Y=je(X,j,!0,!1)):t&&!n?(ne=je(U,X,!1,!0),Y=je(j,X,!1,!1)):(ne=je(U,X,!0,!0),Y=je(X,j,!0,!0)),o!=null){let re=Vu(H,X);return[ne,Y,re]}else return[ne,Y]},$={a:b,b:_,bias:k,preluActivationWeights:A},O={transposeA:t,transposeB:n,activation:s,leakyreluAlpha:i};return o==null?Xr((G,j,U)=>{let q=D.runKernel(ws,$,O);return U([G,j,q]),{value:L(q,w),gradFunc:S}})(b,_):Xr((G,j,U,q)=>{let H=D.runKernel(ws,$,O);return q([G,j,H,U]),{value:L(H,w),gradFunc:S}})(b,_,k)}var yU=T({fusedMatMul_:xU});function bU(r){return tf(r,.54,.46)}var tS=T({hammingWindow_:bU});function wU(r){return tf(r,.5,.5)}var mg=T({hannWindow_:wU});function _U(r,e,t,n=!1,o=0){let s=0,a=[];for(;s+e<=r.size;)a.push(Re(r,s,e)),s+=t;if(n)for(;s`Error in cropAndResize: image must be rank 4,but got rank ${a.rank}.`),E(i.rank===2&&i.shape[1]===4,()=>`Error in cropAndResize: boxes must be have size [${u},4] but had shape ${i.shape}.`),E(l.rank===1&&l.shape[0]===u,()=>`Error in cropAndResize: boxInd must be have size [${u}] but had shape ${i.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:a,boxes:i,boxInd:l},p={method:o,extrapolationValue:s,cropSize:n};return D.runKernel(ei,c,p)}var nS=T({cropAndResize_:vU});function CU(r){let e=v(r,"image","flipLeftRight","float32");E(e.rank===4,()=>`Error in flipLeftRight: image must be rank 4,but got rank ${e.rank}.`);let t={image:e};return D.runKernel(ii,t,{})}var oS=T({flipLeftRight_:CU});function IU(r,e,t=0,n=.5){let o=v(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},a={radians:e,fillValue:t,center:n};return D.runKernel(Di,s,a)}var sS=T({rotateWithOffset_:IU});function jo(r,e,t,n,o,s){n==null&&(n=.5),o==null&&(o=Number.NEGATIVE_INFINITY),s==null&&(s=0);let a=r.shape[0];return t=Math.min(t,a),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(e.rank===1,()=>"scores must be a 1D tensor"),E(e.shape[0]===a,()=>`scores has incompatible shape with boxes. Expected ${a}, but was ${e.shape[0]}`),E(0<=s&&s<=1,()=>`softNmsSigma must be in [0, 1], but was '${s}'`),{maxOutputSize:t,iouThreshold:n,scoreThreshold:o,softNmsSigma:s}}function NU(r,e,t,n=.5,o=Number.NEGATIVE_INFINITY){let s=v(r,"boxes","nonMaxSuppression"),a=v(e,"scores","nonMaxSuppression"),i=jo(s,a,t,n,o);t=i.maxOutputSize,n=i.iouThreshold,o=i.scoreThreshold;let l={maxOutputSize:t,iouThreshold:n,scoreThreshold:o};return D.runKernel(yi,{boxes:s,scores:a},l)}var iS=T({nonMaxSuppression_:NU});function aS(r,e,t){let n=SU(r,e,t),o=n<0?-(n+1):n;r.splice(o,0,e)}function SU(r,e,t){return AU(r,e,t||TU)}function TU(r,e){return r>e?1:r>>1);let i=t(e,r[s]);i>0?n=s+1:(o=s,a=!i)}return a?n:-n-1}function r_(r,e,t,n,o){return t_(r,e,t,n,o,0)}function n_(r,e,t,n,o,s){return t_(r,e,t,n,o,0,!1,s,!0)}function o_(r,e,t,n,o,s){return t_(r,e,t,n,o,s,!0)}function t_(r,e,t,n,o,s,a=!1,i=!1,l=!1){let u=[];for(let g=0;go&&u.push({score:e[g],boxIndex:g,suppressBeginIndex:0});u.sort(lS);let c=s>0?-.5/s:0,p=[],m=[];for(;p.length0;){let g=u.pop(),{score:x,boxIndex:w,suppressBeginIndex:b}=g;if(x=b;--k){let A=EU(r,w,p[k]);if(A>=n){_=!0;break}if(g.score=g.score*DU(n,c,A),g.score<=o)break}g.suppressBeginIndex=p.length,_||(g.score===x?(p.push(w),m.push(g.score)):g.score>o&&aS(u,g,lS))}let f=p.length,d=t-f;i&&d>0&&(p.push(...new Array(d).fill(0)),m.push(...new Array(d).fill(0)));let h={selectedIndices:p};return a&&(h.selectedScores=m),l&&(h.validOutputs=f),h}function EU(r,e,t){let n=r.subarray(e*4,e*4+4),o=r.subarray(t*4,t*4+4),s=Math.min(n[0],n[2]),a=Math.min(n[1],n[3]),i=Math.max(n[0],n[2]),l=Math.max(n[1],n[3]),u=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=(i-s)*(l-a),d=(p-u)*(m-c);if(f<=0||d<=0)return 0;let h=Math.max(s,u),g=Math.max(a,c),x=Math.min(i,p),w=Math.min(l,m),b=Math.max(x-h,0)*Math.max(w-g,0);return b/(f+d-b)}function DU(r,e,t){let n=Math.exp(e*t*t);return t<=r?n:0}function lS(r,e){return r.score-e.score||r.score===e.score&&e.boxIndex-r.boxIndex}async function $U(r,e,t,n=.5,o=Number.NEGATIVE_INFINITY){let s=v(r,"boxes","nonMaxSuppressionAsync"),a=v(e,"scores","nonMaxSuppressionAsync"),i=jo(s,a,t,n,o);t=i.maxOutputSize,n=i.iouThreshold,o=i.scoreThreshold;let l=await Promise.all([s.data(),a.data()]),u=l[0],c=l[1],{selectedIndices:p}=r_(u,c,t,n,o);return s!==r&&s.dispose(),a!==e&&a.dispose(),Gt(p,"int32")}var uS=$U;function RU(r,e,t,n=.5,o=Number.NEGATIVE_INFINITY,s=0){let a=v(r,"boxes","nonMaxSuppression"),i=v(e,"scores","nonMaxSuppression"),l=jo(a,i,t,n,o,s);t=l.maxOutputSize,n=l.iouThreshold,o=l.scoreThreshold,s=l.softNmsSigma;let u={boxes:a,scores:i},c={maxOutputSize:t,iouThreshold:n,scoreThreshold:o,softNmsSigma:s},p=D.runKernel(wi,u,c);return{selectedIndices:p[0],selectedScores:p[1]}}var cS=T({nonMaxSuppressionWithScore_:RU});async function FU(r,e,t,n=.5,o=Number.NEGATIVE_INFINITY,s=0){let a=v(r,"boxes","nonMaxSuppressionAsync"),i=v(e,"scores","nonMaxSuppressionAsync"),l=jo(a,i,t,n,o,s);t=l.maxOutputSize,n=l.iouThreshold,o=l.scoreThreshold,s=l.softNmsSigma;let u=await Promise.all([a.data(),i.data()]),c=u[0],p=u[1],{selectedIndices:m,selectedScores:f}=o_(c,p,t,n,o,s);return a!==r&&a.dispose(),i!==e&&i.dispose(),{selectedIndices:Gt(m,"int32"),selectedScores:Gt(f)}}var pS=FU;function OU(r,e,t,n=.5,o=Number.NEGATIVE_INFINITY,s=!1){let a=v(r,"boxes","nonMaxSuppression"),i=v(e,"scores","nonMaxSuppression"),l=jo(a,i,t,n,o,null),u=l.maxOutputSize,c=l.iouThreshold,p=l.scoreThreshold,m={boxes:a,scores:i},f={maxOutputSize:u,iouThreshold:c,scoreThreshold:p,padToMaxOutputSize:s},d=D.runKernel(bi,m,f);return{selectedIndices:d[0],validOutputs:d[1]}}var mS=T({nonMaxSuppressionPadded_:OU});async function PU(r,e,t,n=.5,o=Number.NEGATIVE_INFINITY,s=!1){let a=v(r,"boxes","nonMaxSuppressionAsync"),i=v(e,"scores","nonMaxSuppressionAsync"),l=jo(a,i,t,n,o,null),u=l.maxOutputSize,c=l.iouThreshold,p=l.scoreThreshold,[m,f]=await Promise.all([a.data(),i.data()]),{selectedIndices:d,validOutputs:h}=n_(m,f,u,c,p,s);return a!==r&&a.dispose(),i!==e&&i.dispose(),{selectedIndices:Gt(d,"int32"),validOutputs:ue(h,"int32")}}var fS=PU;function MU(r,e,t=!1,n=!1){let o=v(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(e.length===2,()=>`Error in resizeBilinear: new shape must 2D, but got shape ${e}.`),E(n===!1||t===!1,()=>"Error in resizeBilinear: If halfPixelCenters is true, alignCorners must be false.");let s=o,a=!1;o.rank===3&&(a=!0,s=L(o,[1,o.shape[0],o.shape[1],o.shape[2]]));let[]=e,i={images:s},l={alignCorners:t,halfPixelCenters:n,size:e},u=D.runKernel(vo,i,l);return a?L(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var dg=T({resizeBilinear_:MU});function LU(r,e,t=!1,n=!1){let o=v(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(e.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${e}.`),E(o.dtype==="float32"||o.dtype==="int32",()=>"`images` must have `int32` or `float32` as dtype"),E(n===!1||t===!1,()=>"Error in resizeNearestNeighbor: If halfPixelCenters is true, alignCorners must be false.");let s=o,a=!1;o.rank===3&&(a=!0,s=L(o,[1,o.shape[0],o.shape[1],o.shape[2]]));let[]=e,i={images:s},l={alignCorners:t,halfPixelCenters:n,size:e},u=D.runKernel(pa,i,l);return a?L(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var hg=T({resizeNearestNeighbor_:LU});function zU(r,e,t){E(e%1==0,()=>`bandPart(): numLower must be an integer, got ${e}.`),E(t%1==0,()=>`bandPart(): numUpper must be an integer, got ${t}.`);let n=v(r,"a","bandPart");E(n.rank>=2,()=>`bandPart(): Rank must be at least 2, got ${n.rank}.`);let o=n.shape,[s,a]=n.shape.slice(-2);if(!(e<=s))throw new Error(`bandPart(): numLower (${e}) must not be greater than the number of rows (${s}).`);if(!(t<=a))throw new Error(`bandPart(): numUpper (${t}) must not be greater than the number of columns (${a}).`);e<0&&(e=s),t<0&&(t=a);let i=L(Jc(0,s,1,"int32"),[-1,1]),l=Jc(0,a,1,"int32"),u=ce(i,l),c=hr(Bn(u,ue(+e,"int32")),an(u,ue(-t,"int32"))),p=gt([s,a],n.dtype);return L(Vt(pr(L(n,[-1,s,a])).map(m=>$t(c,m,p))),o)}var dS=T({bandPart_:zU});function BU(r){let e;if(Array.isArray(r)){e=!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`Gram-Schmidt: Non-unique lengths found in the input vectors: (${r[s].shape[0]} vs. ${o})`)}else e=!0,r=cr(r,r.shape[0],0).map(o=>Cn(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 t=[],n=r;for(let o=0;o{let s=n[o];if(o>0)for(let a=0;a=2,()=>`qr() requires input tensor to have a rank >= 2, but got rank ${r.rank}`),r.rank===2)return gS(r,e);{let t=r.shape.slice(0,r.shape.length-2).reduce((l,u)=>l*u),n=pr(L(r,[t,r.shape[r.shape.length-2],r.shape[r.shape.length-1]]),0),o=[],s=[];n.forEach(l=>{let[u,c]=gS(l,e);o.push(u),s.push(c)});let a=L(Vt(o,0),r.shape),i=L(Vt(s,0),r.shape);return[a,i]}}function gS(r,e=!1){return D.tidy(()=>{E(r.shape.length===2,()=>`qr2d() requires a 2D Tensor, but got a ${r.shape.length}D Tensor.`);let t=r.shape[0],n=r.shape[1],o=Xc(t),s=Pn(r),a=Li([[1]],[1,1]),i=Pn(a),l=t>=n?n:t;for(let u=0;u{let f=Re(s,[u,u],[t-u,1]),d=zu(f),h=Re(s,[u,u],[1,1]),g=$t(er(h,0),Li([[-1]]),Li([[1]])),x=ce(h,P(g,d)),w=me(f,x);w.shape[0]===1?i=Pn(a):i=Ze([a,Re(w,[1,0],[w.shape[0]-1,w.shape[1]])],0);let b=qe(me(je(g,x),d)),_=Re(s,[u,0],[t-u,n]),k=P(b,i),A=Ue(i);if(u===0)s=ce(_,je(k,je(A,_)));else{let O=ce(_,je(k,je(A,_)));s=Ze([Re(s,[0,0],[u,n]),O],0)}let S=Ue(k),$=Re(o,[0,u],[t,o.shape[1]-u]);if(u===0)o=ce($,je(je($,i),S));else{let O=ce($,je(je($,i),S));o=Ze([Re(o,[0,0],[t,u]),O],1)}return[i,s,o]}),Ae([c,p,m])}return!e&&t>n&&(o=Re(o,[0,0],[t,n]),s=Re(s,[0,0],[n,n])),[o,s]})}var xS=T({qr_:VU});var jt;(function(r){r[r.NONE=0]="NONE",r[r.MEAN=1]="MEAN",r[r.SUM=2]="SUM",r[r.SUM_BY_NONZERO_WEIGHTS=3]="SUM_BY_NONZERO_WEIGHTS"})(jt||(jt={}));function GU(r,e,t=jt.SUM_BY_NONZERO_WEIGHTS){let n=v(r,"losses","computeWeightedLoss"),o=null;e!=null&&(o=v(e,"weights","computeWeightedLoss"));let s=o==null?n:P(n,o);if(t===jt.NONE)return s;if(t===jt.SUM)return ge(s);if(t===jt.MEAN){if(o==null)return ht(s);{let a=n.size/o.size,i=me(ge(s),ge(o));return a>1?me(i,ue(a)):i}}if(t===jt.SUM_BY_NONZERO_WEIGHTS){if(o==null)return me(ge(s),ue(n.size));{let a=P(o,Nr(n.shape)),i=oe(ge(Vo(a,ue(0))),"float32");return me(ge(s),i)}}throw Error(`Unknown reduction: ${t}`)}var Tr=T({computeWeightedLoss_:GU});function jU(r,e,t,n=jt.SUM_BY_NONZERO_WEIGHTS){let o=v(r,"labels","absoluteDifference"),s=v(e,"predictions","absoluteDifference"),a=null;t!=null&&(a=v(t,"weights","absoluteDifference")),Ct(o.shape,s.shape,"Error in absoluteDifference: ");let i=Nt(ce(o,s));return Tr(i,a,n)}var yS=T({absoluteDifference_:jU});function WU(r,e,t,n,o=jt.SUM_BY_NONZERO_WEIGHTS){let s=v(r,"labels","cosineDistance"),a=v(e,"predictions","cosineDistance"),i=null;n!=null&&(i=v(n,"weights","cosineDistance")),Ct(s.shape,a.shape,"Error in cosineDistance: ");let l=ue(1),u=ce(l,ge(P(s,a),t,!0));return Tr(u,i,o)}var bS=T({cosineDistance_:WU});function UU(r,e,t,n=jt.SUM_BY_NONZERO_WEIGHTS){let o=v(r,"labels","hingeLoss"),s=v(e,"predictions","hingeLoss"),a=null;t!=null&&(a=v(t,"weights","hingeLoss")),Ct(o.shape,s.shape,"Error in hingeLoss: ");let i=ue(1);o=ce(P(ue(2),o),i);let l=Sr(ce(i,P(o,s)));return Tr(l,a,n)}var wS=T({hingeLoss_:UU});function qU(r,e,t,n=1,o=jt.SUM_BY_NONZERO_WEIGHTS){let s=v(r,"labels","huberLoss"),a=v(e,"predictions","huberLoss"),i=null;t!=null&&(i=v(t,"weights","huberLoss")),Ct(s.shape,a.shape,"Error in huberLoss: ");let l=ue(n),u=Nt(ce(a,s)),c=Ts(u,l),p=ce(u,c),m=Q(P(ue(.5),Oe(c)),P(l,p));return Tr(m,i,o)}var _S=T({huberLoss_:qU});function HU(r,e,t,n=1e-7,o=jt.SUM_BY_NONZERO_WEIGHTS){let s=v(r,"labels","logLoss"),a=v(e,"predictions","logLoss"),i=null;t!=null&&(i=v(t,"weights","logLoss")),Ct(s.shape,a.shape,"Error in logLoss: ");let l=ue(1),u=ue(n),c=qe(P(s,lr(Q(a,u)))),p=P(ce(l,s),lr(Q(ce(l,a),u))),m=ce(c,p);return Tr(m,i,o)}var kS=T({logLoss_:HU});function KU(r,e,t,n=jt.SUM_BY_NONZERO_WEIGHTS){let o=v(r,"labels","meanSquaredError"),s=v(e,"predictions","meanSquaredError"),a=null;t!=null&&(a=v(t,"weights","meanSquaredError")),Ct(o.shape,s.shape,"Error in meanSquaredError: ");let i=Mu(o,s);return Tr(i,a,n)}var vS=T({meanSquaredError_:KU});function XU(r,e){let t=v(r,"labels","sigmoidCrossEntropyWithLogits"),n=v(e,"logits","sigmoidCrossEntropyWithLogits");Ct(t.shape,n.shape,"Error in sigmoidCrossEntropyWithLogits: ");let o=Sr(n),s=P(n,t),a=Nu(Zt(qe(Nt(n))));return Q(ce(o,s),a)}function YU(r,e,t,n=0,o=jt.SUM_BY_NONZERO_WEIGHTS){let s=v(r,"multiClassLabels","sigmoidCrossEntropy"),a=v(e,"logits","sigmoidCrossEntropy"),i=null;if(t!=null&&(i=v(t,"weights","sigmoidCrossEntropy")),Ct(s.shape,a.shape,"Error in sigmoidCrossEntropy: "),n>0){let u=ue(n),c=ue(1),p=ue(.5);s=Q(P(s,ce(c,u)),P(p,u))}let l=XU(s,a);return Tr(l,i,o)}var CS=T({sigmoidCrossEntropy_:YU});function ZU(r,e,t=-1){if(t===-1&&(t=e.rank-1),t!==e.rank-1)throw Error(`Softmax cross entropy along a non-last dimension is not yet supported. Labels / logits was rank ${e.rank} and dim was ${t}`);return Xr((o,s,a)=>{let l=zm(s,[t],!0),u=ce(oe(s,"float32"),l);a([o,u]);let c=qe(P(u,o));return{value:ge(c,[t]),gradFunc:(f,d)=>{let[h,g]=d,x=Bo(f.shape,[t]);return[P(L(f,x),ce(oe(h,"float32"),Zt(g))),P(L(f,x),ce(Zt(g),oe(h,"float32")))]}}})(r,e)}function JU(r,e,t,n=0,o=jt.SUM_BY_NONZERO_WEIGHTS){let s=v(r,"onehotLabels","softmaxCrossEntropy"),a=v(e,"logits","softmaxCrossEntropy"),i=null;if(t!=null&&(i=v(t,"weights","softmaxCrossEntropy")),Ct(s.shape,a.shape,"Error in softmaxCrossEntropy: "),n>0){let u=ue(n),c=ue(1),p=ue(s.shape[1]);s=Q(P(s,ce(c,u)),me(u,p))}let l=ZU(s,a);return Tr(l,i,o)}var IS=T({softmaxCrossEntropy_:JU});var QU={fft:Ea,ifft:Mi,rfft:Da,irfft:Pu},eq={hammingWindow:tS,hannWindow:mg,frame:fg,stft:rS},Ds={flipLeftRight:oS,resizeNearestNeighbor:hg,resizeBilinear:dg,rotateWithOffset:sS,cropAndResize:nS,nonMaxSuppression:iS,nonMaxSuppressionAsync:uS,nonMaxSuppressionWithScore:cS,nonMaxSuppressionWithScoreAsync:pS,nonMaxSuppressionPadded:mS,nonMaxSuppressionPaddedAsync:fS},s_={bandPart:dS,gramSchmidt:hS,qr:xS},tq={absoluteDifference:yS,computeWeightedLoss:Tr,cosineDistance:bS,hingeLoss:wS,huberLoss:_S,logLoss:kS,meanSquaredError:vS,sigmoidCrossEntropy:CS,softmaxCrossEntropy:IS};var Pr=class extends Qh{minimize(e,t=!1,n){let{value:o,grads:s}=this.computeGradients(e,n);if(n!=null){let a=n.map(i=>({name:i.name,tensor:s[i.name]}));this.applyGradients(a)}else this.applyGradients(s);return Ae(s),t?o:(o.dispose(),null)}get iterations(){return this.iterations_==null&&(this.iterations_=0),this.iterations_}incrementIterations(){this.iterations_=this.iterations+1}computeGradients(e,t){return og(e,t)}dispose(){this.iterations_!=null&&Ae(this.iterations_)}async saveIterations(){return this.iterations_==null&&(this.iterations_=0),{name:"iter",tensor:ue(this.iterations_,"int32")}}async getWeights(){throw new Error("getWeights() is not implemented for this optimizer yet.")}async setWeights(e){throw new Error(`setWeights() is not implemented for this optimizer class ${this.getClassName()}`)}async extractIterations(e){return this.iterations_=(await e[0].tensor.data())[0],e.slice(1)}};Object.defineProperty(Pr,Symbol.hasInstance,{value:r=>r.minimize!=null&&r.computeGradients!=null&&r.applyGradients!=null});var rp=class extends Pr{constructor(e,t,n=null){super();this.learningRate=e,this.rho=t,this.epsilon=n,this.accumulatedGrads=[],this.accumulatedUpdates=[],n==null&&(this.epsilon=D.backend.epsilon())}applyGradients(e){(Array.isArray(e)?e.map(n=>n.name):Object.keys(e)).forEach((n,o)=>{let s=D.registeredVariables[n],a=!1;this.accumulatedGrads[o]==null&&(this.accumulatedGrads[o]={originalName:`${n}/accum_grad`,variable:V(()=>Ce(s).variable(a))}),this.accumulatedUpdates[o]==null&&(this.accumulatedUpdates[o]={originalName:`${n}/accum_var`,variable:V(()=>Ce(s).variable(a))});let i=Array.isArray(e)?e[o].tensor:e[n];if(i==null)return;let l=this.accumulatedGrads[o].variable,u=this.accumulatedUpdates[o].variable;V(()=>{let c=Q(P(l,this.rho),P(Oe(i),1-this.rho)),p=P(me(xt(Q(u,this.epsilon)),xt(Q(l,this.epsilon))),i),m=Q(P(u,this.rho),P(Oe(p),1-this.rho));l.assign(c),u.assign(m);let f=Q(P(p,-this.learningRate),s);s.assign(f)})}),this.incrementIterations()}dispose(){this.accumulatedUpdates!=null&&(Ae(this.accumulatedGrads.map(e=>e.variable)),Ae(this.accumulatedUpdates.map(e=>e.variable)))}async getWeights(){let e=[...this.accumulatedGrads,...this.accumulatedUpdates];return[await this.saveIterations()].concat(e.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=e.length/2,n=!1;this.accumulatedGrads=e.slice(0,t).map(o=>({originalName:o.name,variable:o.tensor.variable(n)})),this.accumulatedUpdates=e.slice(t,t*2).map(o=>({originalName:o.name,variable:o.tensor.variable(n)}))}getConfig(){return{learningRate:this.learningRate,rho:this.rho,epsilon:this.epsilon}}static fromConfig(e,t){return new e(t.learningRate,t.rho,t.epsilon)}};rp.className="Adadelta";sn(rp);var np=class extends Pr{constructor(e,t=.1){super();this.learningRate=e,this.initialAccumulatorValue=t,this.accumulatedGrads=[]}applyGradients(e){(Array.isArray(e)?e.map(n=>n.name):Object.keys(e)).forEach((n,o)=>{let s=D.registeredVariables[n];if(this.accumulatedGrads[o]==null){let l=!1;this.accumulatedGrads[o]={originalName:`${n}/accumulator`,variable:V(()=>va(s.shape,this.initialAccumulatorValue).variable(l))}}let a=Array.isArray(e)?e[o].tensor:e[n];if(a==null)return;let i=this.accumulatedGrads[o].variable;V(()=>{let l=Q(i,Oe(a));i.assign(l);let u=Q(P(me(a,xt(Q(l,D.backend.epsilon()))),-this.learningRate),s);s.assign(u)})}),this.incrementIterations()}dispose(){this.accumulatedGrads!=null&&Ae(this.accumulatedGrads.map(e=>e.variable))}async getWeights(){return[await this.saveIterations()].concat(this.accumulatedGrads.map(e=>({name:e.originalName,tensor:e.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=!1;this.accumulatedGrads=e.map(n=>({originalName:n.name,variable:n.tensor.variable(t)}))}getConfig(){return{learningRate:this.learningRate,initialAccumulatorValue:this.initialAccumulatorValue}}static fromConfig(e,t){return new e(t.learningRate,t.initialAccumulatorValue)}};np.className="Adagrad";sn(np);var op=class extends Pr{constructor(e,t,n,o=null){super();this.learningRate=e,this.beta1=t,this.beta2=n,this.epsilon=o,this.accumulatedFirstMoment=[],this.accumulatedSecondMoment=[],V(()=>{this.accBeta1=ue(t).variable(),this.accBeta2=ue(n).variable()}),o==null&&(this.epsilon=D.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(n=>n.name):Object.keys(e);V(()=>{let n=ce(1,this.accBeta1),o=ce(1,this.accBeta2);t.forEach((s,a)=>{let i=D.registeredVariables[s],l=!1;this.accumulatedFirstMoment[a]==null&&(this.accumulatedFirstMoment[a]={originalName:`${s}/m`,variable:V(()=>Ce(i).variable(l))}),this.accumulatedSecondMoment[a]==null&&(this.accumulatedSecondMoment[a]={originalName:`${s}/v`,variable:V(()=>Ce(i).variable(l))});let u=Array.isArray(e)?e[a].tensor:e[s];if(u==null)return;let c=this.accumulatedFirstMoment[a].variable,p=this.accumulatedSecondMoment[a].variable,m=Q(P(c,this.beta1),P(u,1-this.beta1)),f=Q(P(p,this.beta2),P(Oe(u),1-this.beta2)),d=me(m,n),h=me(f,o);c.assign(m),p.assign(f);let g=Q(P(me(d,Q(xt(h),this.epsilon)),-this.learningRate),i);i.assign(g)}),this.accBeta1.assign(P(this.accBeta1,this.beta1)),this.accBeta2.assign(P(this.accBeta2,this.beta2))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.accBeta2.dispose(),this.accumulatedFirstMoment!=null&&Ae(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedSecondMoment!=null&&Ae(this.accumulatedSecondMoment.map(e=>e.variable))}async getWeights(){let e=[...this.accumulatedFirstMoment,...this.accumulatedSecondMoment];return[await this.saveIterations()].concat(e.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(e){e=await this.extractIterations(e),V(()=>{this.accBeta1.assign(Or(this.beta1,this.iterations_+1)),this.accBeta2.assign(Or(this.beta2,this.iterations_+1))});let t=e.length/2,n=!1;this.accumulatedFirstMoment=e.slice(0,t).map(o=>({originalName:o.name,variable:o.tensor.variable(n)})),this.accumulatedSecondMoment=e.slice(t,t*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(e,t){return new e(t.learningRate,t.beta1,t.beta2,t.epsilon)}};op.className="Adam";sn(op);var sp=class extends Pr{constructor(e,t,n,o=null,s=0){super();this.learningRate=e,this.beta1=t,this.beta2=n,this.epsilon=o,this.decay=s,this.accumulatedFirstMoment=[],this.accumulatedWeightedInfNorm=[],V(()=>{this.iteration=ue(0).variable(),this.accBeta1=ue(t).variable()}),o==null&&(this.epsilon=D.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(n=>n.name):Object.keys(e);V(()=>{let n=ce(1,this.accBeta1),o=me(-this.learningRate,Q(P(this.iteration,this.decay),1));t.forEach((s,a)=>{let i=D.registeredVariables[s],l=!1;this.accumulatedFirstMoment[a]==null&&(this.accumulatedFirstMoment[a]={originalName:`${s}/m`,variable:Ce(i).variable(l)}),this.accumulatedWeightedInfNorm[a]==null&&(this.accumulatedWeightedInfNorm[a]={originalName:`${s}/v`,variable:Ce(i).variable(l)});let u=Array.isArray(e)?e[a].tensor:e[s];if(u==null)return;let c=this.accumulatedFirstMoment[a].variable,p=this.accumulatedWeightedInfNorm[a].variable,m=Q(P(c,this.beta1),P(u,1-this.beta1)),f=P(p,this.beta2),d=Nt(u),h=Yr(f,d);c.assign(m),p.assign(h);let g=Q(P(me(o,n),me(m,Q(h,this.epsilon))),i);i.assign(g)}),this.iteration.assign(Q(this.iteration,1)),this.accBeta1.assign(P(this.accBeta1,this.beta1))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.iteration.dispose(),this.accumulatedFirstMoment!=null&&Ae(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedWeightedInfNorm!=null&&Ae(this.accumulatedWeightedInfNorm.map(e=>e.variable))}async getWeights(){throw new Error("getWeights() is not implemented for Adamax yet.")}async setWeights(e){throw new Error("setWeights() is not implemented for Adamax yet.")}getConfig(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon,decay:this.decay}}static fromConfig(e,t){return new e(t.learningRate,t.beta1,t.beta2,t.epsilon,t.decay)}};sp.className="Adamax";sn(sp);var ul=class extends Pr{constructor(e){super();this.learningRate=e,this.setLearningRate(e)}applyGradients(e){(Array.isArray(e)?e.map(n=>n.name):Object.keys(e)).forEach((n,o)=>{let s=Array.isArray(e)?e[o].tensor:e[n];if(s==null)return;let a=D.registeredVariables[n];V(()=>{let i=Q(P(this.c,s),a);a.assign(i)})}),this.incrementIterations()}setLearningRate(e){this.learningRate=e,this.c!=null&&this.c.dispose(),this.c=Dt(ue(-e))}dispose(){this.c.dispose()}async getWeights(){return[await this.saveIterations()]}async setWeights(e){if(e=await this.extractIterations(e),e.length!==0)throw new Error("SGD optimizer does not have settable weights.")}getConfig(){return{learningRate:this.learningRate}}static fromConfig(e,t){return new e(t.learningRate)}};ul.className="SGD";sn(ul);var ip=class extends ul{constructor(e,t,n=!1){super(e);this.learningRate=e,this.momentum=t,this.useNesterov=n,this.accumulations=[],this.m=ue(this.momentum)}applyGradients(e){(Array.isArray(e)?e.map(n=>n.name):Object.keys(e)).forEach((n,o)=>{let s=D.registeredVariables[n];if(this.accumulations[o]==null){let l=!1;this.accumulations[o]={originalName:`${n}/momentum`,variable:V(()=>Ce(s).variable(l))}}let a=this.accumulations[o].variable,i=Array.isArray(e)?e[o].tensor:e[n];i!=null&&V(()=>{let l,u=Q(P(this.m,a),i);this.useNesterov?l=Q(P(this.c,Q(i,P(u,this.m))),s):l=Q(P(this.c,u),s),a.assign(u),s.assign(l)})}),this.incrementIterations()}dispose(){this.m.dispose(),this.accumulations!=null&&Ae(this.accumulations.map(e=>e.variable))}setMomentum(e){this.momentum=e}async getWeights(){return[await this.saveIterations()].concat(this.accumulations.map(e=>({name:e.originalName,tensor:e.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=!1;this.accumulations=e.map(n=>({originalName:n.name,variable:n.tensor.variable(t)}))}getConfig(){return{learningRate:this.learningRate,momentum:this.momentum,useNesterov:this.useNesterov}}static fromConfig(e,t){return new e(t.learningRate,t.momentum,t.useNesterov)}};ip.className="Momentum";sn(ip);var ap=class extends Pr{constructor(e,t=.9,n=0,o=null,s=!1){super();if(this.learningRate=e,this.decay=t,this.momentum=n,this.epsilon=o,this.accumulatedMeanSquares=[],this.accumulatedMoments=[],this.accumulatedMeanGrads=[],this.centered=s,o==null&&(this.epsilon=D.backend.epsilon()),e==null)throw new Error("learningRate for RMSPropOptimizer must be defined.")}applyGradients(e){(Array.isArray(e)?e.map(n=>n.name):Object.keys(e)).forEach((n,o)=>{let s=D.registeredVariables[n],a=!1;this.accumulatedMeanSquares[o]==null&&(this.accumulatedMeanSquares[o]={originalName:`${n}/rms`,variable:V(()=>Ce(s).variable(a))}),this.accumulatedMoments[o]==null&&(this.accumulatedMoments[o]={originalName:`${n}/momentum`,variable:V(()=>Ce(s).variable(a))}),this.accumulatedMeanGrads[o]==null&&this.centered&&(this.accumulatedMeanGrads[o]={originalName:`${n}/mg`,variable:V(()=>Ce(s).variable(a))});let i=Array.isArray(e)?e[o].tensor:e[n];if(i==null)return;let l=this.accumulatedMeanSquares[o].variable,u=this.accumulatedMoments[o].variable;V(()=>{let c=Q(P(l,this.decay),P(Oe(i),1-this.decay));if(this.centered){let p=this.accumulatedMeanGrads[o].variable,m=Q(P(p,this.decay),P(i,1-this.decay)),f=me(P(i,this.learningRate),xt(ce(c,Q(Oe(m),this.epsilon)))),d=Q(P(u,this.momentum),f);l.assign(c),p.assign(m),u.assign(d);let h=ce(s,d);s.assign(h)}else{let p=Q(P(l,this.decay),P(Oe(i),1-this.decay)),m=Q(P(u,this.momentum),me(P(i,this.learningRate),xt(Q(p,this.epsilon))));l.assign(p),u.assign(m);let f=ce(s,m);s.assign(f)}})}),this.incrementIterations()}dispose(){this.accumulatedMeanSquares!=null&&Ae(this.accumulatedMeanSquares.map(e=>e.variable)),this.accumulatedMeanGrads!=null&&this.centered&&Ae(this.accumulatedMeanGrads.map(e=>e.variable)),this.accumulatedMoments!=null&&Ae(this.accumulatedMoments.map(e=>e.variable))}async getWeights(){let e=[...this.accumulatedMeanSquares,...this.accumulatedMoments];return this.centered&&e.push(...this.accumulatedMeanGrads),[await this.saveIterations()].concat(e.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=this.centered?e.length/3:e.length/2,n=!1;this.accumulatedMeanSquares=e.slice(0,t).map(o=>({originalName:o.name,variable:o.tensor.variable(n)})),this.accumulatedMoments=e.slice(t,t*2).map(o=>({originalName:o.name,variable:o.tensor.variable(n)})),this.centered&&(this.accumulatedMeanGrads=e.slice(t*2,t*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(e,t){return new e(t.learningRate,t.decay,t.momentum,t.epsilon,t.centered)}};ap.className="RMSProp";sn(ap);var $a=class{static sgd(e){return new ul(e)}static momentum(e,t,n=!1){return new ip(e,t,n)}static rmsprop(e,t=.9,n=0,o=null,s=!1){return new ap(e,t,n,o,s)}static adam(e=.001,t=.9,n=.999,o=null){return new op(e,t,n,o)}static adadelta(e=.001,t=.95,n=null){return new rp(e,t,n)}static adamax(e=.002,t=.9,n=.999,o=null,s=0){return new sp(e,t,n,o,s)}static adagrad(e,t=.1){return new np(e,t)}};var cl={sgd:$a.sgd,momentum:$a.momentum,adadelta:$a.adadelta,adagrad:$a.adagrad,rmsprop:$a.rmsprop,adamax:$a.adamax,adam:$a.adam};var rq=(()=>typeof requestAnimationFrame!="undefined"?requestAnimationFrame:typeof setImmediate!="undefined"?setImmediate:r=>r())();function rf(){return new Promise(r=>rq(()=>r()))}var N={};Ke(N,{ERF_A1:()=>fq,ERF_A2:()=>dq,ERF_A3:()=>hq,ERF_A4:()=>gq,ERF_A5:()=>xq,ERF_P:()=>mq,PARALLELIZE_THRESHOLD:()=>gg,SELU_SCALE:()=>a_,SELU_SCALEALPHA:()=>i_,applyActivation:()=>Gu,assertAndGetBroadcastShape:()=>Be,assertAxesAreInnerMostDims:()=>aW,assertParamsConsistent:()=>nq,assignToTypedArray:()=>Iq,axesAreInnerMostDims:()=>Rw,calculateShapes:()=>yN,combineLocations:()=>PN,complexWithEvenIndex:()=>kq,complexWithOddIndex:()=>vq,computeConv2DInfo:()=>yu,computeConv3DInfo:()=>FN,computeDefaultPad:()=>xw,computeDilation2DInfo:()=>$G,computeOptimalWindowSize:()=>sq,computeOutAndReduceShapes:()=>Fw,computeOutShape:()=>oq,computePool2DInfo:()=>hw,computePool3DInfo:()=>RG,convertConv2DDataFormat:()=>RN,eitherStridesOrDilationsAreOne:()=>_r,expandShapeToKeepDim:()=>Bo,exponent:()=>Sq,exponents:()=>Nq,fromStringArrayToUint8:()=>Rq,fromUint8ToStringArray:()=>$q,getAxesPermutation:()=>Ow,getBroadcastDims:()=>vj,getComplexWithIndex:()=>Cq,getFusedBiasGradient:()=>Vu,getFusedDyActivation:()=>Bu,getImageCenter:()=>iq,getInnerMostAxes:()=>lW,getPermuted:()=>lq,getReductionAxes:()=>kt,getReshaped:()=>aq,getReshapedPermuted:()=>uq,getSliceBeginCoords:()=>cq,getSliceSize:()=>pq,getUndoAxesPermutation:()=>Lm,log:()=>bq,mergeRealAndImagArrays:()=>wq,prepareAndValidate:()=>xN,prepareSplitSize:()=>Tq,segment_util:()=>NS,shouldFuse:()=>ju,slice_util:()=>sr,splitRealAndImagArrays:()=>_q,tupleValuesAreOne:()=>Ln,upcastType:()=>dr,validateInput:()=>Zh,validateUpdateShape:()=>lw,warn:()=>yq});function nq(r,e){let t=r[0].length;r.forEach((o,s)=>{E(o.length===t,()=>`Error in concat${t}D: rank of tensors[${s}] must be the same as the rank of the rest (${t})`)}),E(e>=0&&e`Error in concat${t}D: axis must be between 0 and ${t-1}.`);let n=r[0];r.forEach((o,s)=>{for(let a=0;a`Error in concat${t}D: Shape of tensors[${s}] (${o}) does not match the shape of the rest (${n}) along the non-concatenated axis ${s}.`)})}function oq(r,e){let t=r[0].slice();for(let n=1;n=e*2+1||a%2==1?s.push(a):o.push(a);n.push(...o),n.push(0),n.push(...s)}return n}function uq(r,e,t,n=!0){let o=[];n?o.push(r[0]/t):o.push(r[0]*t);for(let s=1;s"Number of splits must evenly divide the axis."),n=new Array(e).fill(r.shape[t]/e);else{let o=e.reduce((a,i)=>(i===-1&&(a+=1),a),0);E(o<=1,()=>"There should be only one negative value in split array.");let s=e.indexOf(-1);if(s!==-1){let a=e.reduce((i,l)=>l>0?i+l:i);e[s]=r.shape[t]-a}E(r.shape[t]===e.reduce((a,i)=>a+i),()=>"The sum of sizes must match the size of the axis dimension."),n=e}return n}var NS={};Ke(NS,{collectGatherOpShapeInfo:()=>Dq,computeOutShape:()=>Eq,segOpComputeOptimalWindowSize:()=>Aq});function Aq(r,e){let t=!1,n;for(r<=gg?(n=r,t=!0):n=Dc(r,Math.floor(Math.sqrt(r)));!t;)n>e||n===r?t=!0:n=Dc(r,n+1);return n}function Eq(r,e,t){let n=[],o=r.length;for(let s=0;so))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(tzc(e))}catch(e){throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${e}`)}}function Rq(r){return r.map(e=>tl(e))}var Ar={};Ke(Ar,{nonMaxSuppressionV3Impl:()=>r_,nonMaxSuppressionV4Impl:()=>n_,nonMaxSuppressionV5Impl:()=>o_,whereImpl:()=>Yw});function ee(r,e){Array.isArray(r)||(r=[r]),r.forEach(t=>{t!=null&&y.assert(t.dtype!=="complex64",()=>`${e} does not support complex64 tensors in the CPU backend.`)})}var Fq=Ar.whereImpl,Wu=class extends js{constructor(){super();this.blockSize=48,this.firstUse=!0,this.data=new Za(this,Mn())}nextDataId(){return Wu.nextDataId++}write(e,t,n){this.firstUse&&(this.firstUse=!1,W().get("IS_NODE")&&N.warn(` ============================ Hi there \u{1F44B}. Looks like you are running TensorFlow.js in Node.js. To speed things up dramatically, install our node backend, which binds to TensorFlow C++, by running npm i @tensorflow/tfjs-node, or npm i @tensorflow/tfjs-node-gpu if you have CUDA. Then call require('@tensorflow/tfjs-node'); (-gpu suffix for CUDA) at the start of your program. Visit https://github.com/tensorflow/tfjs-node for more details. ============================`));let o={id:this.nextDataId()};return this.data.set(o,{values:e,dtype:n,refCount:1}),o}makeTensorInfo(e,t,n){let o;if(t==="string"&&n!=null&&n.length>0&&y.isString(n[0])){let s=n.map(a=>y.encodeString(a));o=this.write(s,e,t)}else o=this.write(n,e,t);return{dataId:o,shape:e,dtype:t}}refCount(e){return this.data.has(e)?this.data.get(e).refCount:0}incRef(e){let t=this.data.get(e);t.refCount++}decRef(e){if(this.data.has(e)){let t=this.data.get(e);t.refCount--}}move(e,t,n,o,s){this.data.set(e,{values:t,dtype:o,refCount:s})}numDataIds(){return this.data.numDataIds()}async read(e){return this.readSync(e)}readSync(e){let{dtype:t,complexTensorInfos:n}=this.data.get(e);if(t==="complex64"){let o=this.readSync(n.real.dataId),s=this.readSync(n.imag.dataId);return N.mergeRealAndImagArrays(o,s)}return this.data.get(e).values}bufferSync(e){let t=this.readSync(e.dataId),n=t;if(e.dtype==="string")try{n=t.map(o=>y.decodeString(o))}catch(o){throw new Error("Failed to decode encoded string bytes into utf-8")}return ve(e.shape,e.dtype,n)}makeOutput(e,t,n){let o=this.write(e,t,n);return Mn().makeTensorFromDataId(o,t,n,this)}disposeData(e,t=!1){if(this.data.has(e)){if(this.data.get(e).refCount--,!t&&this.data.get(e).refCount>0)return!1;let{complexTensorInfos:n}=this.data.get(e);n!=null&&(this.disposeData(n.real.dataId,!0),this.disposeData(n.imag.dataId,!0)),this.data.delete(e)}return!0}disposeIntermediateTensorInfo(e){this.disposeData(e.dataId)}async time(e){let t=y.now();return e(),{kernelMs:y.now()-t}}memory(){return{unreliable:!0,reasons:["The reported memory is an upper bound. Due to automatic garbage collection, the true allocated memory may be less."]}}where(e){ee([e],"where");let t=this.readSync(e.dataId);return Fq(e.shape,t)}dispose(){}floatPrecision(){return 32}epsilon(){return super.epsilon()}};Wu.nextDataId=0;var yg={};Ke(yg,{addImpl:()=>RS,bincountImpl:()=>nf,bincountReduceImpl:()=>l_,ceilImpl:()=>OS,concatImpl:()=>of,expImpl:()=>MS,expm1Impl:()=>zS,floorImpl:()=>VS,gatherV2Impl:()=>c_,greaterImpl:()=>jS,lessImpl:()=>US,linSpaceImpl:()=>p_,logImpl:()=>HS,maxImpl:()=>m_,maximumImpl:()=>XS,minimumImpl:()=>ZS,multiplyImpl:()=>xg,negImpl:()=>eT,notEqualImpl:()=>rT,prodImpl:()=>sT,rangeImpl:()=>lf,rsqrtImpl:()=>aT,simpleAbsImpl:()=>SS,sliceImpl:()=>uf,squaredDifferenceImpl:()=>cT,stridedSliceImpl:()=>f_,subImpl:()=>mT,tileImpl:()=>d_,topKImpl:()=>h_,transposeImpl:()=>af,uniqueImpl:()=>g_});function SS(r){let e=new Float32Array(r.length);for(let t=0;t{let{x:e}=r.inputs,t=r.backend;ee(e,"abs");let n=new Float32Array(y.sizeFromShape(e.shape)),o=t.data.get(e.dataId).values;return n=SS(o),t.makeOutput(n,e.shape,"float32")},TS={kernelName:as,backendName:"cpu",kernelFunc:Oq};function Xe(r){return(e,t,n,o,s)=>{let a=N.assertAndGetBroadcastShape(e,t),i=a.length,l=y.computeStrides(a),u=y.sizeFromShape(a),c=y.getTypedArrayFromDType(s,u),p=e.length,m=t.length,f=y.computeStrides(e),d=y.computeStrides(t),h=N.getBroadcastDims(e,a),g=N.getBroadcastDims(t,a);if(h.length+g.length===0)for(let x=0;xb[S]=0);let _=y.locToIndex(b,p,f),k=w.slice(-m);g.forEach(S=>k[S]=0);let A=y.locToIndex(k,m,d);c[x]=r(n[_],o[A])}return[c,a]}}function mr(r){let{inputs:e,backend:t}=r,{real:n,imag:o}=e,s=t.data.get(n.dataId).values,a=t.data.get(o.dataId).values,i=t.makeTensorInfo(n.shape,"complex64"),l=t.data.get(i.dataId);return l.complexTensorInfos={real:t.makeTensorInfo(n.shape,"float32",s),imag:t.makeTensorInfo(o.shape,"float32",a)},i}var AS={kernelName:Gl,backendName:"cpu",kernelFunc:mr};function lp(r,e,t="float32"){if(t==="complex64"){let o=lp(r,e,"float32"),s=lp(r,e,"float32");return mr({inputs:{real:o,imag:s},backend:r})}let n=y.makeZerosTypedArray(y.sizeFromShape(e),t);return r.makeTensorInfo(e,t,n)}function Er(r){let{inputs:e,backend:t}=r,{x:n}=e;return t.incRef(n.dataId),{dataId:n.dataId,shape:n.shape,dtype:n.dtype}}var ES={kernelName:Fn,backendName:"cpu",kernelFunc:Er};function Wo(r){let{inputs:e,backend:t}=r,{input:n}=e,o=t.data.get(n.dataId).complexTensorInfos.real,s=t.data.get(o.dataId).values;return t.makeTensorInfo(o.shape,o.dtype,s)}var DS={kernelName:iu,backendName:"cpu",kernelFunc:Wo};function Uo(r){let{inputs:e,backend:t,attrs:n}=r,{x:o}=e,{dtype:s}=n;if(s==="complex64"){if(o.dtype==="complex64")return Er({inputs:{x:o},backend:t});let a=lp(t,o.shape,o.dtype),i=Uo({inputs:{x:o},backend:t,attrs:{dtype:"float32"}}),l=mr({inputs:{real:i,imag:a},backend:t});return t.disposeIntermediateTensorInfo(a),t.disposeIntermediateTensorInfo(i),l}if(o.dtype==="complex64"){let a=Wo({inputs:{input:o},backend:t}),i=Uo({inputs:{x:a},backend:t,attrs:{dtype:s}});return t.disposeIntermediateTensorInfo(a),i}if(!y.hasEncodingLoss(o.dtype,s)){let a=Er({inputs:{x:o},backend:t});return{dataId:a.dataId,shape:a.shape,dtype:s}}if(s==="int32"){let a=t.data.get(o.dataId).values,i=Int32Array.from(a);return t.makeTensorInfo(o.shape,"int32",i)}if(s==="bool"){let a=t.data.get(o.dataId).values,i=y.toTypedArray([0],o.dtype),[l,u]=Xe((c,p)=>c!==p?1:0)(o.shape,[],a,i,"bool");return t.makeTensorInfo(u,"bool",l)}throw new Error(`Error in Cast: failed to cast ${o.dtype} to ${s}`)}var $S={kernelName:$n,backendName:"cpu",kernelFunc:Uo};function et(r,e,t,n){return t==null?({inputs:o,backend:s})=>{let{a,b:i}=o,l=s;ee([a,i],r);let u=l.data.get(a.dataId).values,c=l.data.get(i.dataId).values,p=n||a.dtype,[m,f]=e(a.shape,i.shape,u,c,p);return l.makeTensorInfo(f,p,m)}:({inputs:o,backend:s})=>{let{a,b:i}=o,l=s;if(a.dtype==="complex64"||i.dtype==="complex64"){let u=Uo({inputs:{x:a},backend:l,attrs:{dtype:"complex64"}}),c=l.data.get(u.dataId),p=c.complexTensorInfos.real,m=c.complexTensorInfos.imag,f=l.data.get(p.dataId).values,d=l.data.get(m.dataId).values,h=Uo({inputs:{x:i},backend:l,attrs:{dtype:"complex64"}}),g=l.data.get(h.dataId),x=g.complexTensorInfos.real,w=g.complexTensorInfos.imag,b=l.data.get(x.dataId).values,_=l.data.get(w.dataId).values,[k,A,S]=t(a.shape,i.shape,f,d,b,_),$=l.makeTensorInfo(S,"float32",k),O=l.makeTensorInfo(S,"float32",A),M=mr({inputs:{real:$,imag:O},backend:l});return l.disposeIntermediateTensorInfo(u),l.disposeIntermediateTensorInfo(h),l.disposeIntermediateTensorInfo($),l.disposeIntermediateTensorInfo(O),M}else{let u=l.data.get(a.dataId).values,c=l.data.get(i.dataId).values,p=n||a.dtype,[m,f]=e(a.shape,i.shape,u,c,p);return l.makeTensorInfo(f,p,m)}}}function up(r){return(e,t,n,o,s,a)=>{let i=N.assertAndGetBroadcastShape(e,t),l=y.sizeFromShape(i),u=i.length,c=y.computeStrides(i),p=y.getTypedArrayFromDType("float32",l),m=y.getTypedArrayFromDType("float32",l),f=N.getBroadcastDims(e,i),d=N.getBroadcastDims(t,i),h=N.mergeRealAndImagArrays(n,o),g=N.mergeRealAndImagArrays(s,a),x=e.length,w=y.computeStrides(e),b=t.length,_=y.computeStrides(t);if(f.length+d.length===0)for(let k=0;kS[j]=0);let $=y.locToIndex(S,x,w),O=A.slice(-b);d.forEach(j=>O[j]=0);let M=y.locToIndex(O,b,_),G=r(h[$*2],h[$*2+1],g[M*2],g[M*2+1]);p[k]=G.real,m[k]=G.imag}return[p,m,i]}}var RS=Xe((r,e)=>r+e),Pq=up((r,e,t,n)=>({real:r+t,imag:e+n})),Ra=et(wn,RS,Pq),FS={kernelName:wn,backendName:"cpu",kernelFunc:Ra};function nf(r,e,t,n,o){let s=y.sizeFromShape(n),a=y.makeZerosTypedArray(o,t);for(let i=0;i=o||(s>0?a[l]+=e[i]:a[l]+=1)}return a}function l_(r,e,t,n=!1){let o=r.shape[0],s=r.shape[1],a=ve([o,t],e.dtype);for(let i=0;i=t||(n?a.set(1,i,u):e.size>0?a.set(a.get(i,u)+e.get(i,l),i,u):a.set(a.get(i,u)+1,i,u))}return a}function qo(r){return(e,t,n)=>{let o=y.getTypedArrayFromDType(t,e.length);for(let s=0;s{let{x:a}=n;if(ee(a,r),a.dtype==="string"||t==="string")throw new Error("unaryKernelFunc does not support string input/output");let i=s,l=i.data.get(a.dataId).values,u=y.sizeFromShape(a.shape),c=t||a.dtype,p=y.getArrayFromDType(c,u);for(let m=0;m{let{x:a}=n;if(ee(a,r),a.dtype==="string"||t==="string")throw new Error("unaryKernelFunc does not support string input/output");let i=s,l=i.data.get(a.dataId).values,u=t||a.dtype,c=e(l,u,o);return i.makeTensorInfo(a.shape,u,c)}}var OS=qo(r=>Math.ceil(r)),Mq=Ho(Yn,OS),PS={kernelName:Yn,backendName:"cpu",kernelFunc:Mq};function of(r,e,t,n){let o=y.getArrayFromDType(t,y.sizeFromShape(e));if(n&&t!=="string"){let s=0;r.forEach(a=>{let i=y.sizeFromShape(a.shape);o.set(a.vals,s),s+=i})}else{let s=0;r.forEach(a=>{let i=t==="string"?N.fromUint8ToStringArray(a.vals):a.vals,l=0;for(let u=0;uMath.exp(r)),u_=Ho(no,MS),LS={kernelName:no,backendName:"cpu",kernelFunc:u_};var zS=qo(r=>Math.expm1(r)),Lq=Ho(si,zS),BS={kernelName:si,backendName:"cpu",kernelFunc:Lq};var VS=qo(r=>Math.floor(r)),zq=Ho(oo,VS),GS={kernelName:oo,backendName:"cpu",kernelFunc:zq};function c_(r,e,t){let n=ve(t,r.dtype);for(let o=0;or>e?1:0),Bq=et(li,jS,null,"bool"),WS={kernelName:li,backendName:"cpu",kernelFunc:Bq};var US=Xe((r,e)=>rMath.log(r)),Gq=Ho(uo,HS),KS={kernelName:uo,backendName:"cpu",kernelFunc:Gq};function m_(r,e,t,n){let o=y.getTypedArrayFromDType(n,y.sizeFromShape(t));for(let s=0;si&&(i=u)}o[s]=i}return o}var XS=Xe((r,e)=>Math.max(r,e)),jq=et(po,XS),YS={kernelName:po,backendName:"cpu",kernelFunc:jq};var ZS=Xe((r,e)=>Math.min(r,e)),Wq=et(go,ZS),JS={kernelName:go,backendName:"cpu",kernelFunc:Wq};var xg=Xe((r,e)=>r*e),Uq=up((r,e,t,n)=>({real:r*t-e*n,imag:r*n+e*t})),sf=et(xo,xg,Uq),QS={kernelName:xo,backendName:"cpu",kernelFunc:sf};function eT(r,e,t){let n=y.createScalarValue(-1,t);return xg([],e,n,r,t)}function qq(r){let{inputs:e,backend:t}=r,{x:n}=e;ee(n,"neg");let o=t.data.get(n.dataId).values,[s,a]=eT(o,n.shape,n.dtype);return t.makeTensorInfo(a,n.dtype,s)}var tT={kernelName:ps,backendName:"cpu",kernelFunc:qq};var rT=Xe((r,e)=>r!==e?1:0),Hq=et(xi,rT,null,"bool"),nT={kernelName:xi,backendName:"cpu",kernelFunc:Hq};function af(r,e,t,n,o){let s=e.length,a=y.sizeFromShape(e),i=y.computeStrides(e),l=y.computeStrides(o),u=y.getTypedArrayFromDType(t,y.sizeFromShape(o));for(let c=0;ct.disposeIntermediateTensorInfo(w)),t.makeTensorInfo(x,g,d)}var iT={kernelName:_i,backendName:"cpu",kernelFunc:Kq};function lf(r,e,t,n){let o=r===e,s=r1;if(o||s||a)return y.makeZerosTypedArray(0,n);let i=Math.abs(Math.ceil((e-r)/t)),l=y.makeZerosTypedArray(i,n);e1/Math.sqrt(r)),Xq=Ho(So,aT),lT={kernelName:So,backendName:"cpu",kernelFunc:Xq};function uf(r,e,t,n,o){let s=sr.isSliceContinous(n,e,t),a=y.sizeFromShape(t),i=y.computeStrides(n);if(s){let p=sr.computeFlatOffset(e,i);return o==="string"?r.slice(p,p+a):r.subarray(p,p+a)}let l=o==="string"?N.fromUint8ToStringArray(r):r,u=ve(n,o,l),c=ve(t,o);for(let p=0;pd+e[h]);c.set(u.get(...f),...m)}return o==="string"?N.fromStringArrayToUint8(c.values):c.values}function Ko(r){let{inputs:e,backend:t,attrs:n}=r,{x:o}=e,{begin:s,size:a}=n;ee(o,"slice");let[i,l]=sr.parseSliceParams(o,s,a);sr.assertParamsValid(o,i,l);let u=t.data.get(o.dataId).values,c=uf(u,i,l,o.shape,o.dtype);return t.makeTensorInfo(l,o.dtype,c)}var uT={kernelName:gs,backendName:"cpu",kernelFunc:Ko};var cT=Xe((r,e)=>{let t=r-e;return t*t}),Yq=et(Ro,cT),pT={kernelName:Ro,backendName:"cpu",kernelFunc:Yq};function f_(r,e,t,n){let o=ve(r,e.dtype);for(let s=0;sr-e),Zq=up((r,e,t,n)=>({real:r-t,imag:e-n})),cf=et(Fo,mT,Zq),fT={kernelName:Fo,backendName:"cpu",kernelFunc:cf};function d_(r,e){let t=new Array(r.rank);for(let o=0;ob.value-w.value);let h=p*n,g=l.subarray(h,h+n),x=u.subarray(h,h+n);for(let w=0;w{for(let g=0;gnew Wu,1);var y_=$e(ri,r=>r>=0?r:Math.exp(r)-1),dT={kernelName:ri,backendName:"cpu",kernelFunc:y_};function b_(r){let{inputs:e,backend:t,attrs:n}=r,{x:o}=e,{alpha:s}=n;ee([o],"leakyRelu");let a=y.sizeFromShape(o.shape),i=t.data.get(o.dataId).values,l=y.getTypedArrayFromDType("float32",a);for(let u=0;ur<0?e*r:r);function w_(r){let{inputs:e,backend:t}=r,{x:n,alpha:o}=e;ee([n,o],"prelu");let s=t.data.get(n.dataId).values,a=t.data.get(o.dataId).values,[i,l]=Jq(n.shape,o.shape,s,a,n.dtype);return t.makeTensorInfo(l,n.dtype,i)}var gT={kernelName:_o,backendName:"cpu",kernelFunc:w_};var __=$e(ko,r=>Math.max(0,r)),xT={kernelName:ko,backendName:"cpu",kernelFunc:__};var k_=$e(Co,r=>Math.min(Math.max(0,r),6)),yT={kernelName:Co,backendName:"cpu",kernelFunc:k_};function cp(r,e,t,n,o){if(t==="linear")return Er({inputs:{x:e},backend:r});if(t==="relu")return __({inputs:{x:e},backend:r});if(t==="elu")return y_({inputs:{x:e},backend:r});if(t==="relu6")return k_({inputs:{x:e},backend:r});if(t==="prelu")return w_({inputs:{x:e,alpha:n},backend:r});if(t==="leakyrelu")return b_({inputs:{x:e},backend:r,attrs:{alpha:o}});throw new Error(`Activation ${t} has not been implemented for the CPU backend.`)}function Qe(r){let{inputs:e,backend:t,attrs:n}=r,{x:o}=e,{shape:s}=n,a=y.sizeFromShape(o.shape),i=y.inferFromImplicitShape(s,a),l=y.sizeFromShape(i);y.assert(a===l,()=>`The new shape (${i}) 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.`),t.incRef(o.dataId);let u=t.data.get(o.dataId);if(u.complexTensorInfos!=null){let c=u.complexTensorInfos.real,p=u.complexTensorInfos.imag;c.shape=i,p.shape=i}return{dataId:o.dataId,shape:i,dtype:o.dtype}}var bT={kernelName:ds,backendName:"cpu",kernelFunc:Qe};function v_(r){let{inputs:e,backend:t,attrs:n}=r,{a:o,b:s}=e,{transposeA:a,transposeB:i}=n;ee([o,s],"matMul");let l=o.shape.length,u=s.shape.length,c=a?o.shape[l-2]:o.shape[l-1],p=i?s.shape[u-1]:s.shape[u-2],m=a?o.shape[l-1]:o.shape[l-2],f=i?s.shape[u-2]:s.shape[u-1],d=o.shape.slice(0,-2),h=s.shape.slice(0,-2),g=y.sizeFromShape(d),x=y.sizeFromShape(h),w=g===x||g===1||x===1;y.assert(l>=2&&u>=2&&w,()=>`Error in matMul: the input batch dimensions must either be the same or at least one input batch dimension must be 1. Got input batch dimensions of (${d}) and (${h}).`);let _=(g>x?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=${a} and transposeB=${i} must match.`);let k=a?[g,c,m]:[g,m,c],A=i?[x,f,p]:[x,p,f],S=Qe({inputs:{x:o},backend:t,attrs:{shape:k}}),$=Qe({inputs:{x:s},backend:t,attrs:{shape:A}}),O=a?S.shape[1]:S.shape[2],M=a?S.shape[2]:S.shape[1],G=i?$.shape[1]:$.shape[2],j=Math.max(g,x),U=t.data.get(S.dataId).values,q=t.data.get($.dataId).values,H=y.computeStrides(S.shape),X=y.computeStrides($.shape),[ne,Y,re]=a?[H[0],1,H[1]]:[H[0],H[1],1],[te,ie,le]=i?[1,X[1],X[0]]:[X[1],1,X[0]],ae=M*G,fe=ve([j,M,G],S.dtype),de=fe.values,xe=t.blockSize;for(let we=0;weMath.acos(r)),kT={kernelName:qs,backendName:"cpu",kernelFunc:eH};var tH=$e(Hs,r=>Math.acosh(r)),vT={kernelName:Hs,backendName:"cpu",kernelFunc:tH};function rH(r){let{inputs:e,backend:t}=r,n=e;ee(e,"addN");let o=n.map(i=>t.data.get(i.dataId).values),s=ve(n[0].shape,n[0].dtype),a=s.values;for(let i=0;iw&&(w=k,b=_)}f[g]=b}return u.forEach(g=>t.disposeIntermediateTensorInfo(g)),t.makeTensorInfo(c,"int32",f)}var ST={kernelName:Hn,backendName:"cpu",kernelFunc:sH};function iH(r){let{inputs:e,backend:t,attrs:n}=r,{x:o}=e,{axis:s}=n;ee(o,"argMin");let a=y.parseAxisParam(s,o.shape),i=N.getAxesPermutation(a,o.shape.length),l=o,u=[];i!=null&&(l=rr({inputs:{x:o},backend:t,attrs:{perm:i}}),u.push(l),a=N.getInnerMostAxes(a.length,l.shape.length)),a=[a[0]],N.assertAxesAreInnerMostDims("argMin",a,l.shape.length);let[c,p]=N.computeOutAndReduceShapes(l.shape,a),m=y.sizeFromShape(c),f=y.makeZerosTypedArray(m,"int32"),d=y.sizeFromShape(p),h=t.data.get(l.dataId).values;for(let g=0;gt.disposeIntermediateTensorInfo(g)),t.makeTensorInfo(c,"int32",f)}var TT={kernelName:ea,backendName:"cpu",kernelFunc:iH};var aH=$e(Ks,r=>Math.asin(r)),AT={kernelName:Ks,backendName:"cpu",kernelFunc:aH};var lH=$e(Xs,r=>Math.asinh(r)),ET={kernelName:Xs,backendName:"cpu",kernelFunc:lH};var uH=$e(Ys,r=>Math.atan(r)),DT={kernelName:Ys,backendName:"cpu",kernelFunc:uH};var cH=Xe((r,e)=>Math.atan2(r,e)),pH=et(Js,cH),$T={kernelName:Js,backendName:"cpu",kernelFunc:pH};var mH=$e(Zs,r=>Math.atanh(r)),RT={kernelName:Zs,backendName:"cpu",kernelFunc:mH};function pp(r,e,t,n,o,s){let a=o.strideHeight,i=o.strideWidth,l=o.dilationHeight,u=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=ve(o.outShape,t),g=h.values,x=o.outShape[1]*o.outShape[2]*o.outShape[3],w=o.outShape[2]*o.outShape[3],b=o.outShape[3];for(let _=0;_ne?ne=de:s==="avg"&&(Y+=de,re++)}if(isNaN(ne))break}let te=j+U*b+S;g[te]=s==="avg"?Y/re:ne}}}return h}function bg(r,e,t,n,o=!1,s=!1){let a=ve(n.outShape,"int32"),i=n.strideHeight,l=n.strideWidth,u=n.dilationHeight,c=n.dilationWidth,p=n.effectiveFilterHeight,m=n.effectiveFilterWidth,f=n.padInfo.top,d=n.padInfo.left,h=ve(e,t,r);for(let g=0;gM&&(M=X,o?G=s?((g*n.inHeight+j)*n.inWidth+q)*n.inChannels+x:(j*n.inWidth+q)*n.inChannels+x:G=U*m+H)}}a.set(G,g,w,A,x)}}return a}function wg(r,e,t,n,o,s){let a=o.strideDepth,i=o.strideHeight,l=o.strideWidth,u=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,w=s==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,b=ve(o.outShape,t),_=b.values,k=o.outShape[1]*o.outShape[2]*o.outShape[3]*o.outShape[4],A=o.outShape[2]*o.outShape[3]*o.outShape[4],S=o.outShape[3]*o.outShape[4],$=o.outShape[4];for(let O=0;ODe?De=Mt:s==="avg"&&(Ne+=Mt,ze++),isNaN(De))break}if(isNaN(De))break}if(isNaN(De))break}let He=we+j;_[He]=s==="avg"?Ne/ze:De}}}}return b}function FT(r,e){let t=ve(e.outShape,"int32"),n=e.strideDepth,o=e.strideHeight,s=e.strideWidth,a=e.dilationDepth,i=e.dilationHeight,l=e.dilationWidth,u=e.effectiveFilterDepth,c=e.effectiveFilterHeight,p=e.effectiveFilterWidth,m=e.padInfo.front,f=e.padInfo.top,d=e.padInfo.left;for(let h=0;h=U&&(U=ie,q=X*c*p+Y*c+te)}}}t.set(q,h,x,k,O,g)}}}return t}function fH(r){let{inputs:e,backend:t,attrs:n}=r,{x:o}=e;ee(o,"avgPool");let{filterSize:s,strides:a,pad:i,dimRoundingMode:l}=n,u=1;y.assert(N.eitherStridesOrDilationsAreOne(a,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=N.computePool2DInfo(o.shape,s,a,u,i,l),p;if(c.filterWidth===1&&c.filterHeight===1&&y.arraysEqual(c.inShape,c.outShape))p=Er({inputs:{x:o},backend:t});else{let m=t.data.get(o.dataId).values,f=y.computeStrides(o.shape),d=pp(m,o.shape,o.dtype,f,c,"avg");p=t.makeTensorInfo(c.outShape,o.dtype,d.values)}return p}var OT={kernelName:Kn,backendName:"cpu",kernelFunc:fH};function dH(r){let{inputs:e,backend:t,attrs:n}=r,{x:o}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:l,dataFormat:u}=n;ee(o,"avgPool3d");let c=N.computePool3DInfo(o.shape,s,a,1,i,l,u),p=t.data.get(o.dataId).values,m=wg(p,o.shape,o.dtype,y.computeStrides(o.shape),c,"avg");return t.makeTensorInfo(m.shape,"float32",m.values)}var PT={kernelName:ta,backendName:"cpu",kernelFunc:dH};function hH(r){let{inputs:e,backend:t,attrs:n}=r,{dy:o,input:s}=e,{filterSize:a,strides:i,pad:l,dimRoundingMode:u}=n;ee([o,s],"avgPool3DGrad");let c=N.computePool3DInfo(s.shape,a,i,1,l,u),p=c.strideDepth,m=c.strideHeight,f=c.strideWidth,d=c.filterDepth,h=c.filterHeight,g=c.filterWidth,x=c.dilationDepth,w=c.dilationHeight,b=c.dilationWidth,_=c.effectiveFilterDepth,k=c.effectiveFilterHeight,A=c.effectiveFilterWidth,S=_-1-c.padInfo.front,$=A-1-c.padInfo.left,O=k-1-c.padInfo.top,M=ve(s.shape,"float32"),G=1/(d*h*g),j=t.bufferSync(o);for(let U=0;U=c.outDepth||Math.floor(ae)!==ae))for(let fe=0;fe=c.outHeight||Math.floor(de)!==de))for(let xe=0;xe=c.outWidth||Math.floor(we)!==we)continue;ie+=j.get(U,ae,de,we,q)}}}M.set(ie*G,U,H,X,ne,q)}return t.makeTensorInfo(M.shape,M.dtype,M.values)}var MT={kernelName:Bl,backendName:"cpu",kernelFunc:hH};function gH(r){let{inputs:e,backend:t,attrs:n}=r,{dy:o,input:s}=e,a=s;ee([o,s],"avgPoolGrad");let{filterSize:i,strides:l,pad:u}=n,c=N.computePool2DInfo(a.shape,i,l,1,u),p=c.strideHeight,m=c.strideWidth,f=c.filterHeight,d=c.filterWidth,h=c.dilationHeight,g=c.dilationWidth,x=c.effectiveFilterHeight,w=c.effectiveFilterWidth,b=w-1-c.padInfo.left,_=x-1-c.padInfo.top,k=ve(a.shape,"float32"),A=1/(f*d),S=t.data.get(o.dataId).values,$=ve(o.shape,"float32",S);for(let O=0;O=c.outHeight||Math.floor(ne)!==ne))for(let Y=0;Y=c.outWidth||Math.floor(re)!==re)continue;H+=$.get(O,ne,re,M)}}k.set(H*A,O,G,j,M)}return t.makeTensorInfo(k.shape,k.dtype,k.values)}var LT={kernelName:zl,backendName:"cpu",kernelFunc:gH};function xH(r){let{inputs:e,backend:t,attrs:n}=r,{x:o,scale:s,offset:a,mean:i,variance:l}=e;y.assert(i.shape.length===l.shape.length,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),y.assert(a==null||i.shape.length===a.shape.length,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),y.assert(s==null||i.shape.length===s.shape.length,()=>"Batch normalization gradient requires mean and scale to have equal ranks."),ee([o,i,l,s,a],"batchNorm");let{varianceEpsilon:u}=n;u==null&&(u=.001);let c=t.data.get(o.dataId).values,p=t.data.get(i.dataId).values,m=t.data.get(l.dataId).values,f=s?t.data.get(s.dataId).values:new Float32Array([1]),d=a?t.data.get(a.dataId).values:new Float32Array([0]),h=new Float32Array(c.length),g=d.length,x=f.length,w=m.length,b=p.length,_=0,k=0,A=0,S=0;for(let $=0;$=g&&(_=0),k>=b&&(k=0),A>=x&&(A=0),S>=w&&(S=0);return t.makeTensorInfo(o.shape,o.dtype,h)}var zT={kernelName:io,backendName:"cpu",kernelFunc:xH};function yH(r){let{inputs:e,backend:t,attrs:n}=r,{x:o}=e,{blockShape:s,crops:a}=n;ee([o],"batchToSpaceND");let i=s.reduce((x,w)=>x*w),l=N.getReshaped(o.shape,s,i),u=N.getPermuted(l.length,s.length),c=N.getReshapedPermuted(o.shape,s,i),p=N.getSliceBeginCoords(a,s.length),m=N.getSliceSize(c,a,s.length),f=Qe({inputs:{x:o},backend:t,attrs:{shape:l}}),d=rr({inputs:{x:f},backend:t,attrs:{perm:u}}),h=Qe({inputs:{x:d},backend:t,attrs:{shape:c}}),g=Ko({inputs:{x:h},backend:t,attrs:{begin:p,size:m}});return t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(d),t.disposeIntermediateTensorInfo(h),g}var BT={kernelName:ra,backendName:"cpu",kernelFunc:yH};function bH(r){let{inputs:e,backend:t,attrs:n}=r,{x:o,weights:s}=e,{size:a}=n,i=t.data.get(o.dataId).values,l=t.data.get(s.dataId).values,u=nf(i,l,s.dtype,s.shape,a);return t.makeTensorInfo([a],s.dtype,u)}var VT={kernelName:Vl,backendName:"cpu",kernelFunc:bH};var wH=$e(Rn,(r,e)=>{let t=e;return r>t.clipValueMax?t.clipValueMax:r{let{x:e}=r.inputs,t=r.backend,n=new Float32Array(y.sizeFromShape(e.shape)),o=t.data.get(e.dataId),s=o.complexTensorInfos.real,a=o.complexTensorInfos.imag,i=t.data.get(s.dataId).values,l=t.data.get(a.dataId).values;for(let u=0;uh.shape),s);if(y.sizeFromShape(a)===0)return t.makeTensorInfo(a,e[0].dtype,[]);let i=e.filter(h=>y.sizeFromShape(h.shape)>0);if(i.length===1)return Er({inputs:{x:i[0]},backend:t});let l=i.map(h=>h.shape);if(N.assertParamsConsistent(l,s),i[0].dtype==="complex64"){let h=i.map(_=>Wo({inputs:{input:_},backend:t})),g=i.map(_=>zi({inputs:{input:_},backend:t})),x=pl({inputs:h,backend:t,attrs:{axis:s}}),w=pl({inputs:g,backend:t,attrs:{axis:s}}),b=mr({inputs:{real:x,imag:w},backend:t});return h.forEach(_=>t.disposeIntermediateTensorInfo(_)),g.forEach(_=>t.disposeIntermediateTensorInfo(_)),t.disposeIntermediateTensorInfo(x),t.disposeIntermediateTensorInfo(w),b}let u=i.map(h=>{let g=y.sizeFromShape(h.shape.slice(s));return Qe({inputs:{x:h},backend:t,attrs:{shape:[-1,g]}})}),c=u.map(h=>({vals:t.data.get(h.dataId).values,shape:h.shape}));a=N.computeOutShape(u.map(h=>h.shape),1);let p=u[0].shape[0]===1,m=of(c,a,e[0].dtype,p),f=N.computeOutShape(i.map(h=>h.shape),s),d=t.makeTensorInfo(f,e[0].dtype,m);return u.forEach(h=>t.disposeIntermediateTensorInfo(h)),d}var UT={kernelName:ls,backendName:"cpu",kernelFunc:pl};function C_(r){let{inputs:e,backend:t,attrs:n}=r,{x:o,filter:s}=e,{strides:a,pad:i,dataFormat:l,dilations:u,dimRoundingMode:c}=n;ee([o,s],"conv2d");let p=N.convertConv2DDataFormat(l),m=N.computeConv2DInfo(o.shape,s.shape,a,u,i,c,!1,p),f=m.filterHeight,d=m.filterWidth,h=m.dilationHeight,g=m.dilationWidth,x=m.padInfo.left,w=m.padInfo.top,b=m.dataFormat==="channelsLast",_=new lt(m.outShape,o.dtype),k=y.computeStrides(o.shape),A=y.computeStrides(s.shape),S=k[0],$=b?k[1]:k[2],O=b?k[2]:1,M=b?1:k[1],G=_.strides[0],j=b?_.strides[1]:_.strides[2],U=b?_.strides[2]:1,q=b?1:_.strides[1],H=t.data.get(o.dataId).values,X=t.data.get(s.dataId).values,ne=_.values;for(let Y=0;Y=m.inHeight)continue;let xe=fe*A[0],we=re+de*$;for(let De=0;De=m.inWidth)continue;let At=xe+He*A[1],Et=we+it*O,We=At;for(let ut=0;ut=u.inDepth)continue;let Y=X*O[0],re=G+ne*$[1];for(let te=0;te=u.inHeight)continue;let de=Y+ae*O[1],xe=re+fe*$[2];for(let we=0;we=u.inWidth)continue;let it=de+ze*O[2],At=xe+He*u.inChannels,Et=it;for(let We=0;WeMath.cos(r)),JT={kernelName:Qn,backendName:"cpu",kernelFunc:SH};var TH=$e(Qs,r=>Math.cosh(r)),QT={kernelName:Qs,backendName:"cpu",kernelFunc:TH};function AH(r){let{inputs:e,backend:t,attrs:n}=r,{image:o,boxes:s,boxInd:a}=e,{cropSize:i,method:l,extrapolationValue:u}=n,[c,p,m,f]=o.shape,d=s.shape[0],[h,g]=i,x=ve([d,h,g,f],"float32"),w=t.data.get(s.dataId).values,b=t.data.get(a.dataId).values,_=t.data.get(o.dataId).values,k=y.computeStrides(o.shape),A=y.computeStrides(x.shape);for(let S=0;S=c)continue;let q=h>1?(G-O)*(p-1)/(h-1):0,H=g>1?(j-M)*(m-1)/(g-1):0;for(let X=0;X1?O*(p-1)+X*q:.5*(O+G)*(p-1);if(ne<0||ne>p-1){for(let Y=0;Y1?M*(m-1)+ie*H:.5*(M+j)*(m-1);if(le<0||le>m-1){for(let xe=0;xe1?M*(m-1)+Y*H:.5*(M+j)*(m-1);if(re<0||re>m-1){for(let le=0;lex+d-w-1:(x,w)=>x+w;for(let x=0;x`Only NHWC dataFormat supported on CPU for depthToSpace. Got ${a}`),y.assert(s>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${s}`);let i=o.shape[0],l=o.shape[1],u=o.shape[2],c=o.shape[3],p=l*s,m=u*s,f=c/(s*s),d=t.data.get(o.dataId).values,h=new Float32Array(i*p*m*f),g=0;for(let x=0;x`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${a} and dilations '${m}'`);let f=N.computeConv2DInfo(o.shape,s.shape,a,m,i,u,!0),{filterHeight:d,filterWidth:h,dilationHeight:g,dilationWidth:x,padInfo:w}=f,b=w.left,_=w.top,k=f.outChannels/f.inChannels,A=new lt(f.outShape,o.dtype),S=t.data.get(o.dataId).values,$=t.data.get(s.dataId).values,O=A.values;for(let M=0;M=f.inHeight)continue;let Y=X*p[0],re=G+ne*c[1];for(let te=0;te=f.inWidth)continue;let de=Y+ae*p[1],xe=re+fe*f.inChannels,we=ie,De=de;for(let Ne=0;Ne{let{x:n,filter:o}=r,{strides:s,pad:a,dilations:i}=t,l=e,u=l.data.get(n.dataId).values,c=n.shape.length,p=l.data.get(o.dataId).values,m=o.shape.length,{batchSize:f,inHeight:d,inWidth:h,inChannels:g,outHeight:x,outWidth:w,padInfo:b,strideHeight:_,strideWidth:k,filterHeight:A,filterWidth:S,dilationHeight:$,dilationWidth:O,outShape:M}=N.computeDilation2DInfo(n.shape,o.shape,s,a,"NHWC",i),G=y.sizeFromShape(M),j=M.length,U=y.getArrayFromDType(n.dtype,G);for(let H=0;H=0&&fe=0&&xeie&&(ie=Ne)}}}let le=y.locToIndex([H,X,Y,te],j,y.computeStrides(M));U[le]=ie}}}return{dataId:l.write(y.toTypedArray(U,n.dtype),M,n.dtype),shape:M,dtype:n.dtype}}};var u1={kernelName:Fc,backendName:"cpu",kernelFunc:({inputs:r,backend:e,attrs:t})=>{let{x:n,filter:o,dy:s}=r,{strides:a,pad:i,dilations:l}=t,u=e,c=y.toNestedArray(n.shape,u.data.get(n.dataId).values),p=y.toNestedArray(o.shape,u.data.get(o.dataId).values),{batchSize:m,inHeight:f,inWidth:d,inChannels:h,outHeight:g,outWidth:x,padInfo:w,strideHeight:b,strideWidth:_,filterHeight:k,filterWidth:A,dilationHeight:S,dilationWidth:$,outShape:O}=N.computeDilation2DInfo(n.shape,o.shape,a,i,"NHWC",l);y.assert(s.rank===O.length,()=>`Error in ${Fc}, dy must have the same rank as output ${O.length}, but got ${s.rank}`);let M=y.toNestedArray(O,u.data.get(s.dataId).values),G=y.makeZerosNestedTypedArray(o.shape,o.dtype);for(let U=0;U=0&&ae=0&&dere&&(re=xe,te=le,ie=fe)}}}G[te][ie][Y]+=M[U][q][X][Y]}}}return{dataId:u.write(y.toTypedArray(G,n.dtype),o.shape,o.dtype),shape:o.shape,dtype:o.dtype}}};var c1={kernelName:Rc,backendName:"cpu",kernelFunc:({inputs:r,backend:e,attrs:t})=>{let{x:n,filter:o,dy:s}=r,{strides:a,pad:i,dilations:l}=t,u=e,c=y.toNestedArray(n.shape,u.data.get(n.dataId).values),p=y.toNestedArray(o.shape,u.data.get(o.dataId).values),{batchSize:m,inHeight:f,inWidth:d,inChannels:h,outHeight:g,outWidth:x,padInfo:w,strideHeight:b,strideWidth:_,filterHeight:k,filterWidth:A,dilationHeight:S,dilationWidth:$,outShape:O}=N.computeDilation2DInfo(n.shape,o.shape,a,i,"NHWC",l);y.assert(s.rank===O.length,()=>`Error in ${Rc}, dy must have the same rank as output ${O.length}, but got ${s.rank}`);let M=y.toNestedArray(O,u.data.get(s.dataId).values),G=y.makeZerosNestedTypedArray(n.shape,n.dtype);for(let U=0;U=0&&ae=0&&dere&&(re=xe,te=ae,ie=de)}}}G[U][te][ie][Y]+=M[U][q][X][Y]}}}return{dataId:u.write(y.toTypedArray(G,n.dtype),n.shape,n.dtype),shape:n.shape,dtype:n.dtype}}};function PH(r){let{inputs:e,backend:t}=r,{dy:n,y:o}=e;ee([n,o],"eluGrad");let s=new Float32Array(y.sizeFromShape(o.shape)),a=t.data.get(o.dataId).values,i=t.data.get(n.dataId).values;for(let l=0;l=1?s[l]=i[l]:s[l]=i[l]*(u+1)}return t.makeTensorInfo(o.shape,"float32",s)}var p1={kernelName:Yl,backendName:"cpu",kernelFunc:PH};var MH=Xe((r,e)=>r===e?1:0),N_=et(oi,MH,null,"bool"),m1={kernelName:oi,backendName:"cpu",kernelFunc:N_};var LH=N.ERF_P,zH=N.ERF_A1,BH=N.ERF_A2,VH=N.ERF_A3,GH=N.ERF_A4,jH=N.ERF_A5,WH=$e(ni,r=>{let e=Math.sign(r),t=Math.abs(r),n=1/(1+LH*t);return e*(1-((((jH*n+GH)*n+VH)*n+BH)*n+zH)*n*Math.exp(-t*t))}),f1={kernelName:ni,backendName:"cpu",kernelFunc:WH};function mp(r){let{inputs:e,backend:t,attrs:n}=r,{input:o}=e,{dim:s}=n,a=o.shape.length,i=o.shape.slice(),l=s;return s<0&&(y.assert(-(a+1)<=s,()=>`Axis must be in the interval [${-(a+1)}, ${a}]`),l=a+s+1),i.splice(l,0,1),Qe({inputs:{x:o},backend:t,attrs:{shape:i}})}var d1={kernelName:us,backendName:"cpu",kernelFunc:mp};var UH=Xe((r,e)=>r/e),pf=et(ro,UH),mf={kernelName:ro,backendName:"cpu",kernelFunc:pf};function _g(r,e,t){let n=r.shape,o=n[0],s=n[1],a=t.data.get(r.dataId),i=a.complexTensorInfos.real,l=a.complexTensorInfos.imag,u=[o,s],c=y.sizeFromShape(u),p=y.getTypedArrayFromDType("float32",c),m=y.getTypedArrayFromDType("float32",c);for(let g=0;g{let{image:n}=r,o=t,s=y.getTypedArrayFromDType(n.dtype,y.sizeFromShape(n.shape)),[a,i,l,u]=n.shape,c=o.data.get(n.dataId).values;for(let m=0;m=0&&kMath.floor(r/e)),JH=et(so,ZH,null,"int32"),y1={kernelName:so,backendName:"cpu",kernelFunc:JH};function QH(r){let{inputs:e,backend:t,attrs:n}=r,{x:o,filter:s,bias:a,preluActivationWeights:i}=e,{strides:l,pad:u,dataFormat:c,dilations:p,dimRoundingMode:m,activation:f,leakyreluAlpha:d}=n,h=C_({inputs:{x:o,filter:s},backend:t,attrs:{strides:l,pad:u,dataFormat:c,dilations:p,dimRoundingMode:m}});if(a){let g=h;h=Ra({inputs:{a:h,b:a},backend:t}),t.disposeIntermediateTensorInfo(g)}if(f){let g=h;h=cp(t,h,f,i,d),t.disposeIntermediateTensorInfo(g)}return h}var b1={kernelName:_s,backendName:"cpu",kernelFunc:QH};function eK(r){let{inputs:e,backend:t,attrs:n}=r,{x:o,filter:s,bias:a,preluActivationWeights:i}=e,{strides:l,pad:u,dataFormat:c,dilations:p,dimRoundingMode:m,activation:f,leakyreluAlpha:d}=n,h=I_({inputs:{x:o,filter:s},backend:t,attrs:{strides:l,pad:u,dataFormat:c,dilations:p,dimRoundingMode:m}});if(a){let g=h;h=Ra({inputs:{a:h,b:a},backend:t}),t.disposeIntermediateTensorInfo(g)}if(f){let g=h;h=cp(t,h,f,i,d),t.disposeIntermediateTensorInfo(g)}return h}var w1={kernelName:ks,backendName:"cpu",kernelFunc:eK};function tK(r){let{inputs:e,backend:t}=r,{params:n,indices:o}=e,s=y.sizeFromShape(n.shape),a=o.shape,i=a[a.length-1],[l,u,c,p]=N.prepareAndValidate(n,o);if(u===0)return t.makeTensorInfo(l,n.dtype,[]);let m=ve([u,c],n.dtype),f=t.data.get(o.dataId).values,d=t.data.get(n.dataId).values;for(let h=0;h=s/c)throw new Error(`Invalid indices: ${g} does not index into ${n.shape}`);for(let w=0;wr>=e?1:0),oK=et(ao,nK,null,"bool"),v1={kernelName:ao,backendName:"cpu",kernelFunc:oK};function sK(r){let{inputs:e,backend:t}=r,{input:n}=e,o=y.sizeFromShape(n.shape),s=n.shape[n.shape.length-1],a=o/s,i=Qe({inputs:{x:n},backend:t,attrs:{shape:[a,s]}}),l=_g(i,!0,t),u=Qe({inputs:{x:l},backend:t,attrs:{shape:n.shape}});return t.disposeIntermediateTensorInfo(i),t.disposeIntermediateTensorInfo(l),u}var C1={kernelName:Jl,backendName:"cpu",kernelFunc:sK};var iK=$e(ui,r=>Number.isFinite(r)?1:0,"bool"),I1={kernelName:ui,backendName:"cpu",kernelFunc:iK};var aK=$e(ci,r=>Math.abs(r)===Infinity?1:0,"bool"),N1={kernelName:ci,backendName:"cpu",kernelFunc:aK};var lK=$e(pi,r=>Number.isNaN(r)?1:0,"bool"),S1={kernelName:pi,backendName:"cpu",kernelFunc:lK};var uK=Xe((r,e)=>r<=e?1:0),cK=et(fi,uK,null,"bool"),T1={kernelName:fi,backendName:"cpu",kernelFunc:cK};function pK(r){let{backend:e,attrs:t}=r,{start:n,stop:o,num:s}=t,a=p_(n,o,s);return e.makeTensorInfo([a.length],"float32",a)}var A1={kernelName:eu,backendName:"cpu",kernelFunc:pK};var mK=$e(di,r=>Math.log1p(r)),E1={kernelName:di,backendName:"cpu",kernelFunc:mK};var fK=Xe((r,e)=>r&&e),dK=et(hi,fK,null,"bool"),D1={kernelName:hi,backendName:"cpu",kernelFunc:dK};var hK=$e(Ja,r=>r?0:1,"bool"),$1={kernelName:Ja,backendName:"cpu",kernelFunc:hK};var gK=Xe((r,e)=>r||e),xK=et(Qa,gK,null,"bool"),R1={kernelName:Qa,backendName:"cpu",kernelFunc:xK};function yK(r){let{inputs:e,backend:t,attrs:n}=r,{x:o}=e,{depthRadius:s,bias:a,alpha:i,beta:l}=n;ee(o,"LRN");let u=o.shape[3],c=u-1,p=t.data.get(o.dataId).values,m=y.sizeFromShape(o.shape),f=new Float32Array(m);function d(h){let g=h%u,x=h-g+Math.max(0,g-s),w=h-g+Math.min(g+s,c),b=0;for(;x<=w;x++){let _=p[x];b+=_*_}return b}for(let h=0;h`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=N.computePool2DInfo(o.shape,s,a,u,i,l),p;if(c.filterWidth===1&&c.filterHeight===1&&y.arraysEqual(c.inShape,c.outShape))p=Er({inputs:{x:o},backend:t});else{let m=t.data.get(o.dataId).values,f=y.computeStrides(o.shape),d=pp(m,o.shape,o.dtype,f,c,"max");p=t.makeTensorInfo(c.outShape,o.dtype,d.values)}return p}var M1={kernelName:mo,backendName:"cpu",kernelFunc:wK};function _K(r){let{inputs:e,backend:t,attrs:n}=r,{x:o}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:l,dataFormat:u}=n;ee(o,"maxPool3d");let c=N.computePool3DInfo(o.shape,s,a,1,i,l,u),p=t.data.get(o.dataId).values,m=wg(p,o.shape,o.dtype,y.computeStrides(o.shape),c,"max");return t.makeTensorInfo(m.shape,"float32",m.values)}var L1={kernelName:la,backendName:"cpu",kernelFunc:_K};function kK(r){let{inputs:e,backend:t,attrs:n}=r,{dy:o,input:s}=e,{filterSize:a,strides:i,pad:l,dimRoundingMode:u}=n;ee([o,s],"maxPool3DGrad");let c=N.computePool3DInfo(s.shape,a,i,1,l,u),p=t.bufferSync(s),m=FT(p,c),f=c.strideDepth,d=c.strideHeight,h=c.strideWidth,g=c.dilationDepth,x=c.dilationHeight,w=c.dilationWidth,b=c.effectiveFilterDepth,_=c.effectiveFilterHeight,k=c.effectiveFilterWidth,A=b-1-c.padInfo.front,S=k-1-c.padInfo.left,$=_-1-c.padInfo.top,O=ve(s.shape,"float32"),M=t.bufferSync(o);for(let G=0;G=c.outDepth||Math.floor(ie)!==ie))for(let le=0;le<_;le+=x){let ae=(ne+le)/d;if(!(ae<0||ae>=c.outHeight||Math.floor(ae)!==ae))for(let fe=0;fe=c.outWidth||Math.floor(de)!==de)continue;let xe=b*_*k-1-m.get(G,ie,ae,de,j),we=te*_*k+le*k+fe,De=xe===we?1:0;if(De===0)continue;re+=M.get(G,ie,ae,de,j)*De}}}O.set(re,G,U,q,H,j)}return t.makeTensorInfo(O.shape,O.dtype,O.values)}var z1={kernelName:nu,backendName:"cpu",kernelFunc:kK};function vK(r){let{inputs:e,backend:t,attrs:n}=r,{dy:o,input:s,output:a}=e,i=s;ee([s,a],"maxPoolGrad");let{filterSize:l,strides:u,pad:c,dimRoundingMode:p}=n,m=N.computePool2DInfo(i.shape,l,u,1,c,p),f=t.data.get(i.dataId).values,d=ve(m.outShape,i.dtype,bg(f,i.shape,i.dtype,m).values),h=m.strideHeight,g=m.strideWidth,x=m.dilationHeight,w=m.dilationWidth,b=m.effectiveFilterHeight,_=m.effectiveFilterWidth,k=_-1-m.padInfo.left,A=b-1-m.padInfo.top,S=ve(i.shape,"float32"),$=t.data.get(o.dataId).values,O=ve(o.shape,"float32",$);for(let M=0;M=m.outHeight||Math.floor(Y)!==Y))for(let re=0;re<_;re+=w){let te=(H+re)/g;if(te<0||te>=m.outWidth||Math.floor(te)!==te)continue;let ie=b*_-1-d.get(M,Y,te,G),le=ne*_+re,ae=ie===le?1:0;if(ae===0)continue;X+=O.get(M,Y,te,G)*ae}}S.set(X,M,j,U,G)}return t.makeTensorInfo(S.shape,S.dtype,S.values)}var B1={kernelName:ru,backendName:"cpu",kernelFunc:vK};function V1(r,e,t,n,o){let s=y.computeStrides(e),a=pp(r,e,t,s,o,"max"),i=bg(r,e,t,o,!0,n);return[a.values,i.values]}var G1={kernelName:ou,backendName:"cpu",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:n}=r,{filterSize:o,strides:s,pad:a,includeBatchInIndex:i}=e,l=t;ee(n,"MaxPoolWithArgmax");let u=l.data.get(n.dataId).values,c=N.computePool2DInfo(n.shape,o,s,[1,1],a),[p,m]=V1(u,n.shape,n.dtype,i,c),f=l.write(p,c.outShape,n.dtype),d=l.write(m,c.outShape,n.dtype);return[{dataId:f,shape:c.outShape,dtype:n.dtype},{dataId:d,shape:c.outShape,dtype:"int32"}]}};function Uu(r){let{inputs:e,backend:t,attrs:n}=r,{x:o}=e,{axis:s,keepDims:a}=n;ee(o,"sum");let i;o.dtype==="bool"?i=Uo({inputs:{x:o},backend:t,attrs:{dtype:"int32"}}):i=Er({inputs:{x:o},backend:t});let l=i.shape.length,u=y.parseAxisParam(s,i.shape),c=N.getAxesPermutation(u,l),p=u,m=i;c!=null&&(m=rr({inputs:{x:i},backend:t,attrs:{perm:c}}),p=N.getInnerMostAxes(p.length,l)),N.assertAxesAreInnerMostDims("sum",p,m.shape.length);let[f,d]=N.computeOutAndReduceShapes(m.shape,p),h=N.upcastType(m.dtype,"int32"),g=lp(t,f,h),x=y.sizeFromShape(d),w=t.data.get(g.dataId).values,b=t.data.get(m.dataId).values;for(let _=0;_t.disposeIntermediateTensorInfo(g)),h}var W1={kernelName:fo,backendName:"cpu",kernelFunc:CK};function IK(r){let{inputs:e,backend:t,attrs:n}=r,{x:o}=e,{axis:s,keepDims:a}=n;ee(o,"min");let i=y.parseAxisParam(s,o.shape),l=i,u=N.getAxesPermutation(l,o.shape.length),c=o;u!=null&&(c=rr({inputs:{x:o},backend:t,attrs:{perm:u}}),l=N.getInnerMostAxes(l.length,o.shape.length)),N.assertAxesAreInnerMostDims("min",l,c.shape.length);let[p,m]=N.computeOutAndReduceShapes(c.shape,l),f=y.sizeFromShape(m),d=y.makeZerosTypedArray(y.sizeFromShape(p),c.dtype),h=t.data.get(c.dataId).values;for(let x=0;xb[0]+o.shape[_]+b[1]),l=s.map(b=>b[0]),u=s.map((b,_)=>b[0]+o.shape[_]),c=a==="reflect"?0:1,p=t.data.get(o.dataId).values,m=o.shape.length,f=y.computeStrides(o.shape),d=y.sizeFromShape(i),h=i.length,g=y.computeStrides(i),x=y.getTypedArrayFromDType(o.dtype,d);for(let b=0;b=u[A]&&(_[A]=(u[A]-1)*2-_[A]+c);_=_.map((A,S)=>A-l[S]);let k=y.locToIndex(_,m,f);x[b]=p[k]}return{dataId:t.write(x,i,o.dtype),shape:i,dtype:o.dtype}}var q1={kernelName:ua,backendName:"cpu",kernelFunc:NK};var SK=Xe((r,e)=>{let t=r%e;return r<0&&e<0||r>=0&&e>=0?t:(t+e)%e}),TK=et(gi,SK),H1={kernelName:gi,backendName:"cpu",kernelFunc:TK};var cA=Tc(lA());function O_(r){let{inputs:e,backend:t,attrs:n}=r,{logits:o}=e,{dim:s}=n,a=o.shape.length,i=s;if(i===-1&&(i=a-1),i!==a-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${a} and dim was ${i}`);let l=y.parseAxisParam([i],o.shape),u=T_({inputs:{x:o},backend:t,attrs:{reductionIndices:l,keepDims:!1}}),c=N.expandShapeToKeepDim(u.shape,l),p=Qe({inputs:{x:u},backend:t,attrs:{shape:c}}),m=cf({inputs:{a:o,b:p},backend:t}),f=u_({inputs:{x:m},backend:t}),d=Uu({inputs:{x:f},backend:t,attrs:{axis:l,keepDims:!1}}),h=Qe({inputs:{x:d},backend:t,attrs:{shape:c}}),g=pf({inputs:{a:f,b:h},backend:t});return t.disposeIntermediateTensorInfo(u),t.disposeIntermediateTensorInfo(p),t.disposeIntermediateTensorInfo(m),t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(d),t.disposeIntermediateTensorInfo(h),g}var uA={kernelName:$o,backendName:"cpu",kernelFunc:O_};function OK(r){let{inputs:e,backend:t,attrs:n}=r,{logits:o}=e,{numSamples:s,seed:a,normalized:i}=n;ee(o,"multinomial");let l=i?o:O_({inputs:{logits:o},backend:t,attrs:{dim:-1}}),u=l.shape[0],c=l.shape[1],p=t.data.get(l.dataId).values,m=[u,s],f=y.makeZerosTypedArray(y.sizeFromShape(m),"int32");for(let d=0;d=0&&c[p]{y.assertShapesMatch(s,c.shape,"All tensors passed to stack must have matching shapes"),y.assert(a===c.dtype,()=>"All tensors passed to stack must have matching dtypes")});let i=[],l=e.map(c=>{let p=mp({inputs:{input:c},backend:t,attrs:{dim:o}});return i.push(p),p}),u=pl({inputs:l,backend:t,attrs:{axis:o}});return i.forEach(c=>t.disposeIntermediateTensorInfo(c)),u}var bA={kernelName:fs,backendName:"cpu",kernelFunc:P_};function jK(r){let{inputs:e,backend:t,attrs:n}=r,{x:o}=e,{paddings:s,constantValue:a}=n;ee(o,"pad");let i=s.map((w,b)=>w[0]+o.shape[b]+w[1]),l=s.map(w=>w[0]),u=t.data.get(o.dataId).values,c=y.sizeFromShape(o.shape),p=o.shape.length,m=y.computeStrides(o.shape),f=y.sizeFromShape(i),d=i.length,h=y.computeStrides(i),g=y.getTypedArrayFromDType(o.dtype,f);a!==0&&g.fill(a);for(let w=0;wA+l[S]),k=y.locToIndex(_,d,h);g[k]=u[w]}return{dataId:t.write(g,i,o.dtype),shape:i,dtype:o.dtype}}var vg={kernelName:bo,backendName:"cpu",kernelFunc:jK};var WK=Xe((r,e)=>Math.pow(r,e)),UK=et(wo,WK),wA={kernelName:wo,backendName:"cpu",kernelFunc:UK};function qK(r){let{backend:e,attrs:t}=r,{start:n,stop:o,dtype:s,step:a}=t,i=lf(n,o,a,s);return e.makeTensorInfo([i.length],s,i)}var _A={kernelName:ca,backendName:"cpu",kernelFunc:qK};var HK=$e(ki,r=>1/r),kA={kernelName:ki,backendName:"cpu",kernelFunc:HK};function KK(r){let{inputs:e,backend:t,attrs:n}=r,{images:o}=e,{alignCorners:s,halfPixelCenters:a,size:i}=n;ee(o,"resizeBilinear");let l=y.computeStrides(o.shape),[u,c]=i,[p,m,f,d]=o.shape,h=t.data.get(o.dataId).values,g=new Float32Array(y.sizeFromShape([p,u,c,d])),x=[s&&u>1?m-1:m,s&&c>1?f-1:f],w=[s&&u>1?u-1:u,s&&c>1?c-1:c],b=0,_=x[0]/w[0],k=x[1]/w[1];for(let A=0;A1?u-1:u,a&&f>1?c-1:c],g=[a&&m>1?m-1:m,a&&f>1?f-1:f],x=h[0]/g[0],w=h[1]/g[1],b=t.data.get(s.dataId).values,_=0;for(let k=0;k1?m-1:m,s&&c>1?f-1:f],w=[s&&u>1?u-1:u,s&&c>1?c-1:c],b=x[0]/w[0],_=x[1]/w[1],k=0;for(let A=0;A1?c-1:c,a&&d>1?p-1:p],w=[a&&f>1?f-1:f,a&&d>1?d-1:d],b=x[0]/w[0],_=x[1]/w[1],k=1/b,A=1/_,S=Math.ceil(k)*2+2,$=Math.ceil(A)*2+2;for(let O=0;O=f)continue;let ae=M+le*l[1],fe=le*b,de=Math.min(c-1,a?Math.round(fe):Math.floor(fe));if(G===de)for(let xe=0;xe<$;xe++){let we=xe+Y;if(we<0||we>=d)continue;let De=ae+we*l[2],Ne=we*_,ze=Math.min(p-1,a?Math.round(Ne):Math.floor(Ne));H===ze&&(te+=g[De+re])}}h[X+re]=te}}}}return t.makeTensorInfo(o.shape,o.dtype,h)}var NA={kernelName:au,backendName:"cpu",kernelFunc:ZK};function JK(r){let{inputs:e,backend:t,attrs:n}=r,{x:o}=e,{dims:s}=n;ee(o,"reverse");let a=o.shape.length,i=y.parseAxisParam(s,o.shape);if(a===0)return Er({inputs:{x:o},backend:t});let l=new lt(o.shape,o.dtype),u=t.bufferSync(o);for(let c=0;cm[f]=o.shape[f]-1-m[f]),l.set(u.get(...m),...p)}return t.makeTensorInfo(l.shape,l.dtype,l.values)}var SA={kernelName:Io,backendName:"cpu",kernelFunc:JK};var TA={kernelName:Di,backendName:"cpu",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{image:n}=r,{radians:o,fillValue:s,center:a}=e,i=t,l=y.getTypedArrayFromDType(n.dtype,y.sizeFromShape(n.shape)),[u,c,p,m]=n.shape,[f,d]=N.getImageCenter(a,c,p),h=255,g=Math.sin(o),x=Math.cos(o),w=i.data.get(n.dataId).values;for(let _=0;_=0&&q=0&&H{let e=Math.floor(r);return r-e<.5?Math.floor(r):r-e>.5?Math.ceil(r):e%2==0?e:e+1}),AA={kernelName:No,backendName:"cpu",kernelFunc:QK};function Cg(r,e,t,n,o,s,a,i,l,u){let c=[n/o,o],p=r.values,m=e.values;if(n===0)return ve(t,e.dtype);let f=ve(c,e.dtype);f.values.fill(l);for(let d=0;d=n/o)throw new Error(`Invalid indices: ${h} does not index into ${t}`);for(let x=0;x1||o.shape.length===1?1:y.sizeFromShape(o.shape.slice(1));for(let d=0;dr>=0?n6*r:r6*(Math.exp(r)-1)),$A={kernelName:Ci,backendName:"cpu",kernelFunc:o6};var s6=$e(Ao,r=>1/(1+Math.exp(-r))),RA={kernelName:Ao,backendName:"cpu",kernelFunc:s6};var i6=$e(Ni,r=>r<0?-1:r>0?1:0),FA={kernelName:Ni,backendName:"cpu",kernelFunc:i6};var a6=$e(To,r=>Math.sin(r)),OA={kernelName:To,backendName:"cpu",kernelFunc:a6};var l6=$e(Ii,r=>Math.sinh(r)),PA={kernelName:Ii,backendName:"cpu",kernelFunc:l6};var u6=11920928955078125e-23,MA=Math.log(u6)+2,c6=$e(Si,r=>{let e=r>-MA,t=r{let m=[...c];m[i]=p;let f=Ko({inputs:{x:o},backend:t,attrs:{begin:u,size:m}});return u[i]+=p,f})}var VA={kernelName:xs,backendName:"cpu",kernelFunc:f6};var d6=$e(Eo,r=>Math.sqrt(r)),GA={kernelName:Eo,backendName:"cpu",kernelFunc:d6};var jA={kernelName:fa,backendName:"cpu",kernelFunc:({inputs:r,backend:e})=>{let{x:t}=r,n=e;ee(t,"square");let o=n.data.get(t.dataId).values,s=new Float32Array(o.length);for(let i=0;i{let t=e;return isNaN(r)?NaN:r>0?1:t.alpha}),WA={kernelName:On,backendName:"cpu",kernelFunc:h6};function g6(r){let{inputs:e,backend:t,attrs:n}=r,{x:o}=e,{begin:s,end:a,strides:i,beginMask:l,endMask:u,ellipsisMask:c,newAxisMask:p,shrinkAxisMask:m}=n;ee(o,"stridedSlice");let{nonStrided:f,$begin:d,$strides:h,size:g,newShape:x,outShape:w}=sr.sliceInfo(o.shape,s,a,i,l,u,c,p,m),b=Qe({inputs:{x:o},backend:t,attrs:{shape:x}}),_;if(f){let A=Ko({inputs:{x:b},backend:t,attrs:{begin:d,size:g}});_=Qe({inputs:{x:A},backend:t,attrs:{shape:w}}),t.disposeIntermediateTensorInfo(A)}else if(w.some(A=>A===0))_=t.makeTensorInfo(w,o.dtype,[]);else{let A=t.bufferSync(b),S=f_(w,A,h,d);_=t.makeTensorInfo(S.shape,S.dtype,S.values)}let k=Qe({inputs:{x:_},backend:t,attrs:{shape:w}});return t.disposeIntermediateTensorInfo(b),t.disposeIntermediateTensorInfo(_),k}var UA={kernelName:Ti,backendName:"cpu",kernelFunc:g6};var x6=$e(Ai,r=>Math.tan(r)),qA={kernelName:Ai,backendName:"cpu",kernelFunc:x6};var y6=$e(Oo,r=>Math.tanh(r)),HA={kernelName:Oo,backendName:"cpu",kernelFunc:y6};function b6(r){let{inputs:e,backend:t,attrs:n}=r,{x:o}=e,{reps:s}=n;ee(o,"tile");let a=d_(t.bufferSync(o),s);return t.makeTensorInfo(a.shape,a.dtype,a.values)}var KA={kernelName:_n,backendName:"cpu",kernelFunc:b6};function w6(r){let{inputs:e,backend:t,attrs:n}=r,{x:o}=e,{k:s,sorted:a}=n;ee(o,"topk");let i=t.data.get(o.dataId).values,[l,u]=h_(i,o.shape,o.dtype,s,a);return[t.makeTensorInfo(l.shape,l.dtype,l.values),t.makeTensorInfo(u.shape,u.dtype,u.values)]}var XA={kernelName:Ei,backendName:"cpu",kernelFunc:w6};function _6(r){let{inputs:e,attrs:t,backend:n}=r,{axis:o}=t,{x:s}=e;ee(s,"unique");let a=n.data.get(s.dataId).values,{outputValues:i,outputShape:l,indices:u}=g_(a,o,s.shape,s.dtype);return[n.makeTensorInfo(l,s.dtype,i),n.makeTensorInfo([u.length],"int32",u)]}var YA={kernelName:cu,backendName:"cpu",kernelFunc:_6};function k6(r){let{inputs:e,backend:t,attrs:n}=r,{value:o}=e,{axis:s}=n;s<0&&(s+=o.shape.length);let a=o.shape.length,i=o.shape[s],l=new Array(a-1),u=0;for(let f=0;ft.disposeIntermediateTensorInfo(d)),f}var JA={kernelName:da,backendName:"cpu",kernelFunc:v6};var C6=[_T,TS,kT,vT,FS,CT,IT,NT,ST,TT,AT,ET,DT,$T,RT,OT,PT,MT,LT,wT,zT,BT,VT,$S,PS,GT,AS,jT,UT,HT,KT,qT,YT,ZT,XT,JT,QT,e1,t1,r1,n1,o1,s1,i1,a1,l1,c1,u1,mf,dT,p1,m1,f1,LS,d1,BS,h1,g1,x1,GS,y1,b1,w1,_1,k1,WS,v1,ES,C1,WT,I1,N1,S1,hT,qS,T1,A1,KS,E1,D1,$1,R1,F1,O1,YS,M1,L1,z1,B1,G1,P1,W1,U1,JS,q1,H1,pA,QS,tT,mA,fA,dA,nT,hA,yA,bA,vg,wA,gT,iT,_A,DS,kA,xT,yT,bT,vA,CA,IA,NA,SA,TA,AA,lT,EA,DA,$A,RA,FA,OA,PA,uT,uA,LA,zA,BA,VA,GA,jA,pT,WA,UA,fT,j1,qA,HA,KA,XA,oT,YA,ZA,JA,gA];for(let r of C6)el(r);var tE={};Ke(tE,{assertNotComplex:()=>$s,bindCanvasToFramebuffer:()=>F6,bindColorTextureToFramebuffer:()=>xf,bindTextureToProgramUniformSampler:()=>Z_,bindTextureUnit:()=>oE,bindVertexBufferToProgramAttribute:()=>Ig,callAndCheck:()=>Ie,canBeRepresented:()=>z_,createFragmentShader:()=>V_,createFramebuffer:()=>K_,createProgram:()=>G_,createStaticIndexBuffer:()=>U_,createStaticVertexBuffer:()=>W_,createTexture:()=>q_,createVertexShader:()=>B_,getBatchDim:()=>Oa,getExtensionOrThrow:()=>fp,getFramebufferErrorMessage:()=>sE,getMaxTexturesInShader:()=>ek,getNumChannels:()=>$6,getProgramUniformLocation:()=>Y_,getProgramUniformLocationOrThrow:()=>X_,getRowsCols:()=>Pa,getShapeAs3D:()=>yf,getTextureShapeFromLogicalShape:()=>J_,getWebGLDisjointQueryTimerVersion:()=>tk,getWebGLErrorMessage:()=>rE,getWebGLMaxTextureSize:()=>Q_,hasExtension:()=>In,isCapableOfRenderingToFloatTexture:()=>nk,isDownloadFloatTextureEnabled:()=>ok,isReshapeFree:()=>dl,isWebGLFenceEnabled:()=>sk,isWebGLVersionEnabled:()=>Eg,linkProgram:()=>j_,resetMaxTextureSize:()=>O6,resetMaxTexturesInShader:()=>P6,unbindColorTextureFromFramebuffer:()=>Ng,unbindTextureUnit:()=>R6,validateFramebuffer:()=>dp,validateProgram:()=>gf,validateTextureSize:()=>H_});var Hu={},M_={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function L_(r,e){Hu[r]=e}function Vn(r){if(!(r in Hu)){let t=I6(r);if(t!==null)Hu[r]=t;else return console.log("Could not get context for WebGL version",r),null}let e=Hu[r];return e.isContextLost()?(delete Hu[r],Vn(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),Hu[r])}function N6(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 I6(r){if(r!==1&&r!==2)throw new Error("Cannot get WebGL rendering context, WebGL is disabled.");let e=N6(r);return e.addEventListener("webglcontextlost",t=>{t.preventDefault(),delete Hu[r]},!1),r===1?e.getContext("webgl",M_)||e.getContext("experimental-webgl",M_):e.getContext("webgl2",M_)}var ml;(function(r){r[r.DENSE=0]="DENSE",r[r.SHARED_BATCH=1]="SHARED_BATCH"})(ml||(ml={}));var Dr;(function(r){r[r.RENDER=0]="RENDER",r[r.UPLOAD=1]="UPLOAD",r[r.PIXELS=2]="PIXELS",r[r.DOWNLOAD=3]="DOWNLOAD"})(Dr||(Dr={}));var kr;(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"})(kr||(kr={}));function Ku(r,e){return[e,r]}function QA(r,e){return r*e}function fl(r){let e=y.sizeFromShape(r),t=Math.ceil(e/4);return y.sizeToSquarishShape(t)}function Bi(r,e){return[Math.max(1,Math.ceil(e/2)),Math.max(1,Math.ceil(r/2))]}function eE(r,e){let[t,n]=Bi(r,e);return t*n*4}function hf(r,e){let t=r,n,o,s,a,i,l,u,c,p,m;return W().getNumber("WEBGL_VERSION")===2?(n=t.R32F,o=t.R16F,s=t.RGBA16F,a=t.RGBA32F,i=t.RED,u=4,c=1,p=t.HALF_FLOAT,m=t.FLOAT):(n=r.RGBA,o=r.RGBA,s=r.RGBA,a=t.RGBA,i=r.RGBA,u=4,c=4,p=e!=null?e.HALF_FLOAT_OES:null,m=r.FLOAT),l=r.RGBA,{internalFormatFloat:n,internalFormatHalfFloat:o,internalFormatPackedHalfFloat:s,internalFormatPackedFloat:a,textureFormatFloat:i,downloadTextureFormat:l,downloadUnpackNumChannels:u,defaultNumChannels:c,textureTypeHalfFloat:p,textureTypeFloat:m}}function Ie(r,e){let t=e();return W().getBool("DEBUG")&&S6(r),t}function S6(r){let e=r.getError();if(e!==r.NO_ERROR)throw new Error("WebGL Error: "+rE(r,e))}var T6=596e-10,A6=65504;function z_(r){return!!(W().getBool("WEBGL_RENDER_FLOAT32_ENABLED")||r===0||T6r.getExtension(e),'Extension "'+e+'" not supported on this browser.')}function B_(r,e){let t=Fa(r,()=>r.createShader(r.VERTEX_SHADER),"Unable to create vertex WebGLShader.");if(Ie(r,()=>r.shaderSource(t,e)),Ie(r,()=>r.compileShader(t)),r.getShaderParameter(t,r.COMPILE_STATUS)===!1)throw console.log(r.getShaderInfoLog(t)),new Error("Failed to compile vertex shader.");return t}function V_(r,e){let t=Fa(r,()=>r.createShader(r.FRAGMENT_SHADER),"Unable to create fragment WebGLShader.");if(Ie(r,()=>r.shaderSource(t,e)),Ie(r,()=>r.compileShader(t)),r.getShaderParameter(t,r.COMPILE_STATUS)===!1)throw E6(e,r.getShaderInfoLog(t)),new Error("Failed to compile fragment shader.");return t}var D6=/ERROR: [0-9]+:([0-9]+):/g;function E6(r,e){let t=D6.exec(e);if(t==null){console.log(`Couldn't parse line number in error: ${e}`),console.log(r);return}let n=+t[1],o=r.split(` `),s=o.length.toString().length+2,a=o.map((p,m)=>y.rightPad((m+1).toString(),s)+p),i=0;for(let p=0;pr.createProgram(),"Unable to create WebGLProgram.")}function j_(r,e){if(Ie(r,()=>r.linkProgram(e)),r.getProgramParameter(e,r.LINK_STATUS)===!1)throw console.log(r.getProgramInfoLog(e)),new Error("Failed to link vertex and fragment shaders.")}function gf(r,e){if(Ie(r,()=>r.validateProgram(e)),r.getProgramParameter(e,r.VALIDATE_STATUS)===!1)throw console.log(r.getProgramInfoLog(e)),new Error("Shader program validation failed.")}function W_(r,e){let t=Fa(r,()=>r.createBuffer(),"Unable to create WebGLBuffer");return Ie(r,()=>r.bindBuffer(r.ARRAY_BUFFER,t)),Ie(r,()=>r.bufferData(r.ARRAY_BUFFER,e,r.STATIC_DRAW)),t}function U_(r,e){let t=Fa(r,()=>r.createBuffer(),"Unable to create WebGLBuffer");return Ie(r,()=>r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t)),Ie(r,()=>r.bufferData(r.ELEMENT_ARRAY_BUFFER,e,r.STATIC_DRAW)),t}function $6(){return W().getNumber("WEBGL_VERSION")===2?1:4}function q_(r){return Fa(r,()=>r.createTexture(),"Unable to create WebGLTexture.")}function H_(r,e){let t=W().getNumber("WEBGL_MAX_TEXTURE_SIZE");if(r<=0||e<=0){let n=`[${r}x${e}]`;throw new Error("Requested texture size "+n+" is invalid.")}if(r>t||e>t){let n=`[${r}x${e}]`,o=`[${t}x${t}]`;throw new Error("Requested texture size "+n+" greater than WebGL maximum on this browser / GPU "+o+".")}}function K_(r){return Fa(r,()=>r.createFramebuffer(),"Unable to create WebGLFramebuffer.")}function Ig(r,e,t,n,o,s,a){let i=r.getAttribLocation(e,t);return i===-1?!1:(Ie(r,()=>r.bindBuffer(r.ARRAY_BUFFER,n)),Ie(r,()=>r.vertexAttribPointer(i,o,r.FLOAT,!1,s,a)),Ie(r,()=>r.enableVertexAttribArray(i)),!0)}function oE(r,e,t){nE(r,t),Ie(r,()=>r.activeTexture(r.TEXTURE0+t)),Ie(r,()=>r.bindTexture(r.TEXTURE_2D,e))}function R6(r,e){nE(r,e),Ie(r,()=>r.activeTexture(r.TEXTURE0+e)),Ie(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function X_(r,e,t){return Fa(r,()=>r.getUniformLocation(e,t),'uniform "'+t+'" not present in program.')}function Y_(r,e,t){return r.getUniformLocation(e,t)}function Z_(r,e,t,n){Ie(r,()=>oE(r,e,n)),Ie(r,()=>r.uniform1i(t,n))}function F6(r){Ie(r,()=>r.bindFramebuffer(r.FRAMEBUFFER,null)),Ie(r,()=>r.viewport(0,0,r.canvas.width,r.canvas.height)),Ie(r,()=>r.scissor(0,0,r.canvas.width,r.canvas.height))}function xf(r,e,t){Ie(r,()=>r.bindFramebuffer(r.FRAMEBUFFER,t)),Ie(r,()=>r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,e,0))}function Ng(r,e){Ie(r,()=>r.bindFramebuffer(r.FRAMEBUFFER,e)),Ie(r,()=>r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,null,0))}function dp(r){let e=r.checkFramebufferStatus(r.FRAMEBUFFER);if(e!==r.FRAMEBUFFER_COMPLETE)throw new Error("Error binding framebuffer: "+sE(r,e))}function sE(r,e){switch(e){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 ${e}`}}function Fa(r,e,t){let n=Ie(r,()=>e());if(n==null)throw new Error(t);return n}function nE(r,e){let t=r.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,n=e+r.TEXTURE0;if(nt){let o=`[gl.TEXTURE0, gl.TEXTURE${t}]`;throw new Error(`textureUnit must be in ${o}.`)}}function Oa(r,e=2){return y.sizeFromShape(r.slice(0,r.length-e))}function Pa(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 yf(r){let e=[1,1,1];return r.length===0||r.length===1&&r[0]===1||(e=[Oa(r),...Pa(r)]),e}function J_(r,e=!1){let t=W().getNumber("WEBGL_MAX_TEXTURE_SIZE");e&&(t=t*2,r=r.map((o,s)=>s>=r.length-2?y.nearestLargerEven(r[s]):r[s]),r.length===1&&(r=[2,r[0]])),r.length!==2&&(r=y.squeezeShape(r).newShape);let n=y.sizeFromShape(r);if(r.length<=1&&n<=t)return[1,n];if(r.length===2&&r[0]<=t&&r[1]<=t)return r;if(r.length===3&&r[0]*r[1]<=t&&r[2]<=t)return[r[0]*r[1],r[2]];if(r.length===3&&r[0]<=t&&r[1]*r[2]<=t)return[r[0],r[1]*r[2]];if(r.length===4&&r[0]*r[1]*r[2]<=t&&r[3]<=t)return[r[0]*r[1]*r[2],r[3]];if(r.length===4&&r[0]<=t&&r[1]*r[2]*r[3]<=t)return[r[0],r[1]*r[2]*r[3]];if(e){let o=Oa(r),s=2,a=2;return r.length&&([s,a]=Pa(r)),n=o*(s/2)*(a/2),y.sizeToSquarishShape(n).map(i=>i*2)}return y.sizeToSquarishShape(n)}function Sg(r){return r%2==0}function dl(r,e){if(r=r.slice(-2),e=e.slice(-2),y.arraysEqual(r,e)||!r.length||!e.length||r[0]===0||r[1]===0||e[0]===0||e[1]===0)return!0;if(r.length!==e.length){let t=r.slice(-1)[0],n=e.slice(-1)[0];if(t===n||Sg(t)&&Sg(n)&&(r[0]===1||e[0]===1))return!0}return r[1]===e[1]&&Sg(r[0])&&Sg(e[0])}var Tg,Ag;function Q_(r){if(Tg==null){let e=Vn(r);Tg=e.getParameter(e.MAX_TEXTURE_SIZE)}return Tg}function O6(){Tg=null}function P6(){Ag=null}function ek(r){if(Ag==null){let e=Vn(r);Ag=e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,Ag)}function tk(r){if(r===0)return 0;let e,t=Vn(r);return In(t,"EXT_disjoint_timer_query_webgl2")&&r===2?e=2:In(t,"EXT_disjoint_timer_query")?e=1:e=0,e}function In(r,e){return r.getExtension(e)!=null}function Eg(r){try{if(Vn(r)!=null)return!0}catch(e){return console.log("Error when getting WebGL context: ",e),!1}return!1}function nk(r){if(r===0)return!1;let e=Vn(r);if(r===1){if(!In(e,"OES_texture_float"))return!1}else if(!In(e,"EXT_color_buffer_float"))return!1;return rk(e)}function ok(r){if(r===0)return!1;let e=Vn(r);if(r===1){if(!In(e,"OES_texture_float")||!In(e,"WEBGL_color_buffer_float"))return!1}else{if(In(e,"EXT_color_buffer_float"))return rk(e);let n="EXT_color_buffer_half_float";if(In(e,n)){let o=e.getExtension(n);return M6(e,o)}return!1}return rk(e)}function rk(r){let e=hf(r),t=r.createTexture();r.bindTexture(r.TEXTURE_2D,t);let n=1,o=1;r.texImage2D(r.TEXTURE_2D,0,e.internalFormatFloat,n,o,0,e.textureFormatFloat,e.textureTypeFloat,null);let s=r.createFramebuffer();r.bindFramebuffer(r.FRAMEBUFFER,s),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,t,0);let a=r.checkFramebufferStatus(r.FRAMEBUFFER)===r.FRAMEBUFFER_COMPLETE;return r.bindTexture(r.TEXTURE_2D,null),r.bindFramebuffer(r.FRAMEBUFFER,null),r.deleteTexture(t),r.deleteFramebuffer(s),a}function M6(r,e){let t=hf(r,e),n=r.createTexture();r.bindTexture(r.TEXTURE_2D,n);let o=1,s=1;r.texImage2D(r.TEXTURE_2D,0,t.internalFormatHalfFloat,o,s,0,t.textureFormatFloat,t.textureTypeHalfFloat,null);let a=r.createFramebuffer();r.bindFramebuffer(r.FRAMEBUFFER,a),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,n,0);let i=r.checkFramebufferStatus(r.FRAMEBUFFER)===r.FRAMEBUFFER_COMPLETE;return r.bindTexture(r.TEXTURE_2D,null),r.bindFramebuffer(r.FRAMEBUFFER,null),r.deleteTexture(n),r.deleteFramebuffer(a),i}function sk(r){return r!==2?!1:Vn(r).fenceSync!=null}function $s(r,e){Array.isArray(r)||(r=[r]),r.forEach(t=>{t!=null&&y.assert(t.dtype!=="complex64",()=>`${e} does not support complex64 tensors in the WebGL backend.`)})}var Me=W();Me.registerFlag("HAS_WEBGL",()=>Me.getNumber("WEBGL_VERSION")>0);Me.registerFlag("WEBGL_VERSION",()=>Eg(2)?2:Eg(1)?1:0);Me.registerFlag("WEBGL_CHECK_NUMERICAL_PROBLEMS",()=>!1);Me.registerFlag("WEBGL_BUFFER_SUPPORTED",()=>Me.get("WEBGL_VERSION")===2);Me.registerFlag("WEBGL_CPU_FORWARD",()=>!0);Me.registerFlag("WEBGL_FORCE_F16_TEXTURES",()=>!1);Me.registerFlag("WEBGL_PACK",()=>Me.getBool("HAS_WEBGL"));Me.registerFlag("WEBGL_PACK_NORMALIZATION",()=>Me.getBool("WEBGL_PACK"));Me.registerFlag("WEBGL_PACK_CLIP",()=>Me.getBool("WEBGL_PACK"));Me.registerFlag("WEBGL_PACK_DEPTHWISECONV",()=>!1);Me.registerFlag("WEBGL_PACK_BINARY_OPERATIONS",()=>Me.getBool("WEBGL_PACK"));Me.registerFlag("WEBGL_PACK_UNARY_OPERATIONS",()=>Me.getBool("WEBGL_PACK"));Me.registerFlag("WEBGL_PACK_ARRAY_OPERATIONS",()=>Me.getBool("WEBGL_PACK"));Me.registerFlag("WEBGL_PACK_IMAGE_OPERATIONS",()=>Me.getBool("WEBGL_PACK"));Me.registerFlag("WEBGL_PACK_REDUCE",()=>Me.getBool("WEBGL_PACK"));Me.registerFlag("WEBGL_LAZILY_UNPACK",()=>Me.getBool("WEBGL_PACK"));Me.registerFlag("WEBGL_CONV_IM2COL",()=>Me.getBool("WEBGL_PACK"));Me.registerFlag("WEBGL_MAX_TEXTURE_SIZE",()=>Q_(Me.getNumber("WEBGL_VERSION")));Me.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER",()=>ek(Me.getNumber("WEBGL_VERSION")));Me.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION",()=>{let r=Me.getNumber("WEBGL_VERSION");return r===0?0:tk(r)});Me.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE",()=>Me.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0&&!Vc.isMobile());Me.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE",()=>nk(Me.getNumber("WEBGL_VERSION")));Me.registerFlag("WEBGL_RENDER_FLOAT32_ENABLED",()=>Me.getBool("WEBGL_FORCE_F16_TEXTURES")?!1:Me.getBool("WEBGL_RENDER_FLOAT32_CAPABLE"));Me.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED",()=>ok(Me.getNumber("WEBGL_VERSION")));Me.registerFlag("WEBGL_FENCE_API_ENABLED",()=>sk(Me.getNumber("WEBGL_VERSION")));Me.registerFlag("WEBGL_SIZE_UPLOAD_UNIFORM",()=>Me.getBool("WEBGL_RENDER_FLOAT32_ENABLED")?4:0);Me.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}.`)});Me.registerFlag("WEBGL_FLUSH_THRESHOLD",()=>-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}.`)});function Ft(){let r,e,t,n,o,s,a,i,l,u;return W().getNumber("WEBGL_VERSION")===2?(r="#version 300 es",e="in",t="out",n="in",o="texture",s="outputColor",a="out vec4 outputColor;",i=` bool isnan_custom(float val) { return (val > 0.0 || val < 0.0) ? false : val != 0.0; } bvec4 isnan_custom(vec4 val) { return bvec4(isnan_custom(val.x), isnan_custom(val.y), isnan_custom(val.z), isnan_custom(val.w)); } #define isnan(value) isnan_custom(value) `,l="",u=` #define round(value) newRound(value) int newRound(float value) { return int(floor(value + 0.5)); } ivec4 newRound(vec4 value) { return ivec4(floor(value + vec4(0.5))); } `):(r="",e="attribute",t="varying",n="varying",o="texture2D",s="gl_FragColor",a="",i=` #define isnan(value) isnan_custom(value) bool isnan_custom(float val) { return (val > 0. || val < 1. || val == 0.) ? false : true; } bvec4 isnan_custom(vec4 val) { return bvec4(isnan(val.x), isnan(val.y), isnan(val.z), isnan(val.w)); } `,l=` uniform float INFINITY; bool isinf(float val) { return abs(val) == INFINITY; } bvec4 isinf(vec4 val) { return equal(abs(val), vec4(INFINITY)); } `,u=` int round(float value) { return int(floor(value + 0.5)); } ivec4 round(vec4 value) { return ivec4(floor(value + vec4(0.5))); } `),{version:r,attribute:e,varyingVs:t,varyingFs:n,texture2D:o,output:s,defineOutput:a,defineSpecialNaN:i,defineSpecialInf:l,defineRound:u}}function Rs(r,e,t="index"){let n=y.computeStrides(e);return n.map((o,s)=>{let a=`int ${r[s]} = ${t} / ${o}`,i=s===n.length-1?`int ${r[s+1]} = ${t} - ${r[s]} * ${o}`:`index -= ${r[s]} * ${o}`;return`${a}; ${i};`}).join("")}function hp(r){let e=y.computeStrides(r).map(t=>t.toString());return` int getFlatIndex(ivec3 coords) { return coords.x * ${e[0]} + coords.y * ${e[1]} + coords.z; } `}var Dg=` 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 ik=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=ml.DENSE;let t=fl(e),n=Ft();this.outputShape=e,this.userCode=` ivec3 outCoordsFromFlatIndex(int index) { ${Rs(["r","c","d"],e)} return ivec3(r, c, d); } void main() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(${t[0]}, ${t[1]})); int index = 4 * (resTexRC.x * ${t[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); } ${n.output} = result; } `}};var ak=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=ml.DENSE;let t=fl(e),n=Ft();this.outputShape=e,this.userCode=` ivec3 outCoordsFromFlatIndex(int index) { ${Rs(["r","c","d"],e)} return ivec3(r, c, d); } void main() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(${t[0]}, ${t[1]})); int index = 4 * (resTexRC.x * ${t[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)); } ${n.output} = result; } `}};var lk=class{constructor(e){this.variableNames=["A"],this.outTexUsage=Dr.DOWNLOAD;let t=Ft();this.outputShape=e,this.userCode=` ${Dg} void main() { float x = getAAtOutCoords(); ${t.output} = encode_float(x); } `}};var uk=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=Dr.DOWNLOAD;let t=Ft();this.outputShape=e,this.userCode=` ${Dg} void main() { ivec3 coords = getOutputCoords(); float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z)); ${t.output} = encode_float(x); } `}};var ck=class{constructor(e,t,n=!1){this.variableNames=["A"];let o=Ft(),[s,a]=t;this.outputShape=e;let i="result";n&&(i="floor(result * 255. + 0.5)"),this.userCode=` ${hp(e)} void main() { ivec3 coords = getOutputCoords(); int flatIndex = getFlatIndex(coords); int offset = imod(flatIndex, 4); flatIndex = idiv(flatIndex, 4, 1.); int r = flatIndex / ${a}; int c = imod(flatIndex, ${a}); vec2 uv = (vec2(c, r) + halfCR) / vec2(${a}.0, ${s}.0); vec4 values = ${o.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]; } ${o.output} = vec4(${i}, 0., 0., 0.); } `}};var pk=class{constructor(e,t,n=!1){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;let o=Ft(),[s,a]=t;this.outputShape=e;let i="",l="result";n&&(l="floor(result * 255. + 0.5)");for(let u=0;u<=1;u++)for(let c=0;c<=1;c++){let p=u*2+c;i+=` localCoords = coords; if(localCoords[2] + ${c} < ${e[2]}) { localCoords[2] += ${c}; if(localCoords[1] + ${u} < ${e[1]}) { localCoords[1] += ${u}; flatIndex = getFlatIndex(localCoords); offset = imod(flatIndex, 4); flatIndex = idiv(flatIndex, 4, 1.); r = flatIndex / ${a}; c = imod(flatIndex, ${a}); uv = (vec2(c, r) + halfCR) / vec2(${a}.0, ${s}.0); values = ${o.texture2D}(A, uv); if(offset == 0) { result[${p}] = values[0]; } else if(offset == 1) { result[${p}] = values[1]; } else if(offset == 2) { result[${p}] = values[2]; } else { result[${p}] = values[3]; } } } `}this.userCode=` ${hp(e)} void main() { ivec3 coords = getOutputCoords(); vec4 result = vec4(0.); int flatIndex, r, c, offset; ivec3 localCoords; vec2 uv; vec4 values; ${i} ${o.output} = ${l}; } `}};var iE={};Ke(iE,{bindVertexProgramAttributeStreams:()=>wk,createBufferFromOutputTexture:()=>vk,createFloat16MatrixTexture:()=>gk,createFloat16PackedMatrixTexture:()=>bk,createFloat32MatrixTexture:()=>hk,createIndexBuffer:()=>dk,createPackedMatrixTexture:()=>yk,createUnsignedBytesMatrixTexture:()=>xk,createVertexBuffer:()=>fk,createVertexShader:()=>mk,downloadByteEncodedFloatMatrixFromOutputTexture:()=>Ik,downloadFloat32MatrixFromBuffer:()=>Ck,downloadMatrixFromPackedOutputTexture:()=>Sk,downloadPackedMatrixFromBuffer:()=>Nk,getInternalFormatForFloat16MatrixTexture:()=>Rg,getInternalFormatForFloat16PackedMatrixTexture:()=>Pg,getInternalFormatForFloat32MatrixTexture:()=>$g,getInternalFormatForPackedMatrixTexture:()=>Og,getInternalFormatForUnsignedBytesMatrixTexture:()=>Fg,uploadDenseMatrixToTexture:()=>_k,uploadPixelDataToTexture:()=>kk});function mk(r){let e=Ft(),t=`${e.version} precision highp float; ${e.attribute} vec3 clipSpacePos; ${e.attribute} vec2 uv; ${e.varyingVs} vec2 resultUV; void main() { gl_Position = vec4(clipSpacePos, 1); resultUV = uv; }`;return B_(r,t)}function fk(r){let e=new Float32Array([-1,1,0,0,1,-1,-1,0,0,0,1,1,0,1,1,1,-1,0,1,0]);return W_(r,e)}function dk(r){let e=new Uint16Array([0,1,2,2,1,3]);return U_(r,e)}function bf(r,e,t,n,o,s){H_(e,t);let a=q_(r),i=r.TEXTURE_2D;return Ie(r,()=>r.bindTexture(i,a)),Ie(r,()=>r.texParameteri(i,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE)),Ie(r,()=>r.texParameteri(i,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE)),Ie(r,()=>r.texParameteri(i,r.TEXTURE_MIN_FILTER,r.NEAREST)),Ie(r,()=>r.texParameteri(i,r.TEXTURE_MAG_FILTER,r.NEAREST)),Ie(r,()=>r.texImage2D(i,0,n,e,t,0,o,s,null)),Ie(r,()=>r.bindTexture(r.TEXTURE_2D,null)),a}function $g(r){return r.internalFormatFloat}function hk(r,e,t,n){let[o,s]=Ku(e,t);return bf(r,o,s,$g(n),n.textureFormatFloat,r.FLOAT)}function Rg(r){return r.internalFormatHalfFloat}function gk(r,e,t,n){let[o,s]=Ku(e,t);return bf(r,o,s,Rg(n),n.textureFormatFloat,n.textureTypeHalfFloat)}function Fg(r){return r.downloadTextureFormat}function xk(r,e,t,n){let[o,s]=Ku(e,t);return bf(r,o,s,Fg(n),r.RGBA,r.UNSIGNED_BYTE)}function Og(r){return r.internalFormatPackedFloat}function yk(r,e,t,n){let[o,s]=Bi(e,t);return bf(r,o,s,Og(n),r.RGBA,r.FLOAT)}function Pg(r){return r.internalFormatPackedHalfFloat}function bk(r,e,t,n){let[o,s]=Bi(e,t);return bf(r,o,s,Pg(n),r.RGBA,n.textureTypeHalfFloat)}function wk(r,e,t){let n=0,o=3*4,s=3*4+2*4;return Ie(r,()=>r.bindBuffer(r.ARRAY_BUFFER,t)),Ig(r,e,"clipSpacePos",t,3,s,n)&&Ig(r,e,"uv",t,2,s,o)}function _k(r,e,t,n,o,s){Ie(r,()=>r.bindTexture(r.TEXTURE_2D,e));let a,i,l;o instanceof Uint8Array?(a=new Uint8Array(t*n*4),i=r.UNSIGNED_BYTE,l=r.RGBA):(a=new Float32Array(t*n*4),i=r.FLOAT,l=s.internalFormatPackedFloat),a.set(o),Ie(r,()=>r.texImage2D(r.TEXTURE_2D,0,l,t,n,0,r.RGBA,i,a)),Ie(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function kk(r,e,t){Ie(r,()=>r.bindTexture(r.TEXTURE_2D,e)),t.data instanceof Uint8Array?Ie(r,()=>r.texImage2D(r.TEXTURE_2D,0,r.RGBA,t.width,t.height,0,r.RGBA,r.UNSIGNED_BYTE,t.data)):Ie(r,()=>r.texImage2D(r.TEXTURE_2D,0,r.RGBA,r.RGBA,r.UNSIGNED_BYTE,t)),Ie(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function vk(r,e,t,n){let o=r.createBuffer();Ie(r,()=>r.bindBuffer(r.PIXEL_PACK_BUFFER,o));let i=4*4*e*t;return Ie(r,()=>r.bufferData(r.PIXEL_PACK_BUFFER,i,r.STREAM_READ)),Ie(r,()=>r.readPixels(0,0,t,e,r.RGBA,r.FLOAT,0)),Ie(r,()=>r.bindBuffer(r.PIXEL_PACK_BUFFER,null)),o}function Ck(r,e,t){let n=r,o=new Float32Array(t);return n.bindBuffer(n.PIXEL_PACK_BUFFER,e),n.getBufferSubData(n.PIXEL_PACK_BUFFER,0,o),n.bindBuffer(n.PIXEL_PACK_BUFFER,null),o}function Ik(r,e,t,n){let[o,s]=Ku(e,t),a=4,i=new Uint8Array(QA(e*t,a));return Ie(r,()=>r.readPixels(0,0,o,s,n.downloadTextureFormat,r.UNSIGNED_BYTE,i)),new Float32Array(i.buffer)}function Nk(r,e,t,n,o,s,a,i){let l=r,u=new Float32Array(eE(s,a));return l.bindBuffer(l.PIXEL_PACK_BUFFER,e),l.getBufferSubData(l.PIXEL_PACK_BUFFER,0,u),l.bindBuffer(l.PIXEL_PACK_BUFFER,null),u}function Sk(r,e,t){let n=new Float32Array(e*t*4);return Ie(r,()=>r.readPixels(0,0,t,e,r.RGBA,r.FLOAT,n)),n}var Mg=class{constructor(e){this.outputTexture=null,this.program=null,this.disposed=!1,this.vertexAttrsAreBound=!1,this.itemsToPoll=[];let t=W().getNumber("WEBGL_VERSION");e!=null?(this.gl=e,L_(t,e)):this.gl=Vn(t);let n="WEBGL_color_buffer_float",o="EXT_color_buffer_half_float";if(W().getNumber("WEBGL_VERSION")===1){let s="OES_texture_float",a="OES_texture_half_float";if(this.textureFloatExtension=fp(this.gl,s),In(this.gl,a))this.textureHalfFloatExtension=fp(this.gl,a);else if(W().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),In(this.gl,o))this.colorBufferHalfFloatExtension=fp(this.gl,o);else if(W().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",In(this.gl,n))this.colorBufferFloatExtension=this.gl.getExtension(n);else if(In(this.gl,o))this.colorBufferHalfFloatExtension=this.gl.getExtension(o);else throw new Error("GL context does not support color renderable floats");this.vertexBuffer=fk(this.gl),this.indexBuffer=dk(this.gl),this.framebuffer=K_(this.gl),this.textureConfig=hf(this.gl,this.textureHalfFloatExtension)}get debug(){return W().getBool("DEBUG")}dispose(){if(this.disposed)return;this.program!=null&&console.warn("Disposing a GPGPUContext that still has a bound WebGLProgram. This is probably a resource leak, delete the program with GPGPUContext.deleteProgram before disposing."),this.outputTexture!=null&&console.warn("Disposing a GPGPUContext that still has a bound output matrix texture. This is probably a resource leak, delete the output matrix texture with GPGPUContext.deleteMatrixTexture before disposing.");let e=this.gl;Ie(e,()=>e.finish()),Ie(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,null)),Ie(e,()=>e.deleteFramebuffer(this.framebuffer)),Ie(e,()=>e.bindBuffer(e.ARRAY_BUFFER,null)),Ie(e,()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null)),Ie(e,()=>e.deleteBuffer(this.indexBuffer)),this.disposed=!0}createFloat32MatrixTexture(e,t){return this.throwIfDisposed(),hk(this.gl,e,t,this.textureConfig)}createFloat16MatrixTexture(e,t){return this.throwIfDisposed(),gk(this.gl,e,t,this.textureConfig)}createUnsignedBytesMatrixTexture(e,t){return this.throwIfDisposed(),xk(this.gl,e,t,this.textureConfig)}uploadPixelDataToTexture(e,t){this.throwIfDisposed(),kk(this.gl,e,t)}uploadDenseMatrixToTexture(e,t,n,o){this.throwIfDisposed(),_k(this.gl,e,t,n,o,this.textureConfig)}createFloat16PackedMatrixTexture(e,t){return this.throwIfDisposed(),bk(this.gl,e,t,this.textureConfig)}createPackedMatrixTexture(e,t){return this.throwIfDisposed(),yk(this.gl,e,t,this.textureConfig)}deleteMatrixTexture(e){this.throwIfDisposed(),this.outputTexture===e&&(Ng(this.gl,this.framebuffer),this.outputTexture=null),Ie(this.gl,()=>this.gl.deleteTexture(e))}downloadByteEncodedFloatMatrixFromOutputTexture(e,t,n){return this.downloadMatrixDriver(e,()=>Ik(this.gl,t,n,this.textureConfig))}downloadPackedMatrixFromBuffer(e,t,n,o,s,a){return Nk(this.gl,e,t,n,o,s,a,this.textureConfig)}downloadFloat32MatrixFromBuffer(e,t){return Ck(this.gl,e,t)}createBufferFromTexture(e,t,n){this.bindTextureToFrameBuffer(e);let o=vk(this.gl,t,n,this.textureConfig);return this.unbindTextureToFrameBuffer(),o}createAndWaitForFence(){let e=this.createFence(this.gl);return this.pollFence(e)}createFence(e){let t,n;if(W().getBool("WEBGL_FENCE_API_ENABLED")){let o=e,s=o.fenceSync(o.SYNC_GPU_COMMANDS_COMPLETE,0);e.flush(),n=()=>{let a=o.clientWaitSync(s,0,0);return a===o.ALREADY_SIGNALED||a===o.CONDITION_SATISFIED},t=s}else W().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?(t=this.beginQuery(),this.endQuery(),n=()=>this.isQueryAvailable(t,W().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))):n=()=>!0;return{query:t,isFencePassed:n}}downloadMatrixFromPackedTexture(e,t,n){return this.downloadMatrixDriver(e,()=>Sk(this.gl,t,n))}createProgram(e){this.throwIfDisposed();let t=this.gl,n=V_(t,e),o=mk(t),s=G_(t);return Ie(t,()=>t.attachShader(s,o)),Ie(t,()=>t.attachShader(s,n)),j_(t,s),this.debug&&gf(t,s),this.vertexAttrsAreBound||(this.setProgram(s),this.vertexAttrsAreBound=wk(t,this.program,this.vertexBuffer)),s}deleteProgram(e){this.throwIfDisposed(),e===this.program&&(this.program=null),e!=null&&Ie(this.gl,()=>this.gl.deleteProgram(e))}setProgram(e){this.throwIfDisposed(),this.program=e,this.program!=null&&this.debug&&gf(this.gl,this.program),Ie(this.gl,()=>this.gl.useProgram(e))}getUniformLocation(e,t,n=!0){return this.throwIfDisposed(),n?X_(this.gl,e,t):Y_(this.gl,e,t)}getAttributeLocation(e,t){return this.throwIfDisposed(),Ie(this.gl,()=>this.gl.getAttribLocation(e,t))}getUniformLocationNoThrow(e,t){return this.throwIfDisposed(),this.gl.getUniformLocation(e,t)}setInputMatrixTexture(e,t,n){this.throwIfDisposed(),this.throwIfNoProgram(),Z_(this.gl,e,t,n)}setOutputMatrixTexture(e,t,n){this.setOutputMatrixTextureDriver(e,n,t)}setOutputPackedMatrixTexture(e,t,n){this.throwIfDisposed();let[o,s]=Bi(t,n);this.setOutputMatrixTextureDriver(e,o,s)}setOutputMatrixWriteRegion(e,t,n,o){this.setOutputMatrixWriteRegionDriver(n,e,o,t)}setOutputPackedMatrixWriteRegion(e,t,n,o){throw new Error("setOutputPackedMatrixWriteRegion not implemented.")}debugValidate(){this.program!=null&&gf(this.gl,this.program),dp(this.gl)}executeProgram(){this.throwIfDisposed(),this.throwIfNoProgram();let e=this.gl;this.debug&&this.debugValidate(),Ie(e,()=>e.drawElements(e.TRIANGLES,6,e.UNSIGNED_SHORT,0))}blockUntilAllProgramsCompleted(){this.throwIfDisposed(),Ie(this.gl,()=>this.gl.finish())}getQueryTimerExtension(){return this.disjointQueryTimerExtension==null&&(this.disjointQueryTimerExtension=fp(this.gl,W().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(W().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 e=this.getQueryTimerExtensionWebGL1(),t=e.createQueryEXT();return e.beginQueryEXT(e.TIME_ELAPSED_EXT,t),t}endQuery(){if(W().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){let t=this.gl,n=this.getQueryTimerExtensionWebGL2();t.endQuery(n.TIME_ELAPSED_EXT);return}let e=this.getQueryTimerExtensionWebGL1();e.endQueryEXT(e.TIME_ELAPSED_EXT)}async waitForQueryAndGetTime(e){return await y.repeatedTry(()=>this.disposed||this.isQueryAvailable(e,W().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))),this.getQueryTime(e,W().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))}getQueryTime(e,t){if(t===0)return null;if(t===2){let n=this.gl;return n.getQueryParameter(e,n.QUERY_RESULT)/1e6}else{let n=this.getQueryTimerExtensionWebGL1();return n.getQueryObjectEXT(e,n.QUERY_RESULT_EXT)/1e6}}isQueryAvailable(e,t){if(t===0)return!0;if(t===2){let n=this.gl,o=this.getQueryTimerExtensionWebGL2(),s=n.getQueryParameter(e,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(e,n.QUERY_RESULT_AVAILABLE_EXT);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(n.GPU_DISJOINT_EXT)),o&&!this.disjoint}}pollFence(e){return new Promise(t=>{this.addItemToPoll(()=>e.isFencePassed(),()=>t())})}pollItems(){let e=L6(this.itemsToPoll.map(t=>t.isDoneFn));for(let t=0;t<=e;++t){let{resolveFn:n}=this.itemsToPoll[t];n()}this.itemsToPoll=this.itemsToPoll.slice(e+1)}addItemToPoll(e,t){this.itemsToPoll.push({isDoneFn:e,resolveFn:t}),!(this.itemsToPoll.length>1)&&y.repeatedTry(()=>(this.pollItems(),this.itemsToPoll.length===0))}bindTextureToFrameBuffer(e){this.throwIfDisposed(),xf(this.gl,e,this.framebuffer),this.debug&&dp(this.gl)}unbindTextureToFrameBuffer(){this.outputTexture!=null?(xf(this.gl,this.outputTexture,this.framebuffer),this.debug&&dp(this.gl)):Ng(this.gl,this.framebuffer)}downloadMatrixDriver(e,t){this.bindTextureToFrameBuffer(e);let n=t();return this.unbindTextureToFrameBuffer(),n}setOutputMatrixTextureDriver(e,t,n){this.throwIfDisposed();let o=this.gl;xf(o,e,this.framebuffer),this.debug&&dp(o),this.outputTexture=e,Ie(o,()=>o.viewport(0,0,t,n)),Ie(o,()=>o.scissor(0,0,t,n))}setOutputMatrixWriteRegionDriver(e,t,n,o){this.throwIfDisposed(),Ie(this.gl,()=>this.gl.scissor(e,t,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 L6(r){let e=0;for(;e{let h=y.sizeFromShape(d.shapeInfo.logicalShape);d.shapeInfo.isUniform?o.push(`uniform float ${d.name}${h>1?`[${h}]`:""};`):(o.push(`uniform sampler2D ${d.name};`),o.push(`uniform int offset${d.name};`))});let s=o.join(` `),a=r.map(d=>z6(d,e,n)).join(` `),i=e.texShape,l=Ft(),u=G6(l),c,p,m=U6(l);return e.isPacked?(c=B6(e.logicalShape,i),p=W6(l)):(c=V6(e.logicalShape,i),p=j6(l)),n&&(m+=q6),[m,u,p,s,c,a,t].join(` `)}function gp(r){let e=r.shapeInfo.logicalShape;switch(e.length){case 0:return H6(r);case 1:return K6(r);case 2:return X6(r);case 3:return Y6(r);case 4:return Z6(r);case 5:return J6(r);case 6:return Q6(r);default:throw new Error(`${e.length}-D input sampling is not yet supported`)}}function uE(r){switch(r.shapeInfo.logicalShape.length){case 0:return e5(r);case 1:return t5(r);case 2:return r5(r);case 3:return n5(r);default:return o5(r)}}function z6(r,e,t=!1){let n="";t?n+=uE(r):n+=gp(r);let o=r.shapeInfo.logicalShape,s=e.logicalShape;return o.length<=s.length&&(t?n+=s5(r,e):n+=i5(r,e)),n}function B6(r,e){switch(r.length){case 0:return cE();case 1:return a5(r,e);case 2:return c5(r,e);case 3:return l5(r,e);default:return u5(r,e)}}function V6(r,e){switch(r.length){case 0:return cE();case 1:return p5(r,e);case 2:return g5(r,e);case 3:return m5(r,e);case 4:return f5(r,e);case 5:return d5(r,e);case 6:return h5(r,e);default:throw new Error(`${r.length}-D output sampling is not yet supported`)}}function G6(r){return` float sampleTexture(sampler2D textureSampler, vec2 uv) { return ${r.texture2D}(textureSampler, uv).r; } `}function j6(r){return` void setOutput(float val) { ${r.output} = vec4(val, 0, 0, 0); } `}function W6(r){return` void setOutput(vec4 val) { ${r.output} = val; } `}function U6(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); } ${x5} ${y5} ${b5} `}var x5=` 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); } `,y5=` 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); } `,b5=` 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); } `,q6=` 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 cE(){return` int getOutputCoords() { return 0; } `}function a5(r,e){let t=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)];return t[0]===1?` int getOutputCoords() { return 2 * int(resultUV.x * ${t[1]}.0); } `:t[1]===1?` int getOutputCoords() { return 2 * int(resultUV.y * ${t[0]}.0); } `:` int getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(${t[0]}, ${t[1]})); return 2 * (resTexRC.x * ${t[1]} + resTexRC.y); } `}function p5(r,e){return e[0]===1?` int getOutputCoords() { return int(resultUV.x * ${e[1]}.0); } `:e[1]===1?` int getOutputCoords() { return int(resultUV.y * ${e[0]}.0); } `:` int getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(${e[0]}, ${e[1]})); return resTexRC.x * ${e[1]} + resTexRC.y; } `}function l5(r,e){let t=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)],n=Math.ceil(r[2]/2),o=n*Math.ceil(r[1]/2);return` ivec3 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(${t[0]}, ${t[1]})); int index = resTexRC.x * ${t[1]} + resTexRC.y; int b = index / ${o}; index -= b * ${o}; int r = 2 * (index / ${n}); int c = imod(index, ${n}) * 2; return ivec3(b, r, c); } `}function m5(r,e){let t=Rs(["r","c","d"],r);return` ivec3 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(${e[0]}, ${e[1]})); int index = resTexRC.x * ${e[1]} + resTexRC.y; ${t} return ivec3(r, c, d); } `}function u5(r,e){let t=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)],n=Math.ceil(r[r.length-1]/2),o=n*Math.ceil(r[r.length-2]/2),s=o,a="",i="b, r, c";for(let l=2;l=1?c="coords = 0;":c=i.map(w=>`coords.${p[w+u]} = 0;`).join(` `);let m="";a<2&&s>0?m="coords":m=r.shapeInfo.logicalShape.map((w,b)=>`coords.${p[b+u]}`).join(", ");let f="return outputValue;",h=y.sizeFromShape(r.shapeInfo.logicalShape)===1,x=y.sizeFromShape(e.logicalShape)===1;if(s===1&&!h&&!x)f=` return vec4(outputValue.xy, outputValue.xy); `;else if(h&&!x)a===1?f=` return vec4(outputValue.x, outputValue.x, 0., 0.); `:f=` return vec4(outputValue.x); `;else if(i.length){let w=s-2,b=s-1;i.indexOf(w)>-1&&i.indexOf(b)>-1?f="return vec4(outputValue.x);":i.indexOf(w)>-1?f="return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);":i.indexOf(b)>-1&&(f="return vec4(outputValue.xx, outputValue.zz);")}return` vec4 ${o}() { ${l} coords = getOutputCoords(); ${c} vec4 outputValue = get${n}(${m}); ${f} } `}function i5(r,e){let t=r.name,n=t.charAt(0).toUpperCase()+t.slice(1),o="get"+n+"AtOutCoords",s=e.texShape,a=r.shapeInfo.texShape,i=r.shapeInfo.logicalShape.length,l=e.logicalShape.length;if(!r.shapeInfo.isUniform&&i===l&&r.shapeInfo.flatOffset==null&&y.arraysEqual(a,s))return` float ${o}() { return sampleTexture(${t}, resultUV); } `;let u=Le(l),c=aE(r.shapeInfo.logicalShape,e.logicalShape),p=l-i,m,f=["x","y","z","w","u","v"];i===0?m="":l<2&&c.length>=1?m="coords = 0;":m=c.map(h=>`coords.${f[h+p]} = 0;`).join(` `);let d="";return l<2&&i>0?d="coords":d=r.shapeInfo.logicalShape.map((h,g)=>`coords.${f[g+p]}`).join(", "),` float ${o}() { ${u} coords = getOutputCoords(); ${m} return get${n}(${d}); } `}function Le(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 yp(r,e){let t=JSON.parse(JSON.stringify(r));return t.shapeInfo.logicalShape=e,t}function bp(r,e){return e.map(t=>r[t]).join(", ")}function pE(r,e,t,n){let o=e.userCode,s=t.map((f,d)=>{let h={logicalShape:f.shape,texShape:f.isUniform?null:f.texData.texShape,isUniform:f.isUniform,isPacked:f.isUniform?!1:f.texData.isPacked,flatOffset:null};return f.texData!=null&&f.texData.slice!=null&&f.texData.slice.flatOffset>0&&(h.flatOffset=f.texData.slice.flatOffset),{name:e.variableNames[d],shapeInfo:h}}),a=s.map(f=>f.shapeInfo),i={logicalShape:n.shape,texShape:n.texData.texShape,isUniform:!1,isPacked:n.texData.isPacked,flatOffset:null},l=lE(s,i,o,e.packedInputs),u=r.createProgram(l),c=null,p=r.getUniformLocation(u,"NAN",!1);W().getNumber("WEBGL_VERSION")===1&&(c=r.getUniformLocation(u,"INFINITY",!1));let m={};for(let f=0;f{let o=t.logicalShape,s=e[n],a=s.shape;if(!y.arraysEqual(o,a))throw Error(`Binary was compiled with different shapes than the current args. Shapes ${o} and ${a} must match`);if(t.isUniform&&s.isUniform)return;let i=t.texShape,l=s.isUniform?null:s.texData.texShape;if(!y.arraysEqual(i,l))throw Error(`Binary was compiled with different texture shapes than the current args. Shape ${i} and ${l} must match`)})}function fE(r,e,t,n,o){mE(e.inShapeInfos,t),mE([e.outShapeInfo],[n]);let s=n.texData.texture,a=n.texData.texShape;n.texData.isPacked?r.setOutputPackedMatrixTexture(s,a[0],a[1]):r.setOutputMatrixTexture(s,a[0],a[1]),r.setProgram(e.webGLProgram),W().getNumber("WEBGL_VERSION")===1&&e.infLoc!==null&&r.gl.uniform1f(e.infLoc,Infinity),e.nanLoc!==null&&r.gl.uniform1f(e.nanLoc,NaN),t.forEach((i,l)=>{let u=e.program.variableNames[l],c=e.uniformLocations[u],p=e.uniformLocations[`offset${u}`];if(c!=null){if(i.isUniform){if(y.sizeFromShape(i.shape)<2)r.gl.uniform1f(c,i.uniformValues[0]);else{let m=i.uniformValues;m instanceof Float32Array||(m=new Float32Array(m)),r.gl.uniform1fv(c,m)}return}i.texData.slice!=null&&p!=null&&r.gl.uniform1i(p,i.texData.slice.flatOffset),r.setInputMatrixTexture(i.texData.texture,c,l)}}),o!=null&&o(r,e.webGLProgram),r.executeProgram()}function dE(r,e,t){let n="";e.concat(t).forEach(a=>{let i=a.texData!=null&&a.texData.slice!=null&&a.texData.slice.flatOffset>0,l=a.isUniform?"uniform":a.texData.texShape;n+=`${a.shape}_${l}_${i}`});let o=r.userCode,s=r.constructor.name;return s+="_"+n+"_"+o,s}var{addImpl:hE,bincountImpl:Lg,bincountReduceImpl:gE,ceilImpl:xE,concatImpl:yE,expImpl:bE,expm1Impl:wE,floorImpl:_E,gatherV2Impl:kE,greaterImpl:vE,lessImpl:CE,linSpaceImpl:IE,logImpl:NE,maxImpl:SE,maximumImpl:TE,minimumImpl:AE,multiplyImpl:EE,negImpl:DE,prodImpl:$E,rangeImpl:RE,rsqrtImpl:FE,simpleAbsImpl:zg,sliceImpl:OE,stridedSliceImpl:PE,subImpl:ME,tileImpl:LE,topKImpl:zE,transposeImpl:wp,uniqueImpl:BE}=yg;function Tk(r,e){return["x","y","z","w","u","v"].slice(0,e).map(t=>`${r}.${t}`)}function Wt(r,e){return e===1?[r]:Tk(r,e)}function VE(r,e){if(r===1)return"rc";let t="";for(let n=0;n ${e[0]}`;let n="";for(let o=r-2;o= ${e[o]}`,o= ${e}; bool rEdge = rp1 >= ${t}; `}function k5(r,e){let t=r.length,n=v5(t,e);return t===1?`getA(rc), rc + 1 >= ${r[0]} ? 0. : getA(rc + 1), 0, 0`:`getA(${n[0]}), cEdge ? 0. : getA(${n[1]}), rEdge ? 0. : getA(${n[2]}), rEdge || cEdge ? 0. : getA(${n[3]})`}var wf=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e;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=` ${C5(t)} ${hp(e)} void main() { ivec3 rc = getOutputCoords(); vec4 result = vec4(0.); ivec3 thisRC; int rows = ${e[1]}; int cols = ${e[2]}; ${n} setOutput(result); } `}};function C5(r){return` ivec3 inputCoordsFromReshapedOutCoords(int index) { ${Rs(["r","c","d"],r)} return ivec3(r, c, d); } `}var Ek=class{constructor(e){this.gpgpu=e,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0,this.freeTextures={},this.logEnabled=!1,this.usedTextures={}}acquireTexture(e,t,n){let o=jE(t,n),s=WE(e,o,n);s in this.freeTextures||(this.freeTextures[s]=[]),s in this.usedTextures||(this.usedTextures[s]=[]);let a=GE(e,o,this.gpgpu.gl,this.gpgpu.textureConfig,n);if(this.freeTextures[s].length>0){this.numFreeTextures--,this.numUsedTextures++,this._numBytesFree-=a,this.log();let l=this.freeTextures[s].shift();return this.usedTextures[s].push(l),l}let i;return o===kr.PACKED_2X2_FLOAT32?i=this.gpgpu.createPackedMatrixTexture(e[0],e[1]):o===kr.PACKED_2X2_FLOAT16?i=this.gpgpu.createFloat16PackedMatrixTexture(e[0],e[1]):o===kr.UNPACKED_FLOAT32?i=this.gpgpu.createFloat32MatrixTexture(e[0],e[1]):o===kr.UNPACKED_FLOAT16?i=this.gpgpu.createFloat16MatrixTexture(e[0],e[1]):o===kr.PACKED_4X1_UNSIGNED_BYTE&&(i=this.gpgpu.createUnsignedBytesMatrixTexture(e[0],e[1])),this.usedTextures[s].push(i),this.numUsedTextures++,this._numBytesAllocated+=a,this.log(),i}releaseTexture(e,t,n,o){if(this.freeTextures==null)return;let s=jE(n,o),a=WE(t,s,o);a in this.freeTextures||(this.freeTextures[a]=[]);let i=GE(t,s,this.gpgpu.gl,this.gpgpu.textureConfig,o),l=W().get("WEBGL_DELETE_TEXTURE_THRESHOLD");l!==-1&&this._numBytesAllocated>l?(this.gpgpu.deleteMatrixTexture(e),this._numBytesAllocated-=i):(this.freeTextures[a].push(e),this.numFreeTextures++,this._numBytesFree+=i),this.numUsedTextures--;let u=this.usedTextures[a],c=u.indexOf(e);if(c<0)throw new Error("Cannot release a texture that was never provided by this texture manager");u.splice(c,1),this.log()}log(){if(!this.logEnabled)return;let e=this.numFreeTextures+this.numUsedTextures;console.log("Free/Used",`${this.numFreeTextures} / ${this.numUsedTextures}`,`(${e})`);let t=this._numBytesFree/this._numBytesAllocated;console.log(`Bytes allocated: ${this._numBytesAllocated}`),console.log(`Bytes unused: ${this._numBytesFree} (${Math.round(100*t)}%)`)}get numBytesAllocated(){return this._numBytesAllocated}get numBytesFree(){return this._numBytesFree}getNumUsedTextures(){return this.numUsedTextures}getNumFreeTextures(){return this.numFreeTextures}dispose(){if(this.freeTextures!=null){for(let e in this.freeTextures)this.freeTextures[e].forEach(t=>{this.gpgpu.deleteMatrixTexture(t)});for(let e in this.usedTextures)this.usedTextures[e].forEach(t=>{this.gpgpu.deleteMatrixTexture(t)});this.freeTextures=null,this.usedTextures=null,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0}}};function I5(r,e){let t=r;if(e===t.R32F)return 4;if(e===t.R16F)return 2;if(e===t.RGBA32F)return 16;if(e===r.RGBA)return 16;if(e===t.RGBA16F)return 8;throw new Error(`Unknown internal format ${e}`)}function GE(r,e,t,n,o){let s=N5(e,n),a;if(o){let[l,u]=Bi(r[0],r[1]);a=l*u}else{let[l,u]=Ku(r[0],r[1]);a=l*u}let i=I5(t,s);return a*i}function N5(r,e){switch(r){case kr.PACKED_2X2_FLOAT32:return Og(e);case kr.PACKED_2X2_FLOAT16:return Pg(e);case kr.UNPACKED_FLOAT32:return $g(e);case kr.UNPACKED_FLOAT16:return Rg(e);case kr.PACKED_4X1_UNSIGNED_BYTE:return Fg(e);default:throw new Error(`Unknown physical texture type ${r}`)}}function S5(r){return W().getBool("WEBGL_RENDER_FLOAT32_ENABLED")?r?kr.PACKED_2X2_FLOAT32:kr.UNPACKED_FLOAT32:r?kr.PACKED_2X2_FLOAT16:kr.UNPACKED_FLOAT16}function jE(r,e){if(r===Dr.UPLOAD)return kr.PACKED_2X2_FLOAT32;if(r===Dr.RENDER||r==null)return S5(e);if(r===Dr.DOWNLOAD||r===Dr.PIXELS)return kr.PACKED_4X1_UNSIGNED_BYTE;throw new Error(`Unknown logical texture type ${r}`)}function WE(r,e,t){return`${r[0]}_${r[1]}_${e}_${t}`}var ln=class{constructor(e,t){this.variableNames=["A"],this.outputShape=e,this.userCode=` float unaryOperation(float x) { ${t} } void main() { float x = getAAtOutCoords(); float y = unaryOperation(x); setOutput(y); } `}},gr="if (isnan(x)) return x;",UE="return x;",Dk="return abs(x);";var qE="return (x >= 0.0) ? x : (exp(x) - 1.0);",HE=gr+` return (x < 0.0) ? 0.0 : x; `,KE=gr+` return (x < 0.0) ? 0.0 : min(6.0, x); `,_f="return x;";var XE="return x;",YE=` 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; `,ZE=` 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; `,JE=` 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; `,Fs=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.userCode=` vec4 unaryOperation(vec4 x) { ${t} } void main() { vec4 x = getAAtOutCoords(); vec4 y = unaryOperation(x); setOutput(y); } `}};var $k=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=e;let t=e.length,n=Wt("rc",t),o=Le(t),s=VE(t,n),a=n.slice(-2),i=t<=1?"rc":`vec2(${a.join(",")})`;this.userCode=` void main() { ${o} rc = getOutputCoords(); vec4 packedInput = getA(${s}); setOutput(getChannel(packedInput, ${i})); } `}};var T5=Ar.whereImpl,A5=1e-7,E5=1e-4,Bg={};function D5(r){return r in Bg||(Bg[r]={}),Bg[r]}var $5=128,R5=600;function F5(){return W().global.screen==null?1024:W().global.screen.height*W().global.screen.width*window.devicePixelRatio*R5/1024/1024}var Yu=class extends js{constructor(e){super();if(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.warnedAboutCPUBackend=!1,this.pendingDeletes=0,this.disposed=!1,!W().getBool("HAS_WEBGL"))throw new Error("WebGL is not supported on this device");if(e==null){let t=Vn(W().getNumber("WEBGL_VERSION"));this.binaryCache=D5(W().getNumber("WEBGL_VERSION")),this.gpgpu=new Mg(t),this.canvas=t.canvas,this.gpgpuCreatedLocally=!0}else this.gpgpu=e,this.binaryCache={},this.gpgpuCreatedLocally=!1,this.canvas=e.gl.canvas;this.textureManager=new Ek(this.gpgpu),this.numMBBeforeWarning=F5(),this.texData=new Za(this,Mn())}nextDataId(){return Yu.nextDataId++}numDataIds(){return this.texData.numDataIds()+(this.cpuBackend?this.cpuBackend.numDataIds():0)-this.pendingDeletes}write(e,t,n){if((W().getBool("WEBGL_CHECK_NUMERICAL_PROBLEMS")||W().getBool("DEBUG"))&&this.checkNumericalProblems(e),n==="complex64"&&e!=null)throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");let o={id:this.nextDataId()};return this.texData.set(o,{shape:t,dtype:n,values:e,usage:Dr.UPLOAD,refCount:1}),o}refCount(e){return this.texData.has(e)?this.texData.get(e).refCount:0}incRef(e){let t=this.texData.get(e);t.refCount++}decRef(e){if(this.texData.has(e)){let t=this.texData.get(e);t.refCount--}}move(e,t,n,o,s){if(W().getBool("DEBUG")&&this.checkNumericalProblems(t),o==="complex64")throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.texData.set(e,{shape:n,dtype:o,values:t,usage:Dr.UPLOAD,refCount:s})}disposeIntermediateTensorInfo(e){this.disposeData(e.dataId)}readSync(e){let t=this.texData.get(e),{values:n,dtype:o,complexTensorInfos:s,slice:a,shape:i,isPacked:l}=t;if(a!=null){let m;l?m=new Fs(i,_f):m=new ln(i,_f);let f=this.runWebGLProgram(m,[{dataId:e,shape:i,dtype:o}],o),d=this.readSync(f.dataId);return this.disposeIntermediateTensorInfo(f),d}if(n!=null)return this.convertAndCacheOnCPU(e);if(o==="string")return n;let u=this.activeTimers!=null,c;u&&(c=y.now());let p;if(o==="complex64"){let m=this.readSync(s.real.dataId),f=this.readSync(s.imag.dataId);p=N.mergeRealAndImagArrays(m,f)}else p=this.getValuesFromTexture(e);return u&&(this.downloadWaitMs+=y.now()-c),this.convertAndCacheOnCPU(e,p)}async read(e){if(this.pendingRead.has(e)){let d=this.pendingRead.get(e);return new Promise(h=>d.push(h))}let t=this.texData.get(e),{values:n,shape:o,slice:s,dtype:a,complexTensorInfos:i,isPacked:l}=t;if(s!=null){let d;l?d=new Fs(o,_f):d=new ln(o,_f);let h=this.runWebGLProgram(d,[{dataId:e,shape:o,dtype:a}],a),g=this.read(h.dataId);return this.disposeIntermediateTensorInfo(h),g}if(n!=null)return this.convertAndCacheOnCPU(e);if(!W().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")&&W().getNumber("WEBGL_VERSION")===2)throw new Error("tensor.data() with WEBGL_DOWNLOAD_FLOAT_ENABLED=false and WEBGL_VERSION=2 not yet supported.");let u=null,c;if(a!=="complex64"&&W().get("WEBGL_BUFFER_SUPPORTED")){c=this.decode(e);let d=this.texData.get(c.dataId);u=this.gpgpu.createBufferFromTexture(d.texture,...fl(o))}this.pendingRead.set(e,[]),a!=="complex64"&&await this.gpgpu.createAndWaitForFence();let p;if(a==="complex64"){let d=await Promise.all([this.read(i.real.dataId),this.read(i.imag.dataId)]),h=d[0],g=d[1];p=N.mergeRealAndImagArrays(h,g)}else if(u==null)p=this.getValuesFromTexture(e);else{let d=y.sizeFromShape(o);p=this.gpgpu.downloadFloat32MatrixFromBuffer(u,d)}c!=null&&this.disposeIntermediateTensorInfo(c);let m=this.convertAndCacheOnCPU(e,p),f=this.pendingRead.get(e);return this.pendingRead.delete(e),f.forEach(d=>d(m)),this.pendingDisposal.has(e)&&(this.pendingDisposal.delete(e),this.disposeData(e)&&Mn().removeDataId(e,this),this.pendingDeletes--),m}bufferSync(e){let t=this.readSync(e.dataId),n=t;if(e.dtype==="string")try{n=t.map(o=>y.decodeString(o))}catch(o){throw new Error("Failed to decode encoded string bytes into utf-8")}return ve(e.shape,e.dtype,n)}checkNumericalProblems(e){if(e!=null)for(let t=0;t0}async time(e){let t=this.activeTimers,n=[],o=!1;this.programTimersStack==null?(this.programTimersStack=n,o=!0):this.activeTimers.push(n),this.activeTimers=n,e();let s=y.flatten(this.activeTimers.map(l=>l.query)).filter(l=>l!=null),a=y.flatten(this.activeTimers.map(l=>l.name)).filter(l=>l!=null);this.activeTimers=t,o&&(this.programTimersStack=null);let i={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null};if(W().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0){let l=await Promise.all(s);i.kernelMs=y.sum(l),i.getExtraProfileInfo=()=>l.map((u,c)=>({name:a[c],ms:u})).map(u=>`${u.name}: ${u.ms}`).join(", ")}else i.kernelMs={error:"WebGL query timers are not supported in this environment."};return this.uploadWaitMs=0,this.downloadWaitMs=0,i}memory(){return{unreliable:!1,numBytesInGPU:this.numBytesInGPU,numBytesInGPUAllocated:this.textureManager.numBytesAllocated,numBytesInGPUFree:this.textureManager.numBytesFree}}startTimer(){return W().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?this.gpgpu.beginQuery():{startMs:y.now(),endMs:null}}endTimer(e){return W().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?(this.gpgpu.endQuery(),e):(e.endMs=y.now(),e)}async getQueryTime(e){if(W().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0)return this.gpgpu.waitForQueryAndGetTime(e);let t=e;return t.endMs-t.startMs}disposeData(e,t=!1){if(this.pendingDisposal.has(e))return!1;if(!this.texData.has(e))return!0;if(t?this.texData.get(e).refCount=0:this.texData.get(e).refCount--,!t&&this.texData.get(e).refCount>0)return!1;if(this.pendingRead.has(e))return this.pendingDisposal.add(e),this.pendingDeletes++,!1;this.releaseGPUData(e);let{complexTensorInfos:n}=this.texData.get(e);return n!=null&&(this.disposeData(n.real.dataId,t),this.disposeData(n.imag.dataId,t)),this.texData.delete(e),!0}releaseGPUData(e){let{texture:t,dtype:n,texShape:o,usage:s,isPacked:a,slice:i}=this.texData.get(e),l=i&&i.origDataId||e,u=this.dataRefCount.get(l);u>1?this.dataRefCount.set(l,u-1):(this.dataRefCount.delete(l),t!=null&&(this.numBytesInGPU-=this.computeBytes(o,n),this.textureManager.releaseTexture(t,o,s,a)));let c=this.texData.get(e);c.texture=null,c.texShape=null,c.isPacked=!1,c.slice=null}getTexture(e){return this.uploadToGPU(e),this.texData.get(e).texture}getDataInfo(e){return this.texData.get(e)}getCPUBackend(){return W().getBool("WEBGL_CPU_FORWARD")?(this.cpuBackend==null&&(this.cpuBackend=Mn().findBackend("cpu")),this.cpuBackend):null}shouldExecuteOnCPU(e,t=$5){let n=this.getCPUBackend();return!W().getBool("IS_TEST")&&!this.warnedAboutCPUBackend&&n==null&&(console.warn("Your application contains ops that are small enough to be executed on the CPU backend, however the CPU backend cannot be found. Consider importing the CPU backend (@tensorflow/tfjs-backend-cpu) for better performance."),this.warnedAboutCPUBackend=!0),n!=null&&e.every(o=>this.texData.get(o.dataId).texture==null&&y.sizeFromShape(o.shape)0&&y.isString(n[0])){let s=n.map(a=>y.encodeString(a));o=this.write(s,e,t)}else o=this.write(n,e,t);return this.texData.get(o).usage=null,{dataId:o,shape:e,dtype:t}}makeOutput(e,t,n){let{dataId:o}=this.makeTensorInfo(e,t,n);return Mn().makeTensorFromDataId(o,e,t,this)}unpackTensor(e){let t=new $k(e.shape);return this.runWebGLProgram(t,[e],e.dtype)}packTensor(e){let t=new Ak(e.shape),n=!0;return this.runWebGLProgram(t,[e],e.dtype,null,n)}packedReshape(e,t){let n=[Oa(e.shape),...Pa(e.shape)],o={dtype:e.dtype,shape:n,dataId:e.dataId},s=[Oa(t),...Pa(t)],a=new wf(s,n),i=!0,l=this.runWebGLProgram(a,[o],e.dtype,null,i);return{dataId:l.dataId,shape:t,dtype:l.dtype}}decode(e){let t=this.texData.get(e),{isPacked:n,shape:o,dtype:s}=t,a=yf(o),i;n?i=new ak(a):i=new ik(a);let l=!0,u=this.runWebGLProgram(i,[{shape:a,dtype:s,dataId:e}],s,null,l);return{dtype:s,shape:o,dataId:u.dataId}}runWebGLProgram(e,t,n,o,s=!1){let a=this.makeTensorInfo(e.outputShape,n),i=this.texData.get(a.dataId);if(e.packedOutput&&(i.isPacked=!0),e.outPackingScheme===ml.DENSE){let g=fl(e.outputShape);i.texShape=g.map(x=>x*2)}if(e.outTexUsage!=null&&(i.usage=e.outTexUsage),y.sizeFromShape(a.shape)===0)return i.values=y.getTypedArrayFromDType(a.dtype,0),a;let l=[],u=t.map(g=>{if(g.dtype==="complex64")throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.");let x=this.texData.get(g.dataId);if(x.texture==null){if(!e.packedInputs&&y.sizeFromShape(g.shape)<=W().getNumber("WEBGL_SIZE_UPLOAD_UNIFORM"))return{shape:g.shape,texData:null,isUniform:!0,uniformValues:x.values};e.packedInputs&&(x.isPacked=!0,x.shape=g.shape)}else if(!!x.isPacked!=!!e.packedInputs)g=x.isPacked?this.unpackTensor(g):this.packTensor(g),l.push(g),x=this.texData.get(g.dataId);else if(x.isPacked&&!dl(x.shape,g.shape)){let w=g,b=g.shape;g.shape=x.shape,g=this.packedReshape(g,b),l.push(g),x=this.texData.get(g.dataId),w.shape=b}return this.uploadToGPU(g.dataId),{shape:g.shape,texData:x,isUniform:!1}});this.uploadToGPU(a.dataId);let c={shape:a.shape,texData:i,isUniform:!1},p=dE(e,u,c),m=this.getAndSaveBinary(p,()=>pE(this.gpgpu,e,u,c)),f=this.activeTimers!=null,d;f&&(d=this.startTimer()),fE(this.gpgpu,m,u,c,o),l.forEach(g=>this.disposeIntermediateTensorInfo(g)),f&&(d=this.endTimer(d),this.activeTimers.push({name:e.constructor.name,query:this.getQueryTime(d)}));let h=W().get("WEBGL_FLUSH_THRESHOLD");if(h>0){let g=y.now();g-this.lastGlFlushTime>h&&(this.gpgpu.gl.flush(),this.lastGlFlushTime=g)}if(!W().getBool("WEBGL_LAZILY_UNPACK")&&i.isPacked&&s===!1){let g=this.unpackTensor(a);return this.disposeIntermediateTensorInfo(a),g}return a}compileAndRun(e,t,n,o,s=!1){return n=n||t[0].dtype,this.runWebGLProgram(e,t,n,o,s)}getAndSaveBinary(e,t){return e in this.binaryCache||(this.binaryCache[e]=t()),this.binaryCache[e]}getTextureManager(){return this.textureManager}dispose(){this.disposed||(W().getBool("IS_TEST")||Object.keys(this.binaryCache).forEach(t=>{this.gpgpu.deleteProgram(this.binaryCache[t].webGLProgram),delete this.binaryCache[t]}),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=V(()=>{if(!W().get("WEBGL_RENDER_FLOAT32_ENABLED")){let e=W().getBool("DEBUG");W().set("DEBUG",!1);let t=this.abs(ue(1e-8)).dataSync()[0];if(W().set("DEBUG",e),t>0)return 32}return 16})),this.floatPrecisionValue}epsilon(){return this.floatPrecision()===32?A5:E5}uploadToGPU(e){let t=this.texData.get(e),{shape:n,dtype:o,values:s,texture:a,usage:i,isPacked:l}=t;if(a!=null)return;let u=this.activeTimers!=null,c;u&&(c=y.now());let p=t.texShape;if(p==null&&(p=J_(n,l),t.texShape=p),s!=null){let m=yf(n),f,d=p[1],h=p[0],g=s instanceof Uint8Array;l?([d,h]=Bi(p[0],p[1]),f=new pk(m,[h,d],g)):f=new ck(m,[h,d],g);let x=this.makeTensorInfo([h,d],o);g?this.texData.get(x.dataId).usage=Dr.PIXELS:this.texData.get(x.dataId).usage=Dr.UPLOAD,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(x.dataId),d,h,s);let w=!0,b=this.runWebGLProgram(f,[x],o,null,w),_=this.texData.get(b.dataId);t.texture=_.texture,t.texShape=_.texShape,t.isPacked=_.isPacked,t.usage=_.usage,this.disposeIntermediateTensorInfo(x),this.texData.delete(b.dataId),t.values=null,u&&(this.uploadWaitMs+=y.now()-c)}else{let m=this.acquireTexture(p,i,o,l);t.texture=m}}convertAndCacheOnCPU(e,t){let n=this.texData.get(e),{dtype:o}=n;return this.releaseGPUData(e),t!=null&&(n.values=O5(t,o)),n.values}acquireTexture(e,t,n,o){if(this.numBytesInGPU+=this.computeBytes(e,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(e,t,o)}computeBytes(e,t){return e[0]*e[1]*y.bytesPerElement(t)}};Yu.nextDataId=0;function O5(r,e){if(e==="float32"||e==="complex64")return r;if(e==="int32"||e==="bool"){let t=e==="int32"?new Int32Array(r.length):new Uint8Array(r.length);for(let n=0;nnew Yu,2);var P5={forceHalfFloat:Fk};var Vg=` if (isnan(a)) return a; if (isnan(b)) return b; `;var Xo=class{constructor(e,t,n){this.variableNames=["A","B"],this.outputShape=N.assertAndGetBroadcastShape(t,n),this.userCode=` float binaryOperation(float a, float b) { ${e} } void main() { float a = getAAtOutCoords(); float b = getBAtOutCoords(); setOutput(binaryOperation(a, b)); } `}};var hl=` result.r = isNaN.r > 0. ? NAN : result.r; result.g = isNaN.g > 0. ? NAN : result.g; result.b = isNaN.b > 0. ? NAN : result.b; result.a = isNaN.a > 0. ? NAN : result.a; `;var Os=class{constructor(e,t,n,o=!1){this.variableNames=["A","B"],this.supportsBroadcasting=!0,this.packedInputs=!0,this.packedOutput=!0,this.outputShape=N.assertAndGetBroadcastShape(t,n);let s=this.outputShape.length,a="";if(o)if(s===0||y.sizeFromShape(this.outputShape)===1)a=` result.y = 0.; result.z = 0.; result.w = 0.; `;else if(a=` ${Le(s)} coords = getOutputCoords(); `,s===1)a+=` result.y = (coords + 1) >= ${this.outputShape[0]} ? 0. : result.y; result.z = 0.; result.w = 0.; `;else{let l=Wt("coords",s);a+=` bool nextRowOutOfBounds = (${l[s-2]} + 1) >= ${this.outputShape[s-2]}; bool nextColOutOfBounds = (${l[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) { ${e} } void main() { vec4 a = getAAtOutCoords(); vec4 b = getBAtOutCoords(); vec4 result = binaryOperation(a, b); ${a} setOutput(result); } `}};function Ut(r){let{inputs:e,backend:t}=r,{x:n}=e;return t.incRef(n.dataId),{dataId:n.dataId,shape:n.shape,dtype:n.dtype}}var QE={kernelName:Fn,backendName:"webgl",kernelFunc:Ut};function un(r){let{inputs:e,backend:t}=r,{real:n,imag:o}=e,s=t.makeTensorInfo(n.shape,"complex64"),a=t.texData.get(s.dataId),i=Ut({inputs:{x:n},backend:t}),l=Ut({inputs:{x:o},backend:t});return a.complexTensorInfos={real:i,imag:l},s}var e2={kernelName:Gl,backendName:"webgl",kernelFunc:un};var Ok="return (a < 0.) ? b * a : a;",Pk=` vec4 aLessThanZero = vec4(lessThan(a, vec4(0.))); return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); `;function M5(r){let{inputs:e,backend:t,attrs:n}=r,{x:o}=e,{alpha:s}=n,a=t.makeTensorInfo([],"float32",y.createScalarValue(s,"float32")),i=W().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Os(Pk,o.shape,a.shape):new Xo(Ok,o.shape,a.shape),l=t.runWebGLProgram(i,[o,a],o.dtype);return t.disposeIntermediateTensorInfo(a),l}var t2={kernelName:lo,backendName:"webgl",kernelFunc:M5};var Mk="return (a < 0.) ? b * a : a;",Lk=` vec4 aLessThanZero = vec4(lessThan(a, vec4(0.))); return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); `;function L5(r){let{inputs:e,backend:t}=r,{x:n,alpha:o}=e,s=W().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Os(Lk,n.shape,o.shape):new Xo(Mk,n.shape,o.shape);return t.runWebGLProgram(s,[n,o],n.dtype)}var r2={kernelName:_o,backendName:"webgl",kernelFunc:L5};var Gg="if (isnan(x)) return x;",n2=` if (isnan(a)) return a; if (isnan(b)) return b; `,o2=` result.r = isNaN.r > 0. ? NAN : result.r; result.g = isNaN.g > 0. ? NAN : result.g; result.b = isNaN.b > 0. ? NAN : result.b; result.a = isNaN.a > 0. ? NAN : result.a; `;function _e({opSnippet:r,packedOpSnippet:e,cpuKernelImpl:t,dtype:n}){return({inputs:o,backend:s})=>{let{x:a}=o,i=s,l=n||a.dtype;if(i.shouldExecuteOnCPU([a])&&t!=null){let p=i.texData.get(a.dataId),m=t(p.values,l);return i.makeTensorInfo(a.shape,l,m)}let u=W().getBool("WEBGL_PACK_UNARY_OPERATIONS")&&e!=null,c;return u?c=new Fs(a.shape,e):c=new ln(a.shape,r),i.runWebGLProgram(c,[a],l)}}function ot({opSnippet:r,packedOpSnippet:e,checkOutOfBounds:t=!1,supportsComplex:n=!1,cpuKernelImpl:o,dtype:s}){return({inputs:a,backend:i})=>{let{a:l,b:u}=a,c=i;if(n&&l.dtype==="complex64"){let d=c.texData.get(l.dataId),h=c.texData.get(u.dataId),[g,x]=[[d.complexTensorInfos.real,h.complexTensorInfos.real],[d.complexTensorInfos.imag,h.complexTensorInfos.imag]].map(b=>{let[_,k]=b,A={dataId:_.dataId,dtype:_.dtype,shape:l.shape},S={dataId:k.dataId,dtype:k.dtype,shape:u.shape},$=new Xo(r,l.shape,u.shape);return c.runWebGLProgram($,[A,S],dr(_.dtype,k.dtype))}),w=un({inputs:{real:g,imag:x},backend:c});return c.disposeIntermediateTensorInfo(g),c.disposeIntermediateTensorInfo(x),w}let p=s||dr(l.dtype,u.dtype);if(c.shouldExecuteOnCPU([l,u])&&o!=null){let d=c.texData.get(l.dataId),h=c.texData.get(u.dataId),[g,x]=o(l.shape,u.shape,d.values,h.values,p),w=c.makeTensorInfo(x,p),b=c.texData.get(w.dataId);return b.values=g,w}let m=W().getBool("WEBGL_PACK_BINARY_OPERATIONS")&&e!=null,f;return m?f=new Os(e,l.shape,u.shape,t):f=new Xo(r,l.shape,u.shape),c.runWebGLProgram(f,[l,u],p)}}function gl(r,e=!1){if(r==="linear")return e?XE:UE;if(r==="relu")return e?ZE:HE;if(r==="elu")return e?YE:qE;if(r==="relu6")return e?JE:KE;if(r==="prelu")return e?Lk:Mk;if(r==="leakyrelu")return e?Pk:Ok;throw new Error(`Activation ${r} has not been implemented for the WebGL backend.`)}var kf=class{constructor(e,t,n,o=!1,s=!1,a=!1,i=null,l=!1,u=!1){this.variableNames=["matrixA","matrixB"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=n;let c=o?e[1]:e[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="";i&&(l?g=`vec4 activation(vec4 a) { vec4 b = getPreluActivationWeightsAtOutCoords(); ${i} }`:u?g=`vec4 activation(vec4 a) { vec4 b = getLeakyreluAlphaAtOutCoords(); ${i} }`:g=`vec4 activation(vec4 x) { ${i} }`,x="result = activation(result);");let w=a?"result += getBiasAtOutCoords();":"";a&&this.variableNames.push("bias"),l&&this.variableNames.push("preluActivationWeights"),u&&this.variableNames.push("leakyreluAlpha");let b="rc.x",_="rc.x";e[0]`The new shape (${l}) 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.`);let c=a.texData.get(o.dataId);return c.isPacked&&!dl(o.shape,l)&&!(c.texture!==null&&dl(c.shape,l))?a2(o,l,a):(a.incRef(o.dataId),{dataId:o.dataId,shape:l,dtype:o.dtype})}var l2={kernelName:ds,backendName:"webgl",kernelFunc:pe};var Wg=class{constructor(e,t){this.variableNames=["x"];let{windowSize:n,batchSize:o,inSize:s,outSize:a}=e;this.outputShape=[o,a];let i=Math.floor(n/4)*4,l=n%4,u="sumValue += dot(values, ones);";if(t!=null){let p=1/t;u=`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 < ${i}; i += 4) { int inIdx = inOffset + i; vec4 values = vec4( getValue(batch, inIdx), getValue(batch, inIdx + 1), getValue(batch, inIdx + 2), getValue(batch, inIdx + 3) ); ${u} } int inIdx = inOffset + ${i}; if (${l===1}) { vec4 values = vec4(getValue(batch, inIdx), 0.0, 0.0, 0.0); ${u} } else if (${l===2}) { vec4 values = vec4( getValue(batch, inIdx), getValue(batch, inIdx + 1), 0.0, 0.0); ${u} } else if (${l===3}) { vec4 values = vec4( getValue(batch, inIdx), getValue(batch, inIdx + 1), getValue(batch, inIdx + 2), 0.0); ${u} } setOutput(sumValue); } `}};var Vk=class{constructor(e,t){this.variableNames=["x"];let{windowSize:n,batchSize:o,inSize:s,outSize:a}=e;this.outputShape=[o,a];let i="0.0",l="";t==="prod"?i="1.0":t==="min"?(i="1.0 / 1e-20",l="min"):t==="max"&&(i="-1.0 / 1e-20",l="max");let u=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="sum"?u="sumValue":t==="prod"?u="prodValue":t==="all"?u="allValue":t==="any"&&(u="anyValue");let c=Math.floor(n/4)*4,p=n%4,m=` if (${t==="sum"}) { sumValue += dot(values, ones); } else if (${t==="prod"}) { vec2 tmp = vec2(values[0], values[1]) * vec2(values[2], values[3]); prodValue *= tmp[0] * tmp[1]; } else { minMaxValue = ${l}(values, minMaxValue); } `,f="vec4";t==="all"?(i="1.0",m=` bool reducedAllValue = all(values); float floatedReducedAllValue = float(reducedAllValue); allValue = float(allValue >= 1.0 && floatedReducedAllValue >= 1.0); `,f="bvec4"):t==="any"&&(i="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 = ${i}; 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(${i}); 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(${u}); } `}};function z5(r){let e=[];for(;e.length===0||e[e.length-1].outSize!==1;){let t=e.length?e[e.length-1].outSize:r[1],n=N.computeOptimalWindowSize(t);e.push({inSize:t,windowSize:n,outSize:Math.ceil(t/n)})}return e}function Nn(r,e,t,n){let o=z5(r.shape),s=r;for(let a=0;a6)throw Error(`Transpose for rank ${e} is not yet supported`);let t=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u","resRC.v"],n=new Array(e);for(let o=0;o6)throw Error(`Packed transpose for rank ${this.rank} is not yet supported.`);let o=Le(this.rank),s=Tk("rc",this.rank),a=new Array(this.rank);for(let c=0;c=2&&c>=2&&b,()=>`Error in matMul: the input batch dimensions must either be the same or at least one input batch dimension must be 1. Got input batch dimensions of (${h}) and (${g}).`);let k=(x>w?r.shape.slice(0,-2):e.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 ${e.shape} and transposeA=${t} and transposeB=${n} must match.`);let A=t?[x,p,f]:[x,f,p],S=n?[w,d,m]:[w,m,d],$=pe({inputs:{x:r},backend:o,attrs:{shape:A}}),O=pe({inputs:{x:e},backend:o,attrs:{shape:S}}),M=[$,O],G=Math.max(x,w),j=t?$.shape[1]:$.shape[2],U=s!=null,q=a!=null,H=l==="leakyrelu",X=l!=null?gl(l,!0):null,ne=U||q||H||X!=null,Y;if((f===1||d===1)&&j>Wk&&ne===!1){let te=$,ie=O;t&&(te=Lt({inputs:{x:$},backend:o,attrs:{perm:[0,2,1]}}),M.push(te)),n&&(ie=Lt({inputs:{x:O},backend:o,attrs:{perm:[0,2,1]}}),M.push(ie));let le=d!==1,ae=d===1,fe=te;le&&(fe=pe({inputs:{x:te},backend:o,attrs:{shape:[G,j,1]}}),M.push(fe));let de=d===1?2:1,xe=ie;ae&&(xe=pe({inputs:{x:ie},backend:o,attrs:{shape:[G,1,j]}}),M.push(xe));let we=Bk({inputs:{a:fe,b:xe},backend:o});Y=vf({inputs:{x:we},backend:o,attrs:{axis:de,keepDims:!0}}),M.push(we)}else{let te=dr(r.dtype,e.dtype),ie=new kf(A,S,[G,f,d],t,n,U,X,q,H),le=[$,O];if(s!=null&&le.push(s),q&&le.push(a),H){let ae=o.makeTensorInfo([],"float32",y.createScalarValue(i,"float32"));le.push(ae),M.push(ae)}Y=o.runWebGLProgram(ie,le,te)}let re=pe({inputs:{x:Y},backend:o,attrs:{shape:k}});M.push(Y);for(let te of M)o.disposeIntermediateTensorInfo(te);return re}function V5(r){let{inputs:e,backend:t,attrs:n}=r,{a:o,b:s,bias:a,preluActivationWeights:i}=e,{transposeA:l,transposeB:u,activation:c,leakyreluAlpha:p}=n;return Zu({a:o,b:s,transposeA:l,transposeB:u,backend:t,bias:a,preluActivationWeights:i,leakyreluAlpha:p,activation:c})}var m2={kernelName:ws,backendName:"webgl",kernelFunc:V5};var f2="return abs(x);";function G5(r){let{inputs:e,backend:t}=r,{x:n}=e;if(t.shouldExecuteOnCPU([n])&&n.dtype!=="complex64"){let s=t.texData.get(n.dataId),a=zg(s.values);return t.makeTensorInfo(n.shape,n.dtype,a)}let o;return W().getBool("WEBGL_PACK_UNARY_OPERATIONS")?o=new Fs(n.shape,f2):o=new ln(n.shape,f2),t.runWebGLProgram(o,[n],n.dtype)}var d2={kernelName:as,backendName:"webgl",kernelFunc:G5};var j5=gr+` if (abs(x) > 1.) { return NAN; } return acos(x); `,W5=_e({opSnippet:j5}),h2={kernelName:qs,backendName:"webgl",kernelFunc:W5};var U5=gr+` if (x < 1.0) return NAN; return log(x + sqrt(x * x - 1.0));`,q5=_e({opSnippet:U5}),g2={kernelName:Hs,backendName:"webgl",kernelFunc:q5};var x2="return a + b;",H5=ot({opSnippet:x2,packedOpSnippet:x2,supportsComplex:!0,cpuKernelImpl:hE}),y2={kernelName:wn,backendName:"webgl",kernelFunc:H5};var Uk=class{constructor(e,t){this.outputShape=[],this.outputShape=e,this.variableNames=t.map((s,a)=>`T${a}`);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 qk=class{constructor(e,t){this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.variableNames=t.map((s,a)=>`T${a}`);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 Ug(r){let{inputs:e,backend:t}=r,n=e;if(n.length===1)return Ut({inputs:{x:n[0]},backend:t});if(n.length>W().get("WEBGL_MAX_TEXTURES_IN_SHADER")){let l=Math.floor(n.length/2),u=Ug({inputs:n.slice(0,l),backend:t}),c=Ug({inputs:n.slice(l),backend:t});return Ug({inputs:[u,c],backend:t})}let o=n.map(l=>l.dtype).reduce((l,u)=>dr(l,u)),s=n.map(l=>l.shape),i=W().getBool("WEBGL_PACK")?new qk(n[0].shape,s):new Uk(n[0].shape,s);return t.runWebGLProgram(i,n,o)}var b2={kernelName:qn,backendName:"webgl",kernelFunc:Ug};function K5(r){let{inputs:e,backend:t,attrs:n}=r,{x:o}=e,{axis:s,keepDims:a}=n,i=o.shape.length,l=y.parseAxisParam(s,o.shape),u=l,c=N.getAxesPermutation(u,i),p=o;c!=null&&(p=Lt({inputs:{x:o},backend:t,attrs:{perm:c}}),u=N.getInnerMostAxes(u.length,i)),N.assertAxesAreInnerMostDims("all",u,i);let[m,f]=N.computeOutAndReduceShapes(p.shape,u),d=y.sizeFromShape(f),h=pe({inputs:{x:p},backend:t,attrs:{shape:[-1,d]}}),g=Nn(h,h.dtype,"all",t),x;if(a){let w=N.expandShapeToKeepDim(m,l);x=pe({inputs:{x:g},backend:t,attrs:{shape:w}})}else x=pe({inputs:{x:g},backend:t,attrs:{shape:m}});return t.disposeIntermediateTensorInfo(h),t.disposeIntermediateTensorInfo(g),c!=null&&t.disposeIntermediateTensorInfo(p),x}var w2={kernelName:Ml,backendName:"webgl",kernelFunc:K5};function X5(r){let{inputs:e,backend:t,attrs:n}=r,{x:o}=e,{axis:s,keepDims:a}=n,i=o.shape.length,l=y.parseAxisParam(s,o.shape),u=l,c=N.getAxesPermutation(u,i),p=o;c!=null&&(p=Lt({inputs:{x:o},backend:t,attrs:{perm:c}}),u=N.getInnerMostAxes(u.length,i)),N.assertAxesAreInnerMostDims("any",u,i);let[m,f]=N.computeOutAndReduceShapes(p.shape,u),d=y.sizeFromShape(f),h=pe({inputs:{x:p},backend:t,attrs:{shape:[-1,d]}}),g=Nn(h,h.dtype,"any",t),x;if(a){let w=N.expandShapeToKeepDim(m,l);x=pe({inputs:{x:g},backend:t,attrs:{shape:w}})}else x=pe({inputs:{x:g},backend:t,attrs:{shape:m}});return t.disposeIntermediateTensorInfo(h),t.disposeIntermediateTensorInfo(g),c!=null&&t.disposeIntermediateTensorInfo(p),x}var _2={kernelName:Ll,backendName:"webgl",kernelFunc:X5};var Hk=class{constructor(e,t,n){this.variableNames=["A"];let{windowSize:o,batchSize:s,outSize:a}=e;n||this.variableNames.push("bestIndicesA"),this.outputShape=[s,a];let i=t==="max"?">":"<",l=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 = ${l}; float candidate = getA(batch, inIdx); if (candidate ${i} bestValue) { bestValue = candidate; bestIndex = inIdx; } } setOutput(float(bestIndex)); } `}};var Kk=class{constructor(e,t,n,o){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,y.assert(e.length>2,()=>`Packed arg${n.charAt(0).toUpperCase()+n.slice(1)} supports only inputs with rank above 2.`);let s=e[e.length-1],a=Math.ceil(s/t);this.outputShape=e.slice(0,-1),a>1&&this.outputShape.push(a),o||this.variableNames.push("bestIndicesA");let i=this.outputShape,l=i.length,u=Le(l),c=Wt("coords",l),p,m;if(a===1){m=l+1;let $=Le(m);p=` ${$} sourceLocR = ${$}(${c.join()}, 0); ++${c[l-1]}; ${$} sourceLocG = ${$}(${c.join()}, 0); ++${c[l-2]}; ${$} sourceLocA = ${$}(${c.join()}, 0); --${c[l-1]}; ${$} sourceLocB = ${$}(${c.join()}, 0); --${c[l-2]};`}else m=l,p=` ${u} sourceLocR = coords; ++${c[l-1]}; ${u} sourceLocG = coords; ++${c[l-2]}; ${u} sourceLocA = coords; --${c[l-1]}; ${u} sourceLocB = coords; --${c[l-2]};`;let f=["x","y","z","w","u","v"].slice(0,m),d="."+f[m-1],h=f.map($=>"int "+$),g=Wt("sourceLocR",m-1).concat("inIdx.r"),x=Wt("sourceLocG",m-1).concat("inIdx.g"),w=Wt("sourceLocB",m-1).concat("inIdx.b"),b=Wt("sourceLocA",m-1).concat("inIdx.a"),_=n==="max"?"greaterThan":"lessThan",k=o?"":` inIdx = round(vec4(getBestIndicesAChannel(${g.join()}), getBestIndicesAChannel(${x.join()}), getBestIndicesAChannel(${w.join()}), getBestIndicesAChannel(${b.join()})));`,A=`vec4( getAChannel(${g.join()}), hasNextCol ? getAChannel(${x.join()}) : 0., hasNextRow ? getAChannel(${w.join()}) : 0., hasNextRow && hasNextCol ? getAChannel(${b.join()}) : 0.)`,S=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()})); } ${S} void main() { ${u} coords = getOutputCoords(); bool hasNextCol = ${c[l-1]} < ${i[l-1]-1}; bool hasNextRow = ${c[l-2]} < ${i[l-2]-1}; ${p} ivec4 srcIdx = ivec4(sourceLocR${d}, sourceLocG${d}, sourceLocB${d}, sourceLocA${d}) * ${t}; ivec4 inIdx = srcIdx; vec4 bestIndex = vec4(inIdx); vec4 bestValue = ${A}; for (int i = 0; i < ${t}; i++) { inIdx = srcIdx; ${k} vec4 candidate = ${A}; bvec4 nan = isnan(candidate); bvec4 replace = bvec4( vec4(${_}(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 k2(r,e,t,n=null){let o=e.shape[0],s=e.shape[1];n!=null&&(o=n.shape[0],s=n.shape[1]);let a=N.computeOptimalWindowSize(s),i={windowSize:a,inSize:s,batchSize:o,outSize:Math.ceil(s/a)},l=new Hk(i,t,n==null),u=[e];n!=null&&u.push(n);let c=r.runWebGLProgram(l,u,"int32");if(c.shape[1]===1)return c;let p=k2(r,e,t,c);return r.disposeIntermediateTensorInfo(c),p}function v2(r,e,t,n=null){let o=n!=null?n.shape:e.shape,s=o[o.length-1],a=N.computeOptimalWindowSize(s),i=new Kk(o,a,t,n==null),l=n==null?[e]:[e,n],u=r.runWebGLProgram(i,l,"int32");if(u.shape.length===e.shape.length){let c=v2(r,e,t,u);return r.disposeIntermediateTensorInfo(u),c}return u}function qg(r,e,t,n){let o=[t];if(N.assertAxesAreInnerMostDims("arg"+n.charAt(0).toUpperCase()+n.slice(1),o,e.shape.length),!W().getBool("WEBGL_PACK_REDUCE")||e.shape.length<=2){let s=[],[a,i]=N.computeOutAndReduceShapes(e.shape,o),l=y.sizeFromShape(i),u=pe({inputs:{x:e},backend:r,attrs:{shape:[-1,l]}});s.push(u);let c=k2(r,u,n);s.push(c);let p=pe({inputs:{x:c},backend:r,attrs:{shape:a}});return s.forEach(m=>r.disposeIntermediateTensorInfo(m)),p}return v2(r,e,n)}function Y5(r){let{inputs:e,backend:t,attrs:n}=r,{x:o}=e,{axis:s}=n,a=y.parseAxisParam(s,o.shape),i=N.getAxesPermutation(a,o.shape.length),l=o,u=[];i!=null&&(l=Lt({inputs:{x:o},backend:t,attrs:{perm:i}}),u.push(l),a=N.getInnerMostAxes(a.length,l.shape.length)),N.assertAxesAreInnerMostDims("argMax",[a[0]],l.shape.length);let c=qg(t,l,a[0],"max");return u.forEach(p=>t.disposeIntermediateTensorInfo(p)),c}var C2={kernelName:Hn,backendName:"webgl",kernelFunc:Y5};function Z5(r){let{inputs:e,backend:t,attrs:n}=r,{x:o}=e,{axis:s}=n,a=y.parseAxisParam(s,o.shape),i=N.getAxesPermutation(a,o.shape.length),l=o,u=[];i!=null&&(l=Lt({inputs:{x:o},backend:t,attrs:{perm:i}}),u.push(l),a=N.getInnerMostAxes(a.length,l.shape.length)),N.assertAxesAreInnerMostDims("argMin",[a[0]],l.shape.length);let c=qg(t,l,a[0],"min");return u.forEach(p=>t.disposeIntermediateTensorInfo(p)),c}var I2={kernelName:ea,backendName:"webgl",kernelFunc:Z5};var J5=gr+` if (abs(x) > 1.) { return NAN; } return asin(x); `,Q5=_e({opSnippet:J5}),N2={kernelName:Ks,backendName:"webgl",kernelFunc:Q5};var e8=gr+"return log(x + sqrt(x * x + 1.0));",t8=_e({opSnippet:e8}),S2={kernelName:Xs,backendName:"webgl",kernelFunc:t8};var r8=gr+` return atan(x); `,n8=_e({opSnippet:r8}),T2={kernelName:Ys,backendName:"webgl",kernelFunc:n8};var o8=n2+` return atan(a, b); `,s8=` vec4 result = atan(a, b); vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0)); `+o2+` return result; `,i8=ot({opSnippet:o8,packedOpSnippet:s8}),A2={kernelName:Js,backendName:"webgl",kernelFunc:i8};var a8=gr+` if ((x < -1.0) || (x > 1.0)) return NAN; return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,l8=_e({opSnippet:a8}),E2={kernelName:Zs,backendName:"webgl",kernelFunc:l8};var Vi=class{constructor(e,t,n,o=!1,s=!1){if(this.variableNames=["x"],t==="avg"&&n)throw new Error("Cannot compute positions for average pool.");let a=e.filterWidth,i=e.strideHeight,l=e.strideWidth,u=e.dilationHeight,c=e.dilationWidth,p=e.effectiveFilterHeight,m=e.effectiveFilterWidth,f=e.padInfo.top,d=e.padInfo.left;this.outputShape=e.outShape;let h=t==="avg",g=`((batch * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + d`,x=`(xR * ${e.inWidth} + xC) * ${e.inChannels} + d`,w="0.0";if(h||(w="-1.0 / 1e-20"),n){let $=">=";this.userCode=` const ivec2 strides = ivec2(${i}, ${l}); 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 += ${u}) { int xR = xRCorner + wR; if (xR < 0 || xR >= ${e.inHeight}) { continue; } for (int wC = 0; wC < ${m}; wC += ${c}) { int xC = xCCorner + wC; if (xC < 0 || xC >= ${e.inWidth}) { continue; } float value = getX(batch, xR, xC, d); // If a min / max value has already been found, use it. If not, // use the current value. float currMinMaxValue = mix( value, minMaxValue, minMaxValueFound); if (value ${$} currMinMaxValue) { minMaxValue = value; minMaxValueFound = 1.0; minMaxPosition = ${o?s?g:x:`wR * ${m} + wC`}; } } } setOutput(float(minMaxPosition)); } `;return}let b="max",_=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="avg"&&(_="avgValue / count");let k=Math.floor(a/4)*4,A=a%4,S=` if (${h}) { avgValue += dot(values, ones); } else { minMaxValue = ${b}(values, minMaxValue); } `;this.userCode=` const ivec2 strides = ivec2(${i}, ${l}); const ivec2 pads = ivec2(${f}, ${d}); const float initializationValue = ${w}; const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0); float count = 0.0; float getValue(int batch, int xR, int xC, int d) { if (xC < 0 || xC >= ${e.inWidth}) { return initializationValue; } count += 1.0; return getX(batch, xR, xC, d); } void main() { ivec4 coords = getOutputCoords(); int batch = coords[0]; int d = coords[3]; ivec2 xRCCorner = coords.yz * strides - pads; int xRCorner = xRCCorner.x; int xCCorner = xRCCorner.y; // max/min x(?, ?, d) to get y(yR, yC, d). // ? = to be determined vec4 minMaxValue = vec4(${w}); float avgValue = 0.0; count = 0.0; for (int wR = 0; wR < ${p}; wR += ${u}) { int xR = xRCorner + wR; if (xR < 0 || xR >= ${e.inHeight}) { continue; } for (int wC = 0; wC < ${k}; 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) ); ${S} } int xC = xCCorner + ${k}; if (${A===1}) { vec4 values = vec4( getValue(batch, xR, xC, d), initializationValue, initializationValue, initializationValue ); ${S} } else if (${A===2}) { vec4 values = vec4( getValue(batch, xR, xC, d), getValue(batch, xR, xC + ${c}, d), initializationValue, initializationValue ); ${S} } else if (${A===3}) { vec4 values = vec4( getValue(batch, xR, xC, d), getValue(batch, xR, xC + ${c}, d), getValue(batch, xR, xC + 2 * ${c}, d), initializationValue ); ${S} } } setOutput(${_}); } `}},Ju=class{constructor(e,t,n,o=!1,s=!1){if(this.variableNames=["x"],t==="avg"&&n)throw new Error("Cannot compute positions for average pool.");let a=e.filterWidth,i=e.strideDepth,l=e.strideHeight,u=e.strideWidth,c=e.dilationDepth,p=e.dilationHeight,m=e.dilationWidth,f=e.effectiveFilterDepth,d=e.effectiveFilterHeight,h=e.effectiveFilterWidth,g=e.padInfo.front,x=e.padInfo.top,w=e.padInfo.left;this.outputShape=e.outShape;let b=t==="avg",_="0.0";if(b||(_="-1.0 / 1e-20"),n){let M=">=";this.userCode=` const ivec3 strides = ivec3(${i}, ${l}, ${u}); const ivec3 pads = ivec3(${g}, ${x}, ${w}); 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 >= ${e.inDepth}) { continue; } for (int wR = 0; wR < ${d}; wR += ${p}) { int xR = xRCorner + wR; if (xR < 0 || xR >= ${e.inHeight}) { continue; } for (int wC = 0; wC < ${h}; wC += ${m}) { int xC = xCCorner + wC; if (xC < 0 || xC >= ${e.inWidth}) { continue; } float value = getX(batch, xD, xR, xC, ch); // If a min / max value has already been found, use it. If not, // use the current value. float currMinMaxValue = mix( value, minMaxValue, minMaxValueFound); if (value ${M} currMinMaxValue) { minMaxValue = value; minMaxValueFound = 1.0; minMaxPosition = ${o?s?`(((batch * ${e.inDepth} + xD) * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + ch`:`((xD * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + ch`:`wD * ${d} * ${h} + wR * ${h} + wC`}; } } } } setOutput(float(minMaxPosition)); } `;return}let k="max",A=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="avg"&&(A="avgValue / count");let S=Math.floor(a/4)*4,$=a%4,O=` if (${b}) { avgValue += dot(values, ones); } else { minMaxValue = ${k}(values, minMaxValue); } `;this.userCode=` const ivec3 strides = ivec3(${i}, ${l}, ${u}); const ivec3 pads = ivec3(${g}, ${x}, ${w}); const float initializationValue = ${_}; const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0); float count = 0.0; float getValue(int batch, int xD, int xR, int xC, int ch) { if (xC < 0 || xC >= ${e.inWidth}) { return initializationValue; } count += 1.0; return getX(batch, xD, xR, xC, ch); } void main() { ivec5 coords = getOutputCoords(); int batch = coords.x; int ch = coords.u; ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads; int xDCorner = xCorner.x; int xRCorner = xCorner.y; int xCCorner = xCorner.z; // max/min x(?, ?, ?, d) to get y(yD, yR, yC, ch). // ? = to be determined vec4 minMaxValue = vec4(${_}); float avgValue = 0.0; count = 0.0; for (int wD = 0; wD < ${f}; wD += ${c}) { int xD = xDCorner + wD; if (xD < 0 || xD >= ${e.inDepth}) { continue; } for (int wR = 0; wR < ${d}; wR += ${p}) { int xR = xRCorner + wR; if (xR < 0 || xR >= ${e.inHeight}) { continue; } for (int wC = 0; wC < ${S}; 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) ); ${O} } int xC = xCCorner + ${S}; if (${$===1}) { vec4 values = vec4( getValue(batch, xD, xR, xC, ch), initializationValue, initializationValue, initializationValue ); ${O} } else if (${$===2}) { vec4 values = vec4( getValue(batch, xD, xR, xC, ch), getValue(batch, xD, xR, xC + ${m}, ch), initializationValue, initializationValue ); ${O} } 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 ); ${O} } } setOutput(${A}); } } `}};function u8(r){let{inputs:e,backend:t,attrs:n}=r,{x:o}=e;$s(o,"avgPool");let{filterSize:s,strides:a,pad:i,dimRoundingMode:l}=n,u=1;y.assert(N.eitherStridesOrDilationsAreOne(a,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=N.computePool2DInfo(o.shape,s,a,u,i,l);if(c.filterWidth===1&&c.filterHeight===1&&y.arraysEqual(c.inShape,c.outShape))return Ut({inputs:{x:o},backend:t});let p=new Vi(c,"avg",!1);return t.runWebGLProgram(p,[o],"float32")}var D2={kernelName:Kn,backendName:"webgl",kernelFunc:u8};function c8(r){let{inputs:e,backend:t,attrs:n}=r,{x:o}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:l,dataFormat:u}=n,c=[1,1,1],p=N.computePool3DInfo(o.shape,s,a,c,i,l,u),m=new Ju(p,"avg",!1);return t.runWebGLProgram(m,[o],"float32")}var $2={kernelName:ta,backendName:"webgl",kernelFunc:c8};var Xk=class{constructor(e){this.variableNames=["dy"],this.outputShape=e.inShape;let t=e.filterHeight,n=e.filterWidth,o=e.strideHeight,s=e.strideWidth,a=e.dilationHeight,i=e.dilationWidth,l=e.effectiveFilterHeight,u=e.effectiveFilterWidth,c=l-1-e.padInfo.top,p=u-1-e.padInfo.left,m=1/(t*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 < ${l}; wR += ${a}) { float dyR = float(dyRCorner + wR) / ${o}.0; if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) { continue; } int idyR = int(dyR); for (int wC = 0; wC < ${u}; wC+= ${i}) { float dyC = float(dyCCorner + wC) / ${s}.0; if (dyC < 0.0 || dyC >= ${e.outWidth}.0 || fract(dyC) > 0.0) { continue; } int idyC = int(dyC); float dyValue = getDy(b, idyR, idyC, d); dotProd += dyValue * avgMultiplier; } } setOutput(dotProd); } `}},Yk=class{constructor(e){this.variableNames=["dy"],this.outputShape=e.inShape;let t=e.filterDepth,n=e.filterHeight,o=e.filterWidth,s=e.strideDepth,a=e.strideHeight,i=e.strideWidth,l=e.dilationDepth,u=e.dilationHeight,c=e.dilationWidth,p=e.effectiveFilterDepth,m=e.effectiveFilterHeight,f=e.effectiveFilterWidth,d=p-1-e.padInfo.front,h=m-1-e.padInfo.top,g=f-1-e.padInfo.left,x=1/(t*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 += ${l}) { float dyD = float(dyDCorner + wD) / ${s}.0; if (dyD < 0.0 || dyD >= ${e.outDepth}.0 || fract(dyD) > 0.0) { continue; } int idyD = int(dyD); for (int wR = 0; wR < ${m}; wR += ${u}) { float dyR = float(dyRCorner + wR) / ${a}.0; if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) { continue; } int idyR = int(dyR); for (int wC = 0; wC < ${f}; wC += ${c}) { float dyC = float(dyCCorner + wC) / ${i}.0; if (dyC < 0.0 || dyC >= ${e.outWidth}.0 || fract(dyC) > 0.0) { continue; } int idyC = int(dyC); float dyValue = getDy(batch, idyD, idyR, idyC, ch); dotProd += dyValue * avgMultiplier; } } } setOutput(dotProd); } `}};function p8(r){let{inputs:e,backend:t,attrs:n}=r,{dy:o,input:s}=e,a=s,{filterSize:i,strides:l,pad:u,dimRoundingMode:c}=n,p=[1,1,1],m=N.computePool3DInfo(a.shape,i,l,p,u,c),f=new Yk(m);return t.runWebGLProgram(f,[o],a.dtype)}var R2={kernelName:Bl,backendName:"webgl",kernelFunc:p8};function m8(r){let{inputs:e,backend:t,attrs:n}=r,{dy:o,input:s}=e,a=s;$s([o,s],"avgPoolGrad");let{filterSize:i,strides:l,pad:u}=n,c=N.computePool2DInfo(a.shape,i,l,1,u),p=new Xk(c);return t.runWebGLProgram(p,[o],a.dtype)}var F2={kernelName:zl,backendName:"webgl",kernelFunc:m8};function f8(r){let{inputs:e,backend:t,attrs:n}=r,{a:o,b:s}=e,{transposeA:a,transposeB:i}=n;return Zu({a:o,b:s,transposeA:a,transposeB:i,backend:t})}var O2={kernelName:Xn,backendName:"webgl",kernelFunc:f8};var Zk=class{constructor(e,t,n,o,s,a){this.outputShape=[],this.variableNames=["x","mean","variance"],N.assertAndGetBroadcastShape(e,t),N.assertAndGetBroadcastShape(e,n);let i="0.0";o!=null&&(N.assertAndGetBroadcastShape(e,o),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let l="1.0";s!=null&&(N.assertAndGetBroadcastShape(e,s),this.variableNames.push("scale"),l="getScaleAtOutCoords()"),this.outputShape=e,this.userCode=` void main() { float x = getXAtOutCoords(); float mean = getMeanAtOutCoords(); float variance = getVarianceAtOutCoords(); float offset = ${i}; float scale = ${l}; float inv = scale * inversesqrt(variance + float(${a})); setOutput(dot(vec3(x, -mean, offset), vec3(inv, inv, 1))); } `}};var Jk=class{constructor(e,t,n,o,s,a){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=["x","mean","variance"],N.assertAndGetBroadcastShape(e,t),N.assertAndGetBroadcastShape(e,n);let i="vec4(0.0)";o!=null&&(N.assertAndGetBroadcastShape(e,o),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let l="vec4(1.0)";s!=null&&(N.assertAndGetBroadcastShape(e,s),this.variableNames.push("scale"),l="getScaleAtOutCoords()"),this.outputShape=e,this.userCode=` void main() { vec4 offset = ${i}; vec4 scale = ${l}; vec4 x = getXAtOutCoords(); vec4 mean = getMeanAtOutCoords(); vec4 variance = getVarianceAtOutCoords(); vec4 inv = scale * inversesqrt(variance + vec4(${a})); setOutput((x - mean) * inv + offset); } `}};var d8=({inputs:r,backend:e,attrs:t})=>{let{x:n,mean:o,variance:s,offset:a,scale:i}=r;y.assert(o.shape.length===s.shape.length,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),y.assert(a==null||o.shape.length===a.shape.length,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),y.assert(i==null||o.shape.length===i.shape.length,()=>"Batch normalization gradient requires mean and scale to have equal ranks.");let{varianceEpsilon:l}=t;l==null&&(l=.001);let u=[n,o,s],c=null;a!=null&&(c=a.shape,u.push(a));let p=null;i!=null&&(p=i.shape,u.push(i));let m=W().getBool("WEBGL_PACK_NORMALIZATION")?new Jk(n.shape,o.shape,s.shape,c,p,l):new Zk(n.shape,o.shape,s.shape,c,p,l);return e.runWebGLProgram(m,u,u[0].dtype)},P2={kernelName:io,backendName:"webgl",kernelFunc:d8};var Qk=class{constructor(e){this.variableNames=["source"],this.outputShape=e,this.rank=e.length;let t=Le(this.rank),n=`uniform int start[${this.rank}];`,o=h8(this.rank),s,a=e.map((i,l)=>`sourceLoc.${ev[l]} = start[${l}] + coords.${ev[l]};`);s=` ${t} sourceLoc; ${t} coords = getOutputCoords(); ${a.join(` `)} `,this.userCode=` ${n} void main() { ${s} setOutput(getSource(${o})); } `}getCustomSetupFunc(e){if(e.length!==this.rank)throw Error(`The rank (${this.rank}) of the program must match the length of start (${e.length})`);return(t,n)=>{this.startLoc==null&&(this.startLoc=t.getUniformLocationNoThrow(n,"start"),this.startLoc==null)||t.gl.uniform1iv(this.startLoc,e)}}},ev=["x","y","z","w","u","v"];function h8(r){if(r===1)return"sourceLoc";if(r<=6)return ev.slice(0,r).map(e=>"sourceLoc."+e).join(",");throw Error(`Slicing for rank ${r} is not yet supported`)}var tv=class{constructor(e){this.variableNames=["source"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.rank=e.length;let t=Le(this.rank),n=Wt("coords",this.rank),o=Wt("sourceLoc",this.rank),s=this.rank===1?"sourceLoc":`vec2(${o.slice(-2).join()})`,a=`getChannel(getSource(${o.join()}), ${s})`,i=` result.x = ${a}; if (++${n[this.rank-1]} < ${e[this.rank-1]}) { ++${o[this.rank-1]}; result.y = ${a}; --${o[this.rank-1]}; } `,l=this.rank===1?"":` --${n[this.rank-1]}; if (++${n[this.rank-2]} < ${e[this.rank-2]}) { ++${o[this.rank-2]}; result.z = ${a}; if (++${n[this.rank-1]} < ${e[this.rank-1]}) { ++${o[this.rank-1]}; result.w = ${a}; } } `,u=this.rank<=4?`sourceLoc = coords + ${t}(${e.map((c,p)=>`start[${p}]`).join()});`:e.map((c,p)=>`${o[p]} = ${n[p]} + start[${p}];`).join(` `);this.userCode=` uniform int start[${this.rank}]; void main() { ${t} coords = getOutputCoords(); ${t} sourceLoc; ${u} vec4 result = vec4(0.); ${i} ${l} setOutput(result); } `}getCustomSetupFunc(e){if(e.length!==this.rank)throw Error(`The rank (${this.rank}) of the program must match the length of start (${e.length})`);return(t,n)=>{this.startLoc==null&&(this.startLoc=t.getUniformLocationNoThrow(n,"start"),this.startLoc==null)||t.gl.uniform1iv(this.startLoc,e)}}};function g8(r,e,t,n){let o=n.texData.get(r.dataId),s=n.makeTensorInfo(t,r.dtype),a=n.texData.get(s.dataId);Object.assign(a,o),a.refCount=1,a.shape=t,a.dtype=r.dtype;let i=sr.computeFlatOffset(e,y.computeStrides(r.shape));o.slice&&(i+=o.slice.flatOffset),a.slice={flatOffset:i,origDataId:o.slice&&o.slice.origDataId||r.dataId};let l=n.dataRefCount.get(a.slice.origDataId)||1;return n.dataRefCount.set(a.slice.origDataId,l+1),s}function Ma(r){let{inputs:e,backend:t,attrs:n}=r,{x:o}=e,{begin:s,size:a}=n,[i,l]=sr.parseSliceParams(o,s,a);if(sr.assertParamsValid(o,i,l),y.sizeFromShape(l)===0)return t.makeTensorInfo(l,o.dtype,[]);if(t.shouldExecuteOnCPU([o])||o.dtype==="string"){let p=t.texData.get(o.dataId),m=OE(p.values,i,l,o.shape,o.dtype);return t.makeTensorInfo(l,o.dtype,m)}let{isPacked:u}=t.texData.get(o.dataId),c=sr.isSliceContinous(o.shape,i,l);if(u||!c){let p=W().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new tv(l):new Qk(l),m=p.getCustomSetupFunc(i);return t.runWebGLProgram(p,[o],o.dtype,m)}return t.uploadToGPU(o.dataId),g8(o,i,l,t)}var M2={kernelName:gs,backendName:"webgl",kernelFunc:Ma};var x8=r=>{let{inputs:e,backend:t,attrs:n}=r,{x:o}=e,{blockShape:s,crops:a}=n;y.assert(o.shape.length<=4,()=>"batchToSpaceND for rank > 4 with a WebGL backend not implemented yet");let i=s.reduce((w,b)=>w*b),l=N.getReshaped(o.shape,s,i),u=N.getPermuted(l.length,s.length),c=N.getReshapedPermuted(o.shape,s,i),p=N.getSliceBeginCoords(a,s.length),m=N.getSliceSize(c,a,s.length),f=[],d=pe({inputs:{x:o},backend:t,attrs:{shape:l}}),h=Lt({inputs:{x:d},backend:t,attrs:{perm:u}}),g=pe({inputs:{x:h},backend:t,attrs:{shape:c}}),x=Ma({inputs:{x:g},backend:t,attrs:{begin:p,size:m}});return f.push(d),f.push(h),f.push(g),f.forEach(w=>t.disposeIntermediateTensorInfo(w)),x},L2={kernelName:ra,backendName:"webgl",kernelFunc:x8};function y8(r){let{inputs:e,backend:t,attrs:n}=r,{x:o,weights:s}=e,{size:a}=n,i=t.readSync(o.dataId),l=t.readSync(s.dataId),u=Lg(i,l,s.dtype,s.shape,a);return t.makeTensorInfo([a],s.dtype,u)}var z2={kernelName:Vl,backendName:"webgl",kernelFunc:y8};var b8="return float(a != b);",rv=ot({opSnippet:b8,dtype:"bool"}),B2={kernelName:xi,backendName:"webgl",kernelFunc:rv};function La(r){let{inputs:e,backend:t}=r,{input:n}=e,o=t.texData.get(n.dataId);return Ut({inputs:{x:o.complexTensorInfos.real},backend:t})}var V2={kernelName:iu,backendName:"webgl",kernelFunc:La};var w8="return float(int(x));";function G2(r,e){let t=new ln(r.shape,w8),n=e.runWebGLProgram(t,[r],"int32");return{dataId:n.dataId,shape:n.shape,dtype:n.dtype}}function nv(r){let{inputs:e,backend:t,attrs:n}=r,{x:o}=e,{dtype:s}=n;if(s==="complex64"){if(o.dtype==="complex64")return Ut({inputs:{x:o},backend:t});let a=gt(o.shape),i=nv({inputs:{x:o},backend:t,attrs:{dtype:"float32"}}),l=un({inputs:{real:i,imag:a},backend:t});return a.dispose(),t.disposeIntermediateTensorInfo(i),l}if(o.dtype==="complex64"){let a=La({inputs:{input:o},backend:t}),i=nv({inputs:{x:a},backend:t,attrs:{dtype:s}});return t.disposeIntermediateTensorInfo(a),i}if(!y.hasEncodingLoss(o.dtype,s)){let a=Ut({inputs:{x:o},backend:t});return{dataId:a.dataId,shape:a.shape,dtype:s}}if(s==="int32")return G2(o,t);if(s==="bool"){let a=t.makeTensorInfo([],"bool",y.getTypedArrayFromDType("bool",1)),l=rv({inputs:{a:o,b:a},backend:t});return t.disposeIntermediateTensorInfo(a),l}throw new Error(`Error in Cast: failed to cast ${o.dtype} to ${s}`)}var j2={kernelName:$n,backendName:"webgl",kernelFunc:nv};var W2="return ceil(x);",_8=_e({opSnippet:W2,packedOpSnippet:W2,cpuKernelImpl:xE}),U2={kernelName:Yn,backendName:"webgl",kernelFunc:_8};var ov=class{constructor(e){this.variableNames=["A"],this.outputShape=e,this.userCode=` uniform float minVal; uniform float maxVal; void main() { float value = getAAtOutCoords(); if (isnan(value)) { setOutput(value); return; } setOutput(clamp(value, minVal, maxVal)); } `}getCustomSetupFunc(e,t){return(n,o)=>{this.minLoc==null&&(this.minLoc=n.getUniformLocationNoThrow(o,"minVal"),this.maxLoc=n.getUniformLocationNoThrow(o,"maxVal")),n.gl.uniform1f(this.minLoc,e),n.gl.uniform1f(this.maxLoc,t)}}};var sv=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.userCode=` uniform float minVal; uniform float maxVal; void main() { vec4 value = getAAtOutCoords(); if (any(isnan(value))) { setOutput(value); return; } setOutput(clamp(value, vec4(minVal), vec4(maxVal))); } `}getCustomSetupFunc(e,t){return(n,o)=>{this.minLoc==null&&(this.minLoc=n.getUniformLocationNoThrow(o,"minVal"),this.maxLoc=n.getUniformLocationNoThrow(o,"maxVal")),n.gl.uniform1f(this.minLoc,e),n.gl.uniform1f(this.maxLoc,t)}}};function k8(r){let{inputs:e,backend:t,attrs:n}=r,{x:o}=e,{clipValueMin:s,clipValueMax:a}=n,i;W().getBool("WEBGL_PACK_CLIP")?i=new sv(o.shape):i=new ov(o.shape);let l=i.getCustomSetupFunc(s,a);return t.runWebGLProgram(i,[o],o.dtype,l)}var q2={kernelName:Rn,backendName:"webgl",kernelFunc:k8};var iv=class{constructor(e){this.variableNames=["real","imag"],this.outputShape=e,this.userCode=` void main() { float re = abs(getRealAtOutCoords()); float im = abs(getImagAtOutCoords()); float mx = max(re, im); // sadly the length function in glsl is not underflow-safe // (at least not on Intel GPUs). So the safe solution is // to ensure underflow-safety in all cases. setOutput( mx == 0.0 ? 0.0 : mx * length(vec2(1, min(re, im)/mx)) ); } `}};function H2(r,e){return{dataId:e.dataId,dtype:e.dtype,shape:r.shape}}function v8(r){let{inputs:e,backend:t}=r,{x:n}=e,o=t.texData.get(n.dataId),s=new iv(n.shape),a=[H2(n,o.complexTensorInfos.real),H2(n,o.complexTensorInfos.imag)];return t.runWebGLProgram(s,a,a[0].dtype)}var K2={kernelName:na,backendName:"webgl",kernelFunc:v8};var av=class{constructor(e){this.outputShape=[],this.outputShape=N.computeOutShape(e,1),this.variableNames=e.map((a,i)=>`T${i}`);let t=new Array(e.length-1);t[0]=e[0][1];for(let a=1;a`T${g}`);let l=new Array(e.length-1);l[0]=e[0][t];for(let h=1;h= ${l[h-1]}) { return getChannel( getT${h}(${Hg(i,u,g)}), vec2(${Hg(c,u,g)})); }`}let f=l.length,d=l[l.length-1];m+=` return getChannel( getT${f}(${Hg(i,u,d)}), vec2(${Hg(c,u,d)}));`,this.userCode=` float getValue(${i.map(h=>"int "+h)}) { ${m} } void main() { ${s} coords = getOutputCoords(); vec4 result = vec4(getValue(${a}), 0., 0., 0.); ${a[o-1]} = ${a[o-1]} + 1; if (${a[o-1]} < ${n[o-1]}) { result.g = getValue(${a}); } ${a[o-2]} = ${a[o-2]} + 1; if (${a[o-2]} < ${n[o-2]}) { result.a = getValue(${a}); } ${a[o-1]} = ${a[o-1]} - 1; if (${a[o-2]} < ${n[o-2]} && ${a[o-1]} < ${n[o-1]}) { result.b = getValue(${a}); } setOutput(result); } `}};function Hg(r,e,t){let n=r.indexOf(e);return r.map((s,a)=>a===n?`${s} - ${t}`:s).join()}function Qu(r){let{inputs:e,backend:t}=r,{input:n}=e,o=t.texData.get(n.dataId);return Ut({inputs:{x:o.complexTensorInfos.imag},backend:t})}var X2={kernelName:Ql,backendName:"webgl",kernelFunc:Qu};function ec(r,e,t){let n=r[0].dtype;if(n==="complex64"){let u=r.map(d=>La({inputs:{input:d},backend:t})),c=r.map(d=>Qu({inputs:{input:d},backend:t})),p=ec(u,e,t),m=ec(c,e,t),f=un({inputs:{real:p,imag:m},backend:t});return u.forEach(d=>t.disposeIntermediateTensorInfo(d)),c.forEach(d=>t.disposeIntermediateTensorInfo(d)),t.disposeIntermediateTensorInfo(p),t.disposeIntermediateTensorInfo(m),f}if(n==="string"){let{tensors2D:u,outShape:c}=Y2(r,e,t),p=u.map(g=>({vals:t.readSync(g.dataId),shape:g.shape})),m=u[0].shape[0]===1,f=yE(p,c,n,m),d=N.computeOutShape(r.map(g=>g.shape),e),h=t.makeTensorInfo(d,n,f);return u.forEach(g=>t.disposeIntermediateTensorInfo(g)),h}if(r.length>W().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER")){let u=Math.floor(r.length/2),c=ec(r.slice(0,u),e,t),p=ec(r.slice(u),e,t),m=ec([c,p],e,t);return t.disposeIntermediateTensorInfo(c),t.disposeIntermediateTensorInfo(p),m}if(W().getBool("WEBGL_PACK_ARRAY_OPERATIONS")&&r[0].shape.length>1){let u=new lv(r.map(c=>c.shape),e);return t.runWebGLProgram(u,r,n)}let{tensors2D:o,outShape:s}=Y2(r,e,t),a=new av(o.map(u=>u.shape)),i=t.runWebGLProgram(a,o,n);o.forEach(u=>t.disposeIntermediateTensorInfo(u));let l=pe({inputs:{x:i},attrs:{shape:s},backend:t});return t.disposeIntermediateTensorInfo(i),l}function Y2(r,e,t){let n=N.computeOutShape(r.map(s=>s.shape),e);return{tensors2D:r.map(s=>pe({inputs:{x:s},attrs:{shape:[-1,y.sizeFromShape(s.shape.slice(e))]},backend:t})),outShape:n}}function uv(r){let{inputs:e,backend:t,attrs:n}=r,{axis:o}=n,s=y.parseAxisParam(o,e[0].shape)[0],a=N.computeOutShape(e.map(u=>u.shape),s);if(y.sizeFromShape(a)===0)return t.makeTensorInfo(a,e[0].dtype,[]);let i=e.filter(u=>y.sizeFromShape(u.shape)>0);if(i.length===1)return Ut({inputs:{x:i[0]},backend:t});let l=i.map(u=>u.shape);return N.assertParamsConsistent(l,s),ec(i,s,t)}var Z2={kernelName:ls,backendName:"webgl",kernelFunc:uv};var Cf=class{constructor(e,t=!1,n=null,o=!1,s=!1){this.variableNames=["x","W"],this.outputShape=e.outShape;let a=e.padInfo.top,i=e.padInfo.left,l=e.strideHeight,u=e.strideWidth,c=e.dilationHeight,p=e.dilationWidth,m=e.filterHeight,f=e.filterWidth,d=Math.floor(e.inChannels/4)*4,h=e.inChannels%4,g=e.dataFormat==="channelsLast",x=g?1:2,w=g?2:3,b=g?3:1,_="",k="";n&&(o?_=`float activation(float a) { float b = getPreluActivationWeightsAtOutCoords(); ${n} }`:s?_=`float activation(float a) { float b = getLeakyreluAlphaAtOutCoords(); ${n} }`:_=` float activation(float x) { ${n} } `,k="result = activation(result);");let A=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),o&&this.variableNames.push("preluActivationWeights"),s&&this.variableNames.push("leakyreluAlpha"),this.userCode=` ${_} const ivec2 strides = ivec2(${l}, ${u}); const ivec2 pads = ivec2(${a}, ${i}); void main() { ivec4 coords = getOutputCoords(); int batch = coords[0]; int d2 = coords[${b}]; ivec2 xRCCorner = ivec2(coords[${x}], coords[${w}]) * 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 >= ${e.inHeight}) { continue; } for (int wC = 0; wC < ${f}; wC++) { int xC = xCCorner + wC * ${p}; if (xC < 0 || xC >= ${e.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; ${A} ${k} setOutput(result); } `}},cv=class{constructor(e){this.variableNames=["x","W"],this.outputShape=e.outShape;let t=e.padInfo.front,n=e.padInfo.top,o=e.padInfo.left,s=e.strideDepth,a=e.strideHeight,i=e.strideWidth,l=e.dilationDepth,u=e.dilationHeight,c=e.dilationWidth,p=e.filterDepth,m=e.filterHeight,f=e.filterWidth,d=Math.floor(e.inChannels/4)*4,h=e.inChannels%4;this.userCode=` const ivec3 strides = ivec3(${s}, ${a}, ${i}); const ivec3 pads = ivec3(${t}, ${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 * ${l}; if (xF < 0 || xF >= ${e.inDepth}) { continue; } for (int wR = 0; wR < ${m}; wR++) { int xR = xRCorner + wR * ${u}; if (xR < 0 || xR >= ${e.inHeight}) { continue; } for (int wC = 0; wC < ${f}; wC++) { int xC = xCCorner + wC * ${c}; if (xC < 0 || xC >= ${e.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 pv=class{constructor(e,t,n){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e;let{filterWidth:o,inChannels:s,strideWidth:a,strideHeight:i,padInfo:l,outWidth:u,dilationWidth:c,dilationHeight:p,dataFormat:m}=n,{left:f,top:d}=l,h=s*o,g=Ft(),x=m==="channelsLast",w=x?0:1,b=x?1:2,_="";for(let k=0;k<=1;k++)for(let A=0;A<=1;A++)_+=` blockIndex = rc.y + ${A}; pos = rc.x + ${k}; if(blockIndex < ${e[1]} && pos < ${e[0]}) { offsetY = int(blockIndex / (${u})) * ${i} - ${d}; d0 = offsetY + ${p} * (pos / ${h}); if(d0 < ${t[w]} && d0 >= 0) { offsetX = int(mod(float(blockIndex), ${u}.) * ${a}. - ${f}.); d1 = offsetX + ${c} * (int(mod(float(pos), ${h}.) / ${s}.)); if(d1 < ${t[b]} && d1 >= 0) { ch = int(mod(float(pos), ${s}.)); if (${x}) { innerDims = vec2(d1, ch); result[${k*2+A}] = getChannel( getA(d0, int(innerDims.x), int(innerDims.y)), innerDims); } else { innerDims = vec2(d0, d1); result[${k*2+A}] = getChannel( getA(ch, int(innerDims.x), int(innerDims.y)), innerDims); } } } } `;this.userCode=` void main() { ivec2 rc = getOutputCoords(); vec4 result = vec4(0); int blockIndex, pos, offsetY, d0, offsetX, d1, ch; vec2 innerDims; ${_} ${g.output} = result; } `}};function Kg({x:r,filter:e,convInfo:t,backend:n,bias:o=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let l=r.shape,u=n.texData.get(r.dataId),c=t.inChannels,p=l[0]*l[1]*l[2],m=t.outChannels,f=t.dataFormat==="channelsLast",d=!1,h=!1,g,x=[],w=(p===1||m===1)&&c>Wk,b=l[2]%2!=0&&!!u.isPacked;if(w||!W().getBool("WEBGL_LAZILY_UNPACK")||!W().getBool("WEBGL_PACK_BINARY_OPERATIONS")||!b){let _=f?l[0]*l[1]*l[2]:l[0]*l[2]*l[3],k=pe({inputs:{x:r},backend:n,attrs:{shape:[1,_,t.inChannels]}}),A=pe({inputs:{x:e},backend:n,attrs:{shape:[1,t.inChannels,t.outChannels]}}),S=Zu({a:k,b:A,transposeA:d,transposeB:h,backend:n,bias:o,activation:i,preluActivationWeights:s,leakyreluAlpha:a});g=pe({inputs:{x:S},backend:n,attrs:{shape:t.outShape}}),x.push(k),x.push(A),x.push(S)}else{let _=f?l[0]*l[1]*(l[2]+1):l[0]*l[2]*(l[3]+1),k={dataId:r.dataId,shape:[1,_,t.inChannels],dtype:r.dtype},A=u.shape;u.shape=u.shape.slice(),u.shape[u.shape.length-2]++,y.assert(dl(u.shape,k.shape),()=>`packed reshape ${u.shape} to ${k.shape} isn't free`);let S=pe({inputs:{x:e},backend:n,attrs:{shape:[1,t.inChannels,t.outChannels]}});x.push(S);let $=Zu({a:k,b:S,backend:n,transposeA:d,transposeB:h,bias:o,activation:i,preluActivationWeights:s,leakyreluAlpha:a}),O=n.texData.get($.dataId);y.assert(O.isPacked,()=>"batchMatMul result is expected to be packed"),u.shape=A,O.shape=t.outShape,g=Ut({inputs:{x:$},backend:n}),g.shape=t.outShape,x.push($)}for(let _ of x)n.disposeIntermediateTensorInfo(_);return g}function Xg({x:r,filter:e,convInfo:t,backend:n,bias:o=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let{filterWidth:l,filterHeight:u,inChannels:c,outWidth:p,outHeight:m,dataFormat:f}=t,d=f==="channelsLast",h=l*u*c,g=m*p,x=[h,g],w=!0,b=!1,_=[],k=pe({inputs:{x:r},backend:n,attrs:{shape:r.shape.slice(1)}}),A=pe({inputs:{x:e},backend:n,attrs:{shape:[1,h,y.sizeFromShape(e.shape)/h]}});_.push(k),_.push(A);let S=new pv(x,k.shape,t),$=n.runWebGLProgram(S,[k],"float32"),O=pe({inputs:{x:$},backend:n,attrs:{shape:[1,x[0],x[1]]}});_.push($),_.push(O);let M=o!=null,G=s!=null,j=i==="leakyrelu",U=i?gl(i,!0):null,q=new kf(O.shape,A.shape,[1,g,t.outChannels],w,b,M,U,G,j),H=[O,A];if(o&&H.push(o),G&&H.push(s),j){let re=n.makeTensorInfo([],"float32",y.createScalarValue(a,"float32"));H.push(re),_.push(re)}let X=n.runWebGLProgram(q,H,"float32"),ne=d?[1,m,p,t.outChannels]:[1,t.outChannels,m,p],Y=pe({inputs:{x:X},backend:n,attrs:{shape:ne}});_.push(X);for(let re of _)n.disposeIntermediateTensorInfo(re);return Y}function C8(r){let{inputs:e,backend:t,attrs:n}=r,{x:o,filter:s}=e,{strides:a,pad:i,dataFormat:l,dilations:u,dimRoundingMode:c}=n,p=N.convertConv2DDataFormat(l),m=N.computeConv2DInfo(o.shape,s.shape,a,u,i,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=Kg({x:o,filter:s,convInfo:m,backend:t});else if(W().getBool("WEBGL_CONV_IM2COL")&&o.shape[0]===1)f=Xg({x:o,filter:s,convInfo:m,backend:t});else{let h=new Cf(m);f=t.runWebGLProgram(h,[o,s],"float32")}let d=pe({inputs:{x:f},backend:t,attrs:{shape:m.outShape}});return t.disposeIntermediateTensorInfo(f),d}var J2={kernelName:Zn,backendName:"webgl",kernelFunc:C8};var mv=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideHeight,n=e.strideWidth,o=e.padInfo.top,s=e.padInfo.left,a=e.dataFormat==="channelsLast";this.userCode=` void main() { ivec4 coords = getOutputCoords(); int wR = coords.x; int wC = coords.y; int d1 = coords.z; int d2 = coords.w; // Convolve x(?, ?, d1) with dy(:, :, d2) to get dw(wR, wC, d1, d2). // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; for (int b = 0; b < ${e.batchSize}; b++) { for (int yR = 0; yR < ${e.outHeight}; yR++) { int xR = wR + yR * ${t} - ${o}; if (xR < 0 || xR >= ${e.inHeight}) { continue; } for (int yC = 0; yC < ${e.outWidth}; yC++) { int xC = wC + yC * ${n} - ${s}; if (xC < 0 || xC >= ${e.inWidth}) { continue; } if (${a}) { 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); } `}},fv=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterHeight,n=e.filterWidth,o=e.strideHeight,s=e.strideWidth,a=e.dataFormat==="channelsLast",i=t-1-e.padInfo.top,l=n-1-e.padInfo.left,u=a?1:2,c=a?2:3,p=a?3:1;this.userCode=` const ivec2 pads = ivec2(${i}, ${l}); void main() { ivec4 coords = getOutputCoords(); int batch = coords[0]; int d1 = coords[${p}]; ivec2 dyCorner = ivec2(coords[${u}], 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 < ${t}; wR++) { float dyR = float(dyRCorner + wR) / ${o}.0; if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) { continue; } int idyR = int(dyR); int wRPerm = ${t} - 1 - wR; for (int wC = 0; wC < ${n}; wC++) { float dyC = float(dyCCorner + wC) / ${s}.0; if (dyC < 0.0 || dyC >= ${e.outWidth}.0 || fract(dyC) > 0.0) { continue; } int idyC = int(dyC); int wCPerm = ${n} - 1 - wC; for (int d2 = 0; d2 < ${e.outChannels}; d2++) { if (${a}) { 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); } `}},dv=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideDepth,n=e.strideHeight,o=e.strideWidth,s=e.padInfo.front,a=e.padInfo.top,i=e.padInfo.left;this.userCode=` void main() { ivec5 coords = getOutputCoords(); int wF = coords.x; int wR = coords.y; int wC = coords.z; int d1 = coords.w; int d2 = coords.u; float dotProd = 0.0; for (int b = 0; b < ${e.batchSize}; b++) { for (int yF = 0; yF < ${e.outDepth}; yF++) { int xF = wF + yF * ${t} - ${s}; if (xF < 0 || xF >= ${e.inDepth}) { continue; } for (int yR = 0; yR < ${e.outHeight}; yR++) { int xR = wR + yR * ${n} - ${a}; if (xR < 0 || xR >= ${e.inHeight}) { continue; } for (int yC = 0; yC < ${e.outWidth}; yC++) { int xC = wC + yC * ${o} - ${i}; if (xC < 0 || xC >= ${e.inWidth}) { continue; } float dyValue = getDy(b, yF, yR, yC, d2); float xValue = getX(b, xF, xR, xC, d1); dotProd += (xValue * dyValue); } } } } setOutput(dotProd); } `}},hv=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterDepth,n=e.filterHeight,o=e.filterWidth,s=e.strideDepth,a=e.strideHeight,i=e.strideWidth,l=t-1-e.padInfo.front,u=n-1-e.padInfo.top,c=o-1-e.padInfo.left;this.userCode=` const ivec3 pads = ivec3(${l}, ${u}, ${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 < ${t}; wF++) { float dyF = float(dyFCorner + wF) / ${s}.0; if (dyF < 0.0 || dyF >= ${e.outDepth}.0 || fract(dyF) > 0.0) { continue; } int idyF = int(dyF); int wFPerm = ${t} - 1 - wF; for (int wR = 0; wR < ${n}; wR++) { float dyR = float(dyRCorner + wR) / ${a}.0; if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) { continue; } int idyR = int(dyR); int wRPerm = ${n} - 1 - wR; for (int wC = 0; wC < ${o}; wC++) { float dyC = float(dyCCorner + wC) / ${i}.0; if (dyC < 0.0 || dyC >= ${e.outWidth}.0 || fract(dyC) > 0.0) { continue; } int idyC = int(dyC); int wCPerm = ${o} - 1 - wC; for (int d2 = 0; d2 < ${e.outChannels}; d2++) { float xValue = getDy(batch, idyF, idyR, idyC, d2); float wValue = getW(wFPerm, wRPerm, wCPerm, d1, d2); dotProd += xValue * wValue; } } } } setOutput(dotProd); } `}};function I8(r){let{inputs:e,backend:t,attrs:n}=r,{x:o,dy:s}=e,{strides:a,pad:i,dataFormat:l,dimRoundingMode:u,filterShape:c}=n,p=N.convertConv2DDataFormat(l),m=N.computeConv2DInfo(o.shape,c,a,1,i,u,!1,p),f=new mv(m);return t.runWebGLProgram(f,[o,s],"float32")}var Q2={kernelName:jl,backendName:"webgl",kernelFunc:I8};function N8(r){let{inputs:e,backend:t,attrs:n}=r,{dy:o,filter:s}=e,{inputShape:a,strides:i,pad:l,dataFormat:u,dimRoundingMode:c}=n,p=N.convertConv2DDataFormat(u),m=N.computeConv2DInfo(a,s.shape,i,1,l,c,!1,p),f=new fv(m);return t.runWebGLProgram(f,[o,s],"float32")}var eD={kernelName:Jn,backendName:"webgl",kernelFunc:N8};function S8(r){let{inputs:e,backend:t,attrs:n}=r,{x:o,filter:s}=e,{strides:a,pad:i,dilations:l}=n,u=N.computeConv3DInfo(o.shape,s.shape,a,l,i),c=new cv(u);return t.runWebGLProgram(c,[o,s],"float32")}var tD={kernelName:oa,backendName:"webgl",kernelFunc:S8};function T8(r){let{inputs:e,backend:t,attrs:n}=r,{x:o,dy:s}=e,{strides:a,pad:i,filterShape:l}=n,u=N.computeConv3DInfo(o.shape,l,a,1,i),c=new dv(u);return t.runWebGLProgram(c,[o,s],"float32")}var rD={kernelName:Wl,backendName:"webgl",kernelFunc:T8};function A8(r){let{inputs:e,backend:t,attrs:n}=r,{dy:o,filter:s}=e,{pad:a,strides:i,inputShape:l}=n,u=N.computeConv3DInfo(l,s.shape,i,1,a),c=new hv(u);return t.runWebGLProgram(c,[o,s],"float32")}var nD={kernelName:Ul,backendName:"webgl",kernelFunc:A8};var E8=Gg+` return cos(x); `,D8=_e({opSnippet:E8}),oD={kernelName:Qn,backendName:"webgl",kernelFunc:D8};var $8=` float e2x = exp(-x); return (e2x + 1.0 / e2x) / 2.0; `,R8=_e({opSnippet:$8}),sD={kernelName:Qs,backendName:"webgl",kernelFunc:R8};var gv=class{constructor(e,t,n,o,s){this.variableNames=["Image","Boxes","BoxInd"],this.outputShape=[];let[a,i,l,u]=e,[c]=t,[p,m]=n;this.outputShape=[c,p,m,u];let f=o==="bilinear"?1:0,[d,h]=[`${i-1}.0`,`${l-1}.0`],[g,x,w]=p>1?[`${(i-1)/(p-1)}`,"(y2-y1) * height_ratio",`y1*${d} + float(y)*(height_scale)`]:["0.0","0.0",`0.5 * (y1+y2) * ${d}`],[b,_,k]=m>1?[`${(l-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(${b}); void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int y = coords[1]; int x = coords[2]; int d = coords[3]; // get box vals float y1 = getBoxes(b,0); float x1 = getBoxes(b,1); float y2 = getBoxes(b,2); float x2 = getBoxes(b,3); // get image in batch index int bInd = round(getBoxInd(b)); if(bInd < 0 || bInd >= ${a}) { return; } float height_scale = ${x}; float width_scale = ${_}; float in_y = ${w}; if( in_y < 0.0 || in_y > ${d} ) { setOutput(float(${s})); return; } float in_x = ${k}; 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 F8=r=>{let{inputs:e,backend:t,attrs:n}=r,{image:o,boxes:s,boxInd:a}=e,{cropSize:i,method:l,extrapolationValue:u}=n,c=new gv(o.shape,s.shape,i,l,u);return t.runWebGLProgram(c,[o,s,a],"float32")},iD={kernelName:ei,backendName:"webgl",kernelFunc:F8};var Yg=class{constructor(e,t,n){this.variableNames=["x"],this.outputShape=e;let o=e.length,s=t?"0.0":`getX(${aD(o,"coords")})`,a=e[e.length-1],i="",l="";t?(i=n?`end != ${a-1}`:"end != 0",l=n?"end + 1":"end - 1"):(i=n?`end + pow2 < ${a}`:"end >= pow2",l=n?"end + pow2":"end - pow2"),this.userCode=` uniform float index; void main() { ${Le(o)} coords = getOutputCoords(); int end = ${lD(o,"coords")}; float val = ${s}; int pow2 = int(pow(2.0, index)); if (${i}) { int idx = ${l}; ${lD(o,"coords")} = idx; val += getX(${aD(o,"coords")}); } setOutput(val); } `}getCustomSetupFunc(e){return(t,n)=>{this.index==null&&(this.index=t.getUniformLocation(n,"index")),t.gl.uniform1f(this.index,e)}}};function aD(r,e){if(r===1)return`${e}`;if(r===2)return`${e}.x, ${e}.y`;if(r===3)return`${e}.x, ${e}.y, ${e}.z`;if(r===4)return`${e}.x, ${e}.y, ${e}.z, ${e}.w`;throw Error(`Cumulative sum for rank ${r} is not yet supported`)}function lD(r,e){if(r===1)return`${e}`;if(r===2)return`${e}.y`;if(r===3)return`${e}.z`;if(r===4)return`${e}.w`;throw Error(`Cumulative sum for rank ${r} is not yet supported`)}function O8(r){let{inputs:e,backend:t,attrs:n}=r,{x:o}=e,{axis:s,exclusive:a,reverse:i}=n,l=o.shape.length,u=N.getAxesPermutation([s],l),c=o;u!=null&&(c=Lt({inputs:{x:o},backend:t,attrs:{perm:u}}));let p=N.getInnerMostAxes(1,l)[0];if(p!==l-1)throw new Error(`WebGL cumsum shader expects an inner-most axis=${o.shape.length-1} but got axis=${s}`);let m=c.shape[p],f=Ut({inputs:{x:c},backend:t});for(let d=0;d<=Math.ceil(Math.log2(m))-1;d++){let h=new Yg(c.shape,!1,i),g=h.getCustomSetupFunc(d),x=f;f=t.runWebGLProgram(h,[f],f.dtype,g),t.disposeIntermediateTensorInfo(x)}if(a){let d=new Yg(c.shape,a,i),h=f;f=t.runWebGLProgram(d,[f],f.dtype),t.disposeIntermediateTensorInfo(h)}if(u!=null){let d=N.getUndoAxesPermutation(u),h=Lt({inputs:{x:f},backend:t,attrs:{perm:d}});return t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(c),h}return f}var uD={kernelName:eo,backendName:"webgl",kernelFunc:O8};function P8(r){let{inputs:e,backend:t,attrs:n}=r,{x:o,weights:s}=e,{size:a,binaryOutput:i}=n;if(o.shape.length===1){let l=t.readSync(o.dataId),u=t.readSync(s.dataId),c=Lg(l,u,s.dtype,s.shape,a);return t.makeTensorInfo([a],s.dtype,c)}else if(o.shape.length===2){let l=t.bufferSync(o),u=t.bufferSync(s),c=gE(l,u,a,i);return t.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 cD={kernelName:ql,backendName:"webgl",kernelFunc:P8};var xv=class{constructor(e,t,n){this.variableNames=["x"],this.outputShape=[],this.outputShape=e,this.blockSize=t,this.dataFormat=n,this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int h = ${this.getHeightCoordString()}; int w = ${this.getWidthCoordString()}; int d = ${this.getDepthCoordString()}; int in_h = h / ${t}; int offset_h = imod(h, ${t}); int in_w = w / ${t}; int offset_w = imod(w, ${t}); int offset_d = (offset_h * ${t} + offset_w) * ${this.getOutputDepthSize()}; int in_d = d + offset_d; float result = ${this.getInputSamplingString()}; setOutput(result); } `}getHeightCoordString(){return this.dataFormat==="NHWC"?"coords[1]":"coords[2]"}getWidthCoordString(){return this.dataFormat==="NHWC"?"coords[2]":"coords[3]"}getDepthCoordString(){return this.dataFormat==="NHWC"?"coords[3]":"coords[1]"}getOutputDepthSize(){return this.dataFormat==="NHWC"?this.outputShape[3]:this.outputShape[1]}getInputSamplingString(){return this.dataFormat==="NHWC"?"getX(b, in_h, in_w, in_d)":"getX(b, in_d, in_h, in_w)"}};function M8(r){let{inputs:e,backend:t,attrs:n}=r,{x:o}=e,{blockSize:s,dataFormat:a}=n;y.assert(s>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${s}`);let i=o.shape[0],l=a==="NHWC"?o.shape[1]:o.shape[2],u=a==="NHWC"?o.shape[2]:o.shape[3],c=a==="NHWC"?o.shape[3]:o.shape[1],p=l*s,m=u*s,f=c/(s*s),d=a==="NHWC"?[i,p,m,f]:[i,f,p,m],h=new xv(d,s,a);return t.runWebGLProgram(h,[o],o.dtype)}var pD={kernelName:ti,backendName:"webgl",kernelFunc:M8};var If=class{constructor(e,t=!1,n=null,o=!1,s=!1){this.variableNames=["x","W"],this.outputShape=e.outShape;let a=e.inHeight,i=e.inWidth,l=e.padInfo.top,u=e.padInfo.left,c=e.strideHeight,p=e.strideWidth,m=e.dilationHeight,f=e.dilationWidth,d=e.filterHeight,h=e.filterWidth,g=e.outChannels/e.inChannels,x="",w="";n&&(o?x=`float activation(float a) { float b = getPreluActivationWeightsAtOutCoords(); ${n} }`:s?x=`float activation(float a) { float b = getLeakyreluAlphaAtOutCoords(); ${n} }`:x=` float activation(float x) { ${n} } `,w="result = activation(result);");let b=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),o&&this.variableNames.push("preluActivationWeights"),s&&this.variableNames.push("leakyreluAlpha"),this.userCode=` ${x} const ivec2 strides = ivec2(${c}, ${p}); const ivec2 pads = ivec2(${l}, ${u}); void main() { ivec4 coords = getOutputCoords(); int batch = coords.x; ivec2 xRCCorner = coords.yz * strides - pads; int d2 = coords.w; int d1 = d2 / ${g}; int q = d2 - d1 * ${g}; 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 < ${d}; wR++) { int xR = xRCorner + wR * ${m}; if (xR < 0 || xR >= ${a}) { continue; } for (int wC = 0; wC < ${h}; wC++) { int xC = xCCorner + wC * ${f}; if (xC < 0 || xC >= ${i}) { continue; } float xVal = getX(batch, xR, xC, d1); float wVal = getW(wR, wC, d1, q); dotProd += xVal * wVal; } } float result = dotProd; ${b} ${w} setOutput(result); } `}};var Nf=class{constructor(e,t=!1,n=null,o=!1,s=!1){this.variableNames=["x","W"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e.outShape;let a=e.inHeight,i=e.inWidth,l=e.padInfo.top,u=e.padInfo.left,c=e.strideHeight,p=e.strideWidth,m=e.dilationHeight,f=e.dilationWidth,d=e.filterHeight,h=e.filterWidth,g=h,x="int xR; int xC; int xCOffset;";for(let k=0;k= 0 && xR < ${a} && xCOffset >= 0 && xCOffset < ${i}) { xTexelR${k}C${S} = getX(batch, xR, xCOffset, d1); // Need to manually clear unused channels in case // we're reading from recycled texture. if(xCOffset + 1 >= ${i}) { xTexelR${k}C${S}.zw = vec2(0.); } } else { xTexelR${k}C${S} = vec4(0.); } xCOffset = xC + 1 - 2; if(xR >= 0 && xR < ${a} && xCOffset >= 0 && xCOffset < ${i}) { vec4 previous = getX(batch, xR, xCOffset, d1); // Need to manually clear unused channels in case // we're reading from recycled texture. if(xCOffset + 1 >= ${i}) { previous.zw = vec2(0.); } xR${k}C${S} = vec4(previous.zw, xTexelR${k}C${S}.xy); } else { xR${k}C${S} = vec4(0, 0, xTexelR${k}C${S}.xy); } `:x+=` if(xR >= 0 && xR < ${a} && xC >= 0 && xC < ${i}) { xTexelR${k}C${S} = getX(batch, xR, xC, d1); } else { xTexelR${k}C${S} = vec4(0.); } xR${k}C${S} = xTexelR${k}C${S}; `,S+1= 0 && xR < ${a} && xCOffset >= 0 && xCOffset < ${i}) { xTexelR${k}C${S+2} = getX(batch, xR, xCOffset, d1); } `,f>1&&(x+=` xCOffset -= 2; if(xR >= 0 && xR < ${a} && xCOffset >= 0 && xCOffset < ${i}) { xTexelR${k}C${S} = getX(batch, xR, xCOffset, d1); } else { xTexelR${k}C${S} = vec4(0.); } `),x+=` xR${k}C${S+1} = vec4( xTexelR${k}C${S}.zw, xTexelR${k}C${S+2}.xy); `):x+=` xCOffset = xC + ${$}; if(xR >= 0 && xR < ${a} && xCOffset >= 0 && xCOffset < ${i}) { xTexelR${k}C${S+2} = getX(batch, xR, xCOffset, d1); } xR${k}C${S+1} = xTexelR${k}C${S+2}; `}}else S= 0 && xR < ${a}) { `,u%2==1?(x+=` xCOffset = xC + 1 - ${p}; if(xCOffset >= 0 && xCOffset < ${i}) { xTexelR${k}C${S} = getX(batch, xR, xCOffset, d1); } else { xTexelR${k}C${S} = vec4(0.); } if(xC + 1 >= 0 && xC + 1 < ${i}) { xTexelR${k}C${S+2} = getX(batch, xR, xC + 1, d1); } else { xTexelR${k}C${S+2} = vec4(0.); } xR${k}C${S} = vec4( xTexelR${k}C${S}.zw, xTexelR${k}C${S+2}.zw); `,S+1= 0 && xCOffset < ${i}) { final = getX(batch, xR, xCOffset, d1); } xR${k}C${S+1} = vec4(xTexelR${k}C${S+2}.xy, final.xy); `)):(x+=` if(xC >= 0 && xC < ${i}) { xTexelR${k}C${S} = getX(batch, xR, xC, d1); } else { xTexelR${k}C${S} = vec4(0.); } xCOffset = xC + ${p}; if(xCOffset >= 0 && xCOffset < ${i}) { xTexelR${k}C${S+2} = getX(batch, xR, xCOffset, d1); } else { xTexelR${k}C${S+2} = vec4(0.); } xR${k}C${S} = vec4( xTexelR${k}C${S}.xy, xTexelR${k}C${S+2}.xy); `,S+1`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${a} and dilations '${c}'`);let p=N.computeConv2DInfo(o.shape,s.shape,a,c,i,u,!0),m;return W().getBool("WEBGL_PACK_DEPTHWISECONV")&&p.strideWidth<=2&&p.outChannels/p.inChannels==1?m=new Nf(p):m=new If(p),t.runWebGLProgram(m,[o,s],"float32")}var mD={kernelName:to,backendName:"webgl",kernelFunc:L8};var yv=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideHeight,n=e.strideWidth,o=e.padInfo.top,s=e.padInfo.left,a=e.outChannels/e.inChannels;this.userCode=` void main() { ivec4 coords = getOutputCoords(); int wR = coords.x; int wC = coords.y; int d1 = coords.z; int dm = coords.w; int d2 = d1 * ${a} + dm; float dotProd = 0.0; // TO DO: Vec4 over the batch size for (int b = 0; b < ${e.batchSize}; b++) { for (int yR = 0; yR < ${e.outHeight}; yR++) { int xR = wR + yR * ${t} - ${o}; if (xR < 0 || xR >= ${e.inHeight}) { continue; } for (int yC = 0; yC < ${e.outWidth}; yC++) { int xC = wC + yC * ${n} - ${s}; if (xC < 0 || xC >= ${e.inWidth}) { continue; } float dyValue = getDy(b, yR, yC, d2); float xValue = getX(b, xR, xC, d1); dotProd += (xValue * dyValue); } } } setOutput(dotProd); } `}},bv=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterHeight,n=e.filterWidth,o=e.strideHeight,s=e.strideWidth,a=t-1-e.padInfo.top,i=n-1-e.padInfo.left,l=e.outChannels/e.inChannels;this.userCode=` const ivec2 pads = ivec2(${a}, ${i}); void main() { ivec4 coords = getOutputCoords(); int batch = coords[0]; int d1 = coords[3]; ivec2 dyCorner = coords.yz - pads; int dyRCorner = dyCorner.x; int dyCCorner = dyCorner.y; float dotProd = 0.0; for (int wR = 0; wR < ${t}; wR++) { float dyR = float(dyRCorner + wR) / ${o}.0; if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) { continue; } int idyR = int(dyR); int wRPerm = ${t} - 1 - wR; for (int wC = 0; wC < ${n}; wC++) { float dyC = float(dyCCorner + wC) / ${s}.0; if (dyC < 0.0 || dyC >= ${e.outWidth}.0 || fract(dyC) > 0.0) { continue; } int idyC = int(dyC); int wCPerm = ${n} - 1 - wC; // TO DO: Vec4 over the channelMul for (int dm = 0; dm < ${l}; dm++) { int d2 = d1 * ${l} + dm; float xValue = getDy(batch, idyR, idyC, d2); float wValue = getW(wRPerm, wCPerm, d1, dm); dotProd += xValue * wValue; } } } setOutput(dotProd); } `}};function z8(r){let{inputs:e,backend:t,attrs:n}=r,{x:o,dy:s}=e,{strides:a,dilations:i,pad:l,dimRoundingMode:u,filterShape:c}=n,p=N.computeConv2DInfo(o.shape,c,a,i,l,u,!0),m=new yv(p);return t.runWebGLProgram(m,[o,s],"float32")}var fD={kernelName:Hl,backendName:"webgl",kernelFunc:z8};function B8(r){let{inputs:e,backend:t,attrs:n}=r,{dy:o,filter:s}=e,{strides:a,dilations:i,pad:l,dimRoundingMode:u,inputShape:c}=n,p=N.computeConv2DInfo(c,s.shape,a,i,l,u,!0),m=new bv(p);return t.runWebGLProgram(m,[o,s],"float32")}var dD={kernelName:Kl,backendName:"webgl",kernelFunc:B8};var wv=class{constructor(e){this.variableNames=["X"],this.outputShape=[e,e],this.userCode=` void main() { ivec2 coords = getOutputCoords(); float val = coords[0] == coords[1] ? getX(coords[0]) : 0.0; setOutput(val); } `}};function V8(r){let{inputs:e,backend:t}=r,{x:n}=e,o=[...n.shape,...n.shape],s=y.sizeFromShape(n.shape),a=pe({inputs:{x:n},backend:t,attrs:{shape:[s]}}),i=new wv(s),l=t.runWebGLProgram(i,[a],a.dtype),u=pe({inputs:{x:l},backend:t,attrs:{shape:o}});return t.disposeIntermediateTensorInfo(a),t.disposeIntermediateTensorInfo(l),u}var hD={kernelName:Xl,backendName:"webgl",kernelFunc:V8};var _v=class{constructor(e){this.variableNames=["x","W"],this.outputShape=e.outShape;let{inHeight:t,inWidth:n,padInfo:o,strideHeight:s,strideWidth:a,filterHeight:i,filterWidth:l,dilationHeight:u,dilationWidth:c}=e,{top:p,left:m}=o;this.userCode=` const ivec2 strides = ivec2(${s}, ${a}); 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 < ${i}; h++) { int hIn = hBeg + h * ${u}; if (hIn >= 0 && hIn < ${t}) { for (int w = 0; w < ${l}; 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 G8(r){let{inputs:e,backend:t,attrs:n}=r,{x:o,filter:s}=e,{strides:a,pad:i,dilations:l}=n,u=N.computeDilation2DInfo(o.shape,s.shape,a,i,"NHWC",l),c,p=new _v(u);c=t.runWebGLProgram(p,[o,s],"float32");let m=pe({inputs:{x:c},backend:t,attrs:{shape:u.outShape}});return t.disposeIntermediateTensorInfo(c),m}var gD={kernelName:sa,backendName:"webgl",kernelFunc:G8};var j8="return (x >= 0.0) ? x : (exp(x) - 1.0);",W8=` 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; `,U8=_e({opSnippet:j8,packedOpSnippet:W8}),xD={kernelName:ri,backendName:"webgl",kernelFunc:U8};var q8="return (b >= 1.0) ? a : a * (b + 1.0);",H8=` vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.))); return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0)))); `,K8=r=>{let{inputs:e,backend:t}=r,{dy:n,y:o}=e,s=W().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Os(H8,n.shape,o.shape):new Xo(q8,n.shape,o.shape);return t.runWebGLProgram(s,[n,o],n.dtype)},yD={kernelName:Yl,backendName:"webgl",kernelFunc:K8};var X8=` return vec4(equal(a, b)); `,Y8="return float(a == b);",Z8=ot({opSnippet:Y8,packedOpSnippet:X8,dtype:"bool"}),bD={kernelName:oi,backendName:"webgl",kernelFunc:Z8};var J8=` // Error function is calculated approximately with elementary function. // See "Handbook of Mathematical Functions with Formulas, // Graphs, and Mathematical Tables", Abramowitz and Stegun. float p = ${N.ERF_P}; float a1 = ${N.ERF_A1}; float a2 = ${N.ERF_A2}; float a3 = ${N.ERF_A3}; float a4 = ${N.ERF_A4}; float a5 = ${N.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)); `,Q8=_e({opSnippet:J8}),wD={kernelName:ni,backendName:"webgl",kernelFunc:Q8};var _D="return exp(x);",kv=_e({opSnippet:_D,packedOpSnippet:_D,cpuKernelImpl:bE}),kD={kernelName:no,backendName:"webgl",kernelFunc:kv};function Zg(r){let{inputs:e,attrs:t,backend:n}=r,{dim:o}=t,{input:s}=e,a=s.shape.length,i=s.shape.slice(),l=o;return o<0&&(y.assert(-(a+1)<=o,()=>`Axis must be in the interval [${-(a+1)}, ${a}]`),l=a+o+1),i.splice(l,0,1),pe({inputs:{x:s},backend:n,attrs:{shape:i}})}var vD={kernelName:us,backendName:"webgl",kernelFunc:Zg};var CD="return exp(x) - 1.0;",eX=_e({opSnippet:CD,packedOpSnippet:CD,cpuKernelImpl:wE}),ID={kernelName:si,backendName:"webgl",kernelFunc:eX};var Jg=class{constructor(e,t,n){this.variableNames=["real","imag"];let o=t[1];this.outputShape=t;let s=n?`2.0 * ${Math.PI}`:`-2.0 * ${Math.PI}`,a=n?`${o}.0`:"1.0",i;if(e==="real")i="return real * expR - imag * expI;";else if(e==="imag")i="return real * expI + imag * expR;";else throw new Error(`FFT component must be either "real" or "imag", got ${e}.`);this.userCode=` const float exponentMultiplier = ${s}; float unaryOpComplex(float real, float expR, float imag, float expI) { ${i} } 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) / ${a}; } return result; } void main() { ivec2 coords = getOutputCoords(); setOutput(mulMatDFT(coords[0], coords[1])); } `}};function Qg(r,e,t){let n=t.texData.get(r.dataId),o=y.sizeFromShape(r.shape),s=r.shape[r.shape.length-1],a=o/s,i=pe({inputs:{x:r},backend:t,attrs:{shape:[a,s]}}),l=i.shape,u=new Jg("real",l,e),c=new Jg("imag",l,e),p=[{dataId:n.complexTensorInfos.real.dataId,dtype:n.complexTensorInfos.real.dtype,shape:l},{dataId:n.complexTensorInfos.imag.dataId,dtype:n.complexTensorInfos.imag.dtype,shape:l}],m=t.runWebGLProgram(u,p,"float32"),f=t.runWebGLProgram(c,p,"float32"),d=un({inputs:{real:m,imag:f},backend:t});t.disposeIntermediateTensorInfo(m),t.disposeIntermediateTensorInfo(f);let h=pe({inputs:{x:d},backend:t,attrs:{shape:r.shape}});return t.disposeIntermediateTensorInfo(i),t.disposeIntermediateTensorInfo(d),h}function tX(r){let{inputs:e,backend:t}=r,{input:n}=e;return Qg(n,!1,t)}var ND={kernelName:Zl,backendName:"webgl",kernelFunc:tX};var vv=class{constructor(e,t){this.outputShape=[],this.variableNames=["x"],this.outputShape=e,this.userCode=` uniform float value; void main() { // Input can be obtained from uniform value. setOutput(value); } `}getCustomSetupFunc(e){return(t,n)=>{this.valueLoc==null&&(this.valueLoc=t.getUniformLocationNoThrow(n,"value")),t.gl.uniform1f(this.valueLoc,e)}}};function Sf(r){let{backend:e,attrs:t}=r,{shape:n,value:o}=t,{dtype:s}=t;if(s=s||y.inferDtype(o),s==="string"){let a=y.getArrayFromDType(s,y.sizeFromShape(n));return a.fill(o),e.makeTensorInfo(n,s,a)}else{let a=new vv(n,o),i=a.getCustomSetupFunc(o);return e.runWebGLProgram(a,[],s,i)}}var SD={kernelName:ia,backendName:"webgl",kernelFunc:Sf};var Cv=class{constructor(e){this.variableNames=["Image"],this.outputShape=[];let t=e[2];this.outputShape=e,this.userCode=` void main() { ivec4 coords = getOutputCoords(); int x = coords[2]; int coordX = ${t} - x; float outputValue; if(coordX >= 0 && coordX < ${t}) { outputValue = getImage(coords[0], coords[1], coordX, coords[3]); } else { outputValue = getImage(coords[0], coords[1], coords[2], coords[3]); } setOutput(outputValue); } `}};var TD={kernelName:ii,backendName:"webgl",kernelFunc:({inputs:r,backend:e})=>{let{image:t}=r,n=e,o=new Cv(t.shape);return n.runWebGLProgram(o,[t],t.dtype)}};var AD="return floor(x);",rX=_e({opSnippet:AD,packedOpSnippet:AD,cpuKernelImpl:_E}),ED={kernelName:oo,backendName:"webgl",kernelFunc:rX};var nX=` 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; } `,oX=` 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); `,sX=ot({opSnippet:nX,packedOpSnippet:oX,dtype:"int32"}),DD={kernelName:so,backendName:"webgl",kernelFunc:sX};var Iv=class{constructor(e){this.variableNames=["A"];let t=Ft(),[n,o]=e;this.outputShape=e,this.userCode=` void main() { ivec3 coords = getOutputCoords(); int texR = coords[0]; int texC = coords[1]; int depth = coords[2]; vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${o}.0, ${n}.0); vec4 values = ${t.texture2D}(A, uv); float value; if (depth == 0) { value = values.r; } else if (depth == 1) { value = values.g; } else if (depth == 2) { value = values.b; } else if (depth == 3) { value = values.a; } setOutput(floor(value * 255.0 + 0.5)); } `}};var Nv=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;let t=Ft(),[n,o]=e;this.outputShape=e,this.userCode=` void main() { ivec3 coords = getOutputCoords(); int texR = coords[0]; int texC = coords[1]; int depth = coords[2]; vec4 result = vec4(0.); for(int row=0; row<=1; row++) { for(int col=0; col<=1; col++) { texC = coords[1] + row; depth = coords[2] + col; vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${o}.0, ${n}.0); vec4 values = ${t.texture2D}(A, uv); float value; if (depth == 0) { value = values.r; } else if (depth == 1) { value = values.g; } else if (depth == 2) { value = values.b; } else if (depth == 3) { value = values.a; } result[row * 2 + col] = floor(value * 255.0 + 0.5); } } ${t.output} = result; } `}};var $D={kernelName:Oc,backendName:"webgl",kernelFunc:iX},_p;function iX(r){let{inputs:e,backend:t,attrs:n}=r,{pixels:o}=e,{numChannels:s}=n,a=typeof HTMLVideoElement!="undefined"&&o instanceof HTMLVideoElement,i=typeof HTMLImageElement!="undefined"&&o instanceof HTMLImageElement,l=typeof ImageBitmap!="undefined"&&o instanceof ImageBitmap,[u,c]=a?[o.videoWidth,o.videoHeight]:[o.width,o.height],p=[c,u],m=[c,u,s];(i||a||l)&&(_p==null&&(_p=document.createElement("canvas").getContext("2d")),_p.canvas.width=u,_p.canvas.height=c,_p.drawImage(o,0,0,u,c),o=_p.canvas);let f=t.makeTensorInfo(p,"int32");t.texData.get(f.dataId).usage=Dr.PIXELS,t.gpgpu.uploadPixelDataToTexture(t.getTexture(f.dataId),o);let d=W().getBool("WEBGL_PACK")?new Nv(m):new Iv(m),h=t.runWebGLProgram(d,[f],"int32");return t.disposeData(f.dataId),h}function aX(r){let{inputs:e,backend:t,attrs:n}=r,{x:o,filter:s,bias:a,preluActivationWeights:i}=e,{strides:l,pad:u,dataFormat:c,dilations:p,dimRoundingMode:m,activation:f,leakyreluAlpha:d}=n,h=N.convertConv2DDataFormat(c),g=N.computeConv2DInfo(o.shape,s.shape,l,p,u,m,!1,h),x,w=[];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=Kg({x:o,filter:s,convInfo:g,backend:t,bias:a,activation:f,preluActivationWeights:i,leakyreluAlpha:d});else if(W().getBool("WEBGL_CONV_IM2COL")&&o.shape[0]===1)x=Xg({x:o,filter:s,convInfo:g,backend:t,bias:a,activation:f,preluActivationWeights:i,leakyreluAlpha:d});else{let _=a!=null,k=i!=null,A=f==="leakyrelu",S=f?gl(f,!1):null,$=new Cf(g,_,S,k,A),O=[o,s];if(a&&O.push(a),i&&O.push(i),A){let M=t.makeTensorInfo([],"float32",y.createScalarValue(d,"float32"));O.push(M),w.push(M)}x=t.runWebGLProgram($,O,"float32")}let b=pe({inputs:{x},backend:t,attrs:{shape:g.outShape}});return w.push(x),w.forEach(_=>t.disposeIntermediateTensorInfo(_)),b}var RD={kernelName:_s,backendName:"webgl",kernelFunc:aX};function lX(r){let{inputs:e,backend:t,attrs:n}=r,{x:o,filter:s,bias:a,preluActivationWeights:i}=e,{strides:l,pad:u,dilations:c,dimRoundingMode:p,activation:m,leakyreluAlpha:f}=n,d=[],h=c;h==null&&(h=[1,1]),y.assert(N.eitherStridesOrDilationsAreOne(l,h),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${l} and dilations '${h}'`);let g=N.computeConv2DInfo(o.shape,s.shape,l,h,u,p,!0),x=W().getBool("WEBGL_PACK_DEPTHWISECONV")&&g.strideWidth<=2&&g.outChannels/g.inChannels==1,w=m?gl(m,x):null,b=[o,s],_=a!=null,k=i!=null,A=m==="leakyrelu";if(_&&b.push(a),k&&b.push(i),A){let O=t.makeTensorInfo([],"float32",y.createScalarValue(f,"float32"));b.push(O),d.push(O)}let S;x?S=new Nf(g,_,w,k,A):S=new If(g,_,w,k,A);let $=t.runWebGLProgram(S,b,"float32");return d.forEach(O=>t.disposeIntermediateTensorInfo(O)),$}var FD={kernelName:ks,backendName:"webgl",kernelFunc:lX};var Sv=class{constructor(e,t,n){this.sliceDim=e,this.strides=t,this.variableNames=["x","indices"],this.outputShape=n;let o=Le(t.length),s=Le(n.length),a=this.sliceDim>1?"strides[j]":"strides";this.userCode=` ${o} strides = ${o}(${this.strides}); void main() { ${s} coords = getOutputCoords(); int flattenIndex = 0; for (int j = 0; j < ${this.sliceDim}; j++) { int index = round(getIndices(coords[0], j)); flattenIndex += index * ${a}; } setOutput(getX(flattenIndex, coords[1])); } `}};function uX(r){let{inputs:e,backend:t}=r,{params:n,indices:o}=e,s=o.shape,a=s[s.length-1],[i,l,u,c]=N.prepareAndValidate(n,o),p=pe({inputs:{x:o},backend:t,attrs:{shape:[l,a]}}),m=pe({inputs:{x:n},backend:t,attrs:{shape:[y.sizeFromShape(n.shape)/u,u]}}),f=new Sv(a,c,[l,u]),d=t.runWebGLProgram(f,[m,p],m.dtype),h=pe({inputs:{x:d},backend:t,attrs:{shape:i}});return t.disposeIntermediateTensorInfo(p),t.disposeIntermediateTensorInfo(m),t.disposeIntermediateTensorInfo(d),h}var OD={kernelName:ai,backendName:"webgl",kernelFunc:uX};var Tv=class{constructor(e,t){this.variableNames=["A","indices"],this.outputShape=t,this.rank=t.length;let n=Le(this.rank),o=cX(e,2);this.userCode=` void main() { ${n} resRC = getOutputCoords(); setOutput(getA(${o})); } `}};function cX(r,e){let t=["resRC.x","resRC.y","resRC.z","resRC.w"],n=[];for(let o=0;ot.disposeIntermediateTensorInfo(k)),t.makeTensorInfo(u.outputShape,_.dtype,_.values)}let h=new Tv(m.shape,d),g=t.runWebGLProgram(h,[m,f],m.dtype);p.push(g);let x=pe({inputs:{x:g},backend:t,attrs:{shape:u.outputShape}});return p.forEach(w=>t.disposeIntermediateTensorInfo(w)),x}var PD={kernelName:cs,backendName:"webgl",kernelFunc:pX};var mX="return float(a > b);",fX=` return vec4(greaterThan(a, b)); `,dX=ot({opSnippet:mX,packedOpSnippet:fX,cpuKernelImpl:vE,dtype:"bool"}),MD={kernelName:li,backendName:"webgl",kernelFunc:dX};var hX="return float(a >= b);",gX=` return vec4(greaterThanEqual(a, b)); `,xX=ot({opSnippet:hX,packedOpSnippet:gX,dtype:"bool"}),LD={kernelName:ao,backendName:"webgl",kernelFunc:xX};function yX(r){let{inputs:e,backend:t}=r,{input:n}=e;return Qg(n,!0,t)}var zD={kernelName:Jl,backendName:"webgl",kernelFunc:yX};var bX="return float(!isnan(x) && !isinf(x));",wX=_e({opSnippet:bX,dtype:"bool"}),BD={kernelName:ui,backendName:"webgl",kernelFunc:wX};var _X="return float(isinf(x));",kX=_e({opSnippet:_X,dtype:"bool"}),VD={kernelName:ci,backendName:"webgl",kernelFunc:kX};var vX="return float(isnan(x));",CX=_e({opSnippet:vX,dtype:"bool"}),GD={kernelName:pi,backendName:"webgl",kernelFunc:CX};var IX="return float(a < b);",NX=` return vec4(lessThan(a, b)); `,SX=ot({opSnippet:IX,packedOpSnippet:NX,cpuKernelImpl:CE,dtype:"bool"}),jD={kernelName:mi,backendName:"webgl",kernelFunc:SX};var TX="return float(a <= b);",AX=` return vec4(lessThanEqual(a, b)); `,EX=ot({opSnippet:TX,packedOpSnippet:AX,dtype:"bool"}),WD={kernelName:fi,backendName:"webgl",kernelFunc:EX};function DX(r){let{backend:e,attrs:t}=r,{start:n,stop:o,num:s}=t,a=IE(n,o,s);return e.makeTensorInfo([a.length],"float32",a)}var UD={kernelName:eu,backendName:"webgl",kernelFunc:DX};var $X=`if (x < 0.0) return NAN; return log(x);`,RX=` vec4 result = log(x); vec4 isNaN = vec4(lessThan(x, vec4(0.0))); result.r = isNaN.r == 1.0 ? NAN : result.r; result.g = isNaN.g == 1.0 ? NAN : result.g; result.b = isNaN.b == 1.0 ? NAN : result.b; result.a = isNaN.a == 1.0 ? NAN : result.a; return result; `,FX=_e({opSnippet:$X,packedOpSnippet:RX,cpuKernelImpl:NE}),qD={kernelName:uo,backendName:"webgl",kernelFunc:FX};var OX="return log(1.0 + x);",PX=_e({opSnippet:OX}),HD={kernelName:di,backendName:"webgl",kernelFunc:PX};var MX="return float(a >= 1.0 && b >= 1.0);",LX=` return vec4( vec4(greaterThanEqual(a, vec4(1.0))) * vec4(greaterThanEqual(b, vec4(1.0)))); `,zX=ot({opSnippet:MX,packedOpSnippet:LX,dtype:"bool"}),KD={kernelName:hi,backendName:"webgl",kernelFunc:zX};var BX="return float(!(x >= 1.0));",VX=_e({opSnippet:BX}),XD={kernelName:Ja,backendName:"webgl",kernelFunc:VX};var GX="return float(a >= 1.0 || b >= 1.0);",jX=` return min( vec4(greaterThanEqual(a, vec4(1.0))) + vec4(greaterThanEqual(b, vec4(1.0))), vec4(1.0)); `,WX=ot({opSnippet:GX,packedOpSnippet:jX,dtype:"bool"}),YD={kernelName:Qa,backendName:"webgl",kernelFunc:WX};var Av=class{constructor(e,t,n,o,s){this.variableNames=["x"],this.outputShape=[];let a=t,i=e[3]-1;this.outputShape=e;let l,u=`float(${n}) + float(${o}) * sum`;s===.5?l=`inversesqrt(${u})`:s===1?l=`1.0/(${u})`:l=`exp(log(${u}) * 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 = -${a}; j <= ${a}; j++) { int idx = d + j; if (idx >= 0 && idx <= ${i}) { float z = getX(b, r, c, idx); sum += z * z; } } float val = x * ${l}; setOutput(val); } `}};var Ev=class{constructor(e,t,n,o,s){this.variableNames=["x"],this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0;let a=t,i=e[3]-1;this.outputShape=e;let l,u=`float(${n}) + float(${o}) * sum`;s===.5?l=`inversesqrt(${u})`:s===1?l=`1.0/(${u})`:l=`exp(log(${u}) * 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 - ${a}; 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 = - ${a}; j <= ${a}; j++) { ivec2 idx = depth + j; bvec2 aboveLowerBound = greaterThanEqual(idx, ivec2(0)); bvec2 belowUpperBound = lessThanEqual(idx, ivec2(${i})); bool depthInRange = aboveLowerBound.x && belowUpperBound.x; bool depthPlusOneInRange = aboveLowerBound.y && belowUpperBound.y; if(depthInRange || depthPlusOneInRange){ vec4 z = vec4(0.); vec4 xFragAtCurrentDepth; z.xz = cache.xy; if(depthPlusOneInRange && hasNextCol){ xFragAtCurrentDepth = idx.y != d ? getX(b, r, c, idx.y) : xFragAtOutputCoords; z.y = getChannel(xFragAtCurrentDepth, vec2(c, idx.y)); if(hasNextRow){ z.w = getChannel(xFragAtCurrentDepth, vec2(c + 1, idx.y)); } } cache.xy = z.yw; sum += z * z; } } vec4 result = xAtOutputCoords * ${l}; setOutput(result); } `}};var UX=r=>{let{inputs:e,backend:t,attrs:n}=r,{x:o}=e,{depthRadius:s,bias:a,alpha:i,beta:l}=n,u=W().getBool("WEBGL_PACK_NORMALIZATION")?new Ev(o.shape,s,a,i,l):new Av(o.shape,s,a,i,l);return t.runWebGLProgram(u,[o],o.dtype)},ZD={kernelName:aa,backendName:"webgl",kernelFunc:UX};var Dv=class{constructor(e,t,n,o,s){this.variableNames=["inputImage","outputImage","dy"],this.outputShape=[],this.outputShape=e,this.depth=e[3],this.depthRadius=t,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 - ${t}))); int depthEnd = int(min(float(${this.depth}), float(d + ${t} + 1))); const int MIN_DEPTH_BEGIN = 0; const int MAX_DEPTH_END = ${this.depth}; float norm = 0.0; for (int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k) { if (k < depthBegin){ continue; } else if (k >= depthBegin && k < depthEnd) { norm += getInputImage(b, r, c, k) * getInputImage(b, r, c, k); } else { break; } } norm = float(${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 qX=r=>{let{inputs:e,backend:t,attrs:n}=r,{x:o,y:s,dy:a}=e,{depthRadius:i,bias:l,alpha:u,beta:c}=n,p=new Dv(o.shape,i,l,u,c);return t.runWebGLProgram(p,[o,s,a],o.dtype)},JD={kernelName:tu,backendName:"webgl",kernelFunc:qX};function QD(r,e,t,n){let o=y.sizeFromShape(e),a=y.sizeFromShape(r.shape)/o,i=pe({inputs:{x:r},attrs:{shape:[a,o]},backend:n}),l=Nn(i,r.dtype,"max",n),u=pe({inputs:{x:l},attrs:{shape:t},backend:n});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(l),u}function $v(r){let{inputs:e,backend:t,attrs:n}=r,{x:o}=e,{reductionIndices:s,keepDims:a}=n,i=o.shape.length,l=y.parseAxisParam(s,o.shape),u=l,c=N.getAxesPermutation(u,i),p=c!=null,m=t.shouldExecuteOnCPU([o]),f=o;if(p){if(m){let b=t.texData.get(f.dataId).values,_=new Array(i);for(let S=0;S<_.length;S++)_[S]=o.shape[c[S]];let k=wp(b,o.shape,o.dtype,c,_);f=t.makeTensorInfo(_,o.dtype);let A=t.texData.get(f.dataId);A.values=k}else f=xl(o,c,t);u=N.getInnerMostAxes(u.length,i)}N.assertAxesAreInnerMostDims("max",u,i);let[d,h]=N.computeOutAndReduceShapes(f.shape,u),g=d;a&&(g=N.expandShapeToKeepDim(d,l));let x;if(m){let b=t.texData.get(f.dataId).values,_=SE(b,y.sizeFromShape(h),g,o.dtype);x=t.makeTensorInfo(g,o.dtype);let k=t.texData.get(x.dataId);k.values=_}else x=QD(f,h,g,t);return p&&t.disposeIntermediateTensorInfo(f),x}var e$={kernelName:co,backendName:"webgl",kernelFunc:$v};var HX=Vg+` return max(a, b); `,KX=` vec4 result = vec4(max(a, b)); vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0)); `+hl+` return result; `,XX=ot({opSnippet:HX,packedOpSnippet:KX,cpuKernelImpl:TE}),t$={kernelName:po,backendName:"webgl",kernelFunc:XX};function YX(r){let{inputs:e,backend:t,attrs:n}=r,{x:o}=e;$s(o,"maxPool");let{filterSize:s,strides:a,pad:i,dimRoundingMode:l}=n,u=1;y.assert(N.eitherStridesOrDilationsAreOne(a,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=N.computePool2DInfo(o.shape,s,a,u,i,l);if(c.filterWidth===1&&c.filterHeight===1&&y.arraysEqual(c.inShape,c.outShape))return Ut({inputs:{x:o},backend:t});let p=new Vi(c,"max",!1);return t.runWebGLProgram(p,[o],o.dtype)}var r$={kernelName:mo,backendName:"webgl",kernelFunc:YX};function ZX(r){let{inputs:e,backend:t,attrs:n}=r,{x:o}=e,{filterSize:s,strides:a,pad:i,dataFormat:l,dimRoundingMode:u}=n,c=[1,1,1],p=N.computePool3DInfo(o.shape,s,a,c,i,u,l),m=new Ju(p,"max",!1);return t.runWebGLProgram(m,[o],o.dtype)}var n$={kernelName:la,backendName:"webgl",kernelFunc:ZX};var Rv=class{constructor(e){this.variableNames=["dy","maxPos"],this.outputShape=e.inShape;let t=e.strideHeight,n=e.strideWidth,o=e.dilationHeight,s=e.effectiveFilterHeight,a=e.effectiveFilterWidth,i=s-1-e.padInfo.top,l=a-1-e.padInfo.left,u=s*a-1;this.userCode=` const ivec2 pads = ivec2(${i}, ${l}); 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) / ${t}.0; if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) { continue; } int idyR = int(dyR); for (int wC = 0; wC < ${a}; wC++) { float dyC = float(dyCCorner + wC) / ${n}.0; if (dyC < 0.0 || dyC >= ${e.outWidth}.0 || fract(dyC) > 0.0) { continue; } int idyC = int(dyC); float dyValue = getDy(b, idyR, idyC, d); int maxPosValue = ${u} - int(getMaxPos(b, idyR, idyC, d)); // Get the current value, check it against the value from the // position matrix. int curPosValue = wR * ${a} + wC; float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0); dotProd += dyValue * mask; } } setOutput(dotProd); } `}},Fv=class{constructor(e){this.variableNames=["dy","maxPos"],this.outputShape=e.inShape;let t=e.strideDepth,n=e.strideHeight,o=e.strideWidth,s=e.dilationDepth,a=e.dilationHeight,i=e.dilationWidth,l=e.effectiveFilterDepth,u=e.effectiveFilterHeight,c=e.effectiveFilterWidth,p=l-1-e.padInfo.front,m=u-1-e.padInfo.top,f=c-1-e.padInfo.left,d=l*u*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 < ${l}; wD += ${s}) { float dyD = float(dyDCorner + wD) / ${t}.0; if (dyD < 0.0 || dyD >= ${e.outDepth}.0 || fract(dyD) > 0.0) { continue; } int idyD = int(dyD); for (int wR = 0; wR < ${u}; wR += ${a}) { float dyR = float(dyRCorner + wR) / ${n}.0; if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) { continue; } int idyR = int(dyR); for (int wC = 0; wC < ${c}; wC += ${i}) { float dyC = float(dyCCorner + wC) / ${o}.0; if (dyC < 0.0 || dyC >= ${e.outWidth}.0 || fract(dyC) > 0.0) { continue; } int idyC = int(dyC); float dyValue = getDy(batch, idyD, idyR, idyC, ch); int maxPosValue = ${d} - int(getMaxPos(batch, idyD, idyR, idyC, ch)); // Get the current value, check it against the value from the // position matrix. int curPosValue = wD * ${u} * ${c} + wR * ${c} + wC; float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0); dotProd += dyValue * mask; } } } setOutput(dotProd); } `}};function JX(r){let{inputs:e,backend:t,attrs:n}=r,{dy:o,input:s}=e,a=s,{filterSize:i,strides:l,pad:u,dimRoundingMode:c}=n,p=[1,1,1],m=N.computePool3DInfo(a.shape,i,l,p,u,c),f=new Ju(m,"max",!0),d=t.runWebGLProgram(f,[a],a.dtype),h=new Fv(m),g=t.runWebGLProgram(h,[o,d],a.dtype);return t.disposeIntermediateTensorInfo(d),g}var o$={kernelName:nu,backendName:"webgl",kernelFunc:JX};function QX(r){let{inputs:e,backend:t,attrs:n}=r,{dy:o,input:s,output:a}=e,i=s;$s([s,a],"maxPoolGrad");let{filterSize:l,strides:u,pad:c,dimRoundingMode:p}=n,m=N.computePool2DInfo(i.shape,l,u,1,c,p),f=!0,d=new Vi(m,"max",f),h=t.runWebGLProgram(d,[i],i.dtype),g=new Rv(m),x=t.runWebGLProgram(g,[o,h],i.dtype);return t.disposeIntermediateTensorInfo(h),x}var s$={kernelName:ru,backendName:"webgl",kernelFunc:QX};function i$(r,e,t,n){let o=new Vi(t,"max",!1),s=n.runWebGLProgram(o,[r],"float32");o=new Vi(t,"max",!0,!0,e);let a=n.runWebGLProgram(o,[r],"float32");return[s,a]}var a$={kernelName:ou,backendName:"webgl",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:n}=r,{filterSize:o,strides:s,pad:a,includeBatchInIndex:i}=e,l=t;y.assert(n.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${n.shape.length}.`);let u=[1,1];y.assert(N.eitherStridesOrDilationsAreOne(s,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${u}'`);let c=N.computePool2DInfo(n.shape,o,s,u,a),[p,m]=i$(n,i,c,l);return[p,m]}};function l$(r,e,t,n){let o=y.sizeFromShape(e),a=y.sizeFromShape(r.shape)/o,i=pe({inputs:{x:r},attrs:{shape:[a,o]},backend:n}),l=Nn(i,"float32","mean",n),u=pe({inputs:{x:l},attrs:{shape:t},backend:n});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(l),u}var u$={kernelName:fo,backendName:"webgl",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:n}=r,{keepDims:o,axis:s}=e,a=t,i=n.shape.length,l=y.parseAxisParam(s,n.shape),u=l,c=N.getAxesPermutation(u,i),p=c!=null,m=a.shouldExecuteOnCPU([n]),f=[],d=n;if(p){if(m){let _=a.texData.get(d.dataId).values,k=new Array(i);for(let $=0;$c[0]+e[p]+c[1]);let o=e.length,s=Le(o),a=t.map(c=>c[0]).join(","),i=t.map((c,p)=>c[0]+e[p]).join(","),l=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,o),u=n==="reflect"?0:1;if(o===1){this.userCode=` int start = ${a}; int end = ${i}; void main() { int outC = getOutputCoords(); if (outC < start) { outC = start * 2 - outC - ${u}; } else if(outC >= end) { outC = (end - 1) * 2 - outC + ${u}; } setOutput(getX(outC - start)); } `;return}this.userCode=` ${s} start = ${s}(${a}); ${s} end = ${s}(${i}); void main() { ${s} outC = getOutputCoords(); for (int i = 0; i < ${o}; i++) { if (outC[i] < start[i]) { outC[i] = start[i] * 2 - outC[i] - ${u}; } else if(outC[i] >= end[i]) { outC[i] = (end[i] - 1) * 2 - outC[i] + ${u}; } } ${s} coords = outC - start; setOutput(getX(${l})); } `}};var Pv=class{constructor(e,t,n){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t.map((d,h)=>d[0]+e[h]+d[1]);let o=e.length,s=Le(o),a=t.map(d=>d[0]).join(","),i=t.map((d,h)=>d[0]+e[h]).join(","),l=Wt("rc",o),u=Wt("source",o),c=`${l[o-1]} < ${this.outputShape[o-1]}`,p=o===1?"source":`vec2(${u.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(${u.join()}), ${p}); ${l[o-1]} += 1; if(${c}) { ${d} result[1] = getChannel(getX(${u.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(${u.join()}), ${p}); ${l[o-1]} += 1; if(${c}) { ${d} result[1] = getChannel(getX(${u.join()}), ${p}); } rc = outputLoc; ${l[o-2]} += 1; if(${l[o-2]} < ${this.outputShape[o-2]}) { ${d} result[2] = getChannel(getX(${u.join()}), ${p}); ${l[o-1]} += 1; if(${c}) { ${d} result[3] = getChannel(getX(${u.join()}), ${p}); } } `}this.userCode=` const ${s} start = ${s}(${a}); const ${s} end = ${s}(${i}); void main() { ${s} outputLoc = getOutputCoords(); vec4 result = vec4(0.); ${f} setOutput(result); } `}};var o7=({inputs:r,backend:e,attrs:t})=>{let{x:n}=r,{paddings:o,mode:s}=t,a=W().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new Pv(n.shape,o,s):new Ov(n.shape,o,s);return e.runWebGLProgram(a,[n],n.dtype)},m$={kernelName:ua,backendName:"webgl",kernelFunc:o7};var s7=`if (b == 0.0) return NAN; return mod(a, b);`,i7=` vec4 result = mod(a, b); vec4 isNaN = vec4(equal(b, vec4(0.0))); `+hl+` return result; `,a7=ot({opSnippet:s7,packedOpSnippet:i7}),f$={kernelName:gi,backendName:"webgl",kernelFunc:a7};var Mv=class{constructor(e,t,n){this.variableNames=["probs"],this.outputShape=[e,n],this.userCode=` uniform float seed; void main() { ivec2 coords = getOutputCoords(); int batch = coords[0]; float r = random(seed); float cdf = 0.0; for (int i = 0; i < ${t-1}; i++) { cdf += getProbs(batch, i); if (r < cdf) { setOutput(float(i)); return; } } // If no other event happened, last event happened. setOutput(float(${t-1})); } `}getCustomSetupFunc(e){return(t,n)=>{this.seedLoc==null&&(this.seedLoc=t.getUniformLocation(n,"seed")),t.gl.uniform1f(this.seedLoc,e)}}};var l7=` if (a == b) { return 1.0; }; return a / b;`,u7=` // 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; `,Lv=ot({opSnippet:l7,packedOpSnippet:u7,checkOutOfBounds:!0}),d$={kernelName:ro,backendName:"webgl",kernelFunc:Lv};var h$="return a - b;",zv=ot({opSnippet:h$,packedOpSnippet:h$,supportsComplex:!0,cpuKernelImpl:ME}),g$={kernelName:Fo,backendName:"webgl",kernelFunc:zv};function Bv(r){let{inputs:e,backend:t,attrs:n}=r,{logits:o}=e,{dim:s}=n,a=y.parseAxisParam([s],o.shape),i=$v({inputs:{x:o},backend:t,attrs:{reductionIndices:a,keepDims:!1}}),l=N.expandShapeToKeepDim(i.shape,a),u=pe({inputs:{x:i},backend:t,attrs:{shape:l}}),c=zv({inputs:{a:o,b:u},backend:t}),p=kv({inputs:{x:c},backend:t}),m=vf({inputs:{x:p},backend:t,attrs:{axis:a,keepDims:!1}}),f=pe({inputs:{x:m},backend:t,attrs:{shape:l}}),d=Lv({inputs:{a:p,b:f},backend:t});return t.disposeIntermediateTensorInfo(i),t.disposeIntermediateTensorInfo(u),t.disposeIntermediateTensorInfo(c),t.disposeIntermediateTensorInfo(p),t.disposeIntermediateTensorInfo(m),t.disposeIntermediateTensorInfo(f),d}var x$={kernelName:$o,backendName:"webgl",kernelFunc:Bv};function c7(r){let{inputs:e,backend:t,attrs:n}=r,{logits:o}=e,{numSamples:s,seed:a,normalized:i}=n,l=i?o:Bv({inputs:{logits:o},backend:t,attrs:{dim:o.shape.length-1}}),u=l.shape[0],c=l.shape[1],p=new Mv(u,c,s),m=p.getCustomSetupFunc(a),f=t.runWebGLProgram(p,[l],"int32",m);return i||t.disposeIntermediateTensorInfo(l),f}var y$={kernelName:su,backendName:"webgl",kernelFunc:c7};var b$="return -x;";function p7(r){let{inputs:e,backend:t}=r,{x:n}=e;if(t.shouldExecuteOnCPU([n])){let s=t.texData.get(n.dataId),[a,i]=DE(s.values,n.shape,n.dtype);return t.makeTensorInfo(i,n.dtype,a)}let o;return W().getBool("WEBGL_PACK_UNARY_OPERATIONS")?o=new Fs(n.shape,b$):o=new ln(n.shape,b$),t.runWebGLProgram(o,[n],n.dtype)}var w$={kernelName:ps,backendName:"webgl",kernelFunc:p7};var m7=Ar.nonMaxSuppressionV3Impl;function f7(r){N.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:e,backend:t,attrs:n}=r,{boxes:o,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:l}=n,u=t.readSync(o.dataId),c=t.readSync(s.dataId),{selectedIndices:p}=m7(u,c,a,i,l);return t.makeTensorInfo([p.length],"int32",new Int32Array(p))}var _$={kernelName:yi,backendName:"webgl",kernelFunc:f7};var d7=Ar.nonMaxSuppressionV4Impl;function h7(r){N.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:e,backend:t,attrs:n}=r,{boxes:o,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:l,padToMaxOutputSize:u}=n,c=t.readSync(o.dataId),p=t.readSync(s.dataId),{selectedIndices:m,validOutputs:f}=d7(c,p,a,i,l,u);return[t.makeTensorInfo([m.length],"int32",new Int32Array(m)),t.makeTensorInfo([],"int32",new Int32Array([f]))]}var k$={kernelName:bi,backendName:"webgl",kernelFunc:h7};var g7=Ar.nonMaxSuppressionV5Impl;function x7(r){N.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:e,backend:t,attrs:n}=r,{boxes:o,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:l,softNmsSigma:u}=n,c=t.readSync(o.dataId),p=t.readSync(s.dataId),m=a,f=i,d=l,h=u,{selectedIndices:g,selectedScores:x}=g7(c,p,m,f,d,h);return[t.makeTensorInfo([g.length],"int32",new Int32Array(g)),t.makeTensorInfo([x.length],"float32",new Float32Array(x))]}var v$={kernelName:wi,backendName:"webgl",kernelFunc:x7};var Vv=class{constructor(e,t,n,o){this.variableNames=["indices"],this.outputShape=[e,t],this.userCode=` void main() { ivec2 coords = getOutputCoords(); int index = round(getIndices(coords.x)); setOutput(mix(float(${o}), float(${n}), float(index == coords.y))); } `}};var y7=r=>{let{inputs:e,backend:t,attrs:n}=r,{indices:o}=e,{depth:s,onValue:a,offValue:i}=n,l=y.sizeFromShape(o.shape),u=new Vv(l,s,a,i),c=pe({inputs:{x:o},backend:t,attrs:{shape:[l]}}),p=t.runWebGLProgram(u,[c],o.dtype);t.disposeIntermediateTensorInfo(c);let m=[...o.shape,s],f=pe({inputs:{x:p},backend:t,attrs:{shape:m}});return t.disposeIntermediateTensorInfo(p),f},C$={kernelName:yo,backendName:"webgl",kernelFunc:y7};function Tf(r){let{inputs:e,backend:t}=r,{x:n}=e;if(n.dtype==="complex64"){let o=La({inputs:{input:n},backend:t}),s=Tf({inputs:{x:o},backend:t}),a=Qu({inputs:{input:n},backend:t}),i=Tf({inputs:{x:a},backend:t}),l=un({inputs:{real:s,imag:i},backend:t});return t.disposeIntermediateTensorInfo(o),t.disposeIntermediateTensorInfo(s),t.disposeIntermediateTensorInfo(a),t.disposeIntermediateTensorInfo(i),l}else return Sf({attrs:{shape:n.shape,dtype:n.dtype,value:n.dtype==="string"?"":0},backend:t})}var I$={kernelName:bs,backendName:"webgl",kernelFunc:Tf};function N$(r){let{inputs:e,backend:t}=r,{x:n}=e;if(n.dtype==="string")throw new Error("onesLike is not supported under string dtype");if(n.dtype==="complex64"){let o=La({inputs:{input:n},backend:t}),s=N$({inputs:{x:o},backend:t}),a=Qu({inputs:{input:n},backend:t}),i=Tf({inputs:{x:a},backend:t}),l=un({inputs:{real:s,imag:i},backend:t});return t.disposeIntermediateTensorInfo(o),t.disposeIntermediateTensorInfo(s),t.disposeIntermediateTensorInfo(a),t.disposeIntermediateTensorInfo(i),l}else return Sf({attrs:{shape:n.shape,dtype:n.dtype,value:1},backend:t})}var S$={kernelName:ms,backendName:"webgl",kernelFunc:N$};function b7(r){let{inputs:e,backend:t,attrs:n}=r,{axis:o}=n;if(e.length===1)return Zg({inputs:{input:e[0]},backend:t,attrs:{dim:o}});let s=e[0].shape,a=e[0].dtype;e.forEach(c=>{y.assertShapesMatch(s,c.shape,"All tensors passed to stack must have matching shapes"),y.assert(a===c.dtype,()=>"All tensors passed to stack must have matching dtypes")});let i=[],l=e.map(c=>{let p=Zg({inputs:{input:c},backend:t,attrs:{dim:o}});return i.push(p),p}),u=uv({inputs:l,backend:t,attrs:{axis:o}});return i.forEach(c=>t.disposeIntermediateTensorInfo(c)),u}var T$={kernelName:fs,backendName:"webgl",kernelFunc:b7};var Gv=class{constructor(e,t,n){this.variableNames=["x"],this.outputShape=t.map((u,c)=>u[0]+e[c]+u[1]);let o=e.length,s=Le(o),a=t.map(u=>u[0]).join(","),i=t.map((u,c)=>u[0]+e[c]).join(","),l=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,o);if(o===1){this.userCode=` int start = ${a}; int end = ${i}; void main() { int outC = getOutputCoords(); if (outC < start || outC >= end) { setOutput(float(${n})); } else { setOutput(getX(outC - start)); } } `;return}this.userCode=` ${s} start = ${s}(${a}); ${s} end = ${s}(${i}); void main() { ${s} outC = getOutputCoords(); if (any(lessThan(outC, start)) || any(greaterThanEqual(outC, end))) { setOutput(float(${n})); } else { ${s} coords = outC - start; setOutput(getX(${l})); } } `}};var jv=class{constructor(e,t,n){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t.map((h,g)=>h[0]+e[g]+h[1]);let o=e.length,s=Le(o),a=t.map(h=>h[0]).join(","),i=t.map((h,g)=>h[0]+e[g]).join(","),l=Wt("rc",o),u=Wt("source",o),c=`${l[o-1]} < ${this.outputShape[o-1]}`,p=o===1?"source":`vec2(${u.slice(-2).join()})`,m=[`${s} rc = outputLoc;`,`${l[o-1]} += 1; if(${c}) { `,o===1?"":`} rc = outputLoc; ${l[o-2]} += 1; if(${l[o-2]} < ${this.outputShape[o-2]}) {`,o===1?"":` ${l[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{let{inputs:e,backend:t,attrs:n}=r,{x:o}=e,{paddings:s,constantValue:a}=n,i=W().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new jv(o.shape,s,a):new Gv(o.shape,s,a);return t.runWebGLProgram(i,[o],o.dtype)},A$={kernelName:bo,backendName:"webgl",kernelFunc:Wv};var w7=` 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); `,_7=` // isModRound1 has 1 for components with round(mod(b, 2.0)) == 1, 0 otherwise. vec4 isModRound1 = vec4(equal(round(mod(b, 2.0)), ivec4(1))); vec4 multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1); vec4 result = multiplier * pow(abs(a), b); // Ensure that a^0 = 1, including 0^0 = 1 as this correspond to TF and JS bvec4 isExpZero = equal(b, vec4(0.0)); result.r = isExpZero.r ? 1.0 : result.r; result.g = isExpZero.g ? 1.0 : result.g; result.b = isExpZero.b ? 1.0 : result.b; result.a = isExpZero.a ? 1.0 : result.a; vec4 isNaN = vec4(lessThan(a, vec4(0.0))) * vec4(lessThan(floor(b), b)); `+hl+` return result; `,k7=ot({opSnippet:w7,packedOpSnippet:_7}),E$={kernelName:wo,backendName:"webgl",kernelFunc:k7};function v7(r){let{inputs:e,backend:t,attrs:n}=r,{x:o}=e,{axis:s,keepDims:a}=n,i=o.shape.length,l=[],u=y.parseAxisParam(s,o.shape),c=u,p=N.getAxesPermutation(c,i),m=o;p!=null&&(m=Lt({inputs:{x:o},backend:t,attrs:{perm:p}}),c=N.getInnerMostAxes(c.length,i),l.push(m)),N.assertAxesAreInnerMostDims("prod",c,i);let f;if(t.shouldExecuteOnCPU([m])){let d=t.texData.get(m.dataId).values,{outVals:h,outShape:g,outDtype:x}=$E(m.shape,m.dtype,d,c);f=t.makeTensorInfo(g,x,h)}else{let[d,h]=N.computeOutAndReduceShapes(m.shape,c),g=y.sizeFromShape(h),x=pe({inputs:{x:m},backend:t,attrs:{shape:[-1,g]}}),w=mu(o.dtype),b=Nn(x,w,"prod",t);f=pe({inputs:{x:b},backend:t,attrs:{shape:d}}),l.push(x),l.push(b)}if(a){l.push(f);let d=N.expandShapeToKeepDim(f.shape,u);f=pe({inputs:{x:f},backend:t,attrs:{shape:d}})}return l.forEach(d=>t.disposeIntermediateTensorInfo(d)),f}var D$={kernelName:_i,backendName:"webgl",kernelFunc:v7};var Uv=r=>{let{backend:e,attrs:t}=r,{start:n,stop:o,step:s,dtype:a}=t,i=RE(n,o,s,a);return e.makeTensorInfo([i.length],a,i)},$$={kernelName:ca,backendName:"webgl",kernelFunc:Uv};var C7="return 1.0 / x;",I7=_e({opSnippet:C7}),R$={kernelName:ki,backendName:"webgl",kernelFunc:I7};var N7=gr+` return (x < 0.0) ? 0.0 : x; `,S7=` 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; `,T7=_e({opSnippet:N7,packedOpSnippet:S7}),F$={kernelName:ko,backendName:"webgl",kernelFunc:T7};var A7=gr+` return (x < 0.0) ? 0.0 : min(6.0, x); `,E7=` 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; `,D7=_e({opSnippet:A7,packedOpSnippet:E7}),O$={kernelName:Co,backendName:"webgl",kernelFunc:D7};var qv=class{constructor(e,t,n,o,s){this.variableNames=["A"],this.outputShape=[];let[a,i,l,u]=e;this.outputShape=[a,t,n,u];let c=[o&&t>1?i-1:i,o&&n>1?l-1:l],p=[o&&t>1?t-1:t,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(${i}.0, ${l}.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 Hv=class{constructor(e,t,n,o,s){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[a,i,l,u]=e;this.outputShape=[a,t,n,u];let c=[o&&t>1?i-1:i,o&&n>1?l-1:l],p=[o&&t>1?t-1:t,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(${i}.0, ${l}.0, ${l}.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 < ${u-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 $7(r){let{inputs:e,backend:t,attrs:n}=r,{images:o}=e,{alignCorners:s,halfPixelCenters:a,size:i}=n,[l,u]=i,c=W().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new Hv(o.shape,l,u,s,a):new qv(o.shape,l,u,s,a);return t.runWebGLProgram(c,[o],"float32")}var P$={kernelName:vo,backendName:"webgl",kernelFunc:$7};var Kv=class{constructor(e,t,n){this.variableNames=["dy"],this.outputShape=[],this.outputShape=t;let[,o,s]=t,[,a,i]=e,l=[n&&a>1?o-1:o,n&&i>1?s-1:s],u=[n&&a>1?a-1:a,n&&i>1?i-1:i],c=l[0]/u[0],p=l[1]/u[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 >= ${a}) { continue; } for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) { int dyC = dyCOffset + startDyC; // Guard against the window exceeding the bounds of dy if (dyC < 0 || dyC >= ${i}) { continue; } float dxR = float(dyR) * heightScale; int topDxRIndex = int(floor(dxR)); int bottomDxRIndex = int(min(ceil(dxR), ${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 R7(r){let{inputs:e,backend:t,attrs:n}=r,{images:o,dy:s}=e,{alignCorners:a}=n,i=new Kv(s.shape,o.shape,a);return t.runWebGLProgram(i,[s],s.dtype)}var M$={kernelName:lu,backendName:"webgl",kernelFunc:R7};var Xv=class{constructor(e,t,n,o,s){this.variableNames=["A"],this.outputShape=[];let[a,i,l,u]=e;this.outputShape=[a,t,n,u];let c=[o&&t>1?i-1:i,o&&n>1?l-1:l],p=[o&&t>1?t-1:t,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(${i}.0, ${l}.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); } `}};function F7(r){let{inputs:e,backend:t,attrs:n}=r,{images:o}=e,{alignCorners:s,halfPixelCenters:a,size:i}=n,[l,u]=i,c=new Xv(o.shape,l,u,s,a);return t.runWebGLProgram(c,[o],o.dtype)}var L$={kernelName:pa,backendName:"webgl",kernelFunc:F7};var Yv=class{constructor(e,t,n){this.variableNames=["dy"],this.outputShape=[],this.outputShape=t;let[,o,s]=t,[,a,i]=e,l=[n&&a>1?o-1:o,n&&i>1?s-1:s],u=[n&&a>1?a-1:a,n&&i>1?i-1:i],c=l[0]/u[0],p=l[1]/u[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 >= ${a}) { continue; } for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) { int dyC = dyCOffset + startDyC; // Guard against the window exceeding the bounds of dy if (dyC < 0 || dyC >= ${i}) { continue; } float sourceFracRow = float(${l[0]}) * (float(dyR) / float(${u[0]})); float sourceFracCol = float(${l[1]}) * (float(dyC) / float(${u[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 O7(r){let{inputs:e,backend:t,attrs:n}=r,{images:o,dy:s}=e,{alignCorners:a}=n,i=new Yv(s.shape,o.shape,a);return t.runWebGLProgram(i,[s],s.dtype)}var z$={kernelName:au,backendName:"webgl",kernelFunc:O7};var Zv=class{constructor(e,t){this.variableNames=["x"];let n=e.length;if(n>4)throw new Error(`WebGL backend: Reverse of rank-${n} tensor is not yet supported`);if(this.outputShape=e,n===1){this.userCode=` void main() { int coord = getOutputCoords(); setOutput(getX(${e[0]} - coord - 1)); } `;return}let o=i=>t.indexOf(i)!==-1&&e[i]!==1?`${e[i]} - coords[${i}] - 1`:`coords[${i}]`,s=e.map((i,l)=>o(l)).join(","),a=Le(n);this.userCode=` void main() { ${a} coords = getOutputCoords(); setOutput(getX(${s})); } `}};var Jv=class{constructor(e,t){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0;let n=e.length;if(n>4)throw new Error(`WebGL backend: Reverse of rank-${n} tensor is not yet supported`);this.outputShape=e;let o=Wt("rc",n),s=`${o[n-1]} + 1 < ${this.outputShape[n-1]}`,a=`${o[n-2]} + 1 < ${this.outputShape[n-2]}`,i=Le(n);n===1?this.userCode=` void main(){ int rc = getOutputCoords(); vec4 result = vec4(0.); result.r = getChannel(getX(${e[0]} - rc - 1), ${e[0]} - rc - 1); if(${s}){ result.g = getChannel(getX(${e[0]} - (rc + 1) - 1), ${e[0]} - (rc + 1) - 1); } setOutput(result); } `:this.userCode=` void main() { ${i} rc = getOutputCoords(); vec4 result = vec4(0.); result.r = ${l(o.slice())}; if(${s}){ result.g = ${u(o.slice())}; } if(${a}) { result.b = ${c(o.slice())}; if(${s}) { result.a = ${p(o.slice())}; } } setOutput(result); } `;function l(d){return m(d)}function u(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=e.map((w,b)=>f(b,d)),g=h.join(","),x=h.slice(-2).join(",");return`getChannel(getX(${g}), vec2(${x}))`}function f(d,h){return t.indexOf(d)!==-1&&e[d]!==1?`${e[d]} - ${h[d]} - 1`:`${h[d]}`}}};function P7(r){let{inputs:e,backend:t,attrs:n}=r,{x:o}=e,{dims:s}=n,a=o.shape.length,i=y.parseAxisParam(s,o.shape);if(a===0)return Ut({inputs:{x:o},backend:t});let l=W().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new Jv(o.shape,i):new Zv(o.shape,i);return t.runWebGLProgram(l,[o],o.dtype)}var B$={kernelName:Io,backendName:"webgl",kernelFunc:P7};var Qv=class{constructor(e,t,n,o){this.variableNames=["Image"],this.outputShape=[];let s=e[1],a=e[2],i=Math.sin(t).toFixed(3),l=Math.cos(t).toFixed(3);this.outputShape=e;let[u,c]=N.getImageCenter(o,s,a),p=u.toFixed(3),m=c.toFixed(3),f="";typeof n=="number"?f=`float outputValue = ${n.toFixed(2)};`:f=` vec3 fill = vec3(${n.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) - ${p}) * ${l} - (float(y) - ${m}) * ${i}; float coordYFloat = (float(x) - ${p}) * ${i} + (float(y) - ${m}) * ${l}; int coordX = int(round(coordXFloat + ${p})); int coordY = int(round(coordYFloat + ${m})); ${f} if(coordX >= 0 && coordX < ${a} && coordY >= 0 && coordY < ${s}) { outputValue = getImage(coords[0], coordY, coordX, coords[3]); } setOutput(outputValue); } `}};var V$={kernelName:Di,backendName:"webgl",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{image:n}=r,{radians:o,fillValue:s,center:a}=e,i=t,l=new Qv(n.shape,o,s,a);return i.runWebGLProgram(l,[n],n.dtype)}};var M7=` // 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; } } `,L7=_e({opSnippet:M7}),G$={kernelName:No,backendName:"webgl",kernelFunc:L7};var z7="return inversesqrt(x);",B7=_e({opSnippet:z7,cpuKernelImpl:FE}),j$={kernelName:So,backendName:"webgl",kernelFunc:B7};var Af=class{constructor(e,t,n,o,s,a,i=!0){this.variableNames=["updates","indices","defaultValue"],this.outputShape=a;let l=Le(s.length),u=Le(a.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=t>1?"strides[j]":"strides";this.userCode=` ${l} strides = ${l}(${s}); void main() { ${u} coords = getOutputCoords(); float sum = 0.0; bool found = false; for (int i = 0; i < ${e}; i++) { int flattenedIndex = 0; for (int j = 0; j < ${t}; j++) { int index = round(${p}); flattenedIndex += index * ${d}; } if (flattenedIndex == coords[0]) { sum += ${f}; found = true; } } setOutput(mix(getDefaultValue(), sum, float(found))); } `}};function V7(r){let{inputs:e,backend:t,attrs:n}=r,{indices:o,updates:s}=e,{shape:a}=n,{sliceRank:i,numUpdates:l,sliceSize:u,strides:c,outputSize:p}=N.calculateShapes(s,o,a),m=[p/u,u];if(p===0)return t.makeTensorInfo(a,o.dtype);let f=pe({inputs:{x:o},backend:t,attrs:{shape:[l,i]}}),d=pe({inputs:{x:s},backend:t,attrs:{shape:[l,u]}}),h=t.makeTensorInfo([],"float32",new Float32Array([0])),g=new Af(l,i,f.shape.length,d.shape.length,c,m),x=t.runWebGLProgram(g,[d,f,h],d.dtype),w=pe({inputs:{x},backend:t,attrs:{shape:a}});return t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(d),t.disposeIntermediateTensorInfo(x),t.disposeIntermediateTensorInfo(h),w}var W$={kernelName:vi,backendName:"webgl",kernelFunc:V7};var e0=class{constructor(e,t,n){this.variableNames=["c","a","b"],this.outputShape=t;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 i=["resRC.x","resRC.y","resRC.z","resRC.w"],l=[],u=[];for(let c=0;c= 1.0) { setOutput(getA(${s})); } else { setOutput(getB(${s})); } } `}};function G7(r){let{inputs:e,backend:t}=r,{condition:n,t:o,e:s}=e,a=new e0(n.shape.length,o.shape,o.shape.length);return t.runWebGLProgram(a,[n,o,s],dr(o.dtype,s.dtype))}var U$={kernelName:hs,backendName:"webgl",kernelFunc:G7};var j7=` // Stable and Attracting Fixed Point (0, 1) for Normalized Weights. // see: https://arxiv.org/abs/1706.02515 float scaleAlpha = ${N.SELU_SCALEALPHA}; float scale = ${N.SELU_SCALE}; return (x >= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0); `,W7=_e({opSnippet:j7}),q$={kernelName:Ci,backendName:"webgl",kernelFunc:W7};var U7="return 1.0 / (1.0 + exp(-1.0 * x));",q7=_e({opSnippet:U7}),H$={kernelName:Ao,backendName:"webgl",kernelFunc:q7};var H7=` if (isnan(x)) { return 0.0; } return sign(x); `,K7=_e({opSnippet:H7}),K$={kernelName:Ni,backendName:"webgl",kernelFunc:K7};var X7=Gg+` return sin(x); `,Y7=_e({opSnippet:X7}),X$={kernelName:To,backendName:"webgl",kernelFunc:Y7};var Z7=` float e2x = exp(x); return (e2x - 1.0 / e2x) / 2.0; `,J7=_e({opSnippet:Z7}),Y$={kernelName:Ii,backendName:"webgl",kernelFunc:J7};var Q7=` 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; `,eY=_e({opSnippet:Q7}),Z$={kernelName:Si,backendName:"webgl",kernelFunc:eY};var tY=r=>{let{inputs:e,backend:t,attrs:n}=r,{x:o}=e,{blockShape:s,paddings:a}=n;y.assert(o.shape.length<=4,()=>"spaceToBatchND for rank > 4 with a WebGL backend not implemented yet");let i=s.reduce((x,w)=>x*w),l=[[0,0]];l.push(...a);for(let x=1+s.length;xt.disposeIntermediateTensorInfo(x)),g},J$={kernelName:ma,backendName:"webgl",kernelFunc:tY};function rY(r){let{inputs:e,backend:t,attrs:n}=r,{sparseIndices:o,sparseValues:s,defaultValue:a}=e,{outputShape:i}=n,{sliceRank:l,numUpdates:u,strides:c,outputSize:p}=N.calculateShapes(s,o,i),m=!1,f=new Af(u,l,o.shape.length,s.shape.length,c,[p,1],m),d=t.runWebGLProgram(f,[s,o,a],s.dtype),h=pe({inputs:{x:d},backend:t,attrs:{shape:i}});return t.disposeIntermediateTensorInfo(d),h}var Q$={kernelName:uu,backendName:"webgl",kernelFunc:rY};function nY(r){let{inputs:e,backend:t,attrs:n}=r,{x:o}=e,{numOrSizeSplits:s,axis:a}=n,i=y.parseAxisParam(a,o.shape)[0],l=N.prepareSplitSize(o,s,i),u=o.shape.length,c=new Array(u).fill(0),p=o.shape.slice();return l.map(m=>{let f=[...p];f[i]=m;let d=Ma({inputs:{x:o},backend:t,attrs:{begin:c,size:f}});return c[i]+=m,d})}var eR={kernelName:xs,backendName:"webgl",kernelFunc:nY};var oY="return sqrt(x);",sY=_e({opSnippet:oY}),tR={kernelName:Eo,backendName:"webgl",kernelFunc:sY};var iY="return x * x;",aY=_e({opSnippet:iY}),rR={kernelName:fa,backendName:"webgl",kernelFunc:aY};var nR="return (a - b) * (a - b);",lY=ot({opSnippet:nR,packedOpSnippet:nR}),oR={kernelName:Ro,backendName:"webgl",kernelFunc:lY};function uY({inputs:r,attrs:e,backend:t}){let{x:n}=r,o=gr+` return x > 0.0 ? 1.0 : float(${e.alpha}); `,s=new ln(n.shape,o);return t.runWebGLProgram(s,[n],n.dtype)}var sR={kernelName:On,backendName:"webgl",kernelFunc:uY};var t0=class{constructor(e,t,n){this.variableNames=["x"],this.outputShape=n;let o=n.length,s=Le(n.length),a=Le(n.length),i="";if(o===1)i="coords * strides + begin";else{let l=0;i=n.map((u,c)=>(l++,n.length===1?`coords * strides[${c}] + begin[${c}]`:`coords[${l-1}] * strides[${c}] + begin[${c}]`)).join(",")}this.userCode=` ${s} begin = ${s}(${e}); ${s} strides = ${s}(${t}); void main() { ${a} coords = getOutputCoords(); setOutput(getX(${i})); } `}};function cY(r){let{inputs:e,backend:t,attrs:n}=r,{x:o}=e,{begin:s,end:a,strides:i,beginMask:l,endMask:u,ellipsisMask:c,newAxisMask:p,shrinkAxisMask:m}=n,{nonStrided:f,$begin:d,$strides:h,size:g,newShape:x,outShape:w}=sr.sliceInfo(o.shape,s,a,i,l,u,c,p,m),b=pe({inputs:{x:o},backend:t,attrs:{shape:x}}),_;if(f){let A=Ma({inputs:{x:b},backend:t,attrs:{begin:d,size:g}});_=pe({inputs:{x:A},backend:t,attrs:{shape:w}}),t.disposeIntermediateTensorInfo(A)}else if(w.some(A=>A===0))_=t.makeTensorInfo(w,o.dtype,[]);else if(t.shouldExecuteOnCPU([b])){let $=t.texData.get(b.dataId).values,O=ve(b.shape,b.dtype,$),M=PE(w,O,h,d);_=t.makeTensorInfo(w,b.dtype,M.values)}else{let S=new t0(d,h,w);_=t.runWebGLProgram(S,[b],b.dtype)}let k=pe({inputs:{x:_},backend:t,attrs:{shape:w}});return t.disposeIntermediateTensorInfo(b),t.disposeIntermediateTensorInfo(_),k}var iR={kernelName:Ti,backendName:"webgl",kernelFunc:cY};var pY="return tan(x);",mY=_e({opSnippet:pY}),aR={kernelName:Ai,backendName:"webgl",kernelFunc:mY};var fY=` float e2x = exp(-2.0 * abs(x)); return sign(x) * (1.0 - e2x) / (1.0 + e2x); `,dY=_e({opSnippet:fY}),lR={kernelName:Oo,backendName:"webgl",kernelFunc:dY};var r0=class{constructor(e,t){this.variableNames=["A"];let n=new Array(e.length);for(let a=0;a5)throw Error(`Tile for rank ${e} is not yet supported`);if(e===1)return`imod(resRC, ${r[0]})`;let t=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u"],n=[];for(let o=0;oy.decodeString(m)),c=ve(o.shape,o.dtype,u),p=LE(c,s);return t.makeTensorInfo(p.shape,p.dtype,p.values)}let a=new r0(o.shape,s);return t.runWebGLProgram(a,[o],o.dtype)}var uR={kernelName:_n,backendName:"webgl",kernelFunc:n0};function gY(r){let{inputs:e,backend:t,attrs:n}=r,{x:o}=e,{k:s,sorted:a}=n,i=t.readSync(o.dataId),[l,u]=zE(i,o.shape,o.dtype,s,a);return[t.makeTensorInfo(l.shape,l.dtype,l.values),t.makeTensorInfo(u.shape,u.dtype,u.values)]}var cR={kernelName:Ei,backendName:"webgl",kernelFunc:gY};function xY(r){let{inputs:e,attrs:t,backend:n}=r,{axis:o}=t,{x:s}=e;$s(s,"unique"),console.warn("WARNING: ","UI might be locked temporarily as data is being downloaded");let a=n.readSync(s.dataId),{outputValues:i,outputShape:l,indices:u}=BE(a,o,s.shape,s.dtype);return[n.makeTensorInfo(l,s.dtype,i),n.makeTensorInfo([u.length],"int32",u)]}var pR={kernelName:cu,backendName:"webgl",kernelFunc:xY};function yY(r){let{inputs:e,backend:t,attrs:n}=r,{value:o}=e,{axis:s}=n;s<0&&(s+=o.shape.length);let a=o,i=a.shape.length,l=o.shape[s],u=new Array(i-1),c=0;for(let h=0;ht.disposeIntermediateTensorInfo(h)),d}var mR={kernelName:ys,backendName:"webgl",kernelFunc:yY};var o0=class{constructor(e,t){this.variableNames=["x","segmentIds"];let n=e.windowSize,o=e.batchSize,s=e.inSize,a=e.numSegments,i=a*Math.ceil(s/n);this.outputShape=[o,i];let l="0.0",u="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 = ${l}; 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( ${a})) * float(${n})); int currentSeg = int(mod(float(outIdx), float(${a}))); 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(${u}); } `}};function bY(r){let{inputs:e,backend:t,attrs:n}=r,{x:o,segmentIds:s}=e,{numSegments:a}=n,i=o.shape.length,l=[],u=0,c=N.getAxesPermutation([u],i),p=o;c!=null&&(p=Lt({inputs:{x:o},backend:t,attrs:{perm:c}}),l.push(p),u=N.getInnerMostAxes(1,i)[0]);let m=N.segment_util.computeOutShape(p.shape,u,a),f=y.sizeFromShape([p.shape[u]]),d=pe({inputs:{x:p},backend:t,attrs:{shape:[-1,f]}});l.push(d);let h=mu(o.dtype),g=(_,k,A,S,$)=>{let O=_.shape[0],M=_.shape[1],G=N.segment_util.segOpComputeOptimalWindowSize(M,$),j={windowSize:G,inSize:M,batchSize:O,numSegments:$},U=new o0(j,k),q=t.compileAndRun(U,[_,A],S);if(l.push(q),q.shape[1]===$)return q;let H=Uv({backend:t,attrs:{start:0,stop:$,step:1,dtype:"float32"}}),X=n0({inputs:{x:H},backend:t,attrs:{reps:[M/G]}});return l.push(H),l.push(X),g(q,k,X,S,$)},x=g(d,"unsortedSegmentSum",s,h,a),w=pe({inputs:{x},backend:t,attrs:{shape:m}}),b=w;if(c!=null){l.push(w);let _=N.getUndoAxesPermutation(c);b=Lt({inputs:{x:b},backend:t,attrs:{perm:_}})}return l.forEach(_=>t.disposeIntermediateTensorInfo(_)),b}var fR={kernelName:da,backendName:"webgl",kernelFunc:bY};var wY=[ZD,JD,m2,d2,h2,g2,y2,b2,w2,_2,C2,I2,N2,S2,A2,T2,E2,$2,D2,R2,F2,O2,P2,L2,z2,j2,U2,q2,K2,e2,Z2,Q2,eD,J2,rD,nD,tD,oD,sD,iD,uD,cD,pD,fD,dD,mD,hD,gD,xD,yD,bD,wD,kD,vD,ID,ND,SD,TD,ED,DD,$D,RD,FD,OD,PD,MD,LD,QE,zD,X2,BD,VD,GD,t2,jD,WD,UD,HD,qD,KD,XD,YD,e$,n$,r$,o$,s$,a$,t$,u$,c$,p$,m$,f$,y$,i2,w$,_$,k$,v$,B2,C$,S$,T$,A$,E$,r2,D$,$$,V2,d$,R$,O$,F$,l2,P$,M$,L$,z$,B$,V$,G$,j$,W$,U$,q$,H$,K$,X$,Y$,M2,x$,Z$,J$,Q$,eR,tR,rR,oR,sR,iR,g$,c2,aR,lR,uR,cR,p2,pR,mR,fR,I$];for(let r of wY)el(r);var zt;(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"})(zt||(zt={}));var yl;(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"})(yl||(yl={}));var dR;function _Y(r){dR=r.wasm.cwrap(ws,null,["number","array","number","number","array","number","number","number","number","number","number","number","number"])}function kY(r){let{inputs:e,backend:t,attrs:n}=r,{a:o,b:s,bias:a,preluActivationWeights:i}=e;if(o.dtype!=="float32"||s.dtype!=="float32")throw new Error("_FusedMatMul for non non-float32 tensors not yet supported.");let{transposeA:l,transposeB:u,activation:c,leakyreluAlpha:p}=n,m=t.dataIdMap.get(o.dataId).id,f=t.dataIdMap.get(s.dataId).id,d=0;if(a!=null){let $=t.dataIdMap.get(a.dataId);if($.shape.length!==1)throw new Error(`_FusedMatMul only supports rank-1 bias but got rank ${$.shape.length}.`);d=$.id}let h=i==null?0:t.dataIdMap.get(i.dataId).id,g=yl[c];if(g==null)throw new Error(`${c} activation not yet supported for FusedConv2D in the wasm backend.`);let x=l?o.shape[2]:o.shape[1],w=u?s.shape[1]:s.shape[2],b=o.shape[0],_=t.makeOutput([b,x,w],o.dtype),k=t.dataIdMap.get(_.dataId).id,A=new Uint8Array(new Int32Array(o.shape).buffer),S=new Uint8Array(new Int32Array(s.shape).buffer);return dR(m,A,o.shape.length,f,S,s.shape.length,l,u,g,d,h,p||0,k),_}var hR={kernelName:ws,backendName:"wasm",setupFunc:_Y,kernelFunc:kY};function St(r){let e;function t(o){e=o.wasm.cwrap(r,null,["number","number"])}function n(o){let{backend:s,inputs:{x:a}}=o,i=s.dataIdMap.get(a.dataId).id,l=s.makeOutput(a.shape,a.dtype),u=s.dataIdMap.get(l.dataId).id;return y.sizeFromShape(l.shape)===0||e(i,u),l}return{kernelName:r,backendName:"wasm",setupFunc:t,kernelFunc:n}}var gR=St(as);function yt(r,e,t){let n;function o(a){n=a.wasm.cwrap(r,null,["number","array","number","number","array","number","number","number"])}function s(a){let{backend:i,inputs:l}=a,{a:u,b:c}=l,p=i.dataIdMap.get(u.dataId).id,m=i.dataIdMap.get(c.dataId).id,f=t!=null?t:u.dtype,d=N.assertAndGetBroadcastShape(u.shape,c.shape),h=i.makeOutput(d,f);if(y.sizeFromShape(d)===0)return h;let g=new Uint8Array(new Int32Array(u.shape).buffer),x=new Uint8Array(new Int32Array(c.shape).buffer),w=i.dataIdMap.get(h.dataId).id,b=()=>n(p,g,u.shape.length,m,x,c.shape.length,zt[u.dtype],w);if(e&&u.dtype==="float32")return b(),h;let _=N.getBroadcastDims(u.shape,d),k=N.getBroadcastDims(c.shape,d),A=_.every(($,O)=>$===O),S=k.every(($,O)=>$===O);if(A&&S)return b(),h;throw new Error(`Broadcasting along outer dims is not yet supported for ${u.dtype} ${r}.`)}return{kernelName:r,backendName:"wasm",setupFunc:o,kernelFunc:s}}var vY=!0,xR=yt(wn,vY);var yR;function CY(r){yR=r.wasm.cwrap(qn,null,["array","number","number","number"])}function IY(r){let{inputs:e,backend:t}=r,n=t.makeOutput(e[0].shape,e[0].dtype);if(y.sizeFromShape(n.shape)===0)return n;let o=e.map(i=>t.dataIdMap.get(i.dataId).id),s=new Uint8Array(new Int32Array(o).buffer),a=t.dataIdMap.get(n.dataId).id;return yR(s,o.length,zt[n.dtype],a),n}var bR={kernelName:qn,backendName:"wasm",setupFunc:CY,kernelFunc:IY};function tc(r){let{inputs:{x:e},backend:t}=r,n=t.makeOutput(e.shape,e.dtype),o=t.typedArrayFromHeap(e);return t.typedArrayFromHeap(n).set(o),n}var wR={kernelName:Fn,backendName:"wasm",kernelFunc:tc};var _R;function NY(r){_R=r.wasm.cwrap(Po,null,["number","array","number","number","number","array","number"])}function kp(r){let{inputs:e,backend:t,attrs:n}=r,[o,s]=TY(e.x.shape,n.perm),a=!0;for(let d=0;d=o&&(s===-1||n[s]>n[a])&&(s=a);n[s]=o}return[t,n]}var kR={kernelName:Po,backendName:"wasm",kernelFunc:kp,setupFunc:NY};function Yo(r,e,t){let n=r.shape,o=r.shape.length,s=y.parseAxisParam(e,n),a=s,i=N.getAxesPermutation(a,o),l=null,u=!1;if(i!=null){let c=new Array(o);for(let f=0;f`new shape: ${a}, 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:a,dtype:n.dtype}}var SR={kernelName:ds,backendName:"wasm",kernelFunc:Mr};var TR;function RY(r){TR=r.wasm.cwrap(Xn,null,["number","array","number","number","array","number","number","number","number"])}function FY(r){let{inputs:e,backend:t,attrs:n}=r,{a:o,b:s}=e,{transposeA:a,transposeB:i}=n;if(o.dtype!=="float32"||s.dtype!=="float32")throw new Error("BatchMatMul for non non-float32 tensors not yet supported.");let l=o.shape.length,u=s.shape.length,c=a?o.shape[l-2]:o.shape[l-1],p=i?s.shape[u-1]:s.shape[u-2],m=a?o.shape[l-1]:o.shape[l-2],f=i?s.shape[u-2]:s.shape[u-1],d=o.shape.slice(0,-2),h=s.shape.slice(0,-2),g=y.sizeFromShape(d),x=y.sizeFromShape(h),w=g===x||g===1||x===1;y.assert(l>=2&&u>=2&&w,()=>`Error in matMul: the input batch dimensions must either be the same or at least one input batch dimension must be 1. Got input batch dimensions of (${d}) and (${h}).`);let _=(g>x?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=${a} and transposeB=${i} must match.`);let k=a?[g,c,m]:[g,m,c],A=i?[x,f,p]:[x,p,f],S=Mr({inputs:{x:o},backend:t,attrs:{shape:k}}),$=Mr({inputs:{x:s},backend:t,attrs:{shape:A}}),O=t.dataIdMap.get(S.dataId).id,M=t.dataIdMap.get($.dataId).id,G=a?S.shape[2]:S.shape[1],j=i?$.shape[1]:$.shape[2],U=Math.max(g,x),q=t.makeOutput([U,G,j],S.dtype),H=t.dataIdMap.get(q.dataId).id,X=new Uint8Array(new Int32Array(S.shape).buffer),ne=new Uint8Array(new Int32Array($.shape).buffer);return TR(O,X,S.shape.length,M,ne,$.shape.length,a,i,H),t.disposeData(S.dataId),t.disposeData($.dataId),q.shape=_,q}var AR={kernelName:Xn,backendName:"wasm",setupFunc:RY,kernelFunc:FY};function rc(r){let{inputs:{x:e},attrs:{dtype:t},backend:n}=r,o=n.makeOutput(e.shape,t),s=n.typedArrayFromHeap(e);return n.typedArrayFromHeap(o).set(s),o}var ER={kernelName:$n,backendName:"wasm",kernelFunc:rc};var DR=St(Yn);var $R;function OY(r){$R=r.wasm.cwrap(Rn,null,["number","number","number","number"])}function PY(r){let{inputs:e,backend:t,attrs:n}=r,{x:o}=e,{clipValueMin:s,clipValueMax:a}=n,i=t.dataIdMap.get(o.dataId).id,l=t.makeOutput(o.shape,o.dtype),u=t.dataIdMap.get(l.dataId).id;return $R(i,s,a,u),l}var RR={kernelName:Rn,backendName:"wasm",setupFunc:OY,kernelFunc:PY};function s0(r){let{inputs:e,backend:t}=r,n=y.parseAxisParam(r.attrs.axis,e[0].shape)[0],o=N.computeOutShape(e.map(f=>f.shape),n),s=e.filter(f=>y.sizeFromShape(f.shape)>0);if(s.length===1)return tc({inputs:{x:s[0]},backend:t});let a=t.makeOutput(o,e[0].dtype);if(y.sizeFromShape(o)===0)return a;let i=s.map(f=>f.shape);if(N.assertParamsConsistent(i,n),s[0].dtype==="string"){let f=s.map(b=>{let _=y.sizeFromShape(b.shape.slice(n));return Mr({inputs:{x:b},backend:t,attrs:{shape:[-1,_]}})}),d=f.map(b=>({vals:t.readSync(b.dataId),shape:b.shape}));o=N.computeOutShape(f.map(b=>b.shape),1);let h=f[0].shape[0]===1,g=of(d,o,e[0].dtype,h),x=N.computeOutShape(s.map(b=>b.shape),n);a.shape=x;let w=t.dataIdMap.get(a.dataId);return w.stringBytes=N.fromStringArrayToUint8(g),f.forEach(b=>t.disposeData(b.dataId)),a}let l=y.sizeFromShape(s[0].shape.slice(0,n)),u=0,c=s.map(f=>{let d=y.sizeFromShape(f.shape.slice(n));return u+=d,d}),p=s.map(f=>t.typedArrayFromHeap(f)),m=t.typedArrayFromHeap(a);for(let f=0;f`cumsum does not support ${o.dtype} tensors in the WASM backend`);let u=N.getAxesPermutation([s],l),c=o;u!==null&&(c=kp({inputs:{x:o},attrs:{perm:u},backend:t}));let p=N.getInnerMostAxes(1,l)[0];N.assertAxesAreInnerMostDims("cumsum",[p],l);let m=t.makeOutput(c.shape,c.dtype),f=c.shape[p],d=t.dataIdMap.get(c.dataId).id,h=t.dataIdMap.get(m.dataId).id;GR(d,a?1:0,i?1:0,f,h,zt[o.dtype]);let g=m;if(u!==null){let x=N.getUndoAxesPermutation(u);g=kp({inputs:{x:m},attrs:{perm:x},backend:t}),t.disposeData(c.dataId),t.disposeData(m.dataId)}return g}var jR={kernelName:eo,backendName:"wasm",setupFunc:jY,kernelFunc:WY};var WR;function UY(r){WR=r.wasm.cwrap(ti,null,["number","number","number","array","number","array","array","number","number"])}function qY(r){let{backend:e,inputs:t,attrs:n}=r,{x:o}=t,{blockSize:s,dataFormat:a}=n;y.assert(s>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${s}`);let i=o.shape[0],l=a==="NHWC"?o.shape[1]:o.shape[2],u=a==="NHWC"?o.shape[2]:o.shape[3],c=a==="NHWC"?o.shape[3]:o.shape[1],p=l*s,m=u*s,f=c/(s*s),d=a==="NHWC"?[i,p,m,f]:[i,f,p,m],h=e.makeOutput(d,"float32"),x=e.dataIdMap.get(o.dataId).id,w=new Uint8Array(new Int32Array(y.computeStrides(o.shape)).buffer),b=new Uint8Array(new Int32Array(d).buffer),_=new Uint8Array(new Int32Array(y.computeStrides(d)).buffer),k=e.dataIdMap.get(h.dataId).id;return WR(x,s,a==="NHWC"?1:0,w,o.shape.length-1,b,_,d.length,k),h}var UR={kernelName:ti,backendName:"wasm",setupFunc:UY,kernelFunc:qY};var qR;function HY(r){qR=r.wasm.cwrap(to,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function KY(r){let{inputs:e,attrs:t,backend:n}=r,{x:o,filter:s}=e,a=n.dataIdMap.get(o.dataId).id,i=n.dataIdMap.get(s.dataId).id,{strides:l,dilations:u,pad:c,dimRoundingMode:p}=t,m=u==null?[1,1]:u,f=N.computeConv2DInfo(o.shape,s.shape,l,m,c,p,!0),d=f.filterHeight,h=f.filterWidth,g=f.padInfo.top,x=f.padInfo.right,w=f.padInfo.bottom,b=f.padInfo.left,_=f.dilationHeight,k=f.dilationWidth,A=f.strideHeight,S=f.strideWidth,$=f.inChannels,O=f.outChannels,M=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 G=n.makeOutput(f.outShape,"float32"),j=n.dataIdMap.get(G.dataId).id;return qR(a,o.shape[0],o.shape[1],o.shape[2],i,d,h,g,x,w,b,M,_,k,A,S,$,O,j),G}var HR={kernelName:to,backendName:"wasm",setupFunc:HY,kernelFunc:KY};var XY=!1,KR=yt(oi,XY,"bool");var XR=St(no);function ex(r){let{inputs:e,attrs:t,backend:n}=r,{input:o}=e,{dim:s}=t,a=o.shape.length,i=o.shape.slice(),l=s;return s<0&&(y.assert(-(a+1)<=s,()=>`Axis must be in the interval [${-(a+1)}, ${a}]`),l=a+s+1),i.splice(l,0,1),Mr({inputs:{x:o},backend:n,attrs:{shape:i}})}var YR={kernelName:us,backendName:"wasm",kernelFunc:ex};function YY(r){let{attrs:{shape:e,value:t,dtype:n},backend:o}=r,s=o.makeOutput(e,n);return o.typedArrayFromHeap(s).fill(t),s}var ZR={kernelName:ia,backendName:"wasm",kernelFunc:YY};var JR;function ZY(r){JR=r.wasm.cwrap(ii,null,["number","number","number","number","number","number"])}function JY(r){let{inputs:e,backend:t}=r,{image:n}=e,o=t.makeOutput(n.shape,n.dtype),s=t.dataIdMap.get(n.dataId).id,a=t.dataIdMap.get(o.dataId).id,[i,l,u,c]=n.shape;return JR(s,i,l,u,c,a),o}var QR={kernelName:ii,backendName:"wasm",kernelFunc:JY,setupFunc:ZY};var eF=St(oo);var QY=!1,tF=yt(so,QY);var rF;function e9(r){rF=r.wasm.cwrap(io,null,["number","number","number","number","number","number","number"])}function t9(r){let{backend:e,inputs:t,attrs:n}=r,{varianceEpsilon:o}=n,{x:s,mean:a,variance:i,offset:l,scale:u}=t,c=e.dataIdMap.get(s.dataId).id,p=e.dataIdMap.get(a.dataId).id,m=e.dataIdMap.get(i.dataId).id,f=l!=null?e.dataIdMap.get(l.dataId).id:0,d=u!=null?e.dataIdMap.get(u.dataId).id:0,h=e.makeOutput(s.shape,s.dtype);if(y.sizeFromShape(s.shape)===0)return h;let g=e.dataIdMap.get(h.dataId).id;return rF(c,p,m,f,d,o,g),h}var nF={kernelName:io,backendName:"wasm",setupFunc:e9,kernelFunc:t9};var oF;function r9(r){oF=r.wasm.cwrap(_s,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 n9(r){let{inputs:e,attrs:t,backend:n}=r,{x:o,filter:s,bias:a,preluActivationWeights:i}=e,{strides:l,pad:u,dilations:c,dataFormat:p,dimRoundingMode:m,activation:f,leakyreluAlpha:d}=t,h=N.computeConv2DInfo(o.shape,s.shape,l,c,u,m),g=yl[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,w=n.dataIdMap.get(s.dataId).id,b=h.outChannels,_=0;if(a!=null){let ae=n.dataIdMap.get(a.dataId);if(ae.shape.length!==1)throw new Error(`FusedConv2D only supports rank-1 bias but got rank ${ae.shape.length}.`);if(ae.shape[0]!==b)throw new Error(`FusedConv2D bias shape (${ae.shape}) does not match the number of output channels (${b})`);_=ae.id}let k=h.filterHeight,A=h.filterWidth,S=h.padInfo.top,$=h.padInfo.right,O=h.padInfo.bottom,M=h.padInfo.left,G=h.dilationHeight,j=h.dilationWidth,U=h.strideHeight,q=h.strideWidth,H=h.inChannels,X=h.padInfo.type==="SAME"?1:0,ne=h.batchSize,Y=h.inHeight,re=h.inWidth;if(p!=="NHWC")throw new Error(`wasm backend FusedConv2D does not support dataFormat:'${p}'. Please use 'NHWC'.`);let te=n.makeOutput(h.outShape,"float32"),ie=n.dataIdMap.get(te.dataId).id,le=i==null?0:n.dataIdMap.get(i.dataId).id;return oF(x,ne,Y,re,w,k,A,_,S,$,O,M,X,G,j,U,q,H,b,g,le,d||0,ie),te}var sF={kernelName:_s,backendName:"wasm",setupFunc:r9,kernelFunc:n9};var iF;function o9(r){iF=r.wasm.cwrap(ks,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 s9(r){let{inputs:e,attrs:t,backend:n}=r,{x:o,filter:s,bias:a,preluActivationWeights:i}=e,{strides:l,pad:u,dilations:c,dataFormat:p,dimRoundingMode:m,activation:f,leakyreluAlpha:d}=t,h=N.computeConv2DInfo(o.shape,s.shape,l,c,u,m,!0),g=yl[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,w=n.dataIdMap.get(s.dataId).id,b=h.outChannels,_=0;if(a!=null){let ae=n.dataIdMap.get(a.dataId);if(ae.shape.length!==1)throw new Error(`FusedDepthwiseConv2D only supports rank-1 bias but got rank ${ae.shape.length}.`);if(ae.shape[0]!==b)throw new Error(`FusedDepthwiseConv2D bias shape (${ae.shape}) does not match the number of output channels (${b})`);_=ae.id}let k=h.filterHeight,A=h.filterWidth,S=h.padInfo.top,$=h.padInfo.right,O=h.padInfo.bottom,M=h.padInfo.left,G=h.dilationHeight,j=h.dilationWidth,U=h.strideHeight,q=h.strideWidth,H=h.inChannels,X=h.padInfo.type==="SAME"?1:0,ne=h.batchSize,Y=h.inHeight,re=h.inWidth;if(p!=="NHWC")throw new Error(`wasm backend FusedDepthwiseConv2D does not support dataFormat:'${p}'. Please use 'NHWC'.`);let te=n.makeOutput(h.outShape,"float32"),ie=n.dataIdMap.get(te.dataId).id,le=i==null?0:n.dataIdMap.get(i.dataId).id;return iF(x,ne,Y,re,w,k,A,_,S,$,O,M,X,G,j,U,q,H,b,g,le,d||0,ie),te}var aF={kernelName:ks,backendName:"wasm",setupFunc:o9,kernelFunc:s9};var lF;function i9(r){lF=r.wasm.cwrap(ai,null,["number","number","number","number","number","number","array","number"])}function a9(r){let{backend:e,inputs:t}=r,{params:n,indices:o}=t,[s,a,i,l]=Xh.prepareAndValidate(n,o),u=e.makeOutput(s,n.dtype);if(a===0)return u;let c=o.shape,p=c[c.length-1],f=e.dataIdMap.get(n.dataId).id,h=e.dataIdMap.get(o.dataId).id,g=new Uint8Array(new Int32Array(l).buffer),x=e.dataIdMap.get(u.dataId).id;return lF(f,zt[n.dtype],h,a,p,i,g,x),u}var uF={kernelName:ai,backendName:"wasm",setupFunc:i9,kernelFunc:a9};var cF;function l9(r){cF=r.wasm.cwrap("Gather",null,["number","number","array","number","number","number","array","number"])}function u9(r){let{backend:e,inputs:t,attrs:n}=r,{x:o,indices:s}=t,{axis:a,batchDims:i}=n,l=y.parseAxisParam(a,o.shape)[0],u=N.segment_util.collectGatherOpShapeInfo(o,s,l,i),c=Mr({inputs:{x:o},attrs:{shape:[u.batchSize,u.outerSize,u.dimSize,u.sliceSize]},backend:e}),p=y.sizeFromShape(s.shape),m=Mr({inputs:{x:s},attrs:{shape:[u.batchSize,p/u.batchSize]},backend:e}),f=[u.batchSize,u.outerSize,p/u.batchSize,u.sliceSize],d=e.makeOutput(f,o.dtype);if(y.sizeFromShape(o.shape)===0)return d;let h=c.shape.length-1,x=e.dataIdMap.get(c.dataId).id,b=e.dataIdMap.get(m.dataId).id,_=e.dataIdMap.get(d.dataId).id,k=new Uint8Array(new Int32Array(y.computeStrides(c.shape)).buffer),A=new Uint8Array(new Int32Array(y.computeStrides(f)).buffer);return cF(x,zt[o.dtype],k,h,b,u.batchSize,A,_),e.disposeData(c.dataId),e.disposeData(m.dataId),d.shape=u.outputShape,d}var pF={kernelName:cs,backendName:"wasm",setupFunc:l9,kernelFunc:u9};var c9=!1,mF=yt(li,c9,"bool");var p9=!1,fF=yt(ao,p9,"bool");var dF;function m9(r){dF=r.wasm.cwrap(lo,null,["number","number","number"])}function f9(r){let{inputs:{x:e},attrs:{alpha:t},backend:n}=r,o=n.dataIdMap.get(e.dataId).id,s=n.makeOutput(e.shape,e.dtype);if(y.sizeFromShape(e.shape)!==0){let a=n.dataIdMap.get(s.dataId).id;dF(o,t,a)}return s}var hF={kernelName:lo,backendName:"wasm",setupFunc:m9,kernelFunc:f9};var d9=!1,gF=yt(mi,d9,"bool");var h9=!1,xF=yt(fi,h9,"bool");var yF=St(uo);var g9=!1,bF=yt(hi,g9,"bool");var wF;function x9(r){wF=r.wasm.cwrap(co,null,["number, number, number"])}function y9(r){let{backend:e,inputs:t,attrs:n}=r,{reductionIndices:o,keepDims:s}=n,{x:a}=t,l=e.dataIdMap.get(a.dataId).id,u=a,{transposed:c,axes:p,originalAxes:m,inputWasTransposed:f}=Yo(a,o,e);if(f){let b=e.dataIdMap.get(c.dataId).id;u=c,l=b}let d=u.shape.length;N.assertAxesAreInnerMostDims("max",p,d);let[h,g]=N.computeOutAndReduceShapes(u.shape,p),x=y.sizeFromShape(g),w=e.makeOutput(h,a.dtype);if(y.sizeFromShape(u.shape)!==0){let b=e.dataIdMap.get(w.dataId).id;wF(l,x,b)}if(f&&e.disposeData(c.dataId),s){let b=N.expandShapeToKeepDim(w.shape,m);w.shape=b}return w}var _F={kernelName:co,backendName:"wasm",setupFunc:x9,kernelFunc:y9};var b9=!1,kF=yt(po,b9);var vF;function w9(r){vF=r.wasm.cwrap(mo,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function _9(r){let{inputs:e,attrs:t,backend:n}=r,o=e.x,s=n.dataIdMap.get(o.dataId).id,{filterSize:a,strides:i,pad:l,dimRoundingMode:u}=t,c=N.computePool2DInfo(o.shape,a,i,1,l,u),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,w=c.dilationWidth,b=c.strideHeight,_=c.strideWidth,k=c.inChannels,A=c.outChannels;if(c.dataFormat!=="channelsLast")throw new Error(`wasm backend does not support dataFormat:'${c.dataFormat}'. Please use 'channelsLast'.`);let S=n.makeOutput(c.outShape,"float32"),$=n.dataIdMap.get(S.dataId).id;return vF(s,o.shape[0],o.shape[1],o.shape[2],p,m,f,d,h,g,x,w,b,_,k,A,$),S}var CF={kernelName:mo,backendName:"wasm",setupFunc:w9,kernelFunc:_9};var IF;function k9(r){IF=r.wasm.cwrap(fo,null,["number, number, number"])}function v9(r){let{backend:e,inputs:t,attrs:n}=r,{axis:o,keepDims:s}=n,{x:a}=t,i=e.dataIdMap.get(a.dataId).id,l=i,u=a,{transposed:c,axes:p,originalAxes:m,inputWasTransposed:f}=Yo(a,o,e),d=p;if(f){let _=e.dataIdMap.get(c.dataId).id;_!==i&&(u=c,l=_,d=N.getInnerMostAxes(d.length,u.shape.length))}N.assertAxesAreInnerMostDims("mean",d,u.shape.length);let[h,g]=N.computeOutAndReduceShapes(u.shape,d),x=y.sizeFromShape(g),w=u;u.dtype!=="float32"&&(w=rc({backend:e,inputs:{x:u},attrs:{dtype:"float32"}}),l=e.dataIdMap.get(w.dataId).id);let b=e.makeOutput(h,"float32");if(y.sizeFromShape(u.shape)!==0){let _=e.dataIdMap.get(b.dataId).id;IF(l,x,_)}if(f&&e.disposeData(c.dataId),s){let _=N.expandShapeToKeepDim(b.shape,m);b.shape=_}return u.dtype!=="float32"&&e.disposeData(w.dataId),b}var NF={kernelName:fo,backendName:"wasm",setupFunc:k9,kernelFunc:v9};var SF;function C9(r){SF=r.wasm.cwrap(ho,null,["number, number, number"])}function I9(r){let{backend:e,inputs:t,attrs:n}=r,{axis:o,keepDims:s}=n,{x:a}=t,i=e.dataIdMap.get(a.dataId).id,l=i,u=a,{transposed:c,axes:p,originalAxes:m,inputWasTransposed:f}=Yo(a,o,e);if(f){let b=e.dataIdMap.get(c.dataId).id;b!==i&&(u=c,l=b)}let d=u.shape.length;N.assertAxesAreInnerMostDims("min",p,d);let[h,g]=N.computeOutAndReduceShapes(u.shape,p),x=y.sizeFromShape(g),w=e.makeOutput(h,u.dtype);if(y.sizeFromShape(u.shape)!==0){let b=e.dataIdMap.get(w.dataId).id;SF(l,x,b)}if(f&&e.disposeData(c.dataId),s){let b=N.expandShapeToKeepDim(w.shape,m);w.shape=b}return w}var TF={kernelName:ho,backendName:"wasm",setupFunc:C9,kernelFunc:I9};var N9=!1,AF=yt(go,N9);var S9=!0,EF=yt(xo,S9);var DF=St(ps);function vp(r,e){let t=new Int32Array(r.wasm.HEAPU8.buffer,e,4),n=t[0],o=t[1],s=t[2],a=t[3];return r.wasm._free(e),{pSelectedIndices:n,selectedSize:o,pSelectedScores:s,pValidOutputs:a}}var $F;function T9(r){$F=r.wasm.cwrap(yi,"number",["number","number","number","number","number"])}function A9(r){let{backend:e,inputs:t,attrs:n}=r,{iouThreshold:o,maxOutputSize:s,scoreThreshold:a}=n,{boxes:i,scores:l}=t,u=e.dataIdMap.get(i.dataId).id,c=e.dataIdMap.get(l.dataId).id,p=$F(u,c,s,o,a),{pSelectedIndices:m,selectedSize:f,pSelectedScores:d,pValidOutputs:h}=vp(e,p);return e.wasm._free(d),e.wasm._free(h),e.makeOutput([f],"int32",m)}var RF={kernelName:yi,backendName:"wasm",setupFunc:T9,kernelFunc:A9};var FF;function E9(r){FF=r.wasm.cwrap(bi,"number",["number","number","number","number","number","bool"])}function D9(r){let{backend:e,inputs:t,attrs:n}=r,{iouThreshold:o,maxOutputSize:s,scoreThreshold:a,padToMaxOutputSize:i}=n,{boxes:l,scores:u}=t,c=e.dataIdMap.get(l.dataId).id,p=e.dataIdMap.get(u.dataId).id,m=FF(c,p,s,o,a,i),{pSelectedIndices:f,selectedSize:d,pSelectedScores:h,pValidOutputs:g}=vp(e,m);e.wasm._free(h);let x=e.makeOutput([d],"int32",f),w=e.makeOutput([],"int32",g);return[x,w]}var OF={kernelName:bi,backendName:"wasm",setupFunc:E9,kernelFunc:D9};var PF;function $9(r){PF=r.wasm.cwrap(wi,"number",["number","number","number","number","number","number"])}function R9(r){let{backend:e,inputs:t,attrs:n}=r,{iouThreshold:o,maxOutputSize:s,scoreThreshold:a,softNmsSigma:i}=n,{boxes:l,scores:u}=t,c=e.dataIdMap.get(l.dataId).id,p=e.dataIdMap.get(u.dataId).id,m=PF(c,p,s,o,a,i),{pSelectedIndices:f,selectedSize:d,pSelectedScores:h,pValidOutputs:g}=vp(e,m);e.wasm._free(g);let x=e.makeOutput([d],"int32",f),w=e.makeOutput([d],"float32",h);return[x,w]}var MF={kernelName:wi,backendName:"wasm",setupFunc:$9,kernelFunc:R9};var F9=!1,LF=yt(xi,F9,"bool");var zF;function O9(r){zF=r.wasm.cwrap(yo,null,["number","number","number","number","number"])}function P9(r){let{inputs:e,backend:t,attrs:n}=r,{indices:o}=e,{depth:s,onValue:a,offValue:i}=n,l=t.makeOutput([...o.shape,s],"int32"),u=t.dataIdMap.get(l.dataId).id,p=t.dataIdMap.get(o.dataId).id;return zF(p,s,a,i,u),l}var BF={kernelName:yo,backendName:"wasm",setupFunc:O9,kernelFunc:P9};function M9(r){let{inputs:{x:e},backend:t}=r,n=t.makeOutput(e.shape,e.dtype);return t.typedArrayFromHeap(n).fill(1),n}var VF={kernelName:ms,backendName:"wasm",kernelFunc:M9};function L9(r){let{inputs:e,backend:t,attrs:n}=r,{axis:o}=n;if(e.length===1)return ex({inputs:{input:e[0]},backend:t,attrs:{dim:o}});let s=e[0].shape,a=e[0].dtype;e.forEach(c=>{y.assertShapesMatch(s,c.shape,"All tensors passed to stack must have matching shapes"),y.assert(a===c.dtype,()=>"All tensors passed to stack must have matching dtypes")});let i=[],l=e.map(c=>{let p=ex({inputs:{input:c},backend:t,attrs:{dim:o}});return i.push(p),p}),u=s0({inputs:l,backend:t,attrs:{axis:o}});return i.forEach(c=>t.disposeData(c.dataId)),u}var GF={kernelName:fs,backendName:"wasm",kernelFunc:L9};var jF;function z9(r){jF=r.wasm.cwrap(bo,null,["number","array","number","number","array","array","number","number"])}function B9(r){let{inputs:{x:e},backend:t,attrs:{paddings:n,constantValue:o}}=r,s=n.map((d,h)=>d[0]+e.shape[h]+d[1]),a=t.dataIdMap.get(e.dataId).id,i=t.makeOutput(s,e.dtype),l=t.dataIdMap.get(i.dataId).id,u=new Uint8Array(new Int32Array(e.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 jF(a,u,e.shape.length,zt[e.dtype],m,f,o,l),i}var WF={kernelName:bo,backendName:"wasm",kernelFunc:B9,setupFunc:z9};var V9=!1,UF=yt(wo,V9);var qF;function G9(r){qF=r.wasm.cwrap(_o,null,["number","number","number"])}function j9(r){let{inputs:e,backend:t}=r,{x:n,alpha:o}=e,s=t.dataIdMap.get(n.dataId).id,a=t.dataIdMap.get(o.dataId).id,i=t.makeOutput(n.shape,"float32"),l=t.dataIdMap.get(i.dataId).id;return qF(s,a,l),i}var HF={kernelName:_o,backendName:"wasm",setupFunc:G9,kernelFunc:j9};var KF;function W9(r){KF=r.wasm.cwrap(_i,null,["number","number","number","number"])}function U9(r){let{backend:e,inputs:t,attrs:n}=r,{axis:o,keepDims:s}=n,{x:a}=t,i=e.dataIdMap.get(a.dataId).id,l=i,u=a,{transposed:c,axes:p,originalAxes:m,inputWasTransposed:f}=Yo(a,o,e),d=p;if(f){let b=e.dataIdMap.get(c.dataId).id;b!==i&&(u=c,l=b,d=N.getInnerMostAxes(d.length,u.shape.length))}N.assertAxesAreInnerMostDims("prod",d,u.shape.length);let[h,g]=N.computeOutAndReduceShapes(u.shape,d),x=y.sizeFromShape(g),w=e.makeOutput(h,u.dtype);if(y.sizeFromShape(u.shape)!==0){let b=e.dataIdMap.get(w.dataId).id;KF(l,x,zt[w.dtype],b)}if(f&&e.disposeData(c.dataId),s){let b=N.expandShapeToKeepDim(w.shape,m);w.shape=b}return w}var XF={kernelName:_i,backendName:"wasm",setupFunc:W9,kernelFunc:U9};var q9=r=>{let{backend:e,attrs:t}=r,{start:n,stop:o,step:s,dtype:a}=t,i=lf(n,o,s,a),l=e.makeOutput([i.length],a);return e.typedArrayFromHeap(l).set(i),l},YF={kernelName:ca,backendName:"wasm",kernelFunc:q9};var H9=!0,ZF=yt(ro,H9);var JF=St(ko);var QF=St(Co);var eO;function K9(r){eO=r.wasm.cwrap(vo,null,["number","number","number","number","number","number","number","number","number","number"])}function X9(r){let{backend:e,inputs:t,attrs:n}=r,{images:o}=t,{alignCorners:s,halfPixelCenters:a,size:i}=n,[l,u]=i,[c,p,m,f]=o.shape,d=[c,l,u,f],h=e.dataIdMap.get(o.dataId),g;h.dtype!=="float32"&&(g=rc({backend:e,inputs:{x:o},attrs:{dtype:"float32"}}),h=e.dataIdMap.get(g.dataId));let x=h.id,w=e.makeOutput(d,"float32");if(y.sizeFromShape(o.shape)===0)return w;let b=e.dataIdMap.get(w.dataId).id;return eO(x,c,p,m,f,l,u,s?1:0,a?1:0,b),g!=null&&e.disposeData(g.dataId),w}var tO={kernelName:vo,backendName:"wasm",setupFunc:K9,kernelFunc:X9};var rO;function Y9(r){rO=r.wasm.cwrap(Io,null,["number","array","number","array","number","number"])}function Z9(r){let{inputs:e,backend:t,attrs:n}=r,{x:o}=e,{dims:s}=n,a=y.parseAxisParam(s,o.shape);if(o.shape.length===0)return tc({inputs:{x:o},backend:t});let i=t.makeOutput(o.shape,o.dtype),l=t.dataIdMap.get(o.dataId).id,u=t.dataIdMap.get(i.dataId).id,c=new Uint8Array(new Int32Array(a).buffer),p=new Uint8Array(new Int32Array(o.shape).buffer);rO(l,c,a.length,p,o.shape.length,u);let m=Mr({inputs:{x:i},attrs:{shape:o.shape},backend:t});return t.disposeData(i.dataId),m}var nO={kernelName:Io,backendName:"wasm",kernelFunc:Z9,setupFunc:Y9};var oO;function J9(r){oO=r.wasm.cwrap(Di,null,["number","number","number","number","number","number","number","number","array","number","number"])}function Q9(r){let{inputs:e,backend:t,attrs:n}=r,{image:o}=e,{radians:s,fillValue:a,center:i}=n,l=t.makeOutput(o.shape,o.dtype),u=t.dataIdMap.get(o.dataId).id,c=t.dataIdMap.get(l.dataId).id,[p,m,f,d]=o.shape,[h,g]=N.getImageCenter(i,m,f),x=a===0,w=255,b=typeof a=="number"?[a,a,a,x?0:w]:[...a,w],_=new Uint8Array(new Int32Array(b).buffer);return oO(u,p,m,f,d,s,h,g,_,b.length,c),l}var sO={kernelName:Di,backendName:"wasm",kernelFunc:Q9,setupFunc:J9};var iO=St(No);var aO=St(So);var lO;function eZ(r){lO=r.wasm.cwrap(vi,null,["number","number","number","number","number","number","array","number","number"])}function tZ(r){let{backend:e,inputs:t,attrs:n}=r,{indices:o,updates:s}=t,{shape:a}=n,i=e.makeOutput(a,s.dtype);if(y.sizeFromShape(a)===0)return i;let{sliceRank:l,numUpdates:u,sliceSize:c,strides:p,outputSize:m}=Yh.calculateShapes(s,o,a),d=e.dataIdMap.get(o.dataId).id,g=e.dataIdMap.get(s.dataId).id,x=new Uint8Array(new Int32Array(p).buffer),w=e.dataIdMap.get(i.dataId).id;return lO(d,g,zt[s.dtype],l,u,c,x,m,w),i}var uO={kernelName:vi,backendName:"wasm",setupFunc:eZ,kernelFunc:tZ};var cO;function rZ(r){cO=r.wasm.cwrap("SelectV2",null,["number","number","number","number","number"])}function nZ(r){let{inputs:e,backend:t}=r,{condition:n,t:o,e:s}=e,a=t.dataIdMap.get(n.dataId).id,i=t.dataIdMap.get(o.dataId).id,l=t.dataIdMap.get(s.dataId).id,u=t.makeOutput(o.shape,o.dtype),c=t.dataIdMap.get(u.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 cO(a,i,l,f,c),u}var pO={kernelName:hs,backendName:"wasm",kernelFunc:nZ,setupFunc:rZ};var mO;function oZ(r){mO=r.wasm.cwrap(Ao,null,["number","number"])}function sZ(r){let{backend:e,inputs:{x:t}}=r,n=e.dataIdMap.get(t.dataId).id,o=e.makeOutput(t.shape,t.dtype),s=e.dataIdMap.get(o.dataId).id;return y.sizeFromShape(o.shape)===0||mO(n,s),o}var fO={kernelName:"Sigmoid",backendName:"wasm",setupFunc:oZ,kernelFunc:sZ};var dO=St(To);function nc(r){let{inputs:{x:e},attrs:{begin:t,size:n},backend:o}=r,[s,a]=sr.parseSliceParams(e,t,n),i=sr.isSliceContinous(e.shape,s,a),l=o.readSync(e.dataId),u=o.makeOutput(a,e.dtype),c=y.computeStrides(e.shape),p=o.dataIdMap.get(u.dataId);if(i){let d=sr.computeFlatOffset(s,c);return e.dtype==="string"?p.stringBytes=l.slice(d,d+y.sizeFromShape(a)):o.typedArrayFromHeap(u).set(l.subarray(d,d+y.sizeFromShape(a))),u}if(e.dtype==="string"){let d=uf(l,s,a,e.shape,e.dtype);return p.stringBytes=d,u}let m=o.typedArrayFromHeap(u),f=e.shape.length;if(f===2)iZ(l,c[0],m,s,a);else if(f===3)aZ(l,c[0],c[1],m,s,a);else if(f===4)lZ(l,c[0],c[1],c[2],m,s,a);else{let d=uf(l,s,a,e.shape,e.dtype);m.set(d)}return u}function iZ(r,e,t,n,o){let s=0,a=n[0],i=n[1],l=a+o[0];for(let u=a;u{let m=[...c];m[i]=p;let f=nc({inputs:{x:o},attrs:{begin:u,size:m},backend:n});return u[i]+=p,f})}var yO={kernelName:xs,backendName:"wasm",kernelFunc:pZ};var bO=St(Eo);var wO=St(fa);var mZ=!0,_O=yt(Ro,mZ);var kO;function fZ(r){kO=r.wasm.cwrap(On,null,["number","number","number"])}function dZ(r){let{backend:e,inputs:t,attrs:n}=r,{alpha:o}=n,{x:s}=t,a=e.dataIdMap.get(s.dataId).id,i=e.makeOutput(s.shape,s.dtype),l=e.dataIdMap.get(i.dataId).id;return kO(a,o,l),i}var vO={kernelName:On,backendName:"wasm",setupFunc:fZ,kernelFunc:dZ};var CO;function hZ(r){CO=r.wasm.cwrap(Ti,null,["number","array","number","array","array","array","array","array","number","number"])}function gZ(r){let{backend:e,inputs:t,attrs:n}=r,{x:o}=t,{begin:s,end:a,strides:i}=n;i==null&&(i=new Array(s.length));let{beginMask:l,endMask:u,ellipsisMask:c,newAxisMask:p,shrinkAxisMask:m}=n,f=N.slice_util.maskToAxes(c);if(f.length>1)throw new Error("Multiple ellipses in slice is not allowed.");if(c!==0&&p!==0)throw new Error("Using both ellipsisMask and newAxisMask is not yet supported.");if(c!==0&&m!==0)throw new Error("Using both ellipsisMask and shrinkAxisMask is not yet supported.");let d=o.shape.length-s.length,h=N.slice_util.maskToAxes(p),g=o.shape.slice();h.forEach(G=>{s[G]=0,a[G]=1,g.splice(G,0,1)});let x=Mr({inputs:{x:o},attrs:{shape:g},backend:e}),{begin:w,end:b,strides:_}=N.slice_util.getNormalizedAxes(x.shape,f,d,s,a,i,l,u,c);s=w,a=b,i=_;let k=N.slice_util.maskToAxes(m);k.forEach(G=>{a[G]=s[G]+1,i[G]=1});let A=N.slice_util.computeOutShape(s,a,i),S=A.filter((G,j)=>k.indexOf(j)===-1);if(i.every(G=>G===1)){let G=nc({inputs:{x:o},attrs:{begin:s,size:A},backend:e});e.disposeData(x.dataId);let j=Mr({inputs:{x:G},attrs:{shape:S},backend:e});return e.disposeData(G.dataId),j}let O=e.makeOutput(S,"float32");if(!S.some(G=>G===0)){let G=e.dataIdMap.get(x.dataId).id,j=new Uint8Array(new Int32Array(y.computeStrides(x.shape)).buffer),U=new Uint8Array(new Int32Array(s).buffer),q=new Uint8Array(new Int32Array(a).buffer),H=new Uint8Array(new Int32Array(i).buffer),X=new Uint8Array(new Int32Array(S).buffer),ne=new Uint8Array(new Int32Array(y.computeStrides(S)).buffer),Y=e.dataIdMap.get(O.dataId).id;CO(G,j,x.shape.length,U,q,H,X,ne,S.length,Y)}e.disposeData(x.dataId);let M=Mr({inputs:{x:O},attrs:{shape:S},backend:e});return e.disposeData(O.dataId),M}var IO={kernelName:Ti,backendName:"wasm",setupFunc:hZ,kernelFunc:gZ};var xZ=!0,NO=yt(Fo,xZ);var SO;function yZ(r){SO=r.wasm.cwrap(Do,null,["number, number, number"])}function bZ(r){let{backend:e,inputs:t,attrs:n}=r,{axis:o,keepDims:s}=n,{x:a}=t,i=e.dataIdMap.get(a.dataId).id,l=i,u=a,{transposed:c,axes:p,originalAxes:m,inputWasTransposed:f}=Yo(a,o,e),d=p;if(f){let b=e.dataIdMap.get(c.dataId).id;b!==i&&(u=c,l=b,d=N.getInnerMostAxes(d.length,u.shape.length))}N.assertAxesAreInnerMostDims("sum",d,u.shape.length);let[h,g]=N.computeOutAndReduceShapes(u.shape,d),x=y.sizeFromShape(g),w=e.makeOutput(h,u.dtype);if(y.sizeFromShape(u.shape)!==0){let b=e.dataIdMap.get(w.dataId).id;SO(l,x,b)}if(f&&e.disposeData(c.dataId),s){let b=N.expandShapeToKeepDim(w.shape,m);w.shape=b}return w}var TO={kernelName:Do,backendName:"wasm",setupFunc:yZ,kernelFunc:bZ};var AO=St(Oo);var EO;function wZ(r){EO=r.wasm.cwrap(_n,null,["number","array","number","array","number","number"])}function _Z(r){let{inputs:e,backend:t,attrs:n}=r,{x:o}=e,s=t.dataIdMap.get(o.dataId).id,{reps:a}=n,i=new Array(o.shape.length);for(let m=0;m{let{x:n}=r,{k:o,sorted:s}=t,a=e.dataIdMap.get(n.dataId).id,i=new Uint8Array(new Int32Array(n.shape).buffer),l=n.shape.slice();l[l.length-1]=o;let u=e.makeOutput(l,n.dtype),c=e.dataIdMap.get(u.dataId).id,p=e.makeOutput(l,"int32"),m=e.dataIdMap.get(p.dataId).id;return $O(a,i,n.shape.length,zt[n.dtype],o,s,c,m),[u,p]},RO={kernelName:Ei,backendName:"wasm",setupFunc:kZ,kernelFunc:vZ};function CZ(r){let{inputs:e,backend:t,attrs:n}=r,{value:o}=e,{axis:s}=n;s<0&&(s+=o.shape.length);let a=o.shape[s],i=o.shape.length,l=new Array(i-1),u=0;for(let f=0;f({dataId:f,dtype:d,shape:l}))}var FO={kernelName:ys,backendName:"wasm",kernelFunc:CZ};function IZ(r){let{inputs:{x:e},backend:t}=r,n=t.makeOutput(e.shape,e.dtype);return t.typedArrayFromHeap(n).fill(0),n}var OO={kernelName:bs,backendName:"wasm",kernelFunc:IZ};var NZ=[gR,xR,bR,CR,NR,AR,ER,DR,RR,FR,PR,LR,zR,VR,jR,UR,HR,KR,XR,YR,ZR,QR,eF,tF,hR,nF,sF,aF,uF,pF,mF,fF,wR,hF,gF,xF,yF,bF,_F,kF,CF,NF,TF,AF,EF,DF,RF,OF,MF,LF,BF,VF,GF,WF,UF,HF,XF,YF,ZF,JF,QF,SR,tO,nO,sO,aO,iO,uO,pO,fO,dO,hO,xO,yO,bO,wO,_O,vO,IO,NO,TO,AO,DO,RO,kR,FO,OO];for(let r of NZ)el(r);var a0=W();a0.registerFlag("WASM_HAS_SIMD_SUPPORT",async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11])));a0.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT",async()=>{if(a0.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 m0=Tc(LO());var zO='var Module={};function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");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;this.alert=threadAlert;Module["instantiateWasm"]=function(info,receiveInstance){var instance=new WebAssembly.Instance(Module["wasmModule"],info);Module["wasmModule"]=null;receiveInstance(instance);return instance.exports};function moduleLoaded(){}this.onmessage=function(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;moduleLoaded()})}else if(e.data.cmd==="objectTransfer"){Module["PThread"].receiveObjectTransfer(e.data)}else if(e.data.cmd==="run"){Module["__performance_now_clock_drift"]=performance.now()-e.data.time;Module["__emscripten_thread_init"](e.data.threadInfoStruct,0,0);var max=e.data.stackBase;var top=e.data.stackBase+e.data.stackSize;Module["establishStackSpace"](top,max);Module["_emscripten_tls_init"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].setThreadStatus(Module["_pthread_self"](),1);try{var result=Module["invokeEntryPoint"](e.data.start_routine,e.data.arg);if(!Module["getNoExitRuntime"]())Module["PThread"].threadExit(result)}catch(ex){if(ex==="Canceled!"){Module["PThread"].threadCancel()}else if(ex!="unwind"){if(ex instanceof Module["ExitStatus"]){if(Module["getNoExitRuntime"]()){}else{Module["PThread"].threadExit(ex.status)}}else{Module["PThread"].threadExit(-2);throw ex}}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["PThread"].threadCancel()}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="processThreadQueue"){if(Module["_pthread_self"]()){Module["_emscripten_current_thread_process_queued_calls"]()}}else{err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){err("worker.js onmessage() captured an uncaught exception: "+ex);if(ex&&ex.stack)err(ex.stack);throw ex}};if(typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string"){self={location:{href:__filename}};var onmessage=this.onmessage;var nodeWorkerThreads=require("worker_threads");global.Worker=nodeWorkerThreads.Worker;var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",function(data){onmessage({data:data})});var nodeFS=require("fs");var nodeRead=function(filename){return nodeFS.readFileSync(filename,"utf8")};function globalEval(x){global.require=require;global.Module=Module;eval.call(null,x)}importScripts=function(f){globalEval(nodeRead(f))};postMessage=function(msg){parentPort.postMessage(msg)};if(typeof performance==="undefined"){performance={now:function(){return Date.now()}}}}';var VO=Tc(BO());var nx=class extends js{constructor(e){super();this.wasm=e,this.dataIdNextNumber=1,this.wasm.tfjs.init(),this.dataIdMap=new Za(this,Mn())}write(e,t,n){let o={id:this.dataIdNextNumber++};return this.move(o,e,t,n,1),o}numDataIds(){return this.dataIdMap.numDataIds()}async time(e){let t=y.now();return e(),{kernelMs:y.now()-t}}move(e,t,n,o,s){let a=this.dataIdNextNumber++;if(o==="string"){let c=t;this.dataIdMap.set(e,{id:a,stringBytes:c,shape:n,dtype:o,memoryOffset:null,refCount:s});return}let i=y.sizeFromShape(n),l=i*y.bytesPerElement(o),u=this.wasm._malloc(l);this.dataIdMap.set(e,{id:a,memoryOffset:u,shape:n,dtype:o,refCount:s}),this.wasm.tfjs.registerTensor(a,i,u),t!=null&&this.wasm.HEAPU8.set(new Uint8Array(t.buffer,t.byteOffset,l),u)}async read(e){return this.readSync(e)}readSync(e){let{memoryOffset:t,dtype:n,shape:o,stringBytes:s}=this.dataIdMap.get(e);if(n==="string")return s;let a=this.wasm.HEAPU8.slice(t,t+y.sizeFromShape(o)*y.bytesPerElement(n));return SZ(a.buffer,n)}disposeData(e,t=!1){if(this.dataIdMap.has(e)){let n=this.dataIdMap.get(e);if(n.refCount--,!t&&n.refCount>0)return!1;this.wasm._free(n.memoryOffset),this.wasm.tfjs.disposeData(n.id),this.dataIdMap.delete(e)}return!0}refCount(e){return this.dataIdMap.has(e)?this.dataIdMap.get(e).refCount:0}incRef(e){let t=this.dataIdMap.get(e);t!=null&&t.refCount++}floatPrecision(){return 32}getMemoryOffset(e){return this.dataIdMap.get(e).memoryOffset}dispose(){this.wasm.tfjs.dispose(),this.wasm=null}memory(){return{unreliable:!1}}makeOutput(e,t,n){let o;if(n==null)o=this.write(null,e,t);else{let s=this.dataIdNextNumber++;o={id:s},this.dataIdMap.set(o,{id:s,memoryOffset:n,shape:e,dtype:t,refCount:1});let a=y.sizeFromShape(e);this.wasm.tfjs.registerTensor(s,a,n)}return{dataId:o,shape:e,dtype:t}}typedArrayFromHeap({shape:e,dtype:t,dataId:n}){let o=this.wasm.HEAPU8.buffer,{memoryOffset:s}=this.dataIdMap.get(n),a=y.sizeFromShape(e);switch(t){case"float32":return new Float32Array(o,s,a);case"int32":return new Int32Array(o,s,a);case"bool":return new Uint8Array(o,s,a);default:throw new Error(`Unknown dtype ${t}`)}}};function TZ(r){return(e,t)=>(y.fetch(r,{credentials:"same-origin"}).then(n=>{n.ok||e.env.a(`failed to load wasm binary file at '${r}'`),n.arrayBuffer().then(o=>{WebAssembly.instantiate(o,e).then(s=>{t(s.instance)})})}),{})}function GO(r,e,t){if(ox!=null)return ox;let n="tfjs-backend-wasm.wasm";return r&&e?n="tfjs-backend-wasm-threaded-simd.wasm":r&&(n="tfjs-backend-wasm-simd.wasm"),Ef!=null&&Ef[n]!=null?Ef[n]:t+n}async function jO(){let[r,e]=await Promise.all([W().getAsync("WASM_HAS_SIMD_SUPPORT"),W().getAsync("WASM_HAS_MULTITHREAD_SUPPORT")]);return new Promise((t,n)=>{let o={};o.locateFile=(i,l)=>{if(i.endsWith(".worker.js")){let u=zO,c=new Blob([u],{type:"application/javascript"});return URL.createObjectURL(c)}return i.endsWith(".wasm")?GO(r,e,Df!=null?Df:l):l+i},f0&&(o.instantiateWasm=TZ(GO(r,e,Df!=null?Df:"")));let s=!1;o.onAbort=()=>{if(s||$f)return;$f=!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 a;e&&r&&ox==null?(o.mainScriptUrlOrBlob=new Blob(["var WasmBackendModuleThreadedSimd = "+m0.default.toString()],{type:"text/javascript"}),a=(0,m0.default)(o)):a=(0,VO.default)(o),a.then(i=>{s=!0,$f=!1;let l=null;i.tfjs={init:i.cwrap("init",null,[]),registerTensor:i.cwrap("register_tensor",null,["number","number","number"]),disposeData:i.cwrap("dispose_data",l,["number"]),dispose:i.cwrap("dispose",l,[])},t({wasm:i})})})}function SZ(r,e){switch(e){case"float32":return new Float32Array(r);case"int32":return new Int32Array(r);case"bool":return new Uint8Array(r);default:throw new Error(`Unknown dtype ${e}`)}}var AZ=["tfjs-backend-wasm.wasm","tfjs-backend-wasm-simd.wasm","tfjs-backend-wasm-threaded-simd.wasm"],ox=null,Df=null,Ef={},$f=!1,f0=!1;function EZ(r,e=!1){if(eg("setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release."),$f)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`");ox=r,f0=e}function DZ(r,e=!1){if($f)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")Df=r;else{Ef=r;let t=AZ.filter(n=>Ef[n]==null);if(t.length>0)throw new Error(`There were no entries found for the following binaries: ${t.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.`)}f0=e}var d0="3.2.0";var $Z=2;hu("wasm",async()=>{let{wasm:r}=await jO();return new nx(r)},$Z);F().prototype.abs=function(){return this.throwIfDisposed(),Nt(this)};F().prototype.acos=function(){return this.throwIfDisposed(),_m(this)};F().prototype.acosh=function(){return this.throwIfDisposed(),km(this)};F().prototype.add=function(r){return this.throwIfDisposed(),Q(this,r)};F().prototype.all=function(r,e){return this.throwIfDisposed(),xu(this,r,e)};F().prototype.any=function(r,e){return this.throwIfDisposed(),sl(this,r,e)};F().prototype.argMax=function(r){return this.throwIfDisposed(),il(this,r)};F().prototype.argMin=function(r){return this.throwIfDisposed(),vm(this,r)};F().prototype.asScalar=function(){return this.throwIfDisposed(),E(this.size===1,()=>"The array must have only 1 element."),L(this,[])};F().prototype.asType=function(r){return this.throwIfDisposed(),oe(this,r)};F().prototype.as1D=function(){return this.throwIfDisposed(),L(this,[this.size])};F().prototype.as2D=function(r,e){return this.throwIfDisposed(),L(this,[r,e])};F().prototype.as3D=function(r,e,t){return this.throwIfDisposed(),L(this,[r,e,t])};F().prototype.as4D=function(r,e,t,n){return this.throwIfDisposed(),L(this,[r,e,t,n])};F().prototype.as5D=function(r,e,t,n,o){return this.throwIfDisposed(),L(this,[r,e,t,n,o])};F().prototype.asin=function(){return this.throwIfDisposed(),Cm(this)};F().prototype.asinh=function(){return this.throwIfDisposed(),Im(this)};F().prototype.atan=function(){return this.throwIfDisposed(),Nm(this)};F().prototype.atan2=function(r){return this.throwIfDisposed(),Sm(this,r)};F().prototype.atanh=function(){return this.throwIfDisposed(),Tm(this)};F().prototype.avgPool=function(r,e,t,n){return this.throwIfDisposed(),wa(this,r,e,t,n)};F().prototype.batchToSpaceND=function(r,e){return this.throwIfDisposed(),_a(this,r,e)};F().prototype.batchNorm=function(r,e,t,n,o){return this.throwIfDisposed(),Lo(this,r,e,t,n,o)};F().prototype.broadcastTo=function(r){return this.throwIfDisposed(),al(this,r)};F().prototype.cast=function(r){return this.throwIfDisposed(),oe(this,r)};F().prototype.ceil=function(){return this.throwIfDisposed(),Em(this)};F().prototype.clipByValue=function(r,e){return this.throwIfDisposed(),ir(this,r,e)};F().prototype.concat=function(r,e){return this.throwIfDisposed(),r instanceof Ve&&(r=[r]),Ze([this,...r],e)};F().prototype.conv1d=function(r,e,t,n,o,s){return this.throwIfDisposed(),wu(this,r,e,t,n,o,s)};F().prototype.conv2dTranspose=function(r,e,t,n,o){return this.throwIfDisposed(),_u(this,r,e,t,n,o)};F().prototype.conv2d=function(r,e,t,n,o,s){return this.throwIfDisposed(),Kr(this,r,e,t,n,o,s)};F().prototype.cos=function(){return this.throwIfDisposed(),ka(this)};F().prototype.cosh=function(){return this.throwIfDisposed(),ku(this)};F().prototype.cumsum=function(r,e,t){return this.throwIfDisposed(),vu(this,r,e,t)};F().prototype.depthToSpace=function(r,e){return this.throwIfDisposed(),$m(this,r,e)};F().prototype.depthwiseConv2d=function(r,e,t,n,o,s){return this.throwIfDisposed(),Cs(this,r,e,t,n,o,s)};F().prototype.dilation2d=function(r,e,t,n,o){return this.throwIfDisposed(),Rm(this,r,e,t,n,o)};F().prototype.divNoNan=function(r){return this.throwIfDisposed(),Fm(this,r)};F().prototype.div=function(r){return this.throwIfDisposed(),me(this,r)};F().prototype.dot=function(r){return this.throwIfDisposed(),Sw(this,r)};F().prototype.elu=function(){return this.throwIfDisposed(),Is(this)};F().prototype.equal=function(r){return this.throwIfDisposed(),vn(this,r)};F().prototype.erf=function(){return this.throwIfDisposed(),Om(this)};F().prototype.exp=function(){return this.throwIfDisposed(),Zt(this)};F().prototype.expandDims=function(r){return this.throwIfDisposed(),ar(this,r)};F().prototype.expm1=function(){return this.throwIfDisposed(),Pm(this)};F().prototype.fft=function(){return this.throwIfDisposed(),Ea(this)};F().prototype.flatten=function(){return this.throwIfDisposed(),L(this,[this.size])};F().prototype.floor=function(){return this.throwIfDisposed(),Ns(this)};F().prototype.floorDiv=function(r){return this.throwIfDisposed(),gu(this,r)};F().prototype.gather=function(r,e){return this.throwIfDisposed(),zo(this,r,e)};F().prototype.greaterEqual=function(r){return this.throwIfDisposed(),an(this,r)};F().prototype.greater=function(r){return this.throwIfDisposed(),er(this,r)};F().prototype.ifft=function(){return this.throwIfDisposed(),Mi(this)};F().prototype.irfft=function(){return this.throwIfDisposed(),Pu(this)};F().prototype.isFinite=function(){return this.throwIfDisposed(),Tw(this)};F().prototype.isInf=function(){return this.throwIfDisposed(),Aw(this)};F().prototype.isNaN=function(){return this.throwIfDisposed(),Ew(this)};F().prototype.leakyRelu=function(r){return this.throwIfDisposed(),Ca(this,r)};F().prototype.lessEqual=function(r){return this.throwIfDisposed(),Bn(this,r)};F().prototype.less=function(r){return this.throwIfDisposed(),Iu(this,r)};F().prototype.localResponseNormalization=function(r,e,t,n){return this.throwIfDisposed(),Mm(this,r,e,t,n)};F().prototype.logSigmoid=function(){return this.throwIfDisposed(),$w(this)};F().prototype.logSoftmax=function(r){return this.throwIfDisposed(),Su(this,r)};F().prototype.logSumExp=function(r,e){return this.throwIfDisposed(),zm(this,r,e)};F().prototype.log=function(){return this.throwIfDisposed(),lr(this)};F().prototype.log1p=function(){return this.throwIfDisposed(),Nu(this)};F().prototype.logicalAnd=function(r){return this.throwIfDisposed(),hr(this,r)};F().prototype.logicalNot=function(){return this.throwIfDisposed(),Ia(this)};F().prototype.logicalOr=function(r){return this.throwIfDisposed(),Tu(this,r)};F().prototype.logicalXor=function(r){return this.throwIfDisposed(),Pw(this,r)};F().prototype.matMul=function(r,e,t){return this.throwIfDisposed(),je(this,r,e,t)};F().prototype.maxPool=function(r,e,t,n){return this.throwIfDisposed(),Na(this,r,e,t,n)};F().prototype.max=function(r,e){return this.throwIfDisposed(),ur(this,r,e)};F().prototype.maximum=function(r){return this.throwIfDisposed(),Yr(this,r)};F().prototype.mean=function(r,e){return this.throwIfDisposed(),ht(this,r,e)};F().prototype.min=function(r,e){return this.throwIfDisposed(),Pi(this,r,e)};F().prototype.minimum=function(r){return this.throwIfDisposed(),Ts(this,r)};F().prototype.mirrorPad=function(r,e){return this.throwIfDisposed(),Vm(this,r,e)};F().prototype.mod=function(r){return this.throwIfDisposed(),Gm(this,r)};F().prototype.mul=function(r){return this.throwIfDisposed(),P(this,r)};F().prototype.neg=function(){return this.throwIfDisposed(),qe(this)};F().prototype.norm=function(r,e,t){return this.throwIfDisposed(),zu(this,r,e,t)};F().prototype.notEqual=function(r){return this.throwIfDisposed(),Vo(this,r)};F().prototype.oneHot=function(r,e=1,t=0){return this.throwIfDisposed(),vs(this,r,e,t)};F().prototype.onesLike=function(){return this.throwIfDisposed(),tr(this)};F().prototype.pad=function(r,e){return this.throwIfDisposed(),Fr(this,r,e)};F().prototype.pool=function(r,e,t,n,o){return this.throwIfDisposed(),zw(this,r,e,t,n,o)};F().prototype.pow=function(r){return this.throwIfDisposed(),Or(this,r)};F().prototype.prelu=function(r){return this.throwIfDisposed(),Ta(this,r)};F().prototype.prod=function(r,e){return this.throwIfDisposed(),Au(this,r,e)};F().prototype.reciprocal=function(){return this.throwIfDisposed(),jm(this)};F().prototype.relu=function(){return this.throwIfDisposed(),Sr(this)};F().prototype.relu6=function(){return this.throwIfDisposed(),Du(this)};F().prototype.reshapeAs=function(r){return this.throwIfDisposed(),L(this,r.shape)};F().prototype.reshape=function(r){return this.throwIfDisposed(),L(this,r)};F().prototype.resizeBilinear=function(r,e,t){return this.throwIfDisposed(),dg(this,r,e,t)};F().prototype.resizeNearestNeighbor=function(r,e,t){return this.throwIfDisposed(),hg(this,r,e,t)};F().prototype.reverse=function(r){return this.throwIfDisposed(),Ht(this,r)};F().prototype.rfft=function(){return this.throwIfDisposed(),Da(this)};F().prototype.round=function(){return this.throwIfDisposed(),Wm(this)};F().prototype.rsqrt=function(){return this.throwIfDisposed(),$u(this)};F().prototype.selu=function(){return this.throwIfDisposed(),Ru(this)};F().prototype.separableConv2d=function(r,e,t,n,o,s){return this.throwIfDisposed(),Um(this,r,e,t,n,o,s)};F().prototype.sigmoid=function(){return this.throwIfDisposed(),Hr(this)};F().prototype.sign=function(){return this.throwIfDisposed(),qm(this)};F().prototype.sin=function(){return this.throwIfDisposed(),Fu(this)};F().prototype.sinh=function(){return this.throwIfDisposed(),Ou(this)};F().prototype.slice=function(r,e){return this.throwIfDisposed(),Re(this,r,e)};F().prototype.softmax=function(r){return this.throwIfDisposed(),Aa(this,r)};F().prototype.softplus=function(){return this.throwIfDisposed(),Ss(this)};F().prototype.spaceToBatchND=function(r,e){return this.throwIfDisposed(),Sa(this,r,e)};F().prototype.split=function(r,e){return this.throwIfDisposed(),cr(this,r,e)};F().prototype.sqrt=function(){return this.throwIfDisposed(),xt(this)};F().prototype.square=function(){return this.throwIfDisposed(),Oe(this)};F().prototype.squaredDifference=function(r){return this.throwIfDisposed(),Mu(this,r)};F().prototype.squeeze=function(r){return this.throwIfDisposed(),Cn(this,r)};F().prototype.stack=function(r,e){this.throwIfDisposed();let t=r instanceof Ve?[this,r]:[this,...r];return Vt(t,e)};F().prototype.step=function(r){return this.throwIfDisposed(),Es(this,r)};F().prototype.stridedSlice=function(r,e,t,n,o,s,a,i){return this.throwIfDisposed(),Xm(this,r,e,t,n,o,s,a,i)};F().prototype.sub=function(r){return this.throwIfDisposed(),ce(this,r)};F().prototype.sum=function(r,e){return this.throwIfDisposed(),ge(this,r,e)};F().prototype.tan=function(){return this.throwIfDisposed(),Ym(this)};F().prototype.tanh=function(){return this.throwIfDisposed(),Oi(this)};F().prototype.tile=function(r){return this.throwIfDisposed(),zn(this,r)};F().prototype.toBool=function(){return this.throwIfDisposed(),oe(this,"bool")};F().prototype.toFloat=function(){return this.throwIfDisposed(),oe(this,"float32")};F().prototype.toInt=function(){return this.throwIfDisposed(),oe(this,"int32")};F().prototype.topk=function(r,e){return this.throwIfDisposed(),Zm(this,r,e)};F().prototype.transpose=function(r){return this.throwIfDisposed(),Ue(this,r)};F().prototype.unique=function(r){return this.throwIfDisposed(),ep(this,r)};F().prototype.unsortedSegmentSum=function(r,e){return this.throwIfDisposed(),Jm(this,r,e)};F().prototype.unstack=function(r){return this.throwIfDisposed(),pr(this,r)};F().prototype.where=function(r,e){return this.throwIfDisposed(),$t(r,this,e)};F().prototype.zerosLike=function(){return this.throwIfDisposed(),Ce(this)};var sx={kernelName:as,inputsToSave:["x"],gradFunc:(r,e)=>{let[t]=e;return{x:()=>P(r,Es(oe(t,"float32"),-1))}}};var WO={kernelName:qs,inputsToSave:["x"],gradFunc:(r,e)=>{let[t]=e;return{x:()=>{let n=Oe(oe(t,"float32")),o=xt(ce(ue(1),n));return qe(me(r,o))}}}};var UO={kernelName:Hs,inputsToSave:["x"],gradFunc:(r,e)=>{let[t]=e;return{x:()=>{let n=xt(ce(Oe(oe(t,"float32")),1));return me(r,n)}}}};var qO={kernelName:wn,inputsToSave:["a","b"],gradFunc:(r,e)=>{let[t,n]=e,o=Be(t.shape,n.shape);return{a:()=>{let i=r,l=kt(t.shape,o);return l.length>0&&(i=ge(i,l)),L(i,t.shape)},b:()=>{let i=r,l=kt(n.shape,o);return l.length>0&&(i=ge(i,l)),L(i,n.shape)}}}};var HO={kernelName:qn,saveAllInputs:!0,gradFunc:(r,e)=>{let t={};return e.forEach((n,o)=>{t[o]=()=>r.clone()}),t}};var KO={kernelName:Hn,inputsToSave:["x"],gradFunc:(r,e)=>{let[t]=e;return{x:()=>Ce(t)}}};var XO={kernelName:ea,inputsToSave:["x"],gradFunc:(r,e)=>{let[t]=e;return{x:()=>Ce(t)}}};var YO={kernelName:Ks,inputsToSave:["x"],gradFunc:(r,e)=>{let[t]=e;return{x:()=>me(r,xt(ce(ue(1),Oe(oe(t,"float32")))))}}};var ZO={kernelName:Xs,inputsToSave:["x"],gradFunc:(r,e)=>{let[t]=e;return{x:()=>{let n=xt(Q(ue(1),Oe(oe(t,"float32"))));return me(r,n)}}}};var JO={kernelName:Js,inputsToSave:["a","b"],gradFunc:(r,e)=>{let[t,n]=e,o=Be(t.shape,n.shape);return{a:()=>{let i=Q(Oe(t),Oe(n)),l=P(r,me(n,i)),u=kt(t.shape,o);return u.length>0&&(l=ge(l,u)),L(l,t.shape)},b:()=>{let i=Q(Oe(t),Oe(n)),l=qe(P(r,me(t,i))),u=kt(n.shape,o);return u.length>0&&(l=ge(l,u)),L(l,n.shape)}}}};var QO={kernelName:Ys,inputsToSave:["x"],gradFunc:(r,e)=>{let[t]=e;return{x:()=>me(r,Q(Oe(oe(t,"float32")),1))}}};var eP={kernelName:Zs,inputsToSave:["x"],gradFunc:(r,e)=>{let[t]=e;return{x:()=>me(r,ce(ue(1),Oe(oe(t,"float32"))))}}};function RZ(r,e,t,n,o,s){let a=v(r,"dy","avgPool3dGrad"),i=v(e,"input","avgPool3dGrad"),l=a,u=i,c=!1;i.rank===4&&(c=!0,l=L(a,[1,a.shape[0],a.shape[1],a.shape[2],a.shape[3]]),u=L(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]])),E(l.rank===5,()=>`Error in avgPool3dGrad: dy must be rank 5 but got rank ${l.rank}.`),E(u.rank===5,()=>`Error in avgPool3dGrad: input must be rank 5 but got rank ${u.rank}.`),s!=null&&E(nt(o),()=>`Error in avgPool3dGrad: pad must be an integer when using, dimRoundingMode ${s} but got pad ${o}.`);let p={dy:l,input:u},m={filterSize:t,strides:n,pad:o,dimRoundingMode:s},f=D.runKernel(Bl,p,m);return c?L(f,[f.shape[1],f.shape[2],f.shape[3],f.shape[4]]):f}var tP=T({avgPool3dGrad_:RZ});var rP={kernelName:ta,inputsToSave:["x"],gradFunc:(r,e,t)=>{let[n]=e,{filterSize:o,strides:s,pad:a,dimRoundingMode:i}=t;return{x:()=>tP(r,n,o,s,a,i)}}};function FZ(r,e,t,n,o){let s=v(r,"dy","avgPoolGrad"),a=v(e,"input","avgPoolGrad");E(a.rank===s.rank,()=>`Rank of input (${a.rank}) does not match rank of dy (${s.rank})`);let i=a,l=s,u=!1;a.rank===3&&(u=!0,i=L(a,[1,a.shape[0],a.shape[1],a.shape[2]]),l=L(s,[1,s.shape[0],s.shape[1],s.shape[2]])),E(l.rank===4,()=>`Error in avgPoolGrad: dy must be rank 4 but got rank ${l.rank}.`),E(i.rank===4,()=>`Error in avgPoolGrad: input must be rank 4 but got rank ${i.rank}.`);let c={dy:l,input:i},p={filterSize:t,strides:n,pad:o},m=D.runKernel(zl,c,p);return u?L(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var nP=T({avgPoolGrad_:FZ});var oP={kernelName:Kn,inputsToSave:["x"],gradFunc:(r,e,t)=>{let[n]=e,{filterSize:o,strides:s,pad:a}=t;return{x:()=>nP(r,n,o,s,a)}}};var sP={kernelName:Xn,inputsToSave:["a","b"],gradFunc:(r,e,t)=>{let[n,o]=e,{transposeA:s,transposeB:a}=t;return!s&&!a?{a:()=>je(r,o,!1,!0),b:()=>je(n,r,!0,!1)}:!s&&a?{a:()=>je(r,o,!1,!1),b:()=>je(r,n,!0,!1)}:s&&!a?{a:()=>je(o,r,!1,!0),b:()=>je(n,r,!1,!1)}:{a:()=>je(o,r,!0,!0),b:()=>je(r,n,!0,!0)}}};var iP={kernelName:ra,gradFunc:(r,e,t)=>{let{blockShape:n,crops:o}=t;return{x:()=>Sa(r,n,o)}}};var aP={kernelName:Rb,gradFunc:(r,e,t)=>{let n=t,o=n.inputShape,s=n.shape,a=Array.from(s);for(let l=o.length-1;l>=0;l--)if(o[l]===s[l])a[l]=1;else if(o[l]!==1)throw new Error(`broadcastTo(): [${o}] cannot be broadcast to [${s}].`);let i=[];for(let l=0;l1&&i.push(l);return{x:()=>ge(r,i,!0)}}};var lP={kernelName:$n,gradFunc:r=>({x:()=>r.clone()})};var uP={kernelName:Yn,gradFunc:r=>({x:()=>Ce(r)})};var cP={kernelName:Rn,inputsToSave:["x"],gradFunc:(r,e,t)=>{let[n]=e,{clipValueMin:o,clipValueMax:s}=t;return{x:()=>$t(hr(an(n,o),Bn(n,s)),r,Ce(r))}}};var pP={kernelName:na,inputsToSave:["x"],gradFunc:sx.gradFunc};var mP={kernelName:ls,saveAllInputs:!0,gradFunc:(r,e,t)=>{let n=e.map(l=>l.shape),{axis:o}=t,s=Qt(o,e[0].shape)[0],a=n.map(l=>l[s]);return cr(r,a,s).map(l=>()=>l)}};var fP={kernelName:Zn,inputsToSave:["x","filter"],gradFunc:(r,e,t)=>{let[n,o]=e,{dilations:s,strides:a,pad:i,dataFormat:l}=t;return E(Ln(s),()=>`Error in gradient of conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`),{x:()=>Kc(n.shape,r,o,a,i,l),filter:()=>tp(n,r,o.shape,a,i,l)}}};var dP={kernelName:Jn,inputsToSave:["dy","filter"],gradFunc:(r,e,t)=>{let[n,o]=e,{strides:s,pad:a,dataFormat:i,dimRoundingMode:l}=t;return{dy:()=>Kr(r,o,s,a,i,1,l),filter:()=>tp(r,n,o.shape,s,a,i,l)}}};function OZ(r,e,t,n,o){let s=r;r.rank===4&&(s=L(r,[1,r.shape[0],r.shape[1],r.shape[2],r.shape[3]]));let a=e;a.rank===4&&(a=L(e,[1,e.shape[0],e.shape[1],e.shape[2],e.shape[3]])),E(s.rank===5,()=>`Error in conv3dDerFilter: input must be rank 5, but got shape ${s.shape}.`),E(a.rank===5,()=>`Error in conv3dDerFilter: dy must be rank 5, but got shape ${a.shape}.`),E(t.length===5,()=>`Error in conv3dDerFilter: filterShape must be length 5, but got ${t}.`),E(s.shape[4]===t[3],()=>`Error in conv3dDerFilter: depth of input ${s.shape[4]}) must match input depth in filter (${t[3]}.`),E(a.shape[4]===t[4],()=>`Error in conv3dDerFilter: depth of dy (${a.shape[4]}) must match output depth for filter (${t[4]}).`);let i={x:s,dy:a},l={strides:n,pad:o,filterShape:t};return D.runKernel(Wl,i,l)}var hP=T({conv3DBackpropFilter_:OZ});var gP={kernelName:oa,inputsToSave:["x","filter"],gradFunc:(r,e,t)=>{let{dilations:n,strides:o,pad:s}=t;E(Ln(n),()=>`Error in gradient of conv3D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${n}'`);let[a,i]=e;return{x:()=>rg(a.shape,r,i,o,s),filter:()=>hP(a,r,i.shape,o,s)}}};var xP={kernelName:Qn,inputsToSave:["x"],gradFunc:(r,e)=>{let[t]=e;return{x:()=>P(qe(Fu(oe(t,"float32"))),r)}}};var yP={kernelName:Qs,inputsToSave:["x"],gradFunc:(r,e)=>{let[t]=e;return{x:()=>P(Ou(oe(t,"float32")),r)}}};var bP={kernelName:eo,inputsToSave:["x"],gradFunc:(r,e,t)=>{let[n]=e,{axis:o,exclusive:s,reverse:a}=t;return{x:()=>{let i=Ow([o],n.rank),l=vu(r,o,s,!a);return i!=null&&(l=Ue(l,i)),l}}}};var wP={kernelName:to,inputsToSave:["x","filter"],gradFunc:(r,e,t)=>{let{dilations:n,strides:o,pad:s,dimRoundingMode:a}=t,i=n==null?[1,1]:n;E(Ln(i),()=>`Error in gradient of depthwiseConv2dNative: dilation rates greater than 1 are not yet supported. Got dilations '${i}'`);let[l,u]=e;return E(l.rank===4,()=>`Error in gradient of depthwiseConv2dNative: input must be rank 4, but got rank ${l.rank}.`),E(u.rank===4,()=>`Error in gradient of depthwiseConv2dNative: filter must be rank 4, but got rank ${u.rank}.`),E(l.shape[3]===u.shape[2],()=>`Error in gradient of depthwiseConv2d: number of input channels (${l.shape[3]}) must match the inChannels dimension in filter ${u.shape[2]}.`),E(_r(o,i),()=>`Error in gradient of depthwiseConv2d: Either strides or dilations must be 1. Got strides ${o} and dilations '${i}'.`),a!=null&&E(nt(s),()=>`Error in depthwiseConv2d: pad must be an integer when using, dimRoundingMode ${a} but got pad ${s}.`),{x:()=>pg(l.shape,r,u,o,s,n,a),filter:()=>cg(l,r,u.shape,o,s,n,a)}}};var _P={kernelName:sa,inputsToSave:["x","filter"],gradFunc:(r,e,t)=>{let[n,o]=e,s={x:n,filter:o,dy:r},a={x:n,filter:o,dy:r};return{x:()=>D.runKernel(Rc,s,t),filter:()=>D.runKernel(Fc,a,t)}}};var kP={kernelName:ri,outputsToSave:[!0],gradFunc:(r,e)=>{let[t]=e,n={dy:r,y:t};return{x:()=>D.runKernel(Yl,n)}}};var vP={kernelName:ni,inputsToSave:["x"],gradFunc:(r,e)=>{let[t]=e,n=P(Zt(qe(Oe(t))),2/Math.sqrt(Math.PI));return{x:()=>P(r,n)}}};var CP={kernelName:no,outputsToSave:[!0],gradFunc:(r,e)=>{let[t]=e;return{x:()=>P(r,t)}}};var IP={kernelName:us,inputsToSave:["input"],gradFunc:(r,e)=>{let[t]=e;return{input:()=>L(r,t.shape)}}};var NP={kernelName:si,inputsToSave:["x"],gradFunc:(r,e)=>{let[t]=e;return{x:()=>P(r,Zt(t))}}};var SP={kernelName:oo,gradFunc:r=>({x:()=>Ce(r)})};var TP={kernelName:so,inputsToSave:["a","b"],gradFunc:(r,e)=>{let[t,n]=e,o=Be(t.shape,n.shape);return{a:()=>{let i=me(r,oe(n,"float32")),l=kt(t.shape,o);return l.length>0?L(ge(i,l),t.shape):i},b:()=>{let i=P(r,oe(t,"float32")),l=kt(n.shape,o);l.length>0&&(i=L(ge(i,l),n.shape));let u=Oe(n);return qe(me(i,oe(u,"float32")))}}}};var AP={kernelName:io,inputsToSave:["x","mean","variance","scale"],gradFunc:(r,e,t)=>{let{varianceEpsilon:n}=t,[o,s,a,i]=e,l=i==null?ue(1):i,u=kt(s.shape,o.shape),c=[];if(s.rank===1){for(let _=0;_s.rank===1?L(P(P(r,zn(L(f,[1,1,1,s.shape[0]]),c)),l),o.shape):L(P(P(r,f),l),o.shape),mean:()=>{let _=P(P(f,ue(-1)),m);return s.rank===1&&(_=ge(_,u)),L(_,s.shape)},variance:()=>{let _=P(P(d,p),m);return s.rank===1&&(_=ge(_,u)),L(_,s.shape)},scale:()=>{let _=P(p,f),k=P(r,_);return s.rank===1&&(k=ge(k,u)),L(k,s.shape)},offset:()=>{let _=r;return s.rank===1&&(_=ge(_,u)),L(_,s.shape)}}}};var $P={kernelName:cs,inputsToSave:["x","indices"],gradFunc:(r,e,t)=>{let[n,o]=e,{axis:s}=t,a=Qt(s,n.shape)[0];return{x:()=>{let l=n.shape,u=o.size,c=l.slice(0,a),p=c.length,m=l.slice(s,l.length).slice(1),f=m.length,d=EP(0,p),h=EP(p+1,p+1+f),g=DP([c,[u],m]),x=L(r,g),w=L(o,[u]),b=DP([[p],d,h]),_=Ue(x,b),k=Jm(_,w,n.shape[a]),A=Lm(b);return k=Ue(k,A),k},indices:()=>o}}};function EP(r,e){let t=[];for(let n=r;n{let[t,n]=e;return{a:()=>Ce(t),b:()=>Ce(n)}}};var FP={kernelName:Fn,gradFunc:r=>({x:()=>oe(r,"float32")})};var OP={kernelName:ui,gradFunc:r=>({x:()=>Ce(r)})};var PP={kernelName:ci,gradFunc:r=>({x:()=>Ce(r)})};var MP={kernelName:pi,gradFunc:r=>({x:()=>Ce(r)})};var LP={kernelName:lo,inputsToSave:["x"],gradFunc:(r,e,t)=>{let[n]=e,{alpha:o}=t,s=er(n,0);return{x:()=>$t(s,r,P(r,o))}}};var zP={kernelName:di,inputsToSave:["x"],gradFunc:(r,e)=>{let[t]=e;return{x:()=>me(r,Q(t,1))}}};var BP={kernelName:uo,inputsToSave:["x"],gradFunc:(r,e)=>{let[t]=e;return{x:()=>me(r,oe(t,"float32"))}}};var VP={kernelName:Fb,inputsToSave:[],outputsToSave:[!0],gradFunc:(r,e,t)=>{let[n]=e,{axis:o}=t;return{logits:()=>{let s=!0,a=Zt(n);return ce(r,P(ge(r,o,s),a))}}}};function PZ(r,e,t,n=5,o=1,s=1,a=.5){let i={x:r,y:e,dy:t},l={depthRadius:n,bias:o,alpha:s,beta:a};return D.runKernel(tu,i,l)}var GP=T({localResponseNormalizationBackprop_:PZ});var jP={kernelName:aa,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,e,t)=>{let[n,o]=e,{depthRadius:s,bias:a,alpha:i,beta:l}=t;return{x:()=>GP(n,o,r,s,a,i,l)}}};function ix(r,e,t,n){return e.rankP(r,oe(vn(t,e),r.dtype))}}var h0={kernelName:co,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,e,t)=>{let n=t,{reductionIndices:o}=n,s=e[0],a=e[1],i=Qt(o,s.shape),l=ix(r,a,s,i);return{x:()=>l.x()}}};var WP={kernelName:po,inputsToSave:["a","b"],gradFunc:(r,e)=>{let[t,n]=e;return{a:()=>P(r,oe(an(t,n),"float32")),b:()=>P(r,oe(Iu(t,n),"float32"))}}};function MZ(r,e,t,n,o,s,a){let i=v(r,"dy","maxPool3dGrad"),l=v(e,"input","maxPool3dGrad"),u=v(t,"output","maxPool3dGrad"),c=i,p=l,m=u,f=!1;l.rank===4&&(f=!0,c=L(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]]),p=L(l,[1,l.shape[0],l.shape[1],l.shape[2],l.shape[3]]),m=L(u,[1,u.shape[0],u.shape[1],u.shape[2],u.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}.`),a!=null&&E(nt(s),()=>`Error in maxPool3dGrad: pad must be an integer when using, dimRoundingMode ${a} but got pad ${s}.`);let d={dy:c,input:p,output:m},h={filterSize:n,strides:o,pad:s,dimRoundingMode:a},g=D.runKernel(nu,d,h);return f?L(g,[g.shape[1],g.shape[2],g.shape[3],g.shape[4]]):g}var UP=T({maxPool3dGrad_:MZ});var qP={kernelName:la,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,e,t)=>{let[n,o]=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:l}=t;return{x:()=>UP(r,n,o,s,a,i,l)}}};function LZ(r,e,t,n,o,s,a){let i=v(r,"dy","maxPoolGrad"),l=v(e,"input","maxPoolGrad"),u=v(t,"output","maxPoolGrad");E(l.rank===i.rank,()=>`Rank of input (${l.rank}) does not match rank of dy (${i.rank})`),E(i.rank===4,()=>`Error in maxPoolGrad: dy must be rank 4 but got rank ${i.rank}.`),E(l.rank===4,()=>`Error in maxPoolGrad: input must be rank 4 but got rank ${l.rank}.`),a!=null&&E(nt(s),()=>`Error in maxPoolGrad: pad must be an integer when using, dimRoundingMode ${a} but got pad ${s}.`);let c={dy:i,input:l,output:u},p={filterSize:n,strides:o,pad:s,dimRoundingMode:a};return D.runKernel(ru,c,p)}var HP=T({maxPoolGrad_:LZ});var KP={kernelName:mo,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,e,t)=>{let[n,o]=e,{filterSize:s,strides:a,pad:i}=t;return{x:()=>HP(r,n,o,s,a,i)}}};var XP={kernelName:fo,inputsToSave:["x"],gradFunc:(r,e,t)=>{let[n]=e,{axis:o}=t,s=Qt(o,n.shape),i=Fw(n.shape,s)[1],l=ct(i);return{x:()=>{let c=n.shape.slice();s.forEach(f=>{c[f]=1});let p=L(r,c);return me(P(p,Nr(n.shape,"float32")),l)}}}};var YP={kernelName:ho,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,e,t)=>{let n=t,{axis:o}=n,[s,a]=e,i=Qt(o,s.shape),l=ix(r,a,s,i);return{x:()=>l.x()}}};var ZP={kernelName:go,inputsToSave:["a","b"],gradFunc:(r,e)=>{let[t,n]=e;return{a:()=>P(r,oe(Bn(t,n),"float32")),b:()=>P(r,oe(er(t,n),"float32"))}}};var JP={kernelName:ua,inputsToSave:["x"],gradFunc:(r,e,t)=>{let n=e[0],{paddings:o}=t,s=o.map(a=>a[0]);return{x:()=>Re(r,s,n.shape)}}};var QP={kernelName:gi,inputsToSave:["a","b"],gradFunc:(r,e)=>{let[t,n]=e,o=Be(t.shape,n.shape);return{a:()=>{let i=kt(t.shape,o);return i.length>0?L(ge(r,i),t.shape):r},b:()=>{let i=P(r,qe(Ns(me(t,n)))),l=kt(n.shape,o);return l.length>0?L(ge(i,l),n.shape):i}}}};var eM={kernelName:xo,inputsToSave:["a","b"],gradFunc:(r,e)=>{let[t,n]=e,o=Be(t.shape,n.shape);return{a:()=>{let i=P(r,oe(n,"float32")),l=kt(t.shape,o);return l.length>0?L(ge(i,l),t.shape):i},b:()=>{let i=P(r,oe(t,"float32")),l=kt(n.shape,o);return l.length>0?L(ge(i,l),n.shape):i}}}};var tM={kernelName:ps,gradFunc:r=>({x:()=>qe(r)})};var rM={kernelName:yo,inputsToSave:["indices"],gradFunc:(r,e)=>{let t=e[0];return{indices:()=>gt(t.shape,"float32")}}};var nM={kernelName:ms,gradFunc:r=>({x:()=>Ce(r)})};var oM={kernelName:fs,saveAllInputs:!0,gradFunc:(r,e,t)=>{let{axis:n}=t;return pr(r,n).map(s=>()=>s)}};var g0={kernelName:bo,inputsToSave:["x"],gradFunc:(r,e,t)=>{let n=e[0],{paddings:o}=t,s=o.map(a=>a[0]);return{x:()=>Re(r,s,n.shape)}}};var sM={kernelName:wo,inputsToSave:["a","b"],outputsToSave:[!0],gradFunc:(r,e)=>{let[t,n,o]=e,s=t,a=n,i=Be(s.shape,a.shape);return{a:()=>{let c=oe(a,"float32"),p=P(r,P(c,Or(s,ce(c,ue(1))))),m=kt(s.shape,i);return m.length>0&&(p=ge(p,m)),L(p,s.shape)},b:()=>{let c=er(s,0),p=$t(c,lr(s),Ce(s)),m=P(r,P(o,p)),f=kt(a.shape,i);return f.length>0&&(m=ge(m,f)),L(m,a.shape)}}}};var iM={kernelName:_o,inputsToSave:["x","alpha"],gradFunc:(r,e)=>{let[t,n]=e,o=er(t,0);return{x:()=>$t(o,r,P(r,n)),alpha:()=>{let s=$t(o,Ce(r),P(r,t)),a=kt(n.shape,r.shape);return a.length>0&&(s=ge(s,a)),L(s,n.shape)}}}};var aM={kernelName:ro,inputsToSave:["a","b"],gradFunc:(r,e)=>{let[t,n]=e,o=Be(t.shape,n.shape);return{a:()=>{let i=me(r,oe(n,"float32")),l=kt(t.shape,o);return l.length>0?L(ge(i,l),t.shape):i},b:()=>{let i=P(r,oe(t,"float32")),l=kt(n.shape,o);l.length>0&&(i=L(ge(i,l),n.shape));let u=Oe(n);return qe(me(i,oe(u,"float32")))}}}};var lM={kernelName:ki,inputsToSave:["x"],gradFunc:(r,e)=>{let[t]=e;return{x:()=>me(r,qe(Oe(t)))}}};var uM={kernelName:Co,inputsToSave:["x"],gradFunc:(r,e)=>{let[t]=e,n=P(Bn(t,6),Es(t));return{x:()=>P(r,oe(n,"float32"))}}};var cM={kernelName:ko,inputsToSave:["x"],gradFunc:(r,e)=>{let[t]=e;return{x:()=>P(r,oe(Es(t),"float32"))}}};var pM={kernelName:ds,inputsToSave:["x"],gradFunc:(r,e)=>{let[t]=e;return{x:()=>L(r,t.shape)}}};var mM={kernelName:vo,inputsToSave:["images"],gradFunc:(r,e,t)=>{let[n]=e,o={dy:r,images:n};return{images:()=>D.runKernel(lu,o,t)}}};var fM={kernelName:pa,inputsToSave:["images"],gradFunc:(r,e,t)=>{let[n]=e,o={dy:r,images:n};return{images:()=>D.runKernel(au,o,t)}}};var dM={kernelName:Io,gradFunc:(r,e,t)=>{let{dims:n}=t,o=Qt(n,r.shape);return{x:()=>Ht(r,o)}}};var hM={kernelName:No,gradFunc:r=>({x:()=>Ce(r)})};var gM={kernelName:So,inputsToSave:["x"],gradFunc:(r,e)=>{let[t]=e;return{x:()=>qe(me(r,P(Or(t,1.5),2)))}}};var xM={kernelName:hs,inputsToSave:["condition"],gradFunc:(r,e)=>{let[t]=e;return{condition:()=>oe(Ce(t),"float32"),t:()=>P(r,oe(t,r.dtype)),e:()=>P(r,oe(Ia(t),r.dtype))}}};var yM={kernelName:Ci,inputsToSave:["x"],gradFunc:(r,e)=>{let[t]=e;return{x:()=>{let n=er(t,ue(0)),o=ue(i_),s=ue(a_),a=P(r,s),i=P(P(r,o),Zt(oe(t,"float32")));return $t(n,a,i)}}}};var bM={kernelName:Ao,outputsToSave:[!0],gradFunc:(r,e)=>{let[t]=e;return{x:()=>P(r,P(t,ce(ue(1),t)))}}};var wM={kernelName:Ni,gradFunc:r=>({x:()=>Ce(r)})};var _M={kernelName:To,inputsToSave:["x"],gradFunc:(r,e)=>{let[t]=e;return{x:()=>P(ka(oe(t,"float32")),r)}}};var kM={kernelName:Ii,inputsToSave:["x"],gradFunc:(r,e)=>{let[t]=e;return{x:()=>P(ku(oe(t,"float32")),r)}}};var vM={kernelName:gs,inputsToSave:["x"],gradFunc:(r,e,t)=>{let[n]=e,{begin:o,size:s}=t,a=n.shape,[i,l]=uw(n,o,s),u=[];for(let c=0;cFr(r,u)}}};var CM={kernelName:$o,outputsToSave:[!0],gradFunc:(r,e,t)=>{let[n]=e,{dim:o}=t,s=!0,a=P(r,n);return{logits:()=>ce(a,P(ge(a,[o],s),n))}}};var IM={kernelName:Si,inputsToSave:["x"],gradFunc:(r,e)=>{let[t]=e;return{x:()=>P(r,Hr(t))}}};var x0={kernelName:ma,gradFunc:(r,e,t)=>{let{blockShape:n,paddings:o}=t;return{x:()=>_a(r,n,o)}}};var y0={kernelName:xs,gradFunc:(r,e,t)=>{let{axis:n}=t;return{x:()=>Ze(r,n)}}};var NM={kernelName:Eo,inputsToSave:["x"],gradFunc:(r,e)=>{let[t]=e;return{x:()=>me(r,P(xt(oe(t,"float32")),2))}}};var SM={kernelName:fa,inputsToSave:["x"],gradFunc:(r,e)=>{let[t]=e;return{x:()=>P(r,P(oe(t,"float32"),2))}}};var TM={kernelName:Ro,inputsToSave:["a","b"],gradFunc:(r,e)=>{let[t,n]=e,o=ue(2);return{a:()=>P(r,P(o,ce(t,n))),b:()=>P(r,P(o,ce(n,t)))}}};var AM={kernelName:On,gradFunc:r=>({x:()=>Ce(r)})};var EM={kernelName:Fo,inputsToSave:["a","b"],gradFunc:(r,e)=>{let[t,n]=e,o=Be(t.shape,n.shape);return{a:()=>{let i=r,l=kt(t.shape,o);return l.length>0&&(i=ge(i,l)),L(i,t.shape)},b:()=>{let i=r,l=kt(n.shape,o);return l.length>0&&(i=ge(i,l)),L(qe(i),n.shape)}}}};var DM={kernelName:Do,inputsToSave:["x"],gradFunc:(r,e,t)=>{let[n]=e,o=n.shape.slice(),{axis:s}=t;Qt(s,n.shape).forEach(u=>{o[u]=1});let i=L(r,o),l=P(i,Nr(n.shape,"float32"));return{x:()=>l}}};var $M={kernelName:Ai,inputsToSave:["x"],gradFunc:(r,e)=>{let[t]=e;return{x:()=>me(r,Oe(ka(t)))}}};var RM={kernelName:Oo,outputsToSave:[!0],gradFunc:(r,e)=>{let[t]=e;return{x:()=>P(ce(ue(1),Oe(t)),r)}}};var FM={kernelName:_n,inputsToSave:["x"],gradFunc:(r,e,t)=>{let[n]=e,{reps:o}=t;return{x:()=>{let a=Ce(n);if(n.rank===1)for(let i=0;i{let n=t,{perm:o}=n,s=Lm(o);return{x:()=>Ue(r,s)}}};var PM={kernelName:ys,gradFunc:(r,e,t)=>{let n=t,{axis:o}=n;return{value:()=>Vt(r,o)}}};var MM={kernelName:da,inputsToSave:["segmentIds"],gradFunc:(r,e)=>{let[t]=e;return{x:()=>zZ(r,t)}}};function zZ(r,e){let t=Yr(e,Ce(e)),n=zo(r,t),o=an(e,ue(0,"int32")),s=n.rank-o.rank;for(let i=0;i({x:()=>Ce(r)})};var BZ=[sx,WO,UO,qO,HO,KO,XO,YO,ZO,JO,QO,eP,rP,oP,sP,iP,aP,lP,uP,cP,pP,mP,dP,fP,gP,xP,yP,bP,wP,_P,aM,kP,vP,CP,IP,NP,TP,SP,AP,$P,RP,FP,OP,PP,MP,LP,zP,BP,VP,jP,h0,h0,WP,qP,KP,XP,YP,ZP,JP,QP,eM,tM,rM,nM,oM,g0,g0,sM,iM,lM,uM,cM,pM,mM,fM,dM,hM,gM,xM,yM,bM,wM,_M,kM,vM,CM,IM,x0,x0,y0,y0,NM,TM,SM,AM,EM,DM,$M,RM,FM,OM,PM,MM,LM];for(let r of BZ)Pb(r);var v0={};Ke(v0,{maxNorm:()=>GZ,minMaxNorm:()=>UZ,nonNeg:()=>WZ,unitNorm:()=>jZ});var b0;function Jt(){return b0==null&&(b0=fw().epsilon()),b0}function Zr(){return"channelsLast"}var Sn=class extends Error{constructor(e){super(e);Object.setPrototypeOf(this,Sn.prototype)}},Lr=class extends Error{constructor(e){super(e);Object.setPrototypeOf(this,Lr.prototype)}},z=class extends Error{constructor(e){super(e);Object.setPrototypeOf(this,z.prototype)}},Se=class extends Error{constructor(e){super(e);Object.setPrototypeOf(this,Se.prototype)}},Rf=class extends Error{constructor(e){super(e);Object.setPrototypeOf(this,Rf.prototype)}};function Zo(r,e){if(Array.isArray(r)){let t=[];for(let n=0;nt.toUpperCase())}var Qo={};function Ip(r){if(r==null)return null;let e={};return e.className=r.getClassName(),e.config=r.getConfig(),e}function _0(r){if(!(r==null||typeof r!="object"))if(Array.isArray(r))r.forEach(e=>_0(e));else{let e=Object.keys(r);for(let t of e){let n=r[t];n!=null&&typeof n=="object"&&(!Array.isArray(n)&&n.type==="ndarray"&&typeof n.value=="number"?r[t]=n.value:_0(n))}}}function Gi(r,e={},t={},n="object",o=!1){if(typeof r=="string"){let s=r,a;if(s in t)a=t[s];else if(s in Qo)a=Qo[s];else if(a=e[s],a==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 a}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 a=s.className,i,l;if(a in t?[i,l]=t[a]:a in Qo?[i,l]=Qo.className:a in e&&([i,l]=e[a]),i==null)throw new z(`Unknown ${n}: ${a}. 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(l!=null){let u={};for(let f of Object.keys(Qo))u[f]=Qo[f];for(let f of Object.keys(t))u[f]=t[f];let c=s.config;c.customObjects=u;let p=Object.assign({},Qo);for(let f of Object.keys(t))Qo[f]=t[f];_0(s.config);let m=l(i,s.config,t,o);return Qo=Object.assign({},p),m}else{let u=Object.assign({},Qo);for(let p of Object.keys(t))Qo[p]=t[p];let c=new i(s.config);return Qo=Object.assign({},u),c}}}function VZ(r,e){return re?1:0}function Ff(r,e){return-1*VZ(r,e)}function es(r){if(r==null)return r;let e=[];for(let t of r)e.indexOf(t)===-1&&e.push(t);return e}function zM(r){if(r==null)throw new z(`Invalid value in obj: ${JSON.stringify(r)}`);for(let e in r)if(r.hasOwnProperty(e))return!1;return!0}function ji(r,e,t){if(t!=null&&r.indexOf(t)<0)throw new z(`${t} is not a valid ${e}. Valid values are ${r} or null/undefined.`)}function ax(r,e,t=0,n=Infinity){return Gn(t>=0),Gn(n>=t),Array.isArray(r)&&r.length>=t&&r.length<=n&&r.every(o=>typeof o===e)}function qt(r,e){Array.isArray(r)?(y.assert(r.length>0,()=>`${e} is unexpectedly an empty array.`),r.forEach((t,n)=>qt(t,`element ${n+1} of ${e}`))):y.assert(Number.isInteger(r)&&r>0,()=>`Expected ${e} to be a positive integer, but got ${BM(r)}.`)}function BM(r){return r===null?"null":Array.isArray(r)?"["+r.map(e=>BM(e)).join(",")+"]":typeof r=="string"?`"${r}"`:`${r}`}function VM(r,e){let t=y.now(),n;return(...s)=>{let a=y.now();return a-txt(ge(P(r,r),e,!0)))}var Np=class extends J.Serializable{getConfig(){return{}}},Of=class extends Np{constructor(e){super();this.defaultMaxValue=2,this.defaultAxis=0,this.maxValue=e.maxValue!=null?e.maxValue:this.defaultMaxValue,this.axis=e.axis!=null?e.axis:this.defaultAxis}apply(e){return V(()=>{let t=k0(e,this.axis),n=ir(t,0,this.maxValue);return P(e,me(n,Q(Jt(),t)))})}getConfig(){return{maxValue:this.maxValue,axis:this.axis}}};Of.className="MaxNorm";J.registerClass(Of);var Pf=class extends Np{constructor(e){super();this.defaultAxis=0,this.axis=e.axis!=null?e.axis:this.defaultAxis}apply(e){return V(()=>me(e,Q(Jt(),k0(e,this.axis))))}getConfig(){return{axis:this.axis}}};Pf.className="UnitNorm";J.registerClass(Pf);var Mf=class extends Np{apply(e){return Sr(e)}};Mf.className="NonNeg";J.registerClass(Mf);var Lf=class extends Np{constructor(e){super();this.defaultMinValue=0,this.defaultMaxValue=1,this.defaultRate=1,this.defaultAxis=0,this.minValue=e.minValue!=null?e.minValue:this.defaultMinValue,this.maxValue=e.maxValue!=null?e.maxValue:this.defaultMaxValue,this.rate=e.rate!=null?e.rate:this.defaultRate,this.axis=e.axis!=null?e.axis:this.defaultAxis}apply(e){return V(()=>{let t=k0(e,this.axis),n=Q(P(this.rate,ir(t,this.minValue,this.maxValue)),P(1-this.rate,t));return P(e,me(n,Q(Jt(),t)))})}getConfig(){return{minValue:this.minValue,maxValue:this.maxValue,rate:this.rate,axis:this.axis}}};Lf.className="MinMaxNorm";J.registerClass(Lf);var GM={maxNorm:"MaxNorm",minMaxNorm:"MinMaxNorm",nonNeg:"NonNeg",unitNorm:"UnitNorm"};function Ot(r){return Ip(r)}function jM(r,e={}){return Gi(r,J.SerializationMap.getMap().classNameMap,e,"constraint")}function Pt(r){if(r==null)return null;if(typeof r=="string"){let t={className:r in GM?GM[r]:r,config:{}};return jM(t)}else return r instanceof Np?r:jM(r)}function GZ(r){return new Of(r)}function jZ(r){return new Pf(r)}function WZ(){return new Mf}function UZ(r){return new Lf(r)}var T0={};Ke(T0,{constant:()=>QZ,glorotNormal:()=>iJ,glorotUniform:()=>sJ,heNormal:()=>aJ,heUniform:()=>lJ,identity:()=>nJ,leCunNormal:()=>uJ,leCunUniform:()=>cJ,ones:()=>JZ,orthogonal:()=>pJ,randomNormal:()=>tJ,randomUniform:()=>eJ,truncatedNormal:()=>rJ,varianceScaling:()=>oJ,zeros:()=>ZZ});var WM=["channelsFirst","channelsLast"],UM=["nearest","bilinear"],qM=["valid","same","causal"],HM=["max","avg"],KM=["sum","mul","concat","ave"];var Sp=new Map;function Rt(r){ji(WM,"DataFormat",r)}function XM(r){ji(UM,"InterpolationFormat",r)}function Jr(r){ji(qM,"PaddingMode",r)}function C0(r){ji(HM,"PoolMode",r)}var zf=[],YM="/";function Ps(r,e){zf.push(r);try{let t=e();return zf.pop(),t}catch(t){throw zf.pop(),t}}function qZ(){return zf.length===0?"":zf.join(YM)+YM}function ux(r){if(!ZM(r))throw new Error("Not a valid tensor name: '"+r+"'");return qZ()+r}function cx(r){if(!ZM(r))throw new Error("Not a valid tensor name: '"+r+"'");Sp.has(r)||Sp.set(r,0);let e=Sp.get(r);if(Sp.set(r,Sp.get(r)+1),e>0){let t=`${r}_${e}`;return Sp.set(t,1),t}else return r}var HZ=new RegExp(/^[A-Za-z0-9][-A-Za-z0-9\._\/]*$/);function ZM(r){return!!r.match(HZ)}function JM(r){return r===parseInt(r.toString(),10)}function ts(r,e,t){e==null&&(e=0),t==null&&(t=r.length);let n=1;for(let o=e;o{if(r.shape.length!==2)throw new z(`repeat() expects a rank-2 tensor, but received a rank-${r.shape.length} tensor.`);let t=Va(r,1);return px(t,[1,e,1])})}function tL(r){let e=[ts(r.shape)];return r.reshape(e)}function rL(r){if(r.rank<=1)throw new z(`batchFlatten requires a minimum rank of 2. Got rank: ${r.rank}.`);let e=[r.shape[0],ts(r.shape,1)];return r.reshape(e)}function Ga(r,e,t){return V(()=>{switch(r.rank){case 1:return Hm(r,e,t);case 2:return ug(r,[e,0],[t,r.shape[1]]);case 3:return Km(r,[e,0,0],[t,r.shape[1],r.shape[2]]);case 4:return Qc(r,[e,0,0,0],[t,r.shape[1],r.shape[2],r.shape[3]]);case 5:return Re(r,[e,0,0,0,0],[t,r.shape[1],r.shape[2],r.shape[3],r.shape[4]]);case 6:return Re(r,[e,0,0,0,0,0],[t,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 I0(r,e,t){return V(()=>{switch(r.rank){case 1:return Hm(r,e,t);case 2:return ug(r,[0,e],[r.shape[0],t]);case 3:return Km(r,[0,0,e],[r.shape[0],r.shape[1],t]);case 4:return Qc(r,[0,0,0,e],[r.shape[0],r.shape[1],r.shape[2],t]);default:throw new z(`sliceAlongLastAxis() received an unsupported tensor rank: ${r.rank}`)}})}function Bf(r,e,t,n){return V(()=>{switch(r.rank){case 1:return Hm(r,e,t);case 2:switch(n){case 1:return Ga(r,e,t);case 2:return I0(r,e,t);default:throw new z(`The axis is not within the rank of the tensor ${n}`)}case 3:switch(n){case 1:return Ga(r,e,t);case 2:return Km(r,[0,e,0],[r.shape[0],t,r.shape[2]]);case 3:return I0(r,e,t);default:throw new z(`The axis is not within the rank of the tensor ${n}`)}case 4:switch(n){case 1:return Ga(r,e,t);case 2:return Qc(r,[0,e,0,0],[r.shape[0],t,r.shape[2],r.shape[3]]);case 3:return Qc(r,[0,0,e,0],[r.shape[0],r.shape[1],t,r.shape[3]]);case 4:return I0(r,e,t);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 Tp(r,e=-1){let t;return e<0&&(t=r[0].rank,t!==0?e=t:e=0),e===r[0].rank&&(e=-1),Ze(r,e)}function N0(r,e){switch(r.rank){case 1:return kw([r,e]);case 2:return vw([r,e],0);case 3:return Cw([r,e],0);case 4:return Iw([r,e],0);default:throw new z(`concatAlongFirstAxis() received an unsupported tensor rank: ${r.rank}`)}}function px(r,e){if(Array.isArray(e)||(e=[e]),r.rank!==e.length)throw new z(`The length of input n (${e.length}) does not match the number of dimensions in input x (${r.rank})`);return zn(r,e)}function Ap(r,e=0,t=1,n,o){return lg(r,e,t,n,o)}function rs(r,e,t,n){if(r.rank<2||e.rank<2)throw new Se(`dot requires both inputs to be rank >= 2 but got x shape = ${r.shape} and y shape = ${e.shape}`);if(e.rank>=3){let o=r.shape.slice(-1)[0],s=e.shape.slice(-2)[0];if(o!==s)throw new Se(`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 = ${e.shape}`)}if(r.rank===2&&e.rank===2){let o=!1,s=!1;return Go.matMul({a:r,b:e,transposeA:o,transposeB:s,bias:n?S0(r.rank,n,Zr()):null,activation:t})}else{let o=r.shape.slice(),s=o.pop();r=r.reshape([-1,s]);let a=e.shape.slice(),i=a.pop(),l=a.pop(),u=[...a,i],c=Array.from({length:e.rank},(d,h)=>h===0?e.rank-2:h<=e.rank-2?h-1:h);e=e.transpose(c).reshape([l,-1]);let p=[...o,...u],m=!1,f=!1;return Go.matMul({a:r,b:e,transposeA:m,transposeB:f,bias:n?S0(r.rank,n,Zr()):null,activation:t}).reshape(p)}}function mx(r,e,t){return V(()=>(Array.isArray(e)?e=Gt(e,"int32"):e=e.toInt(),zo(r,e,t)))}function sc(r){return P(r,r)}function S0(r,e,t){let n=e.shape;if(e.rank!==1&&e.rank!==r)throw new z(`Unexpected bias dimensions: ${e.rank}; expected it to be 1 or ${r}`);if(r===5){if(t==="channelsFirst")return n.length===1?e.reshape([1,n[0],1,1,1]):e.reshape([1,n[3],n[0],n[1],n[2]]);if(t==="channelsLast")return n.length===1?e.reshape([1,1,1,1,n[0]]):e.reshape([1].concat(n))}else if(r===4){if(t==="channelsFirst")return n.length===1?e.reshape([1,n[0],1,1]):e.reshape([1,n[2],n[0],n[1]]);if(t==="channelsLast")return n.length===1?e.reshape([1,1,1,n[0]]):e.reshape([1].concat(n))}else if(r===3){if(t==="channelsFirst")return n.length===1?e.reshape([1,n[0],1]):e.reshape([1,n[1],n[0]]);if(t==="channelsLast")return n.length===1?e.reshape([1,1,n[0]]):e.reshape([1].concat(n))}else if(r<3)return e;throw new z(`Unsupported input rank by biasAdd: ${e.rank}`)}function cn(r,e,t){return V(()=>(t==null&&(t=Zr()),Rt(t),r.add(S0(r.rank,e,t))))}function nL(r,e=1){if(e!==1)throw new Se(`Support for alpha values other than 1 (${e}) is not implemented yet.`);return Is(r)}function oL(r){return V(()=>me(r,Nt(r).add(1)))}function fx(r,e,t,n){return V(()=>Qw(r,e,t,n))}function sL(r){return V(()=>{let e=Q(.5,P(.2,r));return ir(e,0,1)})}function bl(r,e,t=!1){return t?r():e()}var iL=["fanIn","fanOut","fanAvg"],aL=["normal","uniform","truncatedNormal"];function KZ(r){ji(iL,"FanMode",r)}function XZ(r){ji(aL,"Distribution",r)}var pn=class extends J.Serializable{fromConfigUsesCustomObjects(){return!1}getConfig(){return{}}},Vf=class extends pn{apply(e,t){return gt(e,t)}};Vf.className="Zeros";J.registerClass(Vf);var ic=class extends pn{apply(e,t){return Nr(e,t)}};ic.className="Ones";J.registerClass(ic);var Gf=class extends pn{constructor(e){super();if(typeof e!="object")throw new z(`Expected argument of type ConstantConfig but got ${e}`);if(e.value===void 0)throw new z(`config must have value set but got ${e}`);this.value=e.value}apply(e,t){return V(()=>P(ue(this.value),Nr(e,t)))}getConfig(){return{value:this.value}}};Gf.className="Constant";J.registerClass(Gf);var jf=class extends pn{constructor(e){super();this.DEFAULT_MINVAL=-.05,this.DEFAULT_MAXVAL=.05,this.minval=e.minval||this.DEFAULT_MINVAL,this.maxval=e.maxval||this.DEFAULT_MAXVAL,this.seed=e.seed}apply(e,t){return As(e,this.minval,this.maxval,t)}getConfig(){return{minval:this.minval,maxval:this.maxval,seed:this.seed}}};jf.className="RandomUniform";J.registerClass(jf);var Wf=class extends pn{constructor(e){super();this.DEFAULT_MEAN=0,this.DEFAULT_STDDEV=.05,this.mean=e.mean||this.DEFAULT_MEAN,this.stddev=e.stddev||this.DEFAULT_STDDEV,this.seed=e.seed}apply(e,t){if(t=t||"float32",t!=="float32"&&t!=="int32")throw new Se(`randomNormal does not support dType ${t}.`);return Ap(e,this.mean,this.stddev,t,this.seed)}getConfig(){return{mean:this.mean,stddev:this.stddev,seed:this.seed}}};Wf.className="RandomNormal";J.registerClass(Wf);var Uf=class extends pn{constructor(e){super();this.DEFAULT_MEAN=0,this.DEFAULT_STDDEV=.05,this.mean=e.mean||this.DEFAULT_MEAN,this.stddev=e.stddev||this.DEFAULT_STDDEV,this.seed=e.seed}apply(e,t){if(t=t||"float32",t!=="float32"&&t!=="int32")throw new Se(`truncatedNormal does not support dType ${t}.`);return Lu(e,this.mean,this.stddev,t,this.seed)}getConfig(){return{mean:this.mean,stddev:this.stddev,seed:this.seed}}};Uf.className="TruncatedNormal";J.registerClass(Uf);var qf=class extends pn{constructor(e){super();this.gain=e.gain!=null?e.gain:1}apply(e,t){return V(()=>{if(e.length!==2||e[0]!==e[1])throw new z("Identity matrix initializer can only be used for 2D square matrices.");return P(this.gain,Xc(e[0]))})}getConfig(){return{gain:this.gain}}};qf.className="Identity";J.registerClass(qf);function YZ(r,e="channelsLast"){let t,n;if(Rt(e),r.length===2)t=r[0],n=r[1];else if([3,4,5].indexOf(r.length)!==-1){if(e==="channelsFirst"){let o=ts(r,2);t=r[1]*o,n=r[0]*o}else if(e==="channelsLast"){let o=ts(r,0,r.length-2);t=r[r.length-2]*o,n=r[r.length-1]*o}}else{let o=ts(r);t=Math.sqrt(o),n=Math.sqrt(o)}return[t,n]}var Br=class extends pn{constructor(e){super();if(e.scale<0)throw new z(`scale must be a positive float. Got: ${e.scale}`);this.scale=e.scale==null?1:e.scale,this.mode=e.mode==null?"fanIn":e.mode,KZ(this.mode),this.distribution=e.distribution==null?"normal":e.distribution,XZ(this.distribution),this.seed=e.seed}apply(e,t){let n=YZ(e),o=n[0],s=n[1],a=this.scale;if(this.mode==="fanIn"?a/=Math.max(1,o):this.mode==="fanOut"?a/=Math.max(1,s):a/=Math.max(1,(o+s)/2),this.distribution==="normal"){let i=Math.sqrt(a);if(t=t||"float32",t!=="float32"&&t!=="int32")throw new Se(`${this.getClassName()} does not support dType ${t}.`);return Lu(e,0,i,t,this.seed)}else{let i=Math.sqrt(3*a);return As(e,-i,i,t)}}getConfig(){return{scale:this.scale,mode:this.mode,distribution:this.distribution,seed:this.seed}}};Br.className="VarianceScaling";J.registerClass(Br);var Ep=class extends Br{constructor(e){super({scale:1,mode:"fanAvg",distribution:"uniform",seed:e==null?null:e.seed})}getClassName(){return Br.className}};Ep.className="GlorotUniform";J.registerClass(Ep);var Dp=class extends Br{constructor(e){super({scale:1,mode:"fanAvg",distribution:"normal",seed:e==null?null:e.seed})}getClassName(){return Br.className}};Dp.className="GlorotNormal";J.registerClass(Dp);var $p=class extends Br{constructor(e){super({scale:2,mode:"fanIn",distribution:"normal",seed:e==null?null:e.seed})}getClassName(){return Br.className}};$p.className="HeNormal";J.registerClass($p);var Rp=class extends Br{constructor(e){super({scale:2,mode:"fanIn",distribution:"uniform",seed:e==null?null:e.seed})}getClassName(){return Br.className}};Rp.className="HeUniform";J.registerClass(Rp);var Fp=class extends Br{constructor(e){super({scale:1,mode:"fanIn",distribution:"normal",seed:e==null?null:e.seed})}getClassName(){return Br.className}};Fp.className="LeCunNormal";J.registerClass(Fp);var Op=class extends Br{constructor(e){super({scale:1,mode:"fanIn",distribution:"uniform",seed:e==null?null:e.seed})}getClassName(){return Br.className}};Op.className="LeCunNormal";J.registerClass(Op);var Hf=class extends pn{constructor(e){super();if(this.DEFAULT_GAIN=1,this.gain=e.gain==null?this.DEFAULT_GAIN:e.gain,this.seed=e.seed,this.seed!=null)throw new Se("Random seed is not implemented for Orthogonal Initializer yet.")}apply(e,t){return V(()=>{if(e.length<2)throw new Se("Shape must be at least 2D.");e[0]*e[1]>2e3&&console.warn(`Orthogonal initializer is being called on a matrix with more than 2000 (${e[0]*e[1]}) elements: Slowness may result.`);let n=e[0]>e[1]?[e[1],e[0]]:e,o=Ap(n,0,1,"float32"),s=s_.gramSchmidt(o);return e[0]>e[1]&&(s=s.transpose()),P(this.gain,s)})}getConfig(){return{gain:this.gain,seed:this.seed}}};Hf.className="Orthogonal";J.registerClass(Hf);var lL={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 uL(r,e={}){return Gi(r,J.SerializationMap.getMap().classNameMap,e,"initializer")}function vt(r){return Ip(r)}function pt(r){if(typeof r=="string"){let e=r in lL?lL[r]:r;if(e==="GlorotNormal")return new Dp;if(e==="GlorotUniform")return new Ep;if(e==="HeNormal")return new $p;if(e==="HeUniform")return new Rp;if(e==="LeCunNormal")return new Fp;if(e==="LeCunUniform")return new Op;{let t={};return t.className=e,t.config={},uL(t)}}else return r instanceof pn?r:uL(r)}function ZZ(){return new Vf}function JZ(){return new ic}function QZ(r){return new Gf(r)}function eJ(r){return new jf(r)}function tJ(r){return new Wf(r)}function rJ(r){return new Uf(r)}function nJ(r){return new qf(r)}function oJ(r){return new Br(r)}function sJ(r){return new Ep(r)}function iJ(r){return new Dp(r)}function aJ(r){return new $p(r)}function lJ(r){return new Rp(r)}function uJ(r){return new Fp(r)}function cJ(r){return new Op(r)}function pJ(r){return new Hf(r)}var cC={};Ke(cC,{Layer:()=>Pe,RNN:()=>hn,RNNCell:()=>Sl,activation:()=>AQ,add:()=>LQ,alphaDropout:()=>_ee,average:()=>zQ,averagePooling1d:()=>pC,averagePooling2d:()=>mC,averagePooling3d:()=>fC,avgPool1d:()=>KQ,avgPool2d:()=>YQ,avgPool3d:()=>JQ,avgPooling1d:()=>XQ,avgPooling2d:()=>ZQ,avgPooling3d:()=>QQ,batchNormalization:()=>UQ,bidirectional:()=>fee,concatenate:()=>BQ,conv1d:()=>_Q,conv2d:()=>kQ,conv2dTranspose:()=>vQ,conv3d:()=>CQ,convLstm2d:()=>uee,convLstm2dCell:()=>cee,cropping2D:()=>NQ,dense:()=>EQ,depthwiseConv2d:()=>TQ,dot:()=>WQ,dropout:()=>DQ,elu:()=>hQ,embedding:()=>MQ,flatten:()=>RQ,gaussianDropout:()=>wee,gaussianNoise:()=>bee,globalAveragePooling1d:()=>eee,globalAveragePooling2d:()=>tee,globalMaxPool1d:()=>hee,globalMaxPool2d:()=>gee,globalMaxPooling1d:()=>WL,globalMaxPooling2d:()=>UL,gru:()=>nee,gruCell:()=>oee,input:()=>Ox,inputLayer:()=>dQ,layerNormalization:()=>qQ,leakyReLU:()=>xQ,lstm:()=>see,lstmCell:()=>iee,masking:()=>kee,maxPool1d:()=>xee,maxPool2d:()=>yee,maxPooling1d:()=>qL,maxPooling2d:()=>HL,maxPooling3d:()=>ree,maximum:()=>VQ,minimum:()=>GQ,multiply:()=>jQ,permute:()=>PQ,prelu:()=>yQ,reLU:()=>gQ,repeatVector:()=>FQ,reshape:()=>OQ,rnn:()=>pee,separableConv2d:()=>IQ,simpleRNN:()=>aee,simpleRNNCell:()=>lee,softmax:()=>bQ,spatialDropout1d:()=>$Q,stackedRNNCells:()=>mee,thresholdedReLU:()=>wQ,timeDistributed:()=>dee,upSampling2d:()=>SQ,zeroPadding2d:()=>HQ});var mJ=0;function dx(){return mJ++}var hx={};function wl(r=""){return r in hx||(hx[r]=0),hx[r]+=1,r+hx[r].toString()}function gx(r){return Array.isArray(r)&&Array.isArray(r[0])}function Pp(r){return r.length===0?[]:Array.isArray(r[0])?r:[r]}function Fe(r){let e;if(Array.isArray(r)){if(r.length!==1)throw new z(`Expected Tensor length to be 1; got ${r.length}`);e=r[0]}else e=r;return e}function Je(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 Mp(r){let e=0;for(let t of r)t.shape.length===0?e+=1:e+=t.shape.reduce((n,o)=>n*o);return e}var cL="Variable",Kf=class{constructor(e,t="float32",n=cL,o=!0,s=null){this.dtype=t==null?"float32":t,this.shape=e.shape,this.id=dx(),n=n==null?cL:n,this.originalName=ux(n),this.name=cx(this.originalName),this.trainable_=o,this.constraint=s,this.val=Xw(e,this.trainable_,this.name,this.dtype)}read(){return this.assertNotDisposed(),this.val}write(e){return this.assertNotDisposed(),fJ(this.val,e),this.val.id!==e.id&&(this.val.assign(e),this.constraint!=null&&this.val.assign(this.constraint.apply(this.val))),this}dispose(){this.assertNotDisposed(),this.val.dispose()}assertNotDisposed(){if(this.val.isDisposed)throw new Error(`LayersVariable ${this.name} is already disposed.`)}get trainable(){return this.trainable_}set trainable(e){this.trainable_=e,this.val.trainable=e}};function fJ(r,e){if(r.shape.toString()!==e.shape.toString())throw new Error("Shape mismatch: "+JSON.stringify(r.shape)+" vs. "+JSON.stringify(e.shape))}function Xf(r){return r.map(e=>e.read())}function Lp(r){r.forEach(e=>{e[0].write(e[1])})}var Tt=class{constructor(e){this.dtype=e.dtype,this.shape=e.shape,e.shape!=null?this.ndim=e.shape.length:this.ndim=e.ndim,this.maxNDim=e.maxNDim,this.minNDim=e.minNDim,this.axes=e.axes||{}}},Vr=class{constructor(e,t,n,o,s,a,i){this.dtype=e,this.shape=t,this.sourceLayer=n,this.inputs=o,this.callArgs=s,this.outputTensorIndex=i,this.id=dx(),a!=null&&(this.originalName=ux(a),this.name=cx(this.originalName)),this.rank=t.length}},dJ=0,_l=class{constructor(e,t){this.callArgs=t,this.id=dJ++,this.outboundLayer=e.outboundLayer,this.inboundLayers=e.inboundLayers,this.nodeIndices=e.nodeIndices,this.tensorIndices=e.tensorIndices,this.inputTensors=e.inputTensors,this.outputTensors=e.outputTensors,this.inputMasks=e.inputMasks,this.outputMasks=e.outputMasks,this.inputShapes=e.inputShapes,this.outputShapes=e.outputShapes;for(let n of e.inboundLayers)n!=null&&n.outboundNodes.push(this);e.outboundLayer.inboundNodes.push(this)}getConfig(){let e=[];for(let t of this.inboundLayers)t!=null?e.push(t.name):e.push(null);return{outboundLayer:this.outboundLayer?this.outboundLayer.name:null,inboundLayers:e,nodeIndices:this.nodeIndices,tensorIndices:this.tensorIndices}}},hJ=0,Pe=class extends J.Serializable{constructor(e={}){super();this._callHook=null,this._addedWeightNames=[],this._stateful=!1,this.id=hJ++,this.activityRegularizer=null,this.inputSpec=null,this.supportsMasking=!1,this._trainableWeights=[],this._nonTrainableWeights=[],this._losses=[],this._updates=[],this._built=!1,this.inboundNodes=[],this.outboundNodes=[];let t=e.name;if(!t){let n=this.getClassName();t=Jo(n)+"_"+wl(n)}if(this.name=t,this.trainable_=e.trainable==null?!0:e.trainable,e.inputShape!=null||e.batchInputShape!=null){let n;if(e.batchInputShape!=null)n=e.batchInputShape;else if(e.inputShape!=null){let s=null;e.batchSize!=null&&(s=e.batchSize),n=[s].concat(e.inputShape)}this.batchInputShape=n;let o=e.dtype;o==null&&(o=e.inputDType),o==null&&(o="float32"),this.dtype=o}e.weights!=null?this.initialWeights=e.weights:this.initialWeights=null,this._refCount=null,this.fastWeightInitDuringBuild=!1}static nodeKey(e,t){return e.name+"_ib-"+t.toString()}getNodeAtIndex(e,t){if(this.inboundNodes.length===0)throw new Lr(`The layer has never been called and thus has no defined ${t}.`);if(this.inboundNodes.length<=e)throw new z(`Asked to get ${t} at node ${e}, but the layer has only ${this.inboundNodes.length} inbound nodes.`);return this.inboundNodes[e]}getInputAt(e){return xr(this.getNodeAtIndex(e,"input").inputTensors)}getOutputAt(e){return xr(this.getNodeAtIndex(e,"output").outputTensors)}get input(){if(this.inboundNodes.length>1)throw new Sn(`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 Sn(`Layer ${this.name} is not connected, no input to return.`);return xr(this.getNodeAtIndex(0,"input").inputTensors)}get output(){if(this.inboundNodes.length===0)throw new Sn(`Layer ${this.name} has no inbound nodes.`);if(this.inboundNodes.length>1)throw new Sn(`Layer ${this.name} has multiple inbound nodes, hence the notion of "layer output" is ill-defined. Use \`getOutputAt(nodeIndex)\` instead.`);return xr(this.getNodeAtIndex(0,"output").outputTensors)}get losses(){return this._losses}calculateLosses(){return this.losses.map(e=>e())}get updates(){return this._updates}get built(){return this._built}set built(e){this._built=e}get trainable(){return this.trainable_}set trainable(e){this._trainableWeights.forEach(t=>t.trainable=e),this.trainable_=e}get trainableWeights(){return this.trainable_?this._trainableWeights.filter(e=>e.trainable):[]}set trainableWeights(e){this._trainableWeights=e}get nonTrainableWeights(){return this.trainable?this._trainableWeights.filter(e=>!e.trainable).concat(this._nonTrainableWeights):this._trainableWeights.concat(this._nonTrainableWeights)}set nonTrainableWeights(e){this._nonTrainableWeights=e}get weights(){return this.trainableWeights.concat(this.nonTrainableWeights)}get stateful(){return this._stateful}resetStates(){if(!this.stateful)throw new Error("Cannot call the resetStates() method of a non-stateful Layer object.")}assertInputCompatibility(e){if(e=bt(e),this.inputSpec==null||this.inputSpec.length===0)return;let t=bt(this.inputSpec);if(e.length!==t.length)throw new z(`Layer ${this.name} expects ${t.length} inputs, but it received ${e.length} input tensors. Input received: ${e}`);for(let n=0;ns.maxNDim)throw new z(`Input ${n} is incompatible with layer ${this.name}: expected max_ndim=${s.maxNDim}, found ndim=${a}`);if(s.minNDim!=null&&a=0?i[u]:i[i.length+u];if(c!=null&&[c,null].indexOf(p)===-1)throw new z(`Input ${n} is incompatible with layer ${this.name}: expected axis ${u} of input shape to have value ${c} but got shape ${i}.`)}}if(s.shape!=null)for(let i=0;i{if(!this.built){this.assertInputCompatibility(e);let a=[];for(let i of bt(e))a.push(i.shape);this.build(xr(a)),this.built=!0,this.initialWeights&&this.setWeights(this.initialWeights),this._refCount===null&&s&&(this._refCount=1)}if(this.assertInputCompatibility(e),s){let a=this.call(e,t),i=bt(a),l=[];for(let u of i)n.indexOf(u)!==-1&&(u=u.clone()),l.push(u);if(a=xr(l),this.activityRegularizer!=null)throw new Se("Layer invocation in the presence of activity regularizer(s) is not supported yet.");return a}else{let a=gJ(e),i=this.computeOutputShape(a),l,u=xJ(e);if(this.warnOnIncompatibleInputShape(Array.isArray(e)?a[0]:a),i!=null&&i.length>0&&Array.isArray(i[0])?l=i.map((c,p)=>new Vr(u,c,this,bt(e),t,this.name,p)):l=new Vr(u,i,this,bt(e),t,this.name),this.addInboundNode(e,l,null,null,a,i,t),this._refCount++,this.activityRegularizer!=null)throw new Se("Layer invocation in the presence of activity regularizer(s) is not supported yet.");return l}})}warnOnIncompatibleInputShape(e){if(this.batchInputShape!=null)if(e.length!==this.batchInputShape.length)console.warn(`The rank of the input tensor provided (shape: ${JSON.stringify(e)}) does not match that of the batchInputShape (${JSON.stringify(this.batchInputShape)}) of the layer ${this.name}`);else{let t=!1;this.batchInputShape.forEach((n,o)=>{n!=null&&e[o]!=null&&e[o]!==n&&(t=!0)}),t&&console.warn(`The shape of the input tensor (${JSON.stringify(e)}) does not match the expectation of layer ${this.name}: ${JSON.stringify(this.batchInputShape)}`)}}get outputShape(){if(this.inboundNodes==null||this.inboundNodes.length===0)throw new Sn(`The layer ${this.name} has never been called and thus has no defined output shape.`);let e=[];for(let t of this.inboundNodes){let n=JSON.stringify(t.outputShapes);e.indexOf(n)===-1&&e.push(n)}if(e.length===1){let t=this.inboundNodes[0].outputShapes;return Array.isArray(t)&&Array.isArray(t[0])&&t.length===1?t[0]:t}else throw new Sn(`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 Lr(`You tried to call countParams() on ${this.name}, but the layer is not built yet. Build it first by calling build(batchInputShape).`);return Mp(this.weights)}build(e){this.built=!0}getWeights(e=!1){return Xf(e?this.trainableWeights:this.weights)}setWeights(e){V(()=>{let t=this.weights;if(t.length!==e.length)throw new z(`You called setWeights(weights) on layer "${this.name}" with a weight list of length ${e.length}, but the layer was expecting ${t.length} weights. Provided weights: ${e}...`);if(t.length===0)return;let n=[],o=Xf(t);for(let s=0;ss.apply(u.read())),a==null&&(a=!0),a?this._trainableWeights.push(u):this._nonTrainableWeights.push(u),u}setFastWeightInitDuringBuild(e){this.fastWeightInitDuringBuild=e}addLoss(e){e==null||Array.isArray(e)&&e.length===0||(e=bt(e),this._losses!==void 0&&this._losses!==null&&this.losses.push(...e))}computeOutputShape(e){return e}computeMask(e,t){if(!this.supportsMasking){if(t!=null)if(Array.isArray(t))t.forEach(n=>{if(n!=null)throw new TypeError(`Layer ${this.name} does not support masking, but was passed an inputMask.`)});else throw new TypeError(`Layer ${this.name} does not support masking, but was passed an inputMask.`);return null}return t}addInboundNode(e,t,n,o,s,a,i=null){let l=bt(e);t=bt(t),n=bt(n),o=bt(o),s=Pp(s),a=Pp(a);let u=[],c=[],p=[];for(let m of l)u.push(m.sourceLayer),c.push(m.nodeIndex),p.push(m.tensorIndex);new _l({outboundLayer:this,inboundLayers:u,nodeIndices:c,tensorIndices:p,inputTensors:l,outputTensors:t,inputMasks:n,outputMasks:o,inputShapes:s,outputShapes:a},i);for(let m=0;me.dispose()),this.weights.length}assertNotDisposed(){if(this._refCount===0)throw new Error(`Layer '${this.name}' is already disposed.`)}dispose(){if(!this.built)throw new Error(`Cannot dispose Layer ${this.name} because it has not been built yet.`);if(this._refCount===null)throw new Error(`Cannot dispose Layer ${this.name} because it has not been used yet.`);this.assertNotDisposed();let e=0;return--this._refCount==0&&(e=this.disposeWeights()),{refCountAfterDispose:this._refCount,numDisposedVariables:e}}};function gJ(r){r=bt(r);let e=[];for(let t of r)e.push(t.shape);return xr(e)}function xJ(r){return"float32"}function A0(r,e,t){if((e==null||t!=null&&t>0)&&(e=r.sourceLayer,t=r.nodeIndex),e.inboundNodes.length===0)return[r];{let n=e.inboundNodes[t];if(n.inboundLayers.length===0)return n.inputTensors;{let o=[];for(let s=0;s0){let o=await Promise.all(e);for(let s=0;sQ(this.totals[o],P(s,n)));this.totals[o]=i,a!=null&&a.dispose()}}}async onEpochEnd(e,t){if(t!=null)for(let n of this.params.metrics)this.totals[n]!=null&&(typeof this.totals[n]=="number"?t[n]=this.totals[n]/this.seen:V(()=>{let o=P(me(1,this.seen),this.totals[n]);t[n]=o,this.totals[n].dispose(),Dt(t[n])}))}},wx=class extends kl{async onTrainBegin(e){this.epoch=[],this.history={}}async onEpochEnd(e,t){t==null&&(t={}),this.epoch.push(e);for(let n in t)this.history[n]==null&&(this.history[n]=[]),this.history[n].push(t[n])}async syncData(){let e=[],t=[],n=[];for(let s in this.history){let a=this.history[s];for(let i=0;inew _x(n,e))}var mn=class{constructor(){}static registerCallbackConstructor(e,t){y.assert(e>=0&&Number.isInteger(e),()=>`Verbosity level is expected to be an integer >= 0, but got ${e}`),mn.checkForDuplicate(t),mn.constructors[e]==null&&(mn.constructors[e]=[]),mn.constructors[e].push(t)}static checkForDuplicate(e){for(let t in mn.constructors)mn.constructors[+t].forEach(o=>{if(o===e)throw new z("Duplicate callback constructor.")})}static clear(){mn.constructors={}}static createCallbacks(e){let t=[];for(let n in mn.constructors){let o=+n;e>=o&&t.push(...mn.constructors[o])}return t.map(n=>new n)}};mn.constructors={};function vx(r,e,t,n,o,s,a,i,l){let u=new wx,c=[new mL,...mn.createCallbacks(e)];r!=null&&c.push(...r),c.push(u);let p=new bx(c);return p.setParams({epochs:t,initialEpoch:n,samples:o,steps:s,batchSize:a,verbose:e,doValidation:i,metrics:l}),{callbackList:p,history:u}}function Qr(r,e={},t=!1){return Gi(r,J.SerializationMap.getMap().classNameMap,e,"layer",t)}function Yf(r,e){return V(()=>{r.dtype!=="float32"&&(r=r.asType("float32"));let t=ge(sc(r),e,!0),n=va(t.shape,Jt()),o=xt(Yr(t,n));return me(r,o)})}function qi(r,e){return V(()=>ht(sc(ce(e,r)),-1))}function zp(r,e){return V(()=>ht(Nt(ce(e,r)),-1))}function vl(r,e){return V(()=>{let t=ce(r,e),n=ir(Nt(r),Jt(),Number.MAX_VALUE),o=Nt(me(t,n));return P(100,ht(o,-1))})}function bJ(r,e){return V(()=>{let t=ir(e,Jt(),Number.MAX_VALUE),n=lr(Q(1,t)),o=ir(r,Jt(),Number.MAX_VALUE),s=lr(Q(1,o));return ht(sc(ce(n,s)),-1)})}function wJ(r,e){return V(()=>{let t=Yr(0,ce(1,P(r,e)));return ht(sc(t),-1)})}function _J(r,e){return V(()=>{let t=Yr(0,ce(1,P(r,e)));return ht(t,-1)})}function kJ(r,e){return V(()=>{let t=ge(P(r,e),-1),n=ur(P(ce(1,r),e),-1);return Yr(0,Q(1,ce(n,t)))})}function vJ(r,e){return V(()=>{let t=Math.log(2),n=ce(e,r),o=ce(Q(n,Ss(P(-2,n))),t);return ht(o,-1)})}function ac(r,e,t=!1){return V(()=>{if(t)e=Aa(e);else{let n=ge(e,e.shape.length-1,!0);e=me(e,n)}return e=ir(e,Jt(),1-Jt()),qe(ge(P(r.toFloat(),lr(e)),e.shape.length-1))})}function Bp(r,e,t=!1){return V(()=>{let n=Ns(tL(r)).toInt();e=ir(e,Jt(),1-Jt());let o=e.shape,s=vs(n,o[o.length-1]).reshape(o);return ac(s,e,t)})}function CJ(r,e){if(!y.arraysEqual(r.shape,e.shape))throw new z(`logits and labels must have the same shape, but got shapes ${JSON.stringify(r.shape)} and ${JSON.stringify(e.shape)}`);return V(()=>{let t=e.relu(),n=e.abs().neg();return t.sub(e.mul(r)).add(n.exp().log1p())})}function Vp(r,e){return V(()=>{let t;return t=ir(e,Jt(),1-Jt()),t=lr(me(t,ce(1,t))),ht(CJ(r,t),-1)})}function IJ(r,e){return V(()=>{let t=ir(r,Jt(),1),n=ir(e,Jt(),1);return ge(P(r,lr(me(t,n))),-1)})}function NJ(r,e){return V(()=>{let t=lr(Q(Jt(),e));return ht(ce(e,P(r,t)),-1)})}function Zf(r,e){return V(()=>{let t=Yf(r,-1),n=Yf(e,-1),o=P(t,n);return qe(ge(o,-1))})}var Jf={meanSquaredError:qi,meanAbsoluteError:zp,meanAbsolutePercentageError:vl,meanSquaredLogarithmicError:bJ,squaredHinge:wJ,hinge:_J,categoricalHinge:kJ,logcosh:vJ,categoricalCrossentropy:ac,sparseCategoricalCrossentropy:Bp,binaryCrossentropy:Vp,kullbackLeiblerDivergence:IJ,poisson:NJ,cosineProximity:Zf};function Cx(r){if(typeof r=="string"){if(r in Jf)return Jf[r];let e=`Unknown loss ${r}`;throw r.toLowerCase().includes("softmaxcrossentropy")&&(e=`Unknown loss ${r}. Use "categoricalCrossentropy" as the string name for tf.losses.softmaxCrossEntropy`),new z(e)}else return r}function Qf(r,e){return V(()=>{let t=P(.5,tr(e)),n=Ba(er(e,t),r.dtype);return ht(vn(r,n),-1)})}function ed(r,e){return V(()=>Ba(vn(il(r,-1),il(e,-1)),"float32"))}function fL(r,e){return V(()=>hr(r.equal(1),e.equal(1)).sum().cast("float32"))}function SJ(r,e){return V(()=>hr(r.equal(1),e.equal(0)).sum().cast("float32"))}function TJ(r,e){return V(()=>hr(r.equal(0),e.equal(1)).sum().cast("float32"))}function E0(r,e){return V(()=>{let t=fL(r,e),n=TJ(r,e),o=t.add(n);return $t(er(o,0),t.div(o),0).cast("float32")})}function dL(r,e){return V(()=>{let t=fL(r,e),n=SJ(r,e),o=t.add(n);return $t(er(o,0),t.div(o),0).cast("float32")})}function Ix(r,e){return Vp(r,e)}function Nx(r,e){return r.rank===e.rank&&(r=r.squeeze([r.rank-1])),e=e.argMax(-1),e.dtype!==r.dtype&&(e=e.asType(r.dtype)),vn(r,e).asType("float32")}var AJ=qi,EJ=qi,DJ=zp,$J=zp,RJ=vl,FJ=vl,td=ac,OJ=Zf,D0=Bp,Sx={binaryAccuracy:Qf,categoricalAccuracy:ed,precision:E0,categoricalCrossentropy:td,sparseCategoricalCrossentropy:D0,mse:AJ,MSE:EJ,mae:DJ,MAE:$J,mape:RJ,MAPE:FJ,cosine:OJ};function hL(r){if(typeof r=="string"&&r in Sx)return Sx[r];if(typeof r!="string"&&r!=null)return r;throw new z(`Unknown metric ${r}`)}function rd(r){if(Gn(r!==null,`Unknown LossOrMetricFn ${r}`),typeof r=="string")return r;{let e;for(let t of Object.keys(Jf))if(Jf[t]===r){e=t;break}if(e!==void 0)return e;for(let t of Object.keys(Sx))if(Sx[t]===r){e=t;break}return e!==void 0?e:r.name}}function gL(r){let e={Adagrad:()=>cl.adagrad(.01),Adadelta:()=>cl.adadelta(1,.95,Jt()),Adam:()=>cl.adam(.001,.9,.999,Jt()),Adamax:()=>cl.adamax(.002,.9,.999,Jt(),0),RMSProp:()=>cl.rmsprop(.001,.9,0,Jt()),SGD:()=>cl.sgd(.01)};if(e.adagrad=e.Adagrad,e.adadelta=e.Adadelta,e.adam=e.Adam,e.adamax=e.Adamax,e.rmsprop=e.RMSProp,e.sgd=e.SGD,r in e)return e[r]();throw new z(`Unknown Optimizer ${r}`)}var xL=1*1024*1024;function R0(r,e,t=!1){if(r==null||typeof r!="object"||Object.getPrototypeOf(r)!==Object.prototype||!$0(r))throw new Error("User-defined metadata is expected to be a JSON object, but is not.");if(t){let n=JSON.stringify(r);n.length>xL&&console.warn(`User-defined metadata of model "${e}" 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 <= ${xL}.`)}}function $0(r){if(r===null)return!0;if(typeof r=="object")if(Object.getPrototypeOf(r)===Object.prototype){let e=Object.keys(r);for(let t of e)if(typeof t!="string"||!$0(r[t]))return!1;return!0}else if(Array.isArray(r)){for(let e of r)if(!$0(e))return!1;return!0}else return!1;else{let e=typeof r;return e==="string"||e==="number"||e==="boolean"}}function yL(r,e,t,n=console.log){let o=MJ(r),s=["Layer (type)","Output shape","Param #"];o?(e=e||65,t=t||[.45,.85,1]):(e=e||98,t=t||[.33,.55,.67,1]),t[t.length-1]<=1&&(t=t.map(c=>Math.floor(e*c)));let a;if(!o){s.push("Receives inputs"),a=[];for(let c in r.nodesByDepth)a.push(...r.nodesByDepth[c])}n("_".repeat(e)),Tx(s,t,n),n("=".repeat(e));let i=r.layers;for(let c=0;c1||o.length===1&&o[0].inboundLayers.length>1){e=!1;break}n.push(...o)}if(e)for(let o of r.layers){let s=!1;for(let a of o.inboundNodes)if(n.indexOf(a)!==-1)if(s){e=!1;break}else s=!0;if(!e)break}return e}function Tx(r,e,t=console.log){let n="";for(let o=0;o0&&(n=n.slice(0,n.length-1)+" "),n+=r[o],n=n.slice(0,e[o]),n+=" ".repeat(e[o]-n.length);t(n)}function LJ(r,e,t){let n;try{n=JSON.stringify(r.outputShape)}catch(i){n="multiple"}let o=r.name,s=r.getClassName(),a=[`${o} (${s})`,n,r.countParams().toString()];Tx(a,e,t)}function zJ(r,e,t,n){let o;try{o=JSON.stringify(r.outputShape)}catch(c){o="multiple"}let s=[];for(let c of r.inboundNodes)if(!(t!=null&&t.length>0&&t.indexOf(c)===-1))for(let p=0;pd.name),l=[],u=e.names();for(let d of i)u.indexOf(d)!==-1?l.push(e.getValue(d)):l.push(null);n!=null&&(n.maxNumTensors=-Infinity,n.minNumTensors=Infinity);let c=i.join(",")+"|"+e.names().join(","),p,m;if(F0[c]==null){let d=VJ(a,e);p=d.sorted,m=d.recipientCounts,F0[c]=p,wL[c]=m}p=F0[c],m={},o||Object.assign(m,wL[c]);let f=new Ls(e);for(let d=0;dn.maxNumTensors&&(n.maxNumTensors=O),O0,()=>"Expected at least one fetch, got none");let t=[],n={};if(r.length===1){let o=_L(r[0],e);t=o.sorted,n=o.recipientMap}else{let o=new Set;for(let s of r){let{sorted:a,recipientMap:i}=_L(s,e);for(let l of a)o.has(l.name)||(t.push(l),o.add(l.name));for(let l in i)n[l]==null&&(n[l]=new Set),i[l].forEach(u=>n[l].add(u))}}return{sorted:t,recipientCounts:jJ(n)}}function jJ(r){let e={};for(let t in r)e[t]=r[t].size;return e}function _L(r,e){let t=new Set,n=[],o={};for(let i of e.names())t.add(i);let s=[],a=[];for(s.push(r);s.length>0;){let i=s[s.length-1];if(t.has(i.name)){s.pop();continue}let l=a[a.length-1]===s.length-1;if(i.inputs.length===0||l)s.pop(),n.push(i),t.add(i.name),l&&a.pop();else{a.push(s.length-1);for(let u of i.inputs)o[u.name]==null&&(o[u.name]=new Set),o[u.name].add(i.name),!t.has(u.name)&&s.push(u)}}return{sorted:n,recipientMap:o}}function GJ(r){let e;if(r.sourceLayer.inboundNodes.length===1)e=r.sourceLayer.output;else{let t=null;for(let n=0;nw.name)}`);es(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(w=>w.name)}`),this.inputLayers=[],this.inputLayersNodeIndices=[],this.inputLayersTensorIndices=[],this.outputLayers=[],this.outputLayersNodeIndices=[],this.outputLayersTensorIndices=[],this.layers=[],this.internalContainerRefs=[];for(let w of this.outputs){let b=w.sourceLayer,_=w.nodeIndex,k=w.tensorIndex;this.outputLayers.push(b),this.outputLayersNodeIndices.push(_),this.outputLayersTensorIndices.push(k)}for(let w of this.inputs){let b=w.sourceLayer,_=w.nodeIndex,k=w.tensorIndex;Gn(_===0,"input layer has >1 nodes"),Gn(k===0,"input layer has >1 tensors"),this.inputLayers.push(b),this.inputLayersNodeIndices.push(_),this.inputLayersTensorIndices.push(k)}this.inputNames=[],this.outputNames=[],this.feedInputShapes=[],this.feedInputNames=[],this.feedOutputNames=[];for(let w=0;ww.shape),this.internalOutputShapes=this.outputs.map(w=>w.shape);let t={},n={},o={},s={},a={},i=[],l=(w,b,_,k,A,S)=>{(k==null||A==null||S==null)&&(k=w.sourceLayer,A=w.nodeIndex,S=w.tensorIndex);let $=k.inboundNodes[A];if(_.indexOf($)!==-1)throw new Lr(`The tensor ${w.name} at layer "${k.name}" is part of a cycle.`);if(b.indexOf($)!==-1)return;this.containerNodes.add(jn.nodeKey(k,A)),k.id in a||(a[k.id]=Object.keys(a).length),_.indexOf($)===-1&&_.push($);let O=$.inboundLayers.length;for(let M=0;M=0;)_.splice(_.indexOf($),1);i.push($)},u=[],c=[];for(let w of this.outputs)l(w,u,c);let p=i.slice().reverse();for(let w of p){n[w.id]=w,w.id in t||(t[w.id]=0);let b=t[w.id],_=o[w.outboundLayer.id]==null?0:o[w.outboundLayer.id];b=Math.max(b,_),o[w.outboundLayer.id]=b,s[w.outboundLayer.id]=w.outboundLayer,t[w.id]=b;for(let k=0;kparseInt(w,10)).sort(Ff);this.layers=[];for(let w of d){let b=f[w];b.sort((_,k)=>{let A=a[_.id],S=a[k.id];return AS?1:0});for(let _ of b)_ instanceof jn&&this.internalContainerRefs.push(_),this.layers.push(_)}this.layersByDepth=f,d=Object.keys(m).map(w=>parseInt(w,10)).sort(Ff);let h=this.inputs.slice(),g=[];for(let w of d)for(let b of m[w]){let _=b.outboundLayer;if(_!=null){for(let k of b.inputTensors)if(h.indexOf(k)===-1)throw new Lr(`Graph disconnected: cannot obtain value for tensor ${k} at layer "${_.name}". The following previous layers were accessed without issue: ${g}`);for(let k of b.outputTensors)h.push(k);g.push(_.name)}}this.nodesByDepth=m;let x=this.layers.map(w=>w.name);for(let w of x){let b=x.filter(_=>_===w).length;if(b!==1)throw new Lr(`The name "${w}" is used ${b} times in the model. All layer names should be unique. Layer names: `+JSON.stringify(x))}this.outboundNodes=[],this.inboundNodes=[],new _l({outboundLayer:this,inboundLayers:[],nodeIndices:[],tensorIndices:[],inputTensors:this.inputs,outputTensors:this.outputs,inputMasks:this.inputs.map(w=>null),outputMasks:this.outputs.map(w=>null),inputShapes:this.inputs.map(w=>w.shape),outputShapes:this.outputs.map(w=>w.shape)}),this.built=!0,this._refCount=1}assertNotDisposed(){if(this._refCount===0)throw new Error(`Container '${this.name}' is already disposed.`)}dispose(){this.assertNotDisposed();let e={refCountAfterDispose:null,numDisposedVariables:0};if(--this._refCount==0){for(let t of this.layers)e.numDisposedVariables+=t.dispose().numDisposedVariables;for(let t of this.internalContainerRefs)e.numDisposedVariables+=t.dispose().numDisposedVariables}return e.refCountAfterDispose=this._refCount,e}get trainable(){return this.trainable_}set trainable(e){this.layers.forEach(t=>{t._trainableWeights.forEach(n=>n.trainable=e)}),this.trainable_=e}get trainableWeights(){if(this._trainableWeights.length>0)throw new 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 e=[];for(let t of this.layers)e=e.concat(t.trainableWeights);return e}get nonTrainableWeights(){let e=[];for(let t of this.layers)e.push(...t.nonTrainableWeights);if(!this.trainable){let t=[];for(let n of this.layers)t.push(...n.trainableWeights);return t.concat(e)}return e}get weights(){return this.trainableWeights.concat(this.nonTrainableWeights)}loadWeights(e,t=!0){let n={},o=0;for(let a of this.layers)for(let i of a.weights){if(n[i.originalName]!=null)throw new z(`Duplicate weight name: ${i.originalName}`);n[i.originalName]=i,o++}let s=[];for(let a in e){let i=a;if(n[a]==null){let l=a.split("/");i=l.slice(0,-2).concat([l[l.length-1]]).join("/")}if(n[i]!=null)s.push([n[i],e[a]]);else if(t)throw new z(`Provided weight data has no target variable: ${a}`);delete n[i]}if(t){let a=[];for(let i in n)a.push(i);if(a.length>0)throw new z(`${a.length} of ${o} weights are not set: ${a}`)}Lp(s)}updatedConfig(){let e=this.getConfig(),t={};return t.className=this.getClassName(),t.config=e,t.kerasVersion=`tfjs-layers ${Gp}`,t.backend="TensorFlow.js",t}toJSON(e,t=!0){let n=Ax(this.updatedConfig());return t?JSON.stringify(n):n}call(e,t){return V(()=>{e=bt(e);let n=new Ls;for(let o=0;o{e=bt(e);let n;return t==null?n=Zo(null,e.length):n=bt(t),this.runInternalGraph(e,n)[1]})}computeOutputShape(e){let t=Pp(e);if(t.length!==this.inputLayers.length)throw new z(`Invalid inputShape argument ${e}: model has ${this.inputLayers.length} tensor inputs.`);let n={};for(let i=0;iparseInt(i,10)).sort(Ff);if(o.length>1)for(let i of o){let l=this.nodesByDepth[i];for(let u of l){let c=u.outboundLayer;if(this.inputLayers.map(h=>h.id).indexOf(c.id)!==-1)continue;let p=[];for(let h=0;hparseInt(l,10)).sort(Ff);for(let l of o){let u=this.nodesByDepth[l];for(let c of u){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,w,b;if(c.callArgs!=null&&(h=c.callArgs),d.length===1){let[_,k]=d[0];h.mask==null&&(h.mask=k),w=bt(p.call(_,h)),b=bt(p.computeMask(_,k)),g=[_],x=[k]}else g=d.map(_=>_[0]),x=d.map(_=>_[1]),h.mask==null&&(h.mask=x),w=bt(p.call(g,h)),b=bt(p.computeMask(g,x));if(p.activityRegularizer)throw new Se("LayersModel invocation with concrete Tensor value(s) in the presence of activity regularizer(s) is not supported yet.");for(let _=0;_{let e=[];for(let t of this.layers)for(let n=0;n0){let h=[];for(let g=0;g0&&g.apply(xr(w),b)}function u(g){let x=g.name,w=Qr(g,t.customObjects!=null?t.customObjects:{});w.setFastWeightInitDuringBuild(o),s[x]=w,g.inboundNodes.forEach(_=>{if(!(_ instanceof Array))throw new z(`Corrupted configuration, expected array for nodeData: ${_}`);i(w,_)})}let c=t.name,p=t.layers;for(let g of p)u(g);for(;!zM(a);)for(let g of p){let x=s[g.name];if(x.name in a){let w=a[x.name];delete a[x.name];for(let b of w)l(x,b)}}let m=[],f=[],d=t.inputLayers;for(let g of d){let x=g[0],w=g[1],b=g[2];Gn(x in s);let k=s[x].inboundNodes[w].outputTensors;m.push(k[b])}let h=t.outputLayers;for(let g of h){let x=g[0],w=g[1],b=g[2];Gn(x in s);let k=s[x].inboundNodes[w].outputTensors;f.push(k[b])}return new e({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 e of this.layers)if(e.stateful)return!0;return!1}resetStates(){V(()=>{this.layers.forEach(e=>{e.stateful&&e.resetStates()})})}};function WJ(r,e,t){let n=e.length;if(r==null||Array.isArray(r)&&r.length===0)return e.map(o=>null);if(n===1)return Array.isArray(r)&&r.length===1?r:typeof r=="object"&&e[0]in r?[r[e[0]]]:[r];if(Array.isArray(r)){if(r.length!==n)throw new Error(`Provided ${t} 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 e.forEach(s=>{s in r?o.push(r[s]):o.push(null)}),o}else throw new Error(`The model has multiple (${n}) outputs, so ${t} must be either an array with ${n} elements or an object with ${e} keys. Provided ${t} not understood: ${JSON.stringify(r)}`)}function Ex(r,e){return WJ(r,e,"classWeight")}async function Dx(r,e,t,n){if(e!=null||n!=null)throw new Error("Support sampleWeight is not implemented yet");if(t!=null){let o=V(()=>{if(r.shape.length===1)return r.clone();if(r.shape.length===2)if(r.shape[1]>1){let i=1;return r.argMax(i)}else{if(r.shape[1]===1)return r.reshape([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());Ae(o);let a=[];return s.forEach(i=>{if(t[i]==null)throw new Error(`classWeight must contain all classes in the training data. The class ${i} exists in the data but not in classWeight`);a.push(t[i])}),Gt(a,"float32")}else return null}function kL(r,e){return P(r,e)}var UJ=32;function CL(r,e){let t,n,o=e;t=o.xs,n=o.ys,y.assert(t!=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 ${e}`);let s=vL("input",r.inputNames,t),a=vL("output",r.outputNames,n),i=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(a.length===r.outputs.length,()=>`LayersModel has ${r.outputs.length} outputs, but the dataset provides ${a.length} outputs. (Expected output keys: ${JSON.stringify(r.outputNames)})`);for(let l=0;l`Batch size mismatch: input ${r.inputNames[l]} has ${s[l].shape[0]}; expected ${i} based on input ${r.inputNames[0]}.`);for(let l=0;l`Batch size mismatch: output ${r.outputNames[l]} has ${a[l].shape[0]}; expected ${i} based on input ${r.inputNames[0]}.`);return{xs:s,ys:a}}function vL(r,e,t){if(t instanceof Ve)return[t];if(Array.isArray(t))return y.assert(t.length===e.length,()=>`Received an array of ${t.length} Tensors, but expected ${e.length} to match the ${r} keys ${e}.`),t;{let n=[];for(let o of e){if(t[o]==null)throw new z(`The feature data generated by the dataset lacks the required ${r} key '${o}'.`);n.push(t[o])}return n}}function qJ(r){if(r.length===3)throw new Se("Validation with sample weights is not implemented yet.");return{xs:r[0],ys:r[1]}}async function NL(r,e,t){let n=t.batchesPerEpoch!=null;if(y.assert(r.optimizer!=null,()=>"You must compile a model before training/testing. Use LayersModel.compile(modelCompileConfig)."),y.assert(t!=null,()=>"For fitDataset(), the 2nd argument (config) is required, but it is not provided in this call."),y.assert(t.epochs!=null&&t.epochs>0&&Number.isInteger(t.epochs),()=>`For fitDataset(), config.epochs is expected to be a positive integer, but got ${t.epochs}`),y.assert(!n||t.batchesPerEpoch>0&&Number.isInteger(t.batchesPerEpoch),()=>`For fitDataset(), config.batchesPerEpoch is expected to be a positive integer if specified, but got ${t.batchesPerEpoch}`),y.assert(t.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=t.validationData!=null,s,a;if(o)if(IL(t.validationData))y.assert(t.validationBatches==null||t.validationBatches>0&&Number.isInteger(t.validationBatches),()=>`For fitDataset() with dataset-based validation, config.validationBatches is expected not to be provided, or to be a positive integer, but got ${t.validationBatches}`);else{let g=qJ(t.validationData);s=g.xs,a=g.ys}let i=r.makeTrainFunction(),l=r.getDedupedMetricsNames(),u;o?u=l.slice().concat(l.map(g=>"val_"+g)):u=l.slice();let c=kx(t.callbacks,t.yieldEvery),p=t.verbose==null?1:t.verbose,{callbackList:m,history:f}=vx(c,p,t.epochs,null,null,HJ(e,t),null,o,u);m.setModel(r),r.history=f,await m.onTrainBegin(),r.stopTraining_=!1;let d=t.initialEpoch==null?0:t.initialEpoch,h=await e.iterator();for(;d=t.batchesPerEpoch:b.done){if(o){let _;IL(t.validationData)?_=bt(await r.evaluateDataset(t.validationData,{batches:t.validationBatches})):_=bt(r.evaluate(s,a,{batchSize:t.validationBatchSize==null?UJ:t.validationBatchSize,verbose:0}));for(let k=0;k0)throw new Se("Verbose mode is not implemented yet.");y.assert(!n||t.batches>0&&Number.isInteger(t.batches),()=>`Test loop expects \`batches\` to be a positive integer, but received ${JSON.stringify(t.batches)}`);let a=KJ(e)?e:await e.iterator(),i=0,l=0;for(;n?l{if(u.value){let{xs:c,ys:p}=CL(r,u.value),m=c.concat(p),f=V(()=>o(m));if(Ae(m),l===0)for(let h=0;hQ(s[h],P(d,g))),l>0&&Ae(x)}Ae(f),i+=d,++l}return s}),u.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, ${t.batches} batches). You may need to use the repeat() function when building your dataset.`);break}}for(let u=0;u0&&Number.isInteger(r),()=>`batchSize is required to be a positive integer, but got ${r}`)}function jp(r,e,t){return r==null?[null]:Array.isArray(r)?r.map(n=>Ga(n,e,t-e)):Ga(r,e,t-e)}function Rx(r,e){return V(()=>r==null?null:Array.isArray(r)?r.map(t=>Rx(t,e)):mx(r,e.dtype==="int32"?e:e.toInt()))}function Fx(r,e){let t=[],n=0,o=null;for(;n=r&&(o=r),t.push([n,o]),n=o;return t}async function XJ(r,e,t,n,o,s,a,i,l,u,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(l!=null&&u!=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(t,o,f,"steps_per_epoch"),x;g!=null&&(x=zr(0,g)),a==null&&(a=1);let{callbackList:w,history:b}=vx(i,a,s,m,g,f,o,h,p);w.setModel(r),r.history=b,await w.onTrainBegin(),r.stopTraining_=!1;for(let _=m;_{let M=S[$][0],G=S[$][1],j=Ga(A,M,G-M);O.batch=$,O.size=G-M;let U=Rx(t,j),q=e(U);for(let H=0;H0){if(d=!0,n.validationData.length===2)a=n.validationData[0],i=n.validationData[1];else throw n.validationData.length===3?new Se("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 S=!0,$=await r.standardizeUserData(a,i,null,null,S,p);l=$[0],u=$[1],h=l.concat(u)}else if(n.validationSplit!=null&&n.validationSplit>0&&n.validationSplit<1){d=!0;let S=Math.floor(o[0].shape[0]*(1-n.validationSplit)),$=o[0].shape[0];l=jp(o,S,$),o=jp(o,0,S),u=jp(s,S,$),s=jp(s,0,S),h=l.concat(u)}else n.validationSteps!=null&&(d=!0);let g=o.concat(s).concat(c);r.checkTrainableWeightsConsistency();let x=r.makeTrainFunction(),w=r.getDedupedMetricsNames(),b,_;d?(r.makeTestFunction(),b=r.testFunction,_=w.slice().concat(w.map(S=>"val_"+S))):(b=null,h=[],_=w.slice());let k=kx(n.callbacks,n.yieldEvery);return await XJ(r,x,g,w,p,n.epochs,n.verbose,k,b,h,n.shuffle,_,n.initialEpoch,null,null)}finally{r.isTraining=!1,Cl(o,e),Cl(s,t),Cl(l,a),Cl(u,i),c!=null&&Ae(c)}}function O0(r){let e=[];r instanceof Ve&&(r=[r]);for(let t=0;tt.push(o.id));else if(e!=null)for(let o in e){let s=e[o];t.push(s.id)}let n=[];if(r instanceof Ve)t.indexOf(r.id)===-1&&n.push(r);else if(Array.isArray(r))r.forEach(o=>{t.indexOf(o.id)===-1&&n.push(o)});else if(r!=null)for(let o in r){let s=r[o];t.indexOf(s.id)===-1&&n.push(s)}n.forEach(o=>{o.isDisposed||o.dispose()})}function YJ(r){return r instanceof Ve}function P0(r){return Array.isArray(r)}function AL(r){return!YJ(r)&&!P0(r)}function EL(r,e,t,n=!0,o=""){if(e==null||e.length===0){if(r!=null){let a=!1;if(P0(r)&&r.length>0)a=!0;else if(AL(r)){for(let i in r)if(r.hasOwnProperty(i)){a=!0;break}}else a=!0;if(a)throw new z(`Error when checking model ${o} expected no data, but got ${r}`)}return[]}if(r==null)return e.map(a=>null);let s;if(AL(r)){r=r,s=[];for(let a of e){if(r[a]==null)throw new z(`No data provided for "${a}". Need data for each key in: ${e}`);s.push(r[a])}}else if(P0(r)){if(r=r,r.length!==e.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 ${e.length} Tensor(s), but instead got the following list of Tensor(s): ${r}`);s=r}else{if(r=r,e.length>1)throw new z(`The model ${o} expects ${e.length} Tensor(s), but only received one Tensor. Found: Tensor with shape ${r.shape}`);s=[r]}if(s=O0(s),t!=null)for(let a=0;a=0&&u!==c)throw new z(`Error when checking ${o}: expected ${e[a]} to have shape [${t[a]}], but got array with shape [${i.shape}].`)}}return s}function ZJ(r,e,t){let n=es(r.map(s=>s.shape[0]));n.sort();let o=es(e.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(e.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 JJ(r,e,t){let n=[qi,Vp,ac];for(let o=0;o1)throw new z(`The model expects ${e.length} ${o} Tensors, but only received one Tensor. Found: array with shape ${JSON.stringify(r.shape)}.`);s=[r]}if(t!=null)for(let a=0;a[]);let t;if(typeof r=="string"||typeof r=="function")t=[r];else if(Array.isArray(r)||typeof r=="object")t=r;else throw new TypeError(`Type of metrics argument not understood. Expected an string,function, Array, or Object, found: ${r}`);if(Array.isArray(t))return e.map(n=>t);{let n=[];for(let o of e){let s=t.hasOwnProperty(o)?t[o]:[];Array.isArray(s)||(s=[s]),n.push(s)}return n}}var eQ="layers-model",Tn=class extends jn{constructor(e){super(e);this.isTraining=!1}summary(e,t,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).");yL(this,e,t,n)}compile(e){if(e.loss==null&&(e.loss=[]),this.loss=e.loss,typeof e.optimizer=="string")this.optimizer_=gL(e.optimizer),this.isOptimizerOwned=!0;else{if(!(e.optimizer instanceof Pr))throw new z("User-defined optimizer must be an instance of tf.Optimizer.");this.optimizer_=e.optimizer,this.isOptimizerOwned=!1}let t=[];if(!Array.isArray(e.loss)&&typeof e.loss!="string"&&typeof e.loss!="function"){e.loss=e.loss;for(let a in e.loss)if(this.outputNames.indexOf(a)===-1)throw new z(`Unknown entry in loss dictionary: "${a}". Only expected the following keys: ${this.outputNames}`);for(let a of this.outputNames)e.loss[a]==null&&console.warn(`Output "${a}" is missing from loss dictionary. We assume this was done on purpose, and we will not be expecting data to be passed to ${a} during training`),t.push(Cx(e.loss[a]))}else if(Array.isArray(e.loss)){if(e.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=${e.loss}.`);t=e.loss.map(i=>Cx(i))}else{let a=Cx(e.loss);this.outputs.forEach(i=>{t.push(a)})}this.lossFunctions=t,this.feedOutputNames=[],this.feedOutputShapes=[],this.feedLossFns=[];for(let a=0;a{for(let a=0;a1&&(this.metricsTensors.push([i,a]),this.metricsNames.push(this.outputNames[a]+"_loss"))}});let o=QJ(e.metrics,this.outputNames),s=(a,i,l)=>{this.outputNames.length>1&&(i=this.outputNames[a]+"_"+i),this.metricsNames.push(i),this.metricsTensors.push([l,a])};Ps("metric",()=>{for(let a=0;a{let c="",p,m,f;for(let d of u){if(typeof d=="string"&&["accuracy","acc","crossentropy","ce"].indexOf(d)!==-1){let g=this.internalOutputShapes[a];g[g.length-1]===1||this.lossFunctions[a]===Vp?["accuracy","acc"].indexOf(d)!==-1?m=Qf:["crossentropy","ce"].indexOf(d)!==-1&&(m=Ix):this.lossFunctions[a]===Bp?["accuracy","acc"].indexOf(d)!==-1?m=Nx:["crossentropy","ce"].indexOf(d)!==-1&&(m=D0):["accuracy","acc"].indexOf(d)!==-1?m=ed:["crossentropy","ce"].indexOf(d)!==-1&&(m=td);let x;["accuracy","acc"].indexOf(d)!==-1?x="acc":["crossentropy","ce"].indexOf(d)!==-1&&(x="ce"),f=m,p=c+x}else f=hL(d),p=c+rd(d);let h;Ps(p,()=>{h=f}),s(a,p,h)}})(i)}}),this.collectedTrainableWeights=this.trainableWeights}checkTrainableWeightsConsistency(){this.collectedTrainableWeights!=null&&this.trainableWeights.length!==this.collectedTrainableWeights.length&&console.warn("Discrepancy between trainableweights and collected trainable weights. Did you set `model.trainable` without calling `model.compile()` afterwards?")}evaluate(e,t,n={}){let o=n.batchSize==null?32:n.batchSize;$x(o);let s=!0,a=this.standardizeUserDataXY(e,t,s,o);try{let i=a[0].concat(a[1]);this.makeTestFunction();let l=this.testFunction,u=this.testLoop(l,i,o,n.verbose,n.steps);return xr(u)}finally{Cl(a[0],e),Cl(a[1],t)}}async evaluateDataset(e,t){return this.makeTestFunction(),SL(this,e,t)}checkNumSamples(e,t,n,o="steps"){let s;if(n!=null){if(s=null,t!=null)throw new z(`If ${o} is set, batchSize must be null or undefined.Got batchSize = ${t}`)}else if(e!=null)Array.isArray(e)?s=e[0].shape[0]:s=e.shape[0];else throw new z(`Either the input data should have a defined shape, or ${o} shoud be specified.`);return s}execute(e,t){if(Array.isArray(t)&&t.length===0)throw new z("`outputs` is an empty Array, which is not allowed.");let n=Array.isArray(t),o=n?t:[t],s=this.retrieveSymbolicTensors(o),a=new Ls;if(e instanceof Ve&&(e=[e]),Array.isArray(e)){if(e.length!==this.inputs.length)throw new z(`The number of inputs provided (${e.length}) does not match the number of inputs of this model (${this.inputs.length}).`);for(let l=0;li.name);for(let i=0;i0){let o=[];throw t.forEach((s,a)=>{s==null&&o.push(e[a])}),new z(`Cannot find SymbolicTensors for output name(s): ${JSON.stringify(o)}`)}return t}predictLoop(e,t=32,n=!1){return V(()=>{let o=this.checkNumSamples(e);if(n)throw new Se("Verbose predictLoop() is not implemented yet.");let s=Fx(o,t),a=this.outputs.map(i=>[]);for(let i=0;i{let u=s[i][0],c=s[i][1],p=jp(e,u,c),m=[];if(Array.isArray(p))for(let d=0;da[c].push(u));return xr(a.map(i=>Ze(i,0)))})}predict(e,t={}){let n=O0(e);DL(n,this.inputNames,this.feedInputShapes,!1);try{let o=t.batchSize==null?32:t.batchSize;return $x(o),this.predictLoop(n,o)}finally{Cl(n,e)}}predictOnBatch(e){DL(e,this.inputNames,this.feedInputShapes,!0);let t=(Array.isArray(e)?e[0]:e).shape[0];return this.predictLoop(e,t)}standardizeUserDataXY(e,t,n=!0,o){if(this.optimizer_==null)throw new Lr("You must compile a model before training/testing. Use LayersModel.compile(modelCompileArgs).");let s=[];for(let a=0;a0&&e[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: ${e[0].shape[0]} sample(s).`);return[e,t]}async standardizeUserData(e,t,n,o,s=!0,a){let[i,l]=this.standardizeUserDataXY(e,t,s,a);if(n!=null)throw new Error("sample weight is not supported yet.");let u=null;if(o!=null){let c=Ex(o,this.outputNames);u=[];for(let p=0;p{let a=this.checkNumSamples(t,n,s,"steps"),i=[];if(o>0)throw new Se("Verbose mode is not implemented yet.");if(s!=null)throw new Se("steps mode in testLoop() is not implemented yet");{let l=Fx(a,n),u=Gt(zr(0,a));for(let c=0;c1&&(s+=`_${w0(e.slice(0,n),o)}`),t.push(s)}return t}makeTrainFunction(){return e=>{let t=[],n=e.slice(0,this.inputs.length),o=e.slice(this.inputs.length,this.inputs.length+this.outputs.length),s=e.slice(this.inputs.length+this.outputs.length,this.inputs.length+this.outputs.length*2),a=[],i=()=>{let p=[];for(let h=0;h1&&h{d=Q(d,h)}),d},l=this.collectedTrainableWeights.map(p=>p.read()),u=!0;return[this.optimizer_.minimize(i,u,l)].concat(a)}}makeTestFunction(){this.testFunction=e=>V(()=>{let t=[],n,o=e.slice(0,this.inputs.length),s=e.slice(this.inputs.length,this.inputs.length+this.outputs.length),a=[];for(let u=0;uJo(t))}else{let t=Object.keys(this.loss);e={};let n=this.loss;for(let o of t)if(typeof n[o]=="string")e[o]=Jo(n[o]);else throw new Error("Serialization of non-string loss is not supported.")}return e}getMetricIdentifiers(){if(typeof this.metrics=="string"||typeof this.metrics=="function")return[Jo(rd(this.metrics))];if(Array.isArray(this.metrics))return this.metrics.map(e=>Jo(rd(e)));{let e={};for(let t in this.metrics)e[t]=Jo(rd(this.metrics[t]));return e}}getTrainingConfig(){return{loss:this.getLossIdentifiers(),metrics:this.getMetricIdentifiers(),optimizer_config:{class_name:this.optimizer.getClassName(),config:this.optimizer.getConfig()}}}loadTrainingConfig(e){if(e.weighted_metrics!=null)throw new Error("Loading weight_metrics is not supported yet.");if(e.loss_weights!=null)throw new Error("Loading loss_weights is not supported yet.");if(e.sample_weight_mode!=null)throw new Error("Loading sample_weight_mode is not supported yet.");let t=lc(e.optimizer_config),n=Qr(t),o;if(typeof e.loss=="string")o=za(e.loss);else if(Array.isArray(e.loss))o=e.loss.map(a=>za(a));else if(e.loss!=null){o={};for(let a in e.loss)o[a]=za(e.loss[a])}let s;if(Array.isArray(e.metrics))s=e.metrics.map(a=>za(a));else if(e.metrics!=null){s={};for(let a in e.metrics)s[a]=za(e.metrics[a])}this.compile({loss:o,metrics:s,optimizer:n})}async save(e,t){if(typeof e=="string"){let u=Ir.getSaveHandlers(e);if(u.length===0)throw new z(`Cannot find any save handlers for URL '${e}'`);if(u.length>1)throw new z(`Found more than one (${u.length}) save handlers for URL '${e}'`);e=u[0]}if(e.save==null)throw new z("LayersModel.save() cannot proceed because the IOHandler provided does not have the `save` attribute defined.");let n=await Ir.encodeWeights(this.getNamedWeights(t)),o=!1,s=null,i={modelTopology:this.toJSON(s,o),format:eQ,generatedBy:`TensorFlow.js tfjs-layers v${Gp}`,convertedBy:null};if((t==null?!1:t.includeOptimizer)&&this.optimizer!=null){i.trainingConfig=this.getTrainingConfig();let u="optimizer",{data:c,specs:p}=await Ir.encodeWeights(await this.optimizer.getWeights(),u);n.specs.push(...p),n.data=Ir.concatenateArrayBuffers([n.data,c])}if(this.userDefinedMetadata!=null){let u=!0;R0(this.userDefinedMetadata,this.name,u),i.userDefinedMetadata=this.userDefinedMetadata}return i.weightData=n.data,i.weightSpecs=n.specs,e.save(i)}setUserDefinedMetadata(e){R0(e,this.name),this.userDefinedMetadata=e}getUserDefinedMetadata(){return this.userDefinedMetadata}};Tn.className="Model";J.registerClass(Tn);var M0=class extends Tn{};M0.className="Functional";J.registerClass(M0);async function $L(r,e){"modelTopology"in r||(r={modelTopology:r}),r=r;let t=r.modelTopology;t.model_config!=null&&(t=t.model_config);let n=lc(t),o=Qr(n,e);if(r.weightsManifest!=null){let s=await Ir.loadWeights(r.weightsManifest,r.pathPrefix,o.weights.map(i=>i.originalName)),a={};for(let i of o.weights)a[i.originalName]=s[i.originalName];o.loadWeights(a),Ae(s)}return o}async function RL(r,e){if(e==null&&(e={}),typeof r=="string"){let t=Ir.getLoadHandlers(r,e);if(t.length===0)t.push(Ir.browserHTTPRequest(r,e));else if(t.length>1)throw new z(`Found more than one (${t.length}) load handlers for URL '${r}'`);r=t[0]}return tQ(r,void 0,e)}async function tQ(r,e,t){if(t==null&&(t={}),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=t.strict==null?!0:t.strict,a=n.weightData!=null&&n.weightSpecs!=null&&s,i=Qr(lc(o),e,a),l=n.trainingConfig;if(l!=null&&i.loadTrainingConfig(l),n.userDefinedMetadata!=null&&i.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:u,optimizerWeights:c}=rQ(n.weightData,n.weightSpecs);i.loadWeights(u,s),i.optimizer!=null&&c.length>0&&await i.optimizer.setWeights(c),Ae(u),Ae(c.map(p=>p.tensor))}return i}function rQ(r,e){let t=Ir.decodeWeights(r,e),n={},o=[];return e.forEach(s=>{s.group==="optimizer"?o.push({name:s.name,tensor:t[s.name]}):n[s.name]=t[s.name]}),{modelWeights:n,optimizerWeights:o}}var Hi=class extends Tn{constructor(e){super({inputs:[],outputs:[]});if(e=e||{},this.trainable=!0,this.built=!1,this.name=e.name!=null?e.name:wl("sequential_"),e.layers!=null)for(let t of e.layers)this.add(t)}checkShape(e){if(e.inboundNodes[0].outputTensors[0].shape.some(n=>n<0))throw new z(`Negative dimension size caused by adding layer ${e.name} with input shape [${e.inboundNodes[0].inputTensors[0].shape}]`)}add(e){let t=e instanceof Hi||e instanceof Tn,n;if(t){if(n=e,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(e.inboundNodes.length===0){if(e.batchInputShape==null)throw new z("The first layer in a Sequential model must get an `inputShape` or `batchInputShape` argument.");let o=xx({batchShape:e.batchInputShape,dtype:e.dtype,name:e.name+"_input"});e.apply(o)}if(t)this.outputs=n.outputs,this.inputs=n.inputs;else{if(e.inboundNodes.length!==1)throw new z(`A layer added to a Sequential model must not already be connected somewhere else. LayersModel received layer ${e.name} which has ${e.inboundNodes.length} pre-existing inbound connections.`);if(e.inboundNodes[0].outputTensors.length!==1)throw new z("All layers in a Sequential model should have a single output tensor. For multi-output layers, use the functional API.");this.checkShape(e),this.outputs=[e.inboundNodes[0].outputTensors[0]],this.inputs=A0(this.outputs[0])}this.inboundNodes=[],new _l({outboundLayer:this,inboundLayers:[],nodeIndices:[],tensorIndices:[],inputTensors:this.inputs,outputTensors:this.outputs,inputMasks:Zo(null,this.inputs.length),outputMasks:[null],inputShapes:this.inputs.map(o=>o.shape),outputShapes:this.outputs[0].shape})}else{let o=e.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(e),this.outputs=[o],this.inboundNodes[0].outputTensors=this.outputs,this.inboundNodes[0].outputShapes=[this.outputs[0].shape]}this.layers.push(e),this.built=!1}pop(){if(this.layers.length===0)throw new TypeError("There are no layers in the model.");if(this.layers.pop(),this.layers.length===0)this.outputs=[],this.inboundNodes=[],this.outboundNodes=[];else{let e=this.layers.length-1;this.layers[e].outboundNodes=[],this.outputs=[this.layers[e].output],this.inboundNodes[0].outputTensors=this.outputs,this.inboundNodes[0].outputShapes=[this.outputs[0].shape]}}call(e,t){return this.model==null&&this.build(),this.model.call(e,t)}build(e){if(Je(e),this.inputs.length===0||this.outputs.length===0)throw new TypeError("Sequential model cannot be built: model is empty. Add some layers first.");this.model=new Tn({inputs:this.inputs,outputs:this.outputs[0],name:this.name+"_model"}),this.model.trainable=this.trainable,this.supportsMasking=this.model.supportsMasking,this.inputLayers=this.model.inputLayers,this.inputLayersNodeIndices=this.model.inputLayersNodeIndices,this.inputLayersTensorIndices=this.model.inputLayersTensorIndices,this.outputLayers=this.model.outputLayers,this.outputLayersNodeIndices=this.model.outputLayersNodeIndices,this.outputLayersTensorIndices=this.model.outputLayersTensorIndices,this.nodesByDepth=this.model.nodesByDepth,this.containerNodes=this.model.containerNodes,this.outputNames=this.model.outputNames,this.inputNames=this.model.inputNames,this.built=!0}countParams(){return this.built||this.build(),super.countParams()}summary(e,t,n=console.log){this.built||this.build(),super.summary(e,t,n)}setWeights(e){this.model==null&&this.build(),this.model.setWeights(e)}evaluate(e,t,n={}){if(!this.built)throw new Lr("The model needs to be compiled before being used.");return this.model.evaluate(e,t,n)}async evaluateDataset(e,t){if(!this.built)throw new Lr("The model needs to be compiled before being used.");return this.model.evaluateDataset(e,t)}predict(e,t={}){return this.model==null&&this.build(),this.model.predict(e,t)}predictOnBatch(e){return this.model==null&&this.build(),this.model.predictOnBatch(e)}compile(e){this.build(),this.model.compile(e),this.optimizer_=this.model.optimizer,this.isOptimizerOwned=this.model.isOptimizerOwned,this.loss=this.model.loss,this.metrics=this.model.metrics,this.metricsTensors=this.model.metricsTensors,this.metricsNames=this.model.metricsNames}get optimizer(){return this.model==null?void 0:this.model.optimizer}set optimizer(e){this.model.optimizer=e}async fit(e,t,n={}){if(!this.built)throw new Lr("The model needs to be compiled before being used.");return this.model.fit(e,t,n)}async fitDataset(e,t){if(!this.built)throw new Lr("The model needs to be compiled before being used.");return this.model.fitDataset(e,t)}async trainOnBatch(e,t){return this.model.trainOnBatch(e,t)}static fromConfig(e,t,n={},o=!1){let s,a={};if(t instanceof Array){if(t[0].className==null||t[0].className==="Merge")throw new z("Legacy serialization format not supported yet.");s=t}else y.assert(t.layers!=null,()=>"When the config data for a Sequential model is not an Array, it must be an Object that contains the 'layers' field."),s=t.layers,delete t.layers,a=t;let i=new e(a);if(!(i instanceof Hi))throw new Se(`Sequential.fromConfig called on non-Sequential input: ${i}`);for(let l of s){let c=Qr(l,void 0,o);o&&c.setFastWeightInitDuringBuild(!0),i.add(c)}return i}set stopTraining(e){if(this.model==null)throw new z("Cannot set the stopTraining property of a sequential model before it is compiled.");this.model.stopTraining=e}get stopTraining(){if(this.model==null)throw new z("Cannot get the stopTraining property of a sequential model before it is compiled.");return this.model.stopTraining}getConfig(){let e=[];for(let t of this.layers){let n={};n.className=t.getClassName(),n.config=t.getConfig(),e.push(n)}return{name:this.name,layers:e}}};Hi.className="Sequential";J.registerClass(Hi);function FL(r){return new Tn(r)}function OL(r){return new Hi(r)}function PL(r,e){return e==null&&(e={}),RL(r,e)}function Ox(r){return xx(r)}function ML(r,e){mn.registerCallbackConstructor(r,e)}var fn=class extends J.Serializable{getConfig(){return{}}},L0=class extends fn{apply(e,t=1){return nL(e,t)}};L0.className="elu";J.registerClass(L0);var z0=class extends fn{apply(e){return Ru(e)}};z0.className="selu";J.registerClass(z0);var B0=class extends fn{apply(e){return Sr(e)}};B0.className="relu";J.registerClass(B0);var V0=class extends fn{apply(e){return V(()=>Ts(6,Sr(e)))}};V0.className="relu6";J.registerClass(V0);var G0=class extends fn{apply(e){return e}};G0.className="linear";J.registerClass(G0);var j0=class extends fn{apply(e){return Hr(e)}};j0.className="sigmoid";J.registerClass(j0);var W0=class extends fn{apply(e){return sL(e)}};W0.className="hardSigmoid";J.registerClass(W0);var U0=class extends fn{apply(e){return Ss(e)}};U0.className="softplus";J.registerClass(U0);var q0=class extends fn{apply(e){return oL(e)}};q0.className="softsign";J.registerClass(q0);var H0=class extends fn{apply(e){return Oi(e)}};H0.className="tanh";J.registerClass(H0);var nd=class extends fn{apply(e,t=-1){return Aa(e,t)}};nd.className="softmax";J.registerClass(nd);var K0=class extends fn{apply(e,t=-1){return Su(e,t)}};K0.className="logSoftmax";J.registerClass(K0);var X0=class extends fn{apply(e,t=1){return V(()=>Hr(e.mul(t)).mul(e))}};X0.className="swish";J.registerClass(X0);function zs(r){return r.getClassName()}function Y0(r,e={}){return Gi(r,J.SerializationMap.getMap().classNameMap,e,"activation")}function Bs(r){if(r==null){let e={};return e.className="linear",e.config={},Y0(e)}if(typeof r=="string"){let e={};return e.className=r,e.config={},Y0(e)}else return r instanceof fn?r:Y0(r)}function Z0(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 J0=class extends J.Serializable{},cc=class extends J0{constructor(e){super();Z0(e),this.l1=e==null||e.l1==null?.01:e.l1,this.l2=e==null||e.l2==null?.01:e.l2,this.hasL1=this.l1!==0,this.hasL2=this.l2!==0}apply(e){return V(()=>{let t=gt([1]);return this.hasL1&&(t=Q(t,ge(P(this.l1,Nt(e))))),this.hasL2&&(t=Q(t,ge(P(this.l2,sc(e))))),t.asScalar()})}getConfig(){return{l1:this.l1,l2:this.l2}}static fromConfig(e,t){return new e({l1:t.l1,l2:t.l2})}};cc.className="L1L2";J.registerClass(cc);function LL(r){return Z0(r),new cc({l1:r!=null?r.l1:null,l2:0})}function zL(r){return Z0(r),new cc({l2:r!=null?r.l2:null,l1:0})}var BL={l1l2:"L1L2"};function st(r){return Ip(r)}function VL(r,e={}){return Gi(r,J.SerializationMap.getMap().classNameMap,e,"regularizer")}function wt(r){if(r==null)return null;if(typeof r=="string"){let t={className:r in BL?BL[r]:r,config:{}};return VL(t)}else return r instanceof J0?r:VL(r)}var od=class extends Pe{constructor(e){super(e==null?{}:e);this.supportsMasking=!0,e!=null&&(this.maxValue=e.maxValue)}call(e,t){e=Fe(e);let n=Sr(e);return this.maxValue!=null&&(n=ir(n,0,this.maxValue)),n}computeOutputShape(e){return e}getConfig(){let e={maxValue:this.maxValue},t=super.getConfig();return Object.assign(e,t),e}};od.className="ReLU";J.registerClass(od);var sd=class extends Pe{constructor(e){super(e==null?{}:e);this.DEFAULT_ALPHA=.3,e==null&&(e={}),this.alpha=e.alpha==null?this.DEFAULT_ALPHA:e.alpha}call(e,t){let n=Fe(e);return Ca(n,this.alpha)}computeOutputShape(e){return e}getConfig(){let e={alpha:this.alpha},t=super.getConfig();return Object.assign(e,t),e}};sd.className="LeakyReLU";J.registerClass(sd);var id=class extends Pe{constructor(e){super(e==null?{}:e);if(this.DEFAULT_ALPHA_INITIALIZER="zeros",e==null&&(e={}),this.supportsMasking=!0,this.alphaInitializer=pt(e.alphaInitializer||this.DEFAULT_ALPHA_INITIALIZER),this.alphaRegularizer=wt(e.alphaRegularizer),this.alphaConstraint=Pt(e.alphaConstraint),e.sharedAxes==null)this.sharedAxes=null;else if(Array.isArray(e.sharedAxes))this.sharedAxes=e.sharedAxes;else if(typeof e.sharedAxes=="number")this.sharedAxes=[e.sharedAxes];else throw new z(`Expected sharedAxes to be a number or an array of numbers, but got ${e.sharedAxes}`)}build(e){e=Je(e);let t=e.slice(1);if(this.sharedAxes!=null)for(let o of this.sharedAxes)t[o-1]=1;this.alpha=this.addWeight("alpha",t,"float32",this.alphaInitializer,this.alphaRegularizer,!0,this.alphaConstraint);let n={};if(this.sharedAxes!=null)for(let o=1;o(Rt(e),e==="channelsFirst"?Ue(r,[0,2,3,1]):r))}function Q0(r,e){return V(()=>(Rt(e),e==="channelsFirst"?Ue(r,[0,2,3,4,1]):r))}function nQ(r,e,t,n=1,o="valid",s,a=1){return V(()=>{if(s==null&&(s=Zr()),Rt(s),r.shape.length!==3)throw new z(`The input of a conv1dWithBias operation should be 3, but is ${r.shape.length} instead.`);if(e.shape.length!==3)throw new z(`The kernel for a conv1dWithBias operation should be 3, but is ${e.shape.length} instead`);if(t!=null&&t.shape.length!==1)throw new z(`The bias for a conv1dWithBias operation should be 1, but is ${e.shape.length} instead`);if(s==="channelsFirst"&&(r=Ue(r,[0,2,1])),o==="causal")throw new Se("The support for CAUSAL padding mode in conv1dWithBias is not implemented yet.");let i=wu(r,e,n,o==="same"?"same":"valid","NWC",a);return t!=null&&(i=cn(i,t)),i})}function GL(r,e,t,n=[1,1],o="valid",s,a,i=null){return V(()=>{if(s==null&&(s=Zr()),Rt(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(e.rank!==3&&e.rank!==4)throw new z(`conv2dWithBiasActivation expects kernel to be of rank 3 or 4, but received ${r.rank}.`);let l=pd(r,s);if(o==="causal")throw new Se("The support for CAUSAL padding mode in conv1dWithBias is not implemented yet.");return l=Go.conv2d({x:l,filter:e,strides:n,pad:o==="same"?"same":"valid",dilations:a,dataFormat:"NHWC",bias:t,activation:i}),s==="channelsFirst"&&(l=Ue(l,[0,3,1,2])),l})}function oQ(r,e,t,n=[1,1,1],o="valid",s,a){return V(()=>{if(s==null&&(s=Zr()),Rt(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(e.rank!==4&&e.rank!==5)throw new z(`conv3dWithBias expects kernel to be of rank 4 or 5, but received ${r.rank}.`);let i=Q0(r,s);if(o==="causal")throw new Se("The support for CAUSAL padding mode in conv3dWithBias is not implemented yet.");return i=Dm(i,e,n,o==="same"?"same":"valid","NDHWC",a),t!=null&&(i=cn(i,t)),s==="channelsFirst"&&(i=Ue(i,[0,4,1,2,3])),i})}var Wp=class extends Pe{constructor(e,t){super(t);if(this.bias=null,this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_BIAS_INITIALIZER="zeros",Wp.verifyArgs(t),this.rank=e,qt(this.rank,"rank"),this.rank!==1&&this.rank!==2&&this.rank!==3)throw new Se(`Convolution layer for rank other than 1, 2, or 3 (${this.rank}) is not implemented yet.`);if(this.kernelSize=Il(t.kernelSize,e,"kernelSize"),this.strides=Il(t.strides==null?1:t.strides,e,"strides"),this.padding=t.padding==null?"valid":t.padding,Jr(this.padding),this.dataFormat=t.dataFormat==null?"channelsLast":t.dataFormat,Rt(this.dataFormat),this.activation=Bs(t.activation),this.useBias=t.useBias==null?!0:t.useBias,this.biasInitializer=pt(t.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.biasConstraint=Pt(t.biasConstraint),this.biasRegularizer=wt(t.biasRegularizer),this.activityRegularizer=wt(t.activityRegularizer),this.dilationRate=Il(t.dilationRate==null?1:t.dilationRate,e,"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(e){if(Gn("kernelSize"in e,"required key 'kernelSize' not in config"),typeof e.kernelSize!="number"&&!ax(e.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(e.kernelSize)}.`)}getConfig(){let e={kernelSize:this.kernelSize,strides:this.strides,padding:this.padding,dataFormat:this.dataFormat,dilationRate:this.dilationRate,activation:zs(this.activation),useBias:this.useBias,biasInitializer:vt(this.biasInitializer),biasRegularizer:st(this.biasRegularizer),activityRegularizer:st(this.activityRegularizer),biasConstraint:Ot(this.biasConstraint)},t=super.getConfig();return Object.assign(e,t),e}},pc=class extends Wp{constructor(e,t){super(e,t);this.kernel=null,pc.verifyArgs(t),this.filters=t.filters,qt(this.filters,"filters"),this.kernelInitializer=pt(t.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.kernelConstraint=Pt(t.kernelConstraint),this.kernelRegularizer=wt(t.kernelRegularizer)}build(e){e=Je(e);let t=this.dataFormat==="channelsFirst"?1:e.length-1;if(e[t]==null)throw new z(`The channel dimension of the input should be defined. Found ${e[t]}`);let n=e[t],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:{[t]:n}}],this.built=!0}call(e,t){return V(()=>{e=Fe(e);let n,o=this.bias==null?null:this.bias.read(),s=lx(this.activation.getClassName());if(s!=null&&this.rank===2)n=GL(e,this.kernel.read(),o,this.strides,this.padding,this.dataFormat,this.dilationRate,s);else{if(this.rank===1)n=nQ(e,this.kernel.read(),o,this.strides[0],this.padding,this.dataFormat,this.dilationRate[0]);else if(this.rank===2)n=GL(e,this.kernel.read(),o,this.strides,this.padding,this.dataFormat,this.dilationRate);else if(this.rank===3)n=oQ(e,this.kernel.read(),o,this.strides,this.padding,this.dataFormat,this.dilationRate);else throw new Se("convolutions greater than 3D are not implemented yet.");this.activation!=null&&(n=this.activation.apply(n))}return n})}computeOutputShape(e){e=Je(e);let t=[],n=this.dataFormat==="channelsLast"?e.slice(1,e.length-1):e.slice(2);for(let s=0;s 0 but got ${JSON.stringify(e.filters)}`)}},Nl=class extends pc{constructor(e){super(2,e);Nl.verifyArgs(e)}getConfig(){let e=super.getConfig();return delete e.rank,e}static verifyArgs(e){if(typeof e.kernelSize!="number"&&!ax(e.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(e.kernelSize)}.`)}};Nl.className="Conv2D";J.registerClass(Nl);var mc=class extends pc{constructor(e){super(3,e);mc.verifyArgs(e)}getConfig(){let e=super.getConfig();return delete e.rank,e}static verifyArgs(e){if(typeof e.kernelSize!="number"&&!(Array.isArray(e.kernelSize)&&(e.kernelSize.length===1||e.kernelSize.length===3)))throw new z(`Conv3D expects config.kernelSize to be number or [number, number, number], but received ${JSON.stringify(e.kernelSize)}.`)}};mc.className="Conv3D";J.registerClass(mc);var md=class extends Nl{constructor(e){super(e);if(this.inputSpec=[new Tt({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(e){if(e=Je(e),e.length!==4)throw new z("Input should have rank 4; Received input shape: "+JSON.stringify(e));let t=this.dataFormat==="channelsFirst"?1:e.length-1;if(e[t]==null)throw new z("The channel dimension of the inputs should be defined. Found `None`.");let n=e[t],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 Tt({ndim:4,axes:{[t]:n}})],this.built=!0}call(e,t){return V(()=>{let n=Fe(e);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],a,i;this.dataFormat==="channelsFirst"?(a=2,i=3):(a=1,i=2);let l=o[a],u=o[i],c=this.kernelSize[0],p=this.kernelSize[1],m=this.strides[0],f=this.strides[1],d=cd(l,m,c,this.padding),h=cd(u,f,p,this.padding),g=[s,d,h,this.filters];this.dataFormat!=="channelsLast"&&(n=Ue(n,[0,2,3,1]));let x=_u(n,this.kernel.read(),g,this.strides,this.padding);return this.dataFormat!=="channelsLast"&&(x=Ue(x,[0,3,1,2])),this.bias!=null&&(x=cn(x,this.bias.read(),this.dataFormat)),this.activation!=null&&(x=this.activation.apply(x)),x})}computeOutputShape(e){e=Je(e);let t=e.slice(),n,o,s;this.dataFormat==="channelsFirst"?(n=1,o=2,s=3):(n=3,o=1,s=2);let a=this.kernelSize[0],i=this.kernelSize[1],l=this.strides[0],u=this.strides[1];return t[n]=this.filters,t[o]=cd(t[o],l,a,this.padding),t[s]=cd(t[s],u,i,this.padding),t}getConfig(){let e=super.getConfig();return delete e.dilationRate,e}};md.className="Conv2DTranspose";J.registerClass(md);var eC=class extends pc{constructor(e,t){super(e,t);if(this.DEFAULT_DEPTHWISE_INITIALIZER="glorotUniform",this.DEFAULT_POINTWISE_INITIALIZER="glorotUniform",this.depthwiseKernel=null,this.pointwiseKernel=null,t.filters==null)throw new z("The `filters` configuration field is required by SeparableConv, but is unspecified.");if(t.kernelInitializer!=null||t.kernelRegularizer!=null||t.kernelConstraint!=null)throw new z("Fields kernelInitializer, kernelRegularizer and kernelConstraint are invalid for SeparableConv2D. Use depthwiseInitializer, depthwiseRegularizer, depthwiseConstraint, pointwiseInitializer, pointwiseRegularizer and pointwiseConstraint instead.");if(t.padding!=null&&t.padding!=="same"&&t.padding!=="valid")throw new z(`SeparableConv${this.rank}D supports only padding modes: 'same' and 'valid', but received ${JSON.stringify(t.padding)}`);this.depthMultiplier=t.depthMultiplier==null?1:t.depthMultiplier,this.depthwiseInitializer=pt(t.depthwiseInitializer||this.DEFAULT_DEPTHWISE_INITIALIZER),this.depthwiseRegularizer=wt(t.depthwiseRegularizer),this.depthwiseConstraint=Pt(t.depthwiseConstraint),this.pointwiseInitializer=pt(t.depthwiseInitializer||this.DEFAULT_POINTWISE_INITIALIZER),this.pointwiseRegularizer=wt(t.pointwiseRegularizer),this.pointwiseConstraint=Pt(t.pointwiseConstraint)}build(e){if(e=Je(e),e.length{e=Fe(e);let n;if(this.rank===1)throw new Se("1D separable convolution is not implemented yet.");return this.rank===2&&(this.dataFormat==="channelsFirst"&&(e=Ue(e,[0,2,3,1])),n=Um(e,this.depthwiseKernel.read(),this.pointwiseKernel.read(),this.strides,this.padding,this.dilationRate,"NHWC")),this.useBias&&(n=cn(n,this.bias.read(),this.dataFormat)),this.activation!=null&&(n=this.activation.apply(n)),this.dataFormat==="channelsFirst"&&(n=Ue(n,[0,3,1,2])),n})}getConfig(){let e=super.getConfig();return delete e.rank,delete e.kernelInitializer,delete e.kernelRegularizer,delete e.kernelConstraint,e.depthwiseInitializer=vt(this.depthwiseInitializer),e.pointwiseInitializer=vt(this.pointwiseInitializer),e.depthwiseRegularizer=st(this.depthwiseRegularizer),e.pointwiseRegularizer=st(this.pointwiseRegularizer),e.depthwiseConstraint=Ot(this.depthwiseConstraint),e.pointwiseConstraint=Ot(this.pointwiseConstraint),e}};eC.className="SeparableConv";var fd=class extends eC{constructor(e){super(2,e)}};fd.className="SeparableConv2D";J.registerClass(fd);var fc=class extends pc{constructor(e){super(1,e);fc.verifyArgs(e),this.inputSpec=[{ndim:3}]}getConfig(){let e=super.getConfig();return delete e.rank,delete e.dataFormat,e}static verifyArgs(e){if(typeof e.kernelSize!="number"&&!ax(e.kernelSize,"number",1,1))throw new z(`Conv1D expects config.kernelSize to be number or number[] with length 1, but received ${JSON.stringify(e.kernelSize)}.`)}};fc.className="Conv1D";J.registerClass(fc);var dd=class extends Pe{constructor(e){super(e);typeof e.cropping=="number"?this.cropping=[[e.cropping,e.cropping],[e.cropping,e.cropping]]:typeof e.cropping[0]=="number"?this.cropping=[[e.cropping[0],e.cropping[0]],[e.cropping[1],e.cropping[1]]]:this.cropping=e.cropping,this.dataFormat=e.dataFormat===void 0?"channelsLast":e.dataFormat,this.inputSpec=[{ndim:4}]}computeOutputShape(e){return this.dataFormat==="channelsFirst"?[e[0],e[1],e[2]-this.cropping[0][0]-this.cropping[0][1],e[3]-this.cropping[1][0]-this.cropping[1][1]]:[e[0],e[1]-this.cropping[0][0]-this.cropping[0][1],e[2]-this.cropping[1][0]-this.cropping[1][1],e[3]]}call(e,t){return V(()=>{if(e=Fe(e),this.dataFormat==="channelsLast"){let n=Bf(e,this.cropping[0][0],e.shape[1]-this.cropping[0][0]-this.cropping[0][1],2);return Bf(n,this.cropping[1][0],e.shape[2]-this.cropping[1][1]-this.cropping[1][0],3)}else{let n=Bf(e,this.cropping[0][0],e.shape[2]-this.cropping[0][0]-this.cropping[0][1],3);return Bf(n,this.cropping[1][0],e.shape[3]-this.cropping[1][1]-this.cropping[1][0],4)}})}getConfig(){let e={cropping:this.cropping,dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}};dd.className="Cropping2D";J.registerClass(dd);var hd=class extends Pe{constructor(e){super(e);this.DEFAULT_SIZE=[2,2],this.inputSpec=[{ndim:4}],this.size=e.size==null?this.DEFAULT_SIZE:e.size,this.dataFormat=e.dataFormat==null?"channelsLast":e.dataFormat,Rt(this.dataFormat),this.interpolation=e.interpolation==null?"nearest":e.interpolation,XM(this.interpolation)}computeOutputShape(e){if(this.dataFormat==="channelsFirst"){let t=e[2]==null?null:this.size[0]*e[2],n=e[3]==null?null:this.size[1]*e[3];return[e[0],e[1],t,n]}else{let t=e[1]==null?null:this.size[0]*e[1],n=e[2]==null?null:this.size[1]*e[2];return[e[0],t,n,e[3]]}}call(e,t){return V(()=>{let n=Fe(e),o=n.shape;if(this.dataFormat==="channelsFirst"){n=Ue(n,[0,2,3,1]);let s=this.size[0]*o[2],a=this.size[1]*o[3],i=this.interpolation==="nearest"?n.resizeNearestNeighbor([s,a]):n.resizeBilinear([s,a]);return Ue(i,[0,3,1,2])}else{let s=this.size[0]*o[1],a=this.size[1]*o[2];return this.interpolation==="nearest"?n.resizeNearestNeighbor([s,a]):n.resizeBilinear([s,a])}})}getConfig(){let e={size:this.size,dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}};hd.className="UpSampling2D";J.registerClass(hd);function sQ(r,e,t=[1,1],n="valid",o,s){return V(()=>{o==null&&(o=Zr()),Rt(o);let a=pd(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(e.rank!==4)throw new z(`depthwiseKernel is required to be 4-D, but is instead ${e.rank}-D`);return a=Cs(a,e,t,n==="same"?"same":"valid","NHWC",s),o==="channelsFirst"&&(a=Ue(a,[0,3,1,2])),a})}var gd=class extends Wp{constructor(e){super(2,e);this.depthwiseKernel=null,this.depthMultiplier=e.depthMultiplier==null?1:e.depthMultiplier,this.depthwiseInitializer=pt(e.depthwiseInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.depthwiseConstraint=Pt(e.depthwiseConstraint),this.depthwiseRegularizer=wt(e.depthwiseRegularizer)}build(e){if(e=Je(e),e.length<4)throw new z(`Inputs to DepthwiseConv2D should have rank 4. Received input shape: ${JSON.stringify(e)}.`);let t=this.dataFormat==="channelsFirst"?1:3;if(e[t]==null||e[t]<0)throw new z(`The channel dimension of the inputs to DepthwiseConv2D should be defined, but is not (${e[t]}).`);let n=e[t],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(e,t){return V(()=>{e=Fe(e);let n=sQ(e,this.depthwiseKernel.read(),this.strides,this.padding,this.dataFormat,null);return this.useBias&&(n=cn(n,this.bias.read(),this.dataFormat)),this.activation!=null&&(n=this.activation.apply(n)),n})}computeOutputShape(e){e=Je(e);let t=this.dataFormat==="channelsFirst"?e[2]:e[1],n=this.dataFormat==="channelsFirst"?e[3]:e[2],o=this.dataFormat==="channelsFirst"?e[1]*this.depthMultiplier:e[3]*this.depthMultiplier,s=dn(t,this.kernelSize[0],this.padding,this.strides[0]),a=dn(n,this.kernelSize[1],this.padding,this.strides[1]);return this.dataFormat==="channelsFirst"?[e[0],o,s,a]:[e[0],s,a,o]}getConfig(){let e=super.getConfig();return e.depthMultiplier=this.depthMultiplier,e.depthwiseInitializer=vt(this.depthwiseInitializer),e.depthwiseRegularizer=st(this.depthwiseRegularizer),e.depthwiseConstraint=Ot(this.depthwiseRegularizer),e}};gd.className="DepthwiseConv2D";J.registerClass(gd);function tC(r,e,t,n){if(Array.isArray(r)){if(e!=null||t!=null)throw new z("When inputs is an array, neither initialState or constants should be provided");n!=null&&(t=r.slice(r.length-n,r.length),r=r.slice(0,r.length-n)),r.length>1&&(e=r.slice(1,r.length)),r=r[0]}function o(s){return s==null||Array.isArray(s)?s:[s]}return e=o(e),t=o(t),{inputs:r,initialState:e,constants:t}}function rC(r,e,t,n=!1,o,s,a=!1,i=!1){return V(()=>{let l=e.shape.length;if(l<3)throw new z(`Input should be at least 3D, but is ${l}D.`);let u=[1,0].concat(zr(2,l));if(e=Ue(e,u),s!=null)throw new Se("The rnn() functoin of the deeplearn.js backend does not support constants yet.");a&&console.warn("Backend rnn(): the unroll = true option is not applicable to the imperative deeplearn.js backend."),o!=null&&(o=o.asType("bool").asType("float32"),o.rank===l-1&&(o=ar(o,-1)),o=Ue(o,u)),n&&(e=Ht(e,0),o!=null&&(o=Ht(o,0)));let c=[],p,m=t,f=e.shape[0],d=pr(e),h;o!=null&&(h=pr(o));for(let x=0;xr(w,m));if(o==null)p=b[0],m=b[1];else{let _=V(()=>{let k=h[x],A=tr(k).sub(k),S=b[0].mul(k).add(m[0].mul(A)),$=m.map((O,M)=>b[1][M].mul(k).add(O.mul(A)));return{output:S,newStates:$}});p=_.output,m=_.newStates}i&&c.push(p)}let g;return i&&(g=Vt(c,1)),[p,g,m]})}var hn=class extends Pe{constructor(e){super(e);let t;if(e.cell==null)throw new z("cell property is missing for the constructor of RNN.");if(Array.isArray(e.cell)?t=new Up({cells:e.cell}):t=e.cell,t.stateSize==null)throw new z("The RNN cell should have an attribute `stateSize` (tuple of integers, one integer per RNN state).");this.cell=t,this.returnSequences=e.returnSequences==null?!1:e.returnSequences,this.returnState=e.returnState==null?!1:e.returnState,this.goBackwards=e.goBackwards==null?!1:e.goBackwards,this._stateful=e.stateful==null?!1:e.stateful,this.unroll=e.unroll==null?!1:e.unroll,this.supportsMasking=!0,this.inputSpec=[new Tt({ndim:3})],this.stateSpec=null,this.states_=null,this.numConstants=null,this.keptStates=[]}getStates(){if(this.states_==null){let e=Array.isArray(this.cell.stateSize)?this.cell.stateSize.length:1;return zr(0,e).map(t=>null)}else return this.states_}setStates(e){this.states_=e}computeOutputShape(e){gx(e)&&(e=e[0]),e=e;let t=this.cell.stateSize;Array.isArray(t)||(t=[t]);let n=t[0],o;if(this.returnSequences?o=[e[0],e[1],n]:o=[e[0],n],this.returnState){let s=[];for(let a of t)s.push([e[0],a]);return[o].concat(s)}else return o}computeMask(e,t){return V(()=>{Array.isArray(t)&&(t=t[0]);let n=this.returnSequences?t: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 e=Array.isArray(this.cell.stateSize)?this.cell.stateSize.length:1,t=[];for(let n=0;ni.shape[i.shape.length-1]),a))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=a.map(i=>new Tt({shape:[null,i]}));this.stateful&&this.resetStates()}resetStates(e,t=!1){V(()=>{if(!this.stateful)throw new Sn("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=>gt([n,o])):this.states_=[gt([n,this.cell.stateSize])];else if(e==null)Ae(this.states_),this.keptStates!=null&&(Ae(this.keptStates),this.keptStates=[]),Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map(o=>gt([n,o])):this.states_[0]=gt([n,this.cell.stateSize]);else{if(Array.isArray(e)||(e=[e]),e.length!==this.states_.length)throw new z(`Layer ${this.name} expects ${this.states_.length} state(s), but it received ${e.length} state value(s). Input received: ${e}`);t===!0?this.keptStates.push(this.states_.slice()):Ae(this.states_);for(let o=0;oDt(o.clone()))})}apply(e,t){let n=t==null?null:t.initialState,o=t==null?null:t.constants;t==null&&(t={});let s=tC(e,n,o,this.numConstants);e=s.inputs,n=s.initialState,o=s.constants;let a=[],i=[];if(n!=null){t.initialState=n,a=a.concat(n),this.stateSpec=[];for(let u of n)this.stateSpec.push(new Tt({shape:u.shape}));i=i.concat(this.stateSpec)}if(o!=null&&(t.constants=o,a=a.concat(o),this.numConstants=o.length),a[0]instanceof Vr){let u=[e].concat(a),c=this.inputSpec.concat(i),p=this.inputSpec;this.inputSpec=c;let m=super.apply(u,t);return this.inputSpec=p,m}else return super.apply(e,t)}call(e,t){return V(()=>{let n=t==null?null:t.mask,o=t==null?null:t.training,s=t==null?null:t.initialState;e=Fe(e),s==null&&(this.stateful?s=this.states_:s=this.getInitialState(e));let a=Array.isArray(this.cell.stateSize)?this.cell.stateSize.length:1;if(s.length!==a)throw new z(`RNN Layer has ${a} 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 i={training:o},u=rC((d,h)=>{let g=this.cell.call([d].concat(h),i);return[g[0],g.slice(1)]},e,s,this.goBackwards,n,null,this.unroll,this.returnSequences),c=u[0],p=u[1],m=u[2];this.stateful&&this.resetStates(m,o);let f=this.returnSequences?p:c;return this.returnState?[f].concat(m):f})}getInitialState(e){return V(()=>{let t=gt(e.shape);return t=ge(t,[1,2]),t=Va(t),Array.isArray(this.cell.stateSize)?this.cell.stateSize.map(n=>n>1?px(t,[1,n]):t):this.cell.stateSize>1?[px(t,[1,this.cell.stateSize])]:[t]})}get trainableWeights(){return this.trainable?this.cell.trainableWeights:[]}get nonTrainableWeights(){return this.trainable?this.cell.nonTrainableWeights:this.cell.weights}setFastWeightInitDuringBuild(e){super.setFastWeightInitDuringBuild(e),this.cell!=null&&this.cell.setFastWeightInitDuringBuild(e)}getConfig(){let e=super.getConfig(),t={returnSequences:this.returnSequences,returnState:this.returnState,goBackwards:this.goBackwards,stateful:this.stateful,unroll:this.unroll};this.numConstants!=null&&(t.numConstants=this.numConstants);let n=this.cell.getConfig();return this.getClassName()===hn.className&&(t.cell={className:this.cell.getClassName(),config:n}),Object.assign({},n,e,t)}static fromConfig(e,t,n={}){let o=t.cell,s=Qr(o,n);return new e(Object.assign(t,{cell:s}))}};hn.className="RNN";J.registerClass(hn);var Sl=class extends Pe{},qp=class extends Sl{constructor(e){super(e);this.DEFAULT_ACTIVATION="tanh",this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_RECURRENT_INITIALIZER="orthogonal",this.DEFAULT_BIAS_INITIALIZER="zeros",this.units=e.units,qt(this.units,"units"),this.activation=Bs(e.activation==null?this.DEFAULT_ACTIVATION:e.activation),this.useBias=e.useBias==null?!0:e.useBias,this.kernelInitializer=pt(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.recurrentInitializer=pt(e.recurrentInitializer||this.DEFAULT_RECURRENT_INITIALIZER),this.biasInitializer=pt(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.kernelRegularizer=wt(e.kernelRegularizer),this.recurrentRegularizer=wt(e.recurrentRegularizer),this.biasRegularizer=wt(e.biasRegularizer),this.kernelConstraint=Pt(e.kernelConstraint),this.recurrentConstraint=Pt(e.recurrentConstraint),this.biasConstraint=Pt(e.biasConstraint),this.dropout=oc([1,Ms([0,e.dropout==null?0:e.dropout])]),this.recurrentDropout=oc([1,Ms([0,e.recurrentDropout==null?0:e.recurrentDropout])]),this.stateSize=this.units,this.dropoutMask=null,this.recurrentDropoutMask=null}build(e){e=Je(e),this.kernel=this.addWeight("kernel",[e[e.length-1],this.units],null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.recurrentKernel=this.addWeight("recurrent_kernel",[this.units,this.units],null,this.recurrentInitializer,this.recurrentRegularizer,!0,this.recurrentConstraint),this.useBias?this.bias=this.addWeight("bias",[this.units],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint):this.bias=null,this.built=!0}call(e,t){return V(()=>{if(e=e,e.length!==2)throw new z(`SimpleRNNCell expects 2 input Tensors, got ${e.length}.`);let n=e[1];e=e[0];let o=t.training==null?!1:t.training;0tr(e),rate:this.dropout,training:o})),0tr(n),rate:this.recurrentDropout,training:o}));let s,a=this.dropoutMask,i=this.recurrentDropoutMask;a!=null?s=rs(P(e,a),this.kernel.read()):s=rs(e,this.kernel.read()),this.bias!=null&&(s=cn(s,this.bias.read())),i!=null&&(n=P(n,i));let l=Q(s,rs(n,this.recurrentKernel.read()));return this.activation!=null&&(l=this.activation.apply(l)),[l,l]})}getConfig(){let e=super.getConfig(),t={units:this.units,activation:zs(this.activation),useBias:this.useBias,kernelInitializer:vt(this.kernelInitializer),recurrentInitializer:vt(this.recurrentInitializer),biasInitializer:vt(this.biasInitializer),kernelRegularizer:st(this.kernelRegularizer),recurrentRegularizer:st(this.recurrentRegularizer),biasRegularizer:st(this.biasRegularizer),activityRegularizer:st(this.activityRegularizer),kernelConstraint:Ot(this.kernelConstraint),recurrentConstraint:Ot(this.recurrentConstraint),biasConstraint:Ot(this.biasConstraint),dropout:this.dropout,recurrentDropout:this.recurrentDropout};return Object.assign({},e,t)}};qp.className="SimpleRNNCell";J.registerClass(qp);var xd=class extends hn{constructor(e){e.cell=new qp(e),super(e)}call(e,t){return V(()=>{this.cell.dropoutMask!=null&&(Ae(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&(Ae(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null);let n=t==null?null:t.mask,o=t==null?null:t.training,s=t==null?null:t.initialState;return super.call(e,{mask:n,training:o,initialState:s})})}static fromConfig(e,t){return new e(t)}};xd.className="SimpleRNN";J.registerClass(xd);var Hp=class extends Sl{constructor(e){super(e);if(this.DEFAULT_ACTIVATION="tanh",this.DEFAULT_RECURRENT_ACTIVATION="hardSigmoid",this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_RECURRENT_INITIALIZER="orthogonal",this.DEFAULT_BIAS_INITIALIZER="zeros",e.resetAfter)throw new z("GRUCell does not support reset_after parameter set to true.");this.units=e.units,qt(this.units,"units"),this.activation=Bs(e.activation===void 0?this.DEFAULT_ACTIVATION:e.activation),this.recurrentActivation=Bs(e.recurrentActivation===void 0?this.DEFAULT_RECURRENT_ACTIVATION:e.recurrentActivation),this.useBias=e.useBias==null?!0:e.useBias,this.kernelInitializer=pt(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.recurrentInitializer=pt(e.recurrentInitializer||this.DEFAULT_RECURRENT_INITIALIZER),this.biasInitializer=pt(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.kernelRegularizer=wt(e.kernelRegularizer),this.recurrentRegularizer=wt(e.recurrentRegularizer),this.biasRegularizer=wt(e.biasRegularizer),this.kernelConstraint=Pt(e.kernelConstraint),this.recurrentConstraint=Pt(e.recurrentConstraint),this.biasConstraint=Pt(e.biasConstraint),this.dropout=oc([1,Ms([0,e.dropout==null?0:e.dropout])]),this.recurrentDropout=oc([1,Ms([0,e.recurrentDropout==null?0:e.recurrentDropout])]),this.implementation=e.implementation,this.stateSize=this.units,this.dropoutMask=null,this.recurrentDropoutMask=null}build(e){e=Je(e);let t=e[e.length-1];this.kernel=this.addWeight("kernel",[t,this.units*3],null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.recurrentKernel=this.addWeight("recurrent_kernel",[this.units,this.units*3],null,this.recurrentInitializer,this.recurrentRegularizer,!0,this.recurrentConstraint),this.useBias?this.bias=this.addWeight("bias",[this.units*3],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint):this.bias=null,this.built=!0}call(e,t){return V(()=>{if(e=e,e.length!==2)throw new z(`GRUCell expects 2 input Tensors (inputs, h, c), got ${e.length}.`);let n=t.training==null?!1:t.training,o=e[1];e=e[0],0tr(e),rate:this.dropout,training:n,count:3})),0tr(o),rate:this.recurrentDropout,training:n,count:3}));let s=this.dropoutMask,a=this.recurrentDropoutMask,i,l,u;0{this.cell.dropoutMask!=null&&(Ae(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&(Ae(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null);let n=t==null?null:t.mask,o=t==null?null:t.training,s=t==null?null:t.initialState;return super.call(e,{mask:n,training:o,initialState:s})})}static fromConfig(e,t){return t.implmentation===0&&(t.implementation=1),new e(t)}};yd.className="GRU";J.registerClass(yd);var Tl=class extends Sl{constructor(e){super(e);this.DEFAULT_ACTIVATION="tanh",this.DEFAULT_RECURRENT_ACTIVATION="hardSigmoid",this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_RECURRENT_INITIALIZER="orthogonal",this.DEFAULT_BIAS_INITIALIZER="zeros",this.units=e.units,qt(this.units,"units"),this.activation=Bs(e.activation===void 0?this.DEFAULT_ACTIVATION:e.activation),this.recurrentActivation=Bs(e.recurrentActivation===void 0?this.DEFAULT_RECURRENT_ACTIVATION:e.recurrentActivation),this.useBias=e.useBias==null?!0:e.useBias,this.kernelInitializer=pt(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.recurrentInitializer=pt(e.recurrentInitializer||this.DEFAULT_RECURRENT_INITIALIZER),this.biasInitializer=pt(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.unitForgetBias=e.unitForgetBias,this.kernelRegularizer=wt(e.kernelRegularizer),this.recurrentRegularizer=wt(e.recurrentRegularizer),this.biasRegularizer=wt(e.biasRegularizer),this.kernelConstraint=Pt(e.kernelConstraint),this.recurrentConstraint=Pt(e.recurrentConstraint),this.biasConstraint=Pt(e.biasConstraint),this.dropout=oc([1,Ms([0,e.dropout==null?0:e.dropout])]),this.recurrentDropout=oc([1,Ms([0,e.recurrentDropout==null?0:e.recurrentDropout])]),this.implementation=e.implementation,this.stateSize=[this.units,this.units],this.dropoutMask=null,this.recurrentDropoutMask=null}build(e){var t;e=Je(e);let n=e[e.length-1];this.kernel=this.addWeight("kernel",[n,this.units*4],null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.recurrentKernel=this.addWeight("recurrent_kernel",[this.units,this.units*4],null,this.recurrentInitializer,this.recurrentRegularizer,!0,this.recurrentConstraint);let o;if(this.useBias){if(this.unitForgetBias){let s=this.biasInitializer,a=this.units;o=new(t=class extends pn{apply(l,u){let c=s.apply([a]),p=new ic().apply([a]),m=s.apply([a*2]);return N0(N0(c,p),m)}},t.className="CustomInit",t)}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(e,t){return V(()=>{let n=t.training==null?!1:t.training;if(e=e,e.length!==3)throw new z(`LSTMCell expects 3 input Tensors (inputs, h, c), got ${e.length}.`);let o=e[1],s=e[2];e=e[0],0tr(e),rate:this.dropout,training:n,count:4})),0tr(o),rate:this.recurrentDropout,training:n,count:4}));let a=this.dropoutMask,i=this.recurrentDropoutMask,l,u,c,p;0{this.cell.dropoutMask!=null&&(Ae(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&(Ae(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null);let n=t==null?null:t.mask,o=t==null?null:t.training,s=t==null?null:t.initialState;return super.call(e,{mask:n,training:o,initialState:s})})}static fromConfig(e,t){return t.implmentation===0&&(t.implementation=1),new e(t)}};bd.className="LSTM";J.registerClass(bd);var Up=class extends Sl{constructor(e){super(e);this.cells=e.cells}get stateSize(){let e=[];for(let t of this.cells.slice().reverse())Array.isArray(t.stateSize)?e.push(...t.stateSize):e.push(t.stateSize);return e}call(e,t){return V(()=>{e=e;let n=e.slice(1),o=[];for(let i of this.cells.slice().reverse())Array.isArray(i.stateSize)?o.push(n.splice(0,i.stateSize.length)):o.push(n.splice(0,1));o.reverse();let s=[],a;for(let i=0;i{Ps(`RNNCell_${o}`,()=>{n.build(e),Array.isArray(n.stateSize)?t=n.stateSize[0]:t=n.stateSize,e=[e[0],t]})}),this.built=!0}getConfig(){let e=super.getConfig(),t=s=>({className:s.getClassName(),config:s.getConfig()}),o={cells:this.cells.map(t)};return Object.assign({},e,o)}static fromConfig(e,t,n={}){let o=[];for(let s of t.cells)o.push(Qr(s,n));return new e({cells:o})}get trainableWeights(){if(!this.trainable)return[];let e=[];for(let t of this.cells)e.push(...t.trainableWeights);return e}get nonTrainableWeights(){let e=[];for(let t of this.cells)e.push(...t.nonTrainableWeights);if(!this.trainable){let t=[];for(let n of this.cells)t.push(...n.trainableWeights);return t.concat(e)}return e}getWeights(){let e=[];for(let t of this.cells)e.push(...t.weights);return Xf(e)}setWeights(e){let t=[];for(let n of this.cells){let o=n.weights.length,s=e.splice(o);for(let a=0;afx(e(),t),a=()=>bl(s,e,n);return!o||o<=1?Dt(a().clone()):Array(o).fill(void 0).map(a).map(l=>Dt(l.clone()))}var iQ=function(r,e){var t={};for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&e.indexOf(n)<0&&(t[n]=r[n]);if(r!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,n=Object.getOwnPropertySymbols(r);o{if(this.cell.dropoutMask!=null&&(Ae(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&(Ae(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null),t&&t.constants)throw new z("ConvRNN2D cell does not support constants");let n=t==null?null:t.mask,o=t==null?null:t.training,s=t==null?null:t.initialState;return super.call(e,{mask:n,training:o,initialState:s})})}computeOutputShape(e){let t=this.computeSingleOutputShape(e);return this.returnSequences||(t=[t[0],...t.slice(2)]),this.returnState&&(t=[t,...Array(2).fill([e[0],...t.slice(-3)])]),t}getInitialState(e){return V(()=>{let{stateSize:t}=this.cell,n=e.shape,o=this.computeSingleOutputShape(n),s=[o[0],...o.slice(2)],a=gt(s);return Array.isArray(t)?Array(t.length).fill(a):[a]})}resetStates(e,t=!1){V(()=>{if(!this.stateful)throw new Sn("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(()=>gt(s)):this.states_=[gt(s)];else if(e==null)Ae(this.states_),this.keptStates!=null&&(Ae(this.keptStates),this.keptStates=[]),Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map(()=>gt(s)):this.states_[0]=gt(s);else{if(Array.isArray(e)||(e=[e]),e.length!==this.states_.length)throw new z(`Layer ${this.name} expects ${this.states_.length} state(s), but it received ${e.length} state value(s). Input received: ${e}`);t?this.keptStates.push(this.states_.slice()):Ae(this.states_);for(let i=0;iDt(i.clone()))})}computeSingleOutputShape(e){let{dataFormat:t,filters:n,kernelSize:o,padding:s,strides:a,dilationRate:i}=this.cell,l=t==="channelsFirst",u=e[l?3:2],c=e[l?4:3],p=dn(u,o[0],s,a[0],i[0]),m=dn(c,o[1],s,a[1],i[1]);return[...e.slice(0,2),...l?[n,p,m]:[p,m,n]]}};nC.className="ConvRNN2D";var Kp=class extends Tl{constructor(e){let{filters:t,kernelSize:n,strides:o,padding:s,dataFormat:a,dilationRate:i}=e;super(Object.assign({},e,{units:t}));this.filters=t,qt(this.filters,"filters"),this.kernelSize=Il(n,2,"kernelSize"),this.kernelSize.forEach(l=>qt(l,"kernelSize")),this.strides=Il(o||1,2,"strides"),this.strides.forEach(l=>qt(l,"strides")),this.padding=s||"valid",Jr(this.padding),this.dataFormat=a||"channelsLast",Rt(this.dataFormat),this.dilationRate=Il(i||1,2,"dilationRate"),this.dilationRate.forEach(l=>qt(l,"dilationRate"))}build(e){var t;e=Je(e);let n=this.dataFormat==="channelsFirst"?1:e.length-1;if(e[n]==null)throw new z(`The channel dimension of the input should be defined. Found ${e[n]}`);let o=e[n],s=4,a=this.kernelSize.concat([o,this.filters*s]);this.kernel=this.addWeight("kernel",a,null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint);let i=this.kernelSize.concat([this.filters,this.filters*s]);if(this.recurrentKernel=this.addWeight("recurrent_kernel",i,null,this.recurrentInitializer,this.recurrentRegularizer,!0,this.recurrentConstraint),this.useBias){let l;if(this.unitForgetBias){let u=this.biasInitializer,c=this.filters;l=new(t=class extends pn{apply(m,f){let d=u.apply([c]),h=Nr([c]),g=u.apply([c*2]);return Tp([d,h,g])}},t.className="CustomInit",t)}else l=this.biasInitializer;this.bias=this.addWeight("bias",[this.filters*s],null,l,this.biasRegularizer,!0,this.biasConstraint)}this.built=!0}call(e,t){return V(()=>{if(e.length!==3)throw new z(`ConvLSTM2DCell expects 3 input Tensors (inputs, h, c), got ${e.length}.`);let n=t.training||!1,o=e[0],s=e[1],a=e[2],i=4;0tr(o),rate:this.dropout,training:n,count:i}));let l=this.dropoutMask,u=(te,ie,le)=>!ie||!ie[le]?te:P(ie[le],te),c=u(o,l,0),p=u(o,l,1),m=u(o,l,2),f=u(o,l,3);0tr(s),rate:this.recurrentDropout,training:n,count:i}));let d=this.recurrentDropoutMask,h=u(s,d,0),g=u(s,d,1),x=u(s,d,2),w=u(s,d,3),b=3,[_,k,A,S]=cr(this.kernel.read(),i,b),[$,O,M,G]=this.useBias?cr(this.bias.read(),i):[null,null,null,null];c=this.inputConv(c,_,$,this.padding),p=this.inputConv(p,k,O,this.padding),m=this.inputConv(m,A,M,this.padding),f=this.inputConv(f,S,G,this.padding);let[j,U,q,H]=cr(this.recurrentKernel.read(),i,b);h=this.recurrentConv(h,j),g=this.recurrentConv(g,U),x=this.recurrentConv(x,q),w=this.recurrentConv(w,H);let X=this.recurrentActivation.apply(Q(c,h)),ne=this.recurrentActivation.apply(Q(p,g)),Y=Q(P(ne,a),P(X,this.activation.apply(Q(m,x)))),re=P(this.recurrentActivation.apply(Q(f,w)),this.activation.apply(Y));return[re,re,Y]})}getConfig(){let e=super.getConfig(),{units:t}=e,n=iQ(e,["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(e,t,n,o){let s=Kr(e,t,this.strides,o||"valid",this.dataFormat==="channelsFirst"?"NCHW":"NHWC",this.dilationRate);return n?cn(s,n,this.dataFormat):s}recurrentConv(e,t){return Kr(e,t,1,"same",this.dataFormat==="channelsFirst"?"NCHW":"NHWC")}};Kp.className="ConvLSTM2DCell";J.registerClass(Kp);var wd=class extends nC{constructor(e){let t=new Kp(e);super(Object.assign({},e,{cell:t}))}static fromConfig(e,t){return new e(t)}};wd.className="ConvLSTM2D";J.registerClass(wd);var Xp=class extends Pe{constructor(e){super(e);this.rate=Math.max(Math.min(e.rate,1),0),this.noiseShape=e.noiseShape,this.seed=e.seed,this.supportsMasking=!0}getNoiseShape(e){if(this.noiseShape==null)return this.noiseShape;let t=e.shape,n=[];for(let o=0;o{this.invokeCallHook(e,t);let n=Fe(e);if(0fx(n,this.rate,s,this.seed),()=>n,o)}return e})}getConfig(){let e={rate:this.rate,noiseShape:this.noiseShape,seed:this.seed},t=super.getConfig();return Object.assign(e,t),e}dispose(){return super.dispose()}};Xp.className="Dropout";J.registerClass(Xp);var _d=class extends Xp{constructor(e){super(e);this.inputSpec=[{ndim:3}]}getNoiseShape(e){let t=e.shape;return[t[0],1,t[2]]}};_d.className="SpatialDropout1D";J.registerClass(_d);var kd=class extends Pe{constructor(e){super(e);if(this.activation=null,this.useBias=!0,this.kernel=null,this.bias=null,this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_BIAS_INITIALIZER="zeros",e.batchInputShape==null&&e.inputShape==null&&e.inputDim!=null){let t=null;e.batchSize!=null&&(t=e.batchSize),this.batchInputShape=[t,e.inputDim]}this.units=e.units,qt(this.units,"units"),this.activation=Bs(e.activation),e.useBias!=null&&(this.useBias=e.useBias),this.kernelInitializer=pt(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.biasInitializer=pt(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.kernelConstraint=Pt(e.kernelConstraint),this.biasConstraint=Pt(e.biasConstraint),this.kernelRegularizer=wt(e.kernelRegularizer),this.biasRegularizer=wt(e.biasRegularizer),this.activityRegularizer=wt(e.activityRegularizer),this.supportsMasking=!0,this.inputSpec=[{minNDim:2}]}build(e){e=Je(e);let t=e[e.length-1];this.kernel==null&&(this.kernel=this.addWeight("kernel",[t,this.units],null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.useBias&&(this.bias=this.addWeight("bias",[this.units],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint))),this.inputSpec=[{minNDim:2,axes:{[-1]:t}}],this.built=!0}computeOutputShape(e){e=Je(e);let t=e.slice();return t[t.length-1]=this.units,t}call(e,t){return V(()=>{this.invokeCallHook(e,t);let n=Fe(e),o=lx(this.activation.getClassName()),s;return o!=null?s=rs(n,this.kernel.read(),o,this.bias?this.bias.read():null):(s=rs(n,this.kernel.read()),this.bias!=null&&(s=cn(s,this.bias.read())),this.activation!=null&&(s=this.activation.apply(s))),s})}getConfig(){let e={units:this.units,activation:zs(this.activation),useBias:this.useBias,kernelInitializer:vt(this.kernelInitializer),biasInitializer:vt(this.biasInitializer),kernelRegularizer:st(this.kernelRegularizer),biasRegularizer:st(this.biasRegularizer),activityRegularizer:st(this.activityRegularizer),kernelConstraint:Ot(this.kernelConstraint),biasConstraint:Ot(this.biasConstraint)},t=super.getConfig();return Object.assign(e,t),e}};kd.className="Dense";J.registerClass(kd);var vd=class extends Pe{constructor(e){e=e||{},super(e),this.inputSpec=[{minNDim:3}],this.dataFormat=e.dataFormat}computeOutputShape(e){e=Je(e);for(let t of e.slice(1))if(t==null)throw new z(`The shape of the input to "Flatten" is not fully defined (got ${e.slice(1)}). Make sure to pass a complete "input_shape" or "batch_input_shape" argument to the first layer in your model.`);return[e[0],ts(e,1)]}call(e,t){return V(()=>{this.invokeCallHook(e,t);let n=Fe(e);if(this.dataFormat==="channelsFirst"&&n.rank>1){let o=[0];for(let s=2;s{this.invokeCallHook(e,t);let n=Fe(e);return this.activation.apply(n)})}getConfig(){let e={activation:zs(this.activation)},t=super.getConfig();return Object.assign(e,t),e}};Cd.className="Activation";J.registerClass(Cd);var Id=class extends Pe{constructor(e){super(e);this.n=e.n,this.inputSpec=[{ndim:2}]}computeOutputShape(e){return[e[0],this.n,e[1]]}call(e,t){return V(()=>(e=Fe(e),eL(e,this.n)))}getConfig(){let e={n:this.n},t=super.getConfig();return Object.assign(e,t),e}};Id.className="RepeatVector";J.registerClass(Id);var Nd=class extends Pe{constructor(e){super(e);this.targetShape=e.targetShape;for(let t=0;t{this.invokeCallHook(e,t);let n=Fe(e),o=n.shape,s=o.slice(0,1).concat(this.fixUnknownDimension(o.slice(1),this.targetShape));return n.reshape(s)})}getConfig(){let e={targetShape:this.targetShape},t=super.getConfig();return Object.assign(e,t),e}};Nd.className="Reshape";J.registerClass(Nd);var Sd=class extends Pe{constructor(e){super(e);if(e.dims==null)throw new Error("Required configuration field `dims` is missing during Permute constructor call.");if(!Array.isArray(e.dims))throw new Error(`Permute constructor requires \`dims\` to be an Array, but received ${e.dims} instead.`);let t=zr(1,e.dims.length+1);if(!y.arraysEqual(e.dims.slice().sort(),t))throw new Error("Invalid permutation `dims`: "+JSON.stringify(e.dims)+" `dims` must contain consecutive integers starting from 1.");this.dims=e.dims,this.dimsIncludingBatch=[0].concat(this.dims),this.inputSpec=[new Tt({ndim:this.dims.length+1})]}computeOutputShape(e){e=Je(e);let t=e.slice();return this.dims.forEach((n,o)=>{t[o+1]=e[n]}),t}call(e,t){return Ue(Fe(e),this.dimsIncludingBatch)}getConfig(){let e={dims:this.dims},t=super.getConfig();return Object.assign(e,t),e}};Sd.className="Permute";J.registerClass(Sd);var Td=class extends Pe{constructor(e){super(e==null?{}:e);this.supportsMasking=!0,e!=null?this.maskValue=e.maskValue==null?0:e.maskValue:this.maskValue=0}computeOutputShape(e){return e}getConfig(){let e=super.getConfig(),t={maskValue:this.maskValue};return Object.assign(t,e),t}computeMask(e,t){let n=Fe(e),o=-1;return sl(Vo(n,this.maskValue),o)}call(e,t){return V(()=>{this.invokeCallHook(e,t);let n=Fe(e),o=-1,s=!0,a=sl(Vo(n,this.maskValue),o,s);return n.mul(a.asType(n.dtype))})}};Td.className="Masking";J.registerClass(Td);var Ad=class extends Pe{constructor(e){super(e);if(this.embeddings=null,this.DEFAULT_EMBEDDINGS_INITIALIZER="randomUniform",e.batchInputShape==null&&e.inputShape==null){let t=null;e.batchSize!=null&&(t=e.batchSize),e.inputLength==null?this.batchInputShape=[t,null]:this.batchInputShape=[t].concat(bt(e.inputLength))}this.inputDim=e.inputDim,qt(this.inputDim,"inputDim"),this.outputDim=e.outputDim,qt(this.outputDim,"outputDim"),this.embeddingsInitializer=pt(e.embeddingsInitializer||this.DEFAULT_EMBEDDINGS_INITIALIZER),this.embeddingsRegularizer=wt(e.embeddingsRegularizer),this.activityRegularizer=wt(e.activityRegularizer),this.embeddingsConstraint=Pt(e.embeddingsConstraint),this.maskZero=e.maskZero,this.supportsMasking=e.maskZero,this.inputLength=e.inputLength}build(e){this.embeddings=this.addWeight("embeddings",[this.inputDim,this.outputDim],this.dtype,this.embeddingsInitializer,this.embeddingsRegularizer,!0,this.embeddingsConstraint),this.built=!0}warnOnIncompatibleInputShape(e){}computeMask(e,t){return V(()=>this.maskZero?(e=Fe(e),Vo(e,Ce(e))):null)}computeOutputShape(e){if(e=Je(e),this.inputLength==null)return[...e,this.outputDim];let t=bt(this.inputLength);if(t.length!==e.length-1)throw new z(`"inputLength" is ${this.inputLength}, but received input shape has shape ${e}`);{let n=0;for(let o=0;o{this.invokeCallHook(e,t);let n=Fe(e);return n.dtype!=="int32"&&(n=Ba(n,"int32")),mx(this.embeddings.read(),n.as1D()).reshape(Je(this.computeOutputShape(n.shape)))})}getConfig(){let e={inputDim:this.inputDim,outputDim:this.outputDim,embeddingsInitializer:vt(this.embeddingsInitializer),embeddingsRegularizer:st(this.embeddingsRegularizer),activityRegularizer:st(this.activityRegularizer),embeddingsConstraint:Ot(this.embeddingsConstraint),maskZero:this.maskZero,inputLength:this.inputLength},t=super.getConfig();return Object.assign(e,t),e}};Ad.className="Embedding";J.registerClass(Ad);var Al=class extends Pe{constructor(e){super(e||{});this.supportsMasking=!0}mergeFunction(e){throw new Se}computeElementwiseOpOutputShape(e,t){if(e==null||t==null)return null;if(e.length1)throw new z(`Can not merge tensors with different batch sizes. Got tensors with shapes: ${JSON.stringify(e)}.`);let n=e[0]==null?null:e[0].slice(1);for(let s=1;ss.length);e.indexOf(null)===-1&&es(o).length===1?this.reshapeRequired=!1:this.reshapeRequired=!0}call(e,t){return V(()=>{if(e=e,this.reshapeRequired){let n=[],o=e.map(s=>s.rank);if(o.indexOf(null)===-1){let s=Ms(o);for(let a of e){let i=a.rank;for(let l=0;l1){let c=zr(1,u).concat([0]);n.push(Ue(l,c)),s=!0}else n.push(l)}let a=this.mergeFunction(n),i=a.rank;if(s){if(i==null){let l=a.shape,u=l.length,c=l[u-1],p=[c].concat(l.slice(0,l.length-1));a=Ue(a.reshape([-1,c]),[1,0]).reshape(p)}else if(i>1){let l=[i-1].concat(zr(0,i-1));a=Ue(a,l)}}return a}}else return this.mergeFunction(e)})}computeOutputShape(e){e=e;let t;e[0]==null?t=null:t=e[0].slice(1);for(let o=1;o{if(t==null)return null;if(!Array.isArray(t))throw new z("`mask` should be an Array");if(!Array.isArray(e))throw new z("`inputs` should be an Array");if(t.length!==e.length)throw new z(`The Array 'inputs' and 'mask' are expected to have the same length, but have different lengths (${e.length} vs ${t.length})`);if(t.every(o=>o==null))return null;t=t.map(o=>o==null?o:ar(o,0));let n=t[0];for(let o=1;o{let t=e[0].clone();for(let n=1;n{let t=e[0].clone();for(let n=1;n{let t=e[0].clone();for(let n=1;n{let t=e[0];for(let n=1;n{let t=e[0];for(let n=1;n1)throw new z("A `Concatenate` layer requires inputs with matching shapes except for the concat axis. Got input shapes: "+JSON.stringify(e))}mergeFunction(e){return V(()=>Tp(e,this.axis))}computeOutputShape(e){if(!(Array.isArray(e)&&Array.isArray(e[0])))throw new z("A `Concatenate` layer should be called on a list of inputs.");let t=e,n=t[0].slice(),o=this.axis<0?n.length+this.axis:this.axis;for(let s of t.slice(1)){if(n[o]==null||s[o]==null){n[o]=null;break}n[o]+=s[o]}return n}computeMask(e,t){if(t==null)return null;if(!Array.isArray(t))throw new z("`mask` should be an array for Concatenate");if(!Array.isArray(e))throw new z("`inputs` should be an array for Concatenate");if(t.length!==e.length)throw new z(`Mismatch in the length of mask (${t.length}) and the legnth of inputs (${e.length})`);return V(()=>{let n=!0;if(t.forEach(a=>{if(a!=null){n=!1;return}}),n)return null;let o=[];for(let a=0;a3||e.shape.length>3)throw new Se("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 ${e.shape.length}`),typeof t=="number"&&(t=[t,t]),r.dtype==="complex64"||e.dtype==="complex64")throw new Se("batchDot is not implemented for complex64-type Tensors yet.");let n=r.shape.length,o=e.shape.length;t==null&&(t=[n-1,o-2]);let s=t;return V(()=>{let a;if(n>o){a=n-o;let l=[];for(let u=0;un){a=o-n;let l=[];for(let u=0;u0){let l;n>o?l=n+o-3:l=n-1;let u=[];for(let c=l;c"A `Dot` layer should be called on a list of exactly 2 inputs.");let t=e[0],n=e[1];if(t.length>3||n.length>3)throw new Se("Dot layer does not support tensors of 4D or higher rank yet.");let o=this.interpretAxes(t,n);if(t[o[0]]!==n[o[1]])throw new z(`Dimension incompatibility: ${t[o[0]]} !== ${n[o[1]]}`)}mergeFunction(e){if(e.length!==2)throw new z(`A \`Dot\` layer must be called on exactly 2 inputs, but received ${e.length} input(s).`);let t=e[0],n=e[1],o;return Array.isArray(this.axes)?o=this.axes.map((s,a)=>Pd(s,e[a].shape.length)):o=[Pd(this.axes,t.shape.length),Pd(this.axes,n.shape.length)],this.normalize&&(t=Yf(t,o[0]),n=Yf(n,o[1])),aQ(t,n,o)}interpretAxes(e,t){let n;return Array.isArray(this.axes)?n=this.axes:n=[Pd(this.axes,e.length),Pd(this.axes,t.length)],n}computeOutputShape(e){y.assert(Array.isArray(e)&&e.length===2&&Array.isArray(e[0])&&Array.isArray(e[1]),()=>"A `Dot` layer should be called on a list of exactly 2 inputs.");let t=e[0].slice(),n=e[1].slice();if(t.length>3||n.length>3)throw new Se("Dot layer does not support tensors of 4D or higher rank yet.");let o=this.interpretAxes(t,n);t.splice(o[0],1),n.splice(o[1],1),n.splice(0,1);let s=t.concat(n);return s.length===1&&s.push(1),s}computeMask(e,t){return null}getConfig(){let e={axes:this.axes,normalize:this.normalize},t=super.getConfig();return Object.assign(e,t),e}};Md.className="Dot";J.registerClass(Md);var Ld=class extends Pe{constructor(e){super(e);this.supportsMasking=!0,this.stddev=e.stddev}computeOutputShape(e){return e}getConfig(){let e=super.getConfig(),t={stddev:this.stddev};return Object.assign(t,e),t}call(e,t){return V(()=>{this.invokeCallHook(e,t);let n=Fe(e);return bl(()=>Ap(n.shape,0,this.stddev).add(n),()=>n,t.training||!1)})}};Ld.className="GaussianNoise";J.registerClass(Ld);var zd=class extends Pe{constructor(e){super(e);this.supportsMasking=!0,this.rate=e.rate}computeOutputShape(e){return e}getConfig(){let e=super.getConfig(),t={rate:this.rate};return Object.assign(t,e),t}call(e,t){return V(()=>{this.invokeCallHook(e,t);let n=Fe(e);return this.rate>0&&this.rate<1?bl(()=>{let s=Math.sqrt(this.rate/(1-this.rate));return n.mul(Ap(n.shape,1,s))},()=>n,t.training||!1):n})}};zd.className="GaussianDropout";J.registerClass(zd);var Bd=class extends Pe{constructor(e){super(e);this.supportsMasking=!0,this.rate=e.rate,this.noiseShape=e.noiseShape}_getNoiseShape(e){return this.noiseShape||Fe(e).shape}computeOutputShape(e){return e}getConfig(){let e=super.getConfig(),t={rate:this.rate};return Object.assign(t,e),t}call(e,t){return V(()=>{if(this.rate<1&&this.rate>0){let n=this._getNoiseShape(e);return bl(()=>{let s=Fe(e),a=1.6732632423543772,i=1.0507009873554805,l=-a*i,u=an(As(n),this.rate);u=Ba(u,"float32");let c=((1-this.rate)*(1+this.rate*l**2))**-.5,p=-c*l*this.rate;return s.mul(u).add(u.add(-1).mul(l)).mul(c).add(p)},()=>Fe(e),t.training||!1)}return e})}};Bd.className="AlphaDropout";J.registerClass(Bd);function Vd(r,e,t,n,o,s=.001){let a;if(r.rank===2)a=yw(r,e,t,n,o,s);else if(r.rank===3)a=bw(r,e,t,n,o,s);else if(r.rank===4)a=ww(r,e,t,n,o,s);else throw new Se(`batchNormalization is not implemented for array of rank ${r.rank} yet`);return a}function lQ(r,e,t,n,o=.001){return V(()=>{let s=Yc(r,n),a=s.mean,i=s.variance;return[Vd(r,a,i,t,e,o),a,i]})}function uQ(r,e,t,n,o=.001){return V(()=>{let s=Yc(r,n),a=s.mean,i=s.variance,l=[];for(let d of zr(0,r.rank))n.indexOf(d)!==-1?l.push(1):l.push(r.shape[d]);let u=a.reshape(l),c=i.reshape(l),p=e==null?null:e.reshape(l),m=t==null?null:t.reshape(l);return[Vd(r,u,c,m,p,o),a,i]})}function cQ(r,e,t,n,o=.001){return y.arraysEqual(n.slice().sort(),zr(0,r.rank-1))?lQ(r,e,t,n,o):uQ(r,e,t,n,o)}var Gd=class extends Pe{constructor(e){e==null&&(e={}),super(e),this.supportsMasking=!0,this.axis=e.axis==null?-1:e.axis,this.momentum=e.momentum==null?.99:e.momentum,this.epsilon=e.epsilon==null?.001:e.epsilon,this.center=e.center==null?!0:e.center,this.scale=e.scale==null?!0:e.scale,this.betaInitializer=pt(e.betaInitializer||"zeros"),this.gammaInitializer=pt(e.gammaInitializer||"ones"),this.movingMeanInitializer=pt(e.movingMeanInitializer||"zeros"),this.movingVarianceInitializer=pt(e.movingVarianceInitializer||"ones"),this.betaConstraint=Pt(e.betaConstraint),this.gammaConstraint=Pt(e.gammaConstraint),this.betaRegularizer=wt(e.betaRegularizer),this.gammaRegularizer=wt(e.gammaRegularizer)}build(e){e=Je(e);let t=this.axis>=0?this.axis:this.axis+e.length,n=e[t];if(n==null)throw new z(`Axis ${t} of input tensor should have a defined dimension but the layer received an input with shape ${JSON.stringify(e)}.`);this.inputSpec=[new Tt({ndim:e.length,axes:{[t]: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(e,t){return V(()=>{let n=t.training==null?!1:t.training,o=Fe(e),s=o.shape,a=s.length,i=zr(0,a),l=this.axis>=0?this.axis:this.axis+a;i.splice(l,1);let u=Zo(1,a);u[l]=s[l];let c=i.slice();c.sort();let p=!y.arraysEqual(c,zr(0,a).slice(0,a-1)),m=()=>{if(p){let w=this.movingMean.read().reshape(u),b=this.movingVariance.read().reshape(u),_=this.center?this.beta.read().reshape(u):null,k=this.scale?this.gamma.read().reshape(u):null;return Vd(o,w,b,_,k,this.epsilon)}else return Vd(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]=cQ(o,this.gamma.read(),this.beta.read(),i,this.epsilon),g=(w,b,_)=>{V(()=>{let k=1-_,A=w.read(),S=A.sub(b).mul(k);w.write(A.sub(S))})};return(()=>{g(this.movingMean,d,this.momentum),g(this.movingVariance,h,this.momentum)})(),f})}getConfig(){let e={axis:this.axis,momentum:this.momentum,epsilon:this.epsilon,center:this.center,scale:this.scale,betaInitializer:vt(this.betaInitializer),gammaInitializer:vt(this.gammaInitializer),movingMeanInitializer:vt(this.movingMeanInitializer),movingVarianceInitializer:vt(this.movingVarianceInitializer),betaRegularizer:st(this.betaRegularizer),gammaRegularizer:st(this.gammaRegularizer),betaConstraint:Ot(this.betaConstraint),gammaConstraint:Ot(this.gammaConstraint)},t=super.getConfig();return Object.assign(e,t),e}};Gd.className="BatchNormalization";J.registerClass(Gd);var jd=class extends Pe{constructor(e){if(e==null&&(e={}),super(e),this.axis=e.axis==null?-1:e.axis,typeof this.axis=="number"){if(!Number.isInteger(this.axis))throw new Error(`Expected axis to be an integer, but received ${this.axis}`)}else if(Array.isArray(this.axis)){for(let t of this.axis)if(!Number.isInteger(t))throw new Error(`Expected axis to be an array of integers, but received ${JSON.stringify(this.axis)}`)}else throw new Error(`Expected axis to be an integer or an array of integers, but received ${JSON.stringify(this.axis)}`);this.epsilon=e.epsilon==null?.001:e.epsilon,this.center=e.center==null?!0:e.center,this.scale=e.scale==null?!0:e.scale,this.betaInitializer=pt(e.betaInitializer||"zeros"),this.gammaInitializer=pt(e.gammaInitializer||"ones"),this.betaRegularizer=wt(e.betaRegularizer),this.gammaRegularizer=wt(e.gammaRegularizer),this.supportsMasking=!0}build(e){e=Je(e);let t=e.length;typeof this.axis=="number"&&(this.axis=[this.axis]);for(let s=0;s=t)throw new Error(`Invalid axis: ${s}`);if(this.axis.length!==es(this.axis).length)throw new Error(`Found duplicate axes in: ${this.axis}`);let n=this.axis.map(s=>e[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(e,t){let n=Fe(e),o=n.shape,s=o.length;return V(()=>{let a=!0,{mean:i,variance:l}=Yc(n,this.axis,a),u=Zo(1,s);for(let h of this.axis)u[h]=o[h];let c=h=>h!=null&&h.shape.length!==s&&this.axis!==[s-1]?h.reshape(u):h,p=c(this.gamma.read()),m=c(this.beta.read()),f=[],d=[];for(let h=0;h{if(r.rank!==4)throw new z(`temporalPadding expects input tensor to be 4-D, but received a ${r.rank}-D tensor.`);if(e==null&&(e=[[1,1],[1,1]]),e.length!==2||e[0].length!==2||e[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(t==null&&(t=Zr()),t!=="channelsLast"&&t!=="channelsFirst")throw new z(`Unknown data format: ${t}. Supported data formats are 'channelsLast' and 'channelsFirst.`);let n;return t==="channelsFirst"?n=[[0,0],[0,0],e[0],e[1]]:n=[[0,0],e[0],e[1],[0,0]],Fr(r,n)})}var Wd=class extends Pe{constructor(e){if(e==null&&(e={}),super(e),this.dataFormat=e.dataFormat==null?Zr():e.dataFormat,e.padding==null)this.padding=[[1,1],[1,1]];else if(typeof e.padding=="number")this.padding=[[e.padding,e.padding],[e.padding,e.padding]];else{if(e.padding=e.padding,e.padding.length!==2)throw new z(`ZeroPadding2D expects padding to be a length-2 array, but received a length-${e.padding.length} array.`);let t,n;if(typeof e.padding[0]=="number")t=[e.padding[0],e.padding[0]],n=[e.padding[1],e.padding[1]];else{if(e.padding=e.padding,e.padding[0].length!==2)throw new z(`ZeroPadding2D expects height padding to be a length-2 array, but received a length-${e.padding[0].length} array.`);if(t=e.padding[0],e.padding[1].length!==2)throw new z(`ZeroPadding2D expects width padding to be a length-2 array, but received a length-${e.padding[1].length} array.`);n=e.padding[1]}this.padding=[t,n]}this.inputSpec=[new Tt({ndim:4})]}computeOutputShape(e){e=Je(e);let t,n;return this.dataFormat==="channelsFirst"?(e[2]!=null&&e[2]>=0?t=e[2]+this.padding[0][0]+this.padding[0][1]:t=null,e[3]!=null&&e[3]>=0?n=e[3]+this.padding[1][0]+this.padding[1][1]:n=null,[e[0],e[1],t,n]):(e[1]!=null&&e[1]>=0?t=e[1]+this.padding[0][0]+this.padding[0][1]:t=null,e[2]!=null&&e[2]>=0?n=e[2]+this.padding[1][0]+this.padding[1][1]:n=null,[e[0],t,n,e[3]])}call(e,t){return V(()=>pQ(Fe(e),this.padding,this.dataFormat))}getConfig(){let e={padding:this.padding,dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}};Wd.className="ZeroPadding2D";J.registerClass(Wd);function Px(r,e,t,n,o,s){return V(()=>{Rt(o),C0(s),Jr(n),t==null&&(t=[1,1]),n==null&&(n="valid"),o==null&&(o=Zr()),s==null&&(s="max"),r=pd(r,o);let a,i=n==="same"?"same":"valid";return s==="max"?a=Na(r,e,t,i):a=wa(r,e,t,i),o==="channelsFirst"&&(a=Ue(a,[0,3,1,2])),a})}function jL(r,e,t,n,o,s){return V(()=>{Rt(o),C0(s),Jr(n),t==null&&(t=[1,1,1]),n==null&&(n="valid"),o==null&&(o=Zr()),s==null&&(s="max"),r=Q0(r,o);let a,i=n==="same"?"same":"valid";return s==="max"?a=Bm(r,e,t,i):a=Am(r,e,t,i),o==="channelsFirst"&&(a=Ue(a,[0,4,1,2,3])),a})}var oC=class extends Pe{constructor(e){if(e.poolSize==null&&(e.poolSize=2),super(e),typeof e.poolSize=="number")this.poolSize=[e.poolSize];else if(Array.isArray(e.poolSize)&&e.poolSize.length===1&&typeof e.poolSize[0]=="number")this.poolSize=e.poolSize;else throw new z(`poolSize for 1D convolutional layer must be a number or an Array of a single number, but received ${JSON.stringify(e.poolSize)}`);if(qt(this.poolSize,"poolSize"),e.strides==null)this.strides=this.poolSize;else if(typeof e.strides=="number")this.strides=[e.strides];else if(Array.isArray(e.strides)&&e.strides.length===1&&typeof e.strides[0]=="number")this.strides=e.strides;else throw new z(`strides for 1D convolutional layer must be a number or an Array of a single number, but received ${JSON.stringify(e.strides)}`);qt(this.strides,"strides"),this.padding=e.padding==null?"valid":e.padding,Jr(this.padding),this.inputSpec=[new Tt({ndim:3})]}computeOutputShape(e){e=Je(e);let t=dn(e[1],this.poolSize[0],this.padding,this.strides[0]);return[e[0],t,e[2]]}call(e,t){return V(()=>{this.invokeCallHook(e,t),e=Va(Fe(e),2);let n=this.poolingFunction(Fe(e),[this.poolSize[0],1],[this.strides[0],1],this.padding,"channelsLast");return Cn(n,[2])})}getConfig(){let e={poolSize:this.poolSize,padding:this.padding,strides:this.strides},t=super.getConfig();return Object.assign(e,t),e}},Ud=class extends oC{constructor(e){super(e)}poolingFunction(e,t,n,o,s){return Rt(s),Jr(o),Px(e,t,n,o,s,"max")}};Ud.className="MaxPooling1D";J.registerClass(Ud);var qd=class extends oC{constructor(e){super(e)}poolingFunction(e,t,n,o,s){return Rt(s),Jr(o),Px(e,t,n,o,s,"avg")}};qd.className="AveragePooling1D";J.registerClass(qd);var sC=class extends Pe{constructor(e){if(e.poolSize==null&&(e.poolSize=[2,2]),super(e),this.poolSize=Array.isArray(e.poolSize)?e.poolSize:[e.poolSize,e.poolSize],e.strides==null)this.strides=this.poolSize;else if(Array.isArray(e.strides)){if(e.strides.length!==2)throw new 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 ${e.strides.length}.`);this.strides=e.strides}else this.strides=[e.strides,e.strides];qt(this.poolSize,"poolSize"),qt(this.strides,"strides"),this.padding=e.padding==null?"valid":e.padding,this.dataFormat=e.dataFormat==null?"channelsLast":e.dataFormat,Rt(this.dataFormat),Jr(this.padding),this.inputSpec=[new Tt({ndim:4})]}computeOutputShape(e){e=Je(e);let t=this.dataFormat==="channelsFirst"?e[2]:e[1],n=this.dataFormat==="channelsFirst"?e[3]:e[2];return t=dn(t,this.poolSize[0],this.padding,this.strides[0]),n=dn(n,this.poolSize[1],this.padding,this.strides[1]),this.dataFormat==="channelsFirst"?[e[0],e[1],t,n]:[e[0],t,n,e[3]]}call(e,t){return V(()=>(this.invokeCallHook(e,t),this.poolingFunction(Fe(e),this.poolSize,this.strides,this.padding,this.dataFormat)))}getConfig(){let e={poolSize:this.poolSize,padding:this.padding,strides:this.strides,dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}},Hd=class extends sC{constructor(e){super(e)}poolingFunction(e,t,n,o,s){return Rt(s),Jr(o),Px(e,t,n,o,s,"max")}};Hd.className="MaxPooling2D";J.registerClass(Hd);var Kd=class extends sC{constructor(e){super(e)}poolingFunction(e,t,n,o,s){return Rt(s),Jr(o),Px(e,t,n,o,s,"avg")}};Kd.className="AveragePooling2D";J.registerClass(Kd);var iC=class extends Pe{constructor(e){if(e.poolSize==null&&(e.poolSize=[2,2,2]),super(e),this.poolSize=Array.isArray(e.poolSize)?e.poolSize:[e.poolSize,e.poolSize,e.poolSize],e.strides==null)this.strides=this.poolSize;else if(Array.isArray(e.strides)){if(e.strides.length!==3)throw new 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 ${e.strides.length}.`);this.strides=e.strides}else this.strides=[e.strides,e.strides,e.strides];qt(this.poolSize,"poolSize"),qt(this.strides,"strides"),this.padding=e.padding==null?"valid":e.padding,this.dataFormat=e.dataFormat==null?"channelsLast":e.dataFormat,Rt(this.dataFormat),Jr(this.padding),this.inputSpec=[new Tt({ndim:5})]}computeOutputShape(e){e=Je(e);let t=this.dataFormat==="channelsFirst"?e[2]:e[1],n=this.dataFormat==="channelsFirst"?e[3]:e[2],o=this.dataFormat==="channelsFirst"?e[4]:e[3];return t=dn(t,this.poolSize[0],this.padding,this.strides[0]),n=dn(n,this.poolSize[1],this.padding,this.strides[1]),o=dn(o,this.poolSize[2],this.padding,this.strides[2]),this.dataFormat==="channelsFirst"?[e[0],e[1],t,n,o]:[e[0],t,n,o,e[4]]}call(e,t){return V(()=>(this.invokeCallHook(e,t),this.poolingFunction(Fe(e),this.poolSize,this.strides,this.padding,this.dataFormat)))}getConfig(){let e={poolSize:this.poolSize,padding:this.padding,strides:this.strides,dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}},Xd=class extends iC{constructor(e){super(e)}poolingFunction(e,t,n,o,s){return Rt(s),Jr(o),jL(e,t,n,o,s,"max")}};Xd.className="MaxPooling3D";J.registerClass(Xd);var Yd=class extends iC{constructor(e){super(e)}poolingFunction(e,t,n,o,s){return Rt(s),Jr(o),jL(e,t,n,o,s,"avg")}};Yd.className="AveragePooling3D";J.registerClass(Yd);var aC=class extends Pe{constructor(e){super(e);this.inputSpec=[new Tt({ndim:3})]}computeOutputShape(e){return[e[0],e[2]]}call(e,t){throw new Se}},Zd=class extends aC{constructor(e){super(e||{})}call(e,t){return V(()=>{let n=Fe(e);return ht(n,1)})}};Zd.className="GlobalAveragePooling1D";J.registerClass(Zd);var Jd=class extends aC{constructor(e){super(e||{})}call(e,t){return V(()=>{let n=Fe(e);return ur(n,1)})}};Jd.className="GlobalMaxPooling1D";J.registerClass(Jd);var lC=class extends Pe{constructor(e){super(e);this.dataFormat=e.dataFormat==null?"channelsLast":e.dataFormat,Rt(this.dataFormat),this.inputSpec=[new Tt({ndim:4})]}computeOutputShape(e){return e=e,this.dataFormat==="channelsLast"?[e[0],e[3]]:[e[0],e[1]]}call(e,t){throw new Se}getConfig(){let e={dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}},Qd=class extends lC{call(e,t){return V(()=>{let n=Fe(e);return this.dataFormat==="channelsLast"?ht(n,[1,2]):ht(n,[2,3])})}};Qd.className="GlobalAveragePooling2D";J.registerClass(Qd);var eh=class extends lC{call(e,t){return V(()=>{let n=Fe(e);return this.dataFormat==="channelsLast"?ur(n,[1,2]):ur(n,[2,3])})}};eh.className="GlobalMaxPooling2D";J.registerClass(eh);var uC=class extends Pe{constructor(e){super(e);this.layer=e.layer}build(e){this.built=!0}get trainable(){return this.layer!=null?this.layer.trainable:!1}set trainable(e){this.layer!=null&&(this.layer.trainable=e)}get trainableWeights(){return this.layer.trainableWeights}get nonTrainableWeights(){return this.layer.nonTrainableWeights}get updates(){return this.layer._updates}get losses(){return this.layer.losses}getWeights(){return this.layer.getWeights()}setWeights(e){this.layer.setWeights(e)}getConfig(){let e={layer:{className:this.layer.getClassName(),config:this.layer.getConfig()}},t=super.getConfig();return Object.assign(e,t),e}setFastWeightInitDuringBuild(e){super.setFastWeightInitDuringBuild(e),this.layer!=null&&this.layer.setFastWeightInitDuringBuild(e)}static fromConfig(e,t,n={}){let o=t.layer,s=Qr(o,n);delete t.layer;let a={layer:s};return Object.assign(a,t),new e(a)}},th=class extends uC{constructor(e){super(e);this.supportsMasking=!0}build(e){if(e=Je(e),e.length<3)throw new z(`TimeDistributed layer expects an input shape >= 3D, but received input shape ${JSON.stringify(e)}`);this.inputSpec=[{shape:e}];let t=[e[0]].concat(e.slice(2));this.layer.built||(this.layer.build(t),this.layer.built=!0),super.build(e)}computeOutputShape(e){e=Je(e);let t=[e[0]].concat(e.slice(2)),n=this.layer.computeOutputShape(t),o=e[1];return[n[0],o].concat(n.slice(1))}call(e,t){return V(()=>(e=Fe(e),rC((a,i)=>[Fe(this.layer.call(a,t)),[]],e,[],!1,null,null,!1,!0)[1]))}};th.className="TimeDistributed";J.registerClass(th);function mQ(r){ji(KM,"BidirectionalMergeMode",r)}var fQ="concat",rh=class extends uC{constructor(e){super(e);let t=e.layer.getConfig(),n={};n.className=e.layer.getClassName(),n.config=t,this.forwardLayer=Qr(n),t.goBackwards=t.goBackwards!==!0;let o={};if(o.className=e.layer.getClassName(),o.config=t,this.backwardLayer=Qr(o),this.forwardLayer.name="forward_"+this.forwardLayer.name,this.backwardLayer.name="backward_"+this.backwardLayer.name,this.mergeMode=e.mergeMode===void 0?fQ:e.mergeMode,mQ(this.mergeMode),e.weights)throw new Se("weights support is not implemented for Bidirectional layer yet.");this._stateful=e.layer.stateful,this.returnSequences=e.layer.returnSequences,this.returnState=e.layer.returnState,this.supportsMasking=!0,this._trainable=!0,this.inputSpec=e.layer.inputSpec,this.numConstants=null}get trainable(){return this._trainable}set trainable(e){this._trainable=e,this.forwardLayer!=null&&(this.forwardLayer.trainable=e),this.backwardLayer!=null&&(this.backwardLayer.trainable=e)}getWeights(){return this.forwardLayer.getWeights().concat(this.backwardLayer.getWeights())}setWeights(e){let t=e.length,n=Math.floor(t/2);this.forwardLayer.setWeights(e.slice(0,n)),this.backwardLayer.setWeights(e.slice(n))}computeOutputShape(e){let t=this.forwardLayer.computeOutputShape(e);Array.isArray(t)&&Array.isArray(t[0])||(t=[t]),t=t;let n,o,s;return this.returnState&&(s=t.slice(1)),n=t[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()):xr(o)}apply(e,t){let n=t==null?null:t.initialState,o=t==null?null:t.constants;t==null&&(t={});let s=tC(e,n,o,this.numConstants);if(e=s.inputs,n=s.initialState,o=s.constants,Array.isArray(e)&&(n=e.slice(1),e=e[0]),(n==null||n.length===0)&&o==null)return super.apply(e,t);let a=[],i=[];if(n!=null){let u=n.length;if(u%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.");t.initialState=n,a.push(...n);let c=n.map(p=>new Tt({shape:p.shape}));this.forwardLayer.stateSpec=c.slice(0,u/2),this.backwardLayer.stateSpec=c.slice(u/2),i.push(...c)}if(o!=null)throw new Se("Support for constants in Bidirectional layers is not implemented yet.");let l=a[0]instanceof Vr;for(let u of a)if(u instanceof Vr!==l)throw new z("The initial state of a Bidirectional layer cannot be specified as a mix of symbolic and non-symbolic tensors");if(l){let u=[e].concat(a),c=this.inputSpec.concat(i),p=this.inputSpec;this.inputSpec=c;let m=super.apply(u,t);return this.inputSpec=p,m}else return super.apply(e,t)}call(e,t){return V(()=>{let n=t.initialState,o,s;if(n==null)o=this.forwardLayer.call(e,t),s=this.backwardLayer.call(e,t);else{let l=n.slice(0,n.length/2),u=n.slice(n.length/2);o=this.forwardLayer.call(e,Object.assign(t,{initialState:l})),s=this.backwardLayer.call(e,Object.assign(t,{initialState:u}))}let a;this.returnState&&(Array.isArray(o)&&(a=o.slice(1).concat(s.slice(1))),o=o[0],s=s[0]),this.returnSequences&&(s=Ht(s,1));let i;return this.mergeMode==="concat"?i=Tp([o,s]):this.mergeMode==="sum"?i=Q(o,s):this.mergeMode==="ave"?i=P(.5,Q(o,s)):this.mergeMode==="mul"?i=P(o,s):this.mergeMode==null&&(i=[o,s]),this.returnState?this.mergeMode==null?i.concat(a):[i].concat(a):i})}resetStates(e){this.forwardLayer.resetStates(),this.backwardLayer.resetStates()}build(e){Ps(this.forwardLayer.name,()=>{this.forwardLayer.build(e)}),Ps(this.backwardLayer.name,()=>{this.backwardLayer.build(e)}),this.built=!0}computeMask(e,t){Array.isArray(t)&&(t=t[0]);let n;if(this.returnSequences?this.mergeMode==null?n=[t,t]:n=t:this.mergeMode==null?n=[null,null]:n=null,this.returnState){let s=this.forwardLayer.states.map(a=>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(e){super.setFastWeightInitDuringBuild(e),this.forwardLayer!=null&&this.forwardLayer.setFastWeightInitDuringBuild(e),this.backwardLayer!=null&&this.backwardLayer.setFastWeightInitDuringBuild(e)}getConfig(){let e={mergeMode:this.mergeMode},t=super.getConfig();return Object.assign(e,t),e}static fromConfig(e,t){let n=Qr(t.layer);if(delete t.layer,t.numConstants!=null)throw new Se("Deserialization of a Bidirectional layer with numConstants present is not supported yet.");let o=t;return o.layer=n,new e(o)}};rh.className="Bidirectional";J.registerClass(rh);function dQ(r){return new Wi(r)}function hQ(r){return new ad(r)}function gQ(r){return new od(r)}function xQ(r){return new sd(r)}function yQ(r){return new id(r)}function bQ(r){return new ud(r)}function wQ(r){return new ld(r)}function _Q(r){return new fc(r)}function kQ(r){return new Nl(r)}function vQ(r){return new md(r)}function CQ(r){return new mc(r)}function IQ(r){return new fd(r)}function NQ(r){return new dd(r)}function SQ(r){return new hd(r)}function TQ(r){return new gd(r)}function AQ(r){return new Cd(r)}function EQ(r){return new kd(r)}function DQ(r){return new Xp(r)}function $Q(r){return new _d(r)}function RQ(r){return new vd(r)}function FQ(r){return new Id(r)}function OQ(r){return new Nd(r)}function PQ(r){return new Sd(r)}function MQ(r){return new Ad(r)}function LQ(r){return new Ed(r)}function zQ(r){return new $d(r)}function BQ(r){return new Od(r)}function VQ(r){return new Rd(r)}function GQ(r){return new Fd(r)}function jQ(r){return new Dd(r)}function WQ(r){return new Md(r)}function UQ(r){return new Gd(r)}function qQ(r){return new jd(r)}function HQ(r){return new Wd(r)}function pC(r){return new qd(r)}function KQ(r){return pC(r)}function XQ(r){return pC(r)}function mC(r){return new Kd(r)}function YQ(r){return mC(r)}function ZQ(r){return mC(r)}function fC(r){return new Yd(r)}function JQ(r){return fC(r)}function QQ(r){return fC(r)}function eee(r){return new Zd(r)}function tee(r){return new Qd(r)}function WL(r){return new Jd(r)}function UL(r){return new eh(r)}function qL(r){return new Ud(r)}function HL(r){return new Hd(r)}function ree(r){return new Xd(r)}function nee(r){return new yd(r)}function oee(r){return new Hp(r)}function see(r){return new bd(r)}function iee(r){return new Tl(r)}function aee(r){return new xd(r)}function lee(r){return new qp(r)}function uee(r){return new wd(r)}function cee(r){return new Kp(r)}function pee(r){return new hn(r)}function mee(r){return new Up(r)}function fee(r){return new rh(r)}function dee(r){return new th(r)}var hee=WL,gee=UL,xee=qL,yee=HL;function bee(r){return new Ld(r)}function wee(r){return new zd(r)}function _ee(r){return new Bd(r)}function kee(r){return new Td(r)}var dC={};Ke(dC,{MAPE:()=>Ree,MSE:()=>Pee,binaryAccuracy:()=>vee,binaryCrossentropy:()=>Cee,categoricalAccuracy:()=>Nee,categoricalCrossentropy:()=>See,cosineProximity:()=>Eee,mape:()=>Fee,meanAbsoluteError:()=>Dee,meanAbsolutePercentageError:()=>$ee,meanSquaredError:()=>Oee,mse:()=>Mee,precision:()=>Tee,recall:()=>Aee,sparseCategoricalAccuracy:()=>Iee});function vee(r,e){return Qf(r,e)}function Cee(r,e){return Ix(r,e)}function Iee(r,e){return Nx(r,e)}function Nee(r,e){return ed(r,e)}function See(r,e){return td(r,e)}function Tee(r,e){return E0(r,e)}function Aee(r,e){return dL(r,e)}function Eee(r,e){return Zf(r,e)}function Dee(r,e){return zp(r,e)}function $ee(r,e){return vl(r,e)}function Ree(r,e){return vl(r,e)}function Fee(r,e){return vl(r,e)}function Oee(r,e){return qi(r,e)}function Pee(r,e){return qi(r,e)}function Mee(r,e){return qi(r,e)}var hC={};Ke(hC,{modelFromJSON:()=>$L});var gC={};Ke(gC,{l1:()=>zee,l1l2:()=>Lee,l2:()=>Bee});function Lee(r){return new cc(r)}function zee(r){return LL(r)}function Bee(r){return zL(r)}var Mx=class extends kl{constructor(){super(...arguments);this.model=null}setModel(e){if(!(e instanceof Tn))throw new Error("model must be a LayersModel, not some other Container");this.model=e}};function Lx(r,e){return re}var zx=class extends Mx{constructor(e){super();if(e==null&&(e={}),e.restoreBestWeights)throw new Se("restoreBestWeights = True is not implemented in EarlyStopping yet.");this.monitor=e.monitor||"val_loss",this.minDelta=Math.abs(e.minDelta||0),this.patience=e.patience||0,this.verbose=e.verbose||0,this.mode=e.mode||"auto",this.baseline=e.baseline,["auto","min","max"].indexOf(this.mode)===-1&&(console.warn(`EarlyStopping mode '${this.mode}' is invalid. Falling back to mode 'auto'.`),this.mode="auto"),this.mode==="min"?this.monitorFunc=Lx:this.mode==="max"?this.monitorFunc=KL:this.monitor.indexOf("acc")!==-1?this.monitorFunc=KL:this.monitorFunc=Lx,this.monitorFunc===Lx&&(this.minDelta*=-1)}async onTrainBegin(e){this.wait=0,this.stoppedEpoch=0,this.baseline!=null?this.best=this.baseline:this.best=this.monitorFunc===Lx?Infinity:-Infinity}async onEpochEnd(e,t){await Ui(t);let n=this.getMonitorValue(t);n!=null&&(this.monitorFunc(n-this.minDelta,this.best)?(this.best=n,this.wait=0):(this.wait++,this.wait>=this.patience&&(this.stoppedEpoch=e,this.model.stopTraining=!0)))}async onTrainEnd(e){this.stoppedEpoch>0&&this.verbose&&console.log(`Epoch ${this.stoppedEpoch}: early stopping.`)}getMonitorValue(e){e==null&&(e={});let t=e[this.monitor];return t==null&&console.warn(`Metric for EarlyStopping ${this.monitor} is not available. Available metrics are: ${Object.keys(e)}`),t}};function Vee(r){return new zx(r)}var XL={earlyStopping:Vee};var ns;(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_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"})(ns||(ns={}));var YL;(function(r){let e;(function(t){t[t.LEGACY=0]="LEGACY",t[t.V1=1]="V1",t[t.V2=2]="V2"})(e=r.CheckpointFormatVersion||(r.CheckpointFormatVersion={}))})(YL||(YL={}));var xC={};function ZL(r,e){let t={tfOpName:r,category:"custom",inputs:[],attrs:[],customExecutor:e};xC[r]=t}function Bx(r){return xC[r]}function JL(r){delete xC[r]}function C(r,e,t,n,o){let s=e.inputParams[r];if(s&&s.inputIndexStart!==void 0){let i=s.inputIndexStart,l=s.inputIndexEnd===0?void 0:s.inputIndexEnd===void 0?i+1:s.inputIndexEnd;if(s.type==="tensor")return yr(e.inputNames[s.inputIndexStart],t,n,o);if(s.type==="tensors")return e.inputNames.slice(i,l).map(m=>yr(m,t,n,o));let u=yr(e.inputNames.slice(i)[0],t,n,o),c=u.dataSync();return s.type==="number"?c[0]:y.toNestedArray(u.shape,c)}let a=e.attrParams[r];return a&&a.value}function yr(r,e,t,n){let[o,s]=en(r);if(n!=null){let i=n.getHashTableHandleByName(o);if(i!=null)return i}let a=t.currentContextIds.find(i=>!!e[Vx(o,i)]);return a!==void 0?e[Vx(o,a)][s]:void 0}function QL(r,e,t){return e[Vx(r,t.currentContextId)]}function Vs(r,e){let[t,n]=en(r);return[Vx(t,e&&e.currentContextId),n]}function Vx(r,e){return e?`${r}-${e}`:r}function en(r){let e=r.split(":");return e.length===1?[r,0]:[e[0],Number(e[e.length-1])]}function nh(r,e,t){let n=C("pad",r,e,t);if(n==="explicit"){n=C("explicitPaddings",r,e,t);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 Gs(r){return r.kept?r:Pn(r)}var yC={};Ke(yC,{json:()=>Gee});var Gee=[{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 bC={};Ke(bC,{json:()=>jee});var jee=[{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}]}];var wC={};Ke(wC,{json:()=>Wee});var Wee=[{tfOpName:"EmptyTensorList",category:"control",inputs:[{start:0,name:"elementShape",type:"shape"},{start:1,name:"maxNumElements",type:"number"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"LoopCond",category:"control",inputs:[{start:0,name:"pred",type:"tensor"}]},{tfOpName:"Switch",category:"control",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"pred",type:"tensor"}]},{tfOpName:"Merge",category:"control",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}]},{tfOpName:"Enter",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"frame_name",name:"frameName",type:"string"},{tfName:"is_constant",name:"isConstant",type:"bool"}]},{tfOpName:"Exit",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"NextIteration",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"TensorArrayV3",category:"control",inputs:[{start:0,name:"size",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape",name:"elementShape",type:"shape"},{tfName:"dynamic_size",name:"dynamicSize",type:"bool"},{tfName:"clear_after_read",name:"clearAfterRead",type:"bool"},{tfName:"identical_element_shapes",name:"identicalElementShapes",type:"bool"},{tfName:"tensor_array_name",name:"name",type:"string"}]},{tfOpName:"TensorArrayWriteV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"tensor",type:"tensor"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"TensorArrayReadV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"TensorArrayGatherV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape",name:"elementShape",type:"shape"}]},{tfOpName:"TensorArrayScatterV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"tensor",type:"tensor"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"TensorArrayConcatV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape_except0",name:"elementShapeExcept0",type:"shape",notSupported:!0}]},{tfOpName:"TensorArraySplitV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"tensor",type:"tensor"},{start:2,name:"lengths",type:"number[]"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"TensorArraySizeV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"flowIn",type:"number"}]},{tfOpName:"TensorArrayCloseV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"}]},{tfOpName:"StatelessIf",category:"control",inputs:[{start:0,name:"cond",type:"tensor"},{start:1,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"then_branch",name:"thenBranch",type:"func"},{tfName:"else_branch",name:"elseBranch",type:"func"}]},{tfOpName:"If",category:"control",inputs:[{start:0,name:"cond",type:"tensor"},{start:1,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"then_branch",name:"thenBranch",type:"func"},{tfName:"else_branch",name:"elseBranch",type:"func"}]},{tfOpName:"StatelessWhile",category:"control",inputs:[{start:0,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"cond",name:"cond",type:"func"},{tfName:"body",name:"body",type:"func"}]},{tfOpName:"While",category:"control",inputs:[{start:0,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"cond",name:"cond",type:"func"},{tfName:"body",name:"body",type:"func"}]},{tfOpName:"TensorListScatter",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListScatterV2",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"elementShape",type:"shape"},{start:3,name:"numElements",type:"number"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListGather",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListGetItem",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListSetItem",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"tensor",type:"tensor"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListReserve",category:"control",inputs:[{start:0,name:"elementShape",type:"shape"},{start:1,name:"numElements",type:"number"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListFromTensor",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListStack",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"},{tfName:"num_elements",name:"numElements",type:"dtype"}]},{tfOpName:"TensorListSplit",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"elementShape",type:"shape"},{start:2,name:"lengths",type:"number[]"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListConcat",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"}],attrs:[{tfName:"element_shape",name:"elementShape",type:"shape"},{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListPopBack",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListPushBack",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"tensor",type:"tensor"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]}];var _C={};Ke(_C,{json:()=>Uee});var Uee=[{tfOpName:"AvgPool",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MaxPool",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[],notSupported:!0},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MaxPoolWithArgmax",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"include_batch_in_index",name:"includeBatchInIndex",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"AvgPool3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MaxPool3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Conv1D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"stride",name:"stride",type:"number"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NWC"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"dilation",name:"dilation",type:"number",defaultValue:1}]},{tfOpName:"Conv2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"useCudnnOnGpu",name:"useCudnnOnGpu",type:"bool"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"_FusedConv2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"use_cudnn_on_gpu",name:"useCudnnOnGpu",type:"bool",defaultValue:!0},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]",defaultValue:[1,1,1,1]},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:1e-4},{tfName:"leakyrelu_alpha",name:"leakyreluAlpha",type:"number"}]},{tfOpName:"Conv2DBackpropInput",category:"convolution",inputs:[{start:2,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:0,name:"outputShape",type:"number[]"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]",notSupported:!0}]},{tfOpName:"DepthwiseConv2d",category:"convolution",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"DepthwiseConv2dNative",category:"convolution",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"FusedDepthwiseConv2dNative",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]",defaultValue:[1,1,1,1]},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]}]},{tfOpName:"Conv3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"Dilation2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"rates",name:"dilations",type:"number[]"},{tfName:"padding",name:"pad",type:"string"}]}];var kC={};Ke(kC,{json:()=>qee});var qee=[{tfOpName:"Fill",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"},{start:1,name:"value",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"LinSpace",category:"creation",inputs:[{start:0,name:"start",type:"number"},{start:1,name:"stop",type:"number"},{start:2,name:"num",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"OneHot",category:"creation",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"depth",type:"number"},{start:2,name:"onValue",type:"number",defaultValue:1},{start:3,name:"offValue",type:"number",defaultValue:0}],attrs:[{tfName:"axis",name:"axis",type:"number",notSupported:!0},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Ones",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"OnesLike",category:"creation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"RandomUniform",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"minval",name:"minval",type:"number",defaultValue:0},{tfName:"maxval",name:"maxval",type:"number",defaultValue:1},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"seed",name:"seed",type:"number",defaultValue:0},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0},{tfName:"T",name:"T",type:"number",notSupported:!0}]},{tfOpName:"Range",category:"creation",inputs:[{start:0,name:"start",type:"number"},{start:1,name:"stop",type:"number"},{start:2,name:"step",type:"number",defaultValue:0}],attrs:[{tfName:"Tidx",name:"dtype",type:"dtype"}]},{tfOpName:"TruncatedNormal",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"means",name:"mean",type:"number",defaultValue:0},{tfName:"stddev",name:"stdDev",type:"number",defaultValue:1},{tfName:"seed",name:"seed",type:"number"},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"T",name:"T",type:"number",notSupported:!0}]},{tfOpName:"Zeros",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"ZerosLike",category:"creation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"Multinomial",category:"creation",inputs:[{start:0,name:"logits",type:"tensor"},{start:1,name:"numSamples",type:"number"}],attrs:[{tfName:"seed",name:"seed",type:"number"},{tfName:"seed2",name:"seed2",type:"number"},{tfName:"T",name:"dtype",type:"dtype"},{tfName:"output_dtype",name:"output_dtype",type:"dtype"}]}];var vC={};Ke(vC,{json:()=>Hee});var Hee=[{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 CC={};Ke(CC,{json:()=>Kee});var Kee=[{tfOpName:"TopKV2",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"k",type:"number"}],attrs:[{tfName:"sorted",name:"sorted",type:"bool"}]},{tfOpName:"Unique",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"UniqueV2",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]}];var IC={};Ke(IC,{json:()=>Xee});var Xee=[{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 NC={};Ke(NC,{json:()=>Yee});var Yee=[{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}]}];var SC={};Ke(SC,{json:()=>Zee});var Zee=[{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"}]}];var TC={};Ke(TC,{json:()=>Jee});var Jee=[{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 AC={};Ke(AC,{json:()=>Qee});var Qee=[{tfOpName:"_FusedMatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:1e-4},{tfName:"transpose_a",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"transpose_b",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"transpose_a",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"transpose_b",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"BatchMatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"adj_x",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"adj_y",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"BatchMatMulV2",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"adj_x",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"adj_y",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Transpose",category:"matrices",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"perm",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}];var EC={};Ke(EC,{json:()=>ete});var ete=[{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 DC={};Ke(DC,{json:()=>tte});var tte=[{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:"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 $C={};Ke($C,{json:()=>rte});var rte=[{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 RC={};Ke(RC,{json:()=>nte});var nte=[{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 FC={};Ke(FC,{json:()=>ote});var ote=[{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:[]}];var Gx=class{static get Instance(){return this._instance||(this._instance=new this)}constructor(){let e=[yC,bC,wC,_C,kC,vC,CC,TC,SC,IC,AC,EC,DC,$C,RC,FC,NC],t=[].concat(...e.map(n=>n.json));this.opMappers=t.reduce((n,o)=>(n[o.tfOpName]=o,n),{})}transformGraph(e,t={}){let n=e.node,o=[],s=[],a=[],i=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)&&a.push(h[g.name]),h),{}),l=[],u=[],c={},p={};t!=null&&(c=this.mapSignatureEntries(t.inputs),p=this.mapSignatureEntries(t.outputs));let m=Object.keys(i);m.forEach(h=>{let g=i[h];g.inputNames.forEach(x=>{let[w]=Vs(x);g.inputs.push(i[w]),i[w].children.push(g)})}),Object.keys(p).length===0?m.forEach(h=>{let g=i[h];g.children.length===0&&u.push(g)}):Object.keys(p).forEach(h=>{let[g]=Vs(h),x=i[g];x!=null&&(x.signatureKey=p[h],u.push(x))}),Object.keys(c).length>0?Object.keys(c).forEach(h=>{let[g]=Vs(h),x=i[g];x&&(x.signatureKey=c[h],l.push(x))}):l=o;let f={};e.library!=null&&e.library.function!=null&&(f=e.library.function.reduce((h,g)=>(h[g.signature.name]=this.mapFunction(g),h),{}));let d={nodes:i,inputs:l,outputs:u,weights:s,placeholders:o,signature:t,functions:f};return a.length>0&&(d.initNodes=a),d}mapSignatureEntries(e){return Object.keys(e||{}).reduce((t,n)=>(t[e[n].name]=n,t),{})}mapNode(e){let t=Bx(e.op)||this.opMappers[e.op]||{};e.attr==null&&(e.attr={});let n={name:e.name,op:e.op,category:t.category,inputNames:(e.input||[]).map(o=>o.startsWith("^")?o.substr(1):o),inputs:[],children:[],inputParams:{},attrParams:{},rawAttrs:e.attr};return t.inputs!=null&&(n.inputParams=t.inputs.reduce((o,s)=>(o[s.name]={type:s.type,inputIndexStart:s.start,inputIndexEnd:s.end},o),{})),t.attrs!=null&&(n.attrParams=t.attrs.reduce((o,s)=>{let a=s.type,i;switch(s.type){case"string":i=jx(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=jx(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"string[]":i=Yx(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=Yx(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"number":i=Ux(e.attr,s.tfName,s.defaultValue||0),i===void 0&&!!s.tfDeprecatedName&&(i=Ux(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"number[]":i=Xx(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=Xx(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"bool":i=Wx(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=Wx(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"bool[]":i=Jx(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=Jx(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"shape":i=Kx(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=Kx(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"shape[]":i=Zx(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=Zx(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"dtype":i=qx(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=qx(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"dtype[]":i=Hx(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=Hx(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"func":i=ez(e.attr,s.tfName,s.defaultValue),i===void 0&&!!s.tfDeprecatedName&&(i=ez(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"tensor":case"tensors":break;default:throw new Error(`Unsupported param type: ${s.type} for op: ${e.op}`)}return o[s.name]={value:i,type:a},o},{})),n}mapFunction(e){let t=e.nodeDef,n=[],o=[],s={};t!=null&&(s=t.reduce((p,m)=>(p[m.name]=this.mapNode(m),m.op==="Const"&&o.push(p[m.name]),p),{}));let a=[],i=[];e.signature.inputArg.forEach(p=>{let[m]=Vs(p.name),f={name:m,op:"Placeholder",inputs:[],inputNames:[],category:"graph",inputParams:{},attrParams:{dtype:{value:OC(p.type),type:"dtype"}},children:[]};f.signatureKey=p.name,a.push(f),s[m]=f}),Object.keys(s).forEach(p=>{let m=s[p];m.inputNames.forEach(f=>{let[d]=Vs(f);m.inputs.push(s[d]),s[d].children.push(m)})});let u=e.ret;e.signature.outputArg.forEach(p=>{let[m,f]=Vs(u[p.name]),d=s[m];d!=null&&(d.defaultOutput=f,i.push(d))});let c=this.mapArgsToSignature(e);return{nodes:s,inputs:a,outputs:i,weights:o,placeholders:n,signature:c}}mapArgsToSignature(e){return{methodName:e.signature.name,inputs:e.signature.inputArg.reduce((t,n)=>(t[n.name]=this.mapArgToTensorInfo(n),t),{}),outputs:e.signature.outputArg.reduce((t,n)=>(t[n.name]=this.mapArgToTensorInfo(n,e.ret),t),{})}}mapArgToTensorInfo(e,t){let n=e.name;return t!=null&&(n=t[n]),{name:n,dtype:e.type}}};function ste(r){let e=W().global;if(typeof e.atob!="undefined")return e.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 tz(r,e){let t=Array.isArray(r)?String.fromCharCode.apply(null,r):ste(r);return e?t:t.toLowerCase()}function jx(r,e,t,n=!1){let o=r[e];return o!=null?tz(o.s,n):t}function Wx(r,e,t){let n=r[e];return n?n.b:t}function Ux(r,e,t){let n=r[e]||{},o=n.i!=null?n.i:n.f!=null?n.f:t;return typeof o=="number"?o:parseInt(o,10)}function OC(r){switch(typeof r=="string"&&(r=ns[r]),r){case ns.DT_FLOAT:return"float32";case ns.DT_INT32:case ns.DT_INT64:case ns.DT_INT8:case ns.DT_UINT8:return"int32";case ns.DT_BOOL:return"bool";case ns.DT_DOUBLE:return"float32";case ns.DT_STRING:return"string";default:return null}}function ez(r,e,t){let n=r[e];return n&&n.func?n.func.name:t}function qx(r,e,t){let n=r[e];return n&&n.type?OC(n.type):t}function Hx(r,e,t){let n=r[e];return n&&n.list&&n.list.type?n.list.type.map(o=>OC(o)):t}function rz(r){if(!r.unknownRank)return r.dim!=null?r.dim.map(e=>typeof e.size=="number"?e.size:parseInt(e.size,10)):[]}function Kx(r,e,t){let n=r[e];return n&&n.shape?rz(n.shape):t}function Xx(r,e,t){let n=r[e];return n?((n.list.f&&n.list.f.length?n.list.f:n.list.i)||[]).map(o=>typeof o=="number"?o:parseInt(o,10)):t}function Yx(r,e,t,n=!1){let o=r[e];return o&&o.list&&o.list.s?o.list.s.map(s=>tz(s,n)):t}function Zx(r,e,t){let n=r[e];return n&&n.list&&n.list.shape?n.list.shape.map(o=>rz(o)):t}function Jx(r,e,t){let n=r[e];return n&&n.list&&n.list.b?n.list.b:t}var PC=class{constructor(e,t,n){this.node=e,this.tensorMap=t,this.context=n,this.inputs=[],this.attrs={},this.inputs=e.inputNames.map(o=>this.getInput(o)),e.rawAttrs!=null&&(this.attrs=Object.keys(e.rawAttrs).reduce((o,s)=>(o[s]=this.getAttr(s),o),{}))}getInput(e){return yr(e,this.tensorMap,this.context)}getAttr(e,t){let n=this.node.rawAttrs[e];if(n.tensor!=null)return yr(e,this.tensorMap,this.context);if(n.i!=null||n.f!=null)return Ux(this.node.rawAttrs,e,t);if(n.s!=null)return jx(this.node.rawAttrs,e,t);if(n.b!=null)return Wx(this.node.rawAttrs,e,t);if(n.shape!=null)return Kx(this.node.rawAttrs,e,t);if(n.type!=null)return qx(this.node.rawAttrs,e,t);if(n.list!=null){if(n.list.i!=null||n.list.f!=null)return Xx(this.node.rawAttrs,e,t);if(n.list.s!=null)return Yx(this.node.rawAttrs,e,t);if(n.list.shape!=null)return Zx(this.node.rawAttrs,e,t);if(n.list.b!=null)return Jx(this.node.rawAttrs,e,t);if(n.list.type!=null)return Hx(this.node.rawAttrs,e,t)}return t}};var nz=(r,e,t)=>{switch(r.op){case"BiasAdd":case"AddV2":case"Add":return[Q(C("a",r,e,t),C("b",r,e,t))];case"AddN":return[dw(C("tensors",r,e,t))];case"FloorMod":case"Mod":return[Gm(C("a",r,e,t),C("b",r,e,t))];case"Mul":return[P(C("a",r,e,t),C("b",r,e,t))];case"RealDiv":case"Div":return[me(C("a",r,e,t),C("b",r,e,t))];case"DivNoNan":return[Fm(C("a",r,e,t),C("b",r,e,t))];case"FloorDiv":return[gu(C("a",r,e,t),C("b",r,e,t))];case"Sub":return[ce(C("a",r,e,t),C("b",r,e,t))];case"Minimum":return[Ts(C("a",r,e,t),C("b",r,e,t))];case"Maximum":return[Yr(C("a",r,e,t),C("b",r,e,t))];case"Pow":return[Or(C("a",r,e,t),C("b",r,e,t))];case"SquaredDifference":return[Mu(C("a",r,e,t),C("b",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var oz=(r,e,t)=>{switch(r.op){case"Abs":case"ComplexAbs":return[Nt(C("x",r,e,t))];case"Acos":return[_m(C("x",r,e,t))];case"Acosh":return[km(C("x",r,e,t))];case"Asin":return[Cm(C("x",r,e,t))];case"Asinh":return[Im(C("x",r,e,t))];case"Atan":return[Nm(C("x",r,e,t))];case"Atan2":return[Sm(C("x",r,e,t),C("y",r,e,t))];case"Atanh":return[Tm(C("x",r,e,t))];case"Ceil":return[Em(C("x",r,e,t))];case"Complex":return[kn(C("real",r,e,t),C("imag",r,e,t))];case"Cos":return[ka(C("x",r,e,t))];case"Cosh":return[ku(C("x",r,e,t))];case"Elu":return[Is(C("x",r,e,t))];case"Erf":return[Om(C("x",r,e,t))];case"Exp":return[Zt(C("x",r,e,t))];case"Expm1":return[Pm(C("x",r,e,t))];case"Floor":return[Ns(C("x",r,e,t))];case"Log":return[lr(C("x",r,e,t))];case"Log1p":return[Nu(C("x",r,e,t))];case"Imag":return[Cu(C("x",r,e,t))];case"Neg":return[qe(C("x",r,e,t))];case"Reciprocal":return[jm(C("x",r,e,t))];case"Real":return[ll(C("x",r,e,t))];case"Relu":return[Sr(C("x",r,e,t))];case"Round":return[Wm(C("x",r,e,t))];case"Selu":return[Ru(C("x",r,e,t))];case"Sigmoid":return[Hr(C("x",r,e,t))];case"Sin":return[Fu(C("x",r,e,t))];case"Sign":return[qm(C("x",r,e,t))];case"Sinh":return[Ou(C("x",r,e,t))];case"Softplus":return[Ss(C("x",r,e,t))];case"Sqrt":return[xt(C("x",r,e,t))];case"Square":return[Oe(C("x",r,e,t))];case"Tanh":return[Oi(C("x",r,e,t))];case"Tan":return[Ym(C("x",r,e,t))];case"ClipByValue":return[ir(C("x",r,e,t),C("clipValueMin",r,e,t),C("clipValueMax",r,e,t))];case"Relu6":return[Du(C("x",r,e,t))];case"Rsqrt":return[$u(yr(r.inputNames[0],e,t))];case"Prod":return[Au(C("x",r,e,t),C("axes",r,e,t))];case"LeakyRelu":return[Ca(C("x",r,e,t),C("alpha",r,e,t))];case"Prelu":return[Ta(C("x",r,e,t),C("alpha",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function An(r,e,t=""){if(!(typeof r=="number"||typeof e=="number")){y.assert(r.length===e.length,()=>t+` Shapes ${r} and ${e} must match`);for(let n=0;nt+` Shapes ${r} and ${e} must match`)}}}function sz(r){return!(typeof r=="number"||r.some(e=>e<0))}function Yp(r,e,t){let n=Qx(r,t),o=!sz(n);if(o&&e.length===0)throw new Error(`Tried to calculate elements of an empty list with non-fully-defined elementShape: ${n}`);if(o&&e.forEach(s=>{n=Qx(s.shape,n)}),!sz(n))throw new Error(`Non-fully-defined elementShape: ${n}`);return n}function Qx(r,e){if(typeof r=="number")return e;if(typeof e=="number")return r;if(r.length!==e.length)throw new Error(`Incompatible ranks during merge: ${r} vs. ${e}`);let t=[];for(let n=0;n=0&&s>=0&&o!==s)throw new Error(`Incompatible shape during merge: ${r} vs. ${e}`);t[n]=o>=0?o:s}return t}var MC=class{constructor(e,t,n,o,s,a,i){this.name=e,this.dtype=t,this.maxSize=n,this.elementShape=o,this.identicalElementShapes=s,this.dynamicSize=a,this.clearAfterRead=i,this.tensors=[],this.closed_=!1,this.idTensor=ue(0),Dt(this.idTensor)}get id(){return this.idTensor.id}get closed(){return this.closed_}clearAndClose(e){this.tensors.forEach(t=>{(e==null||!e.has(t.tensor.id))&&t.tensor.dispose()}),this.tensors=[],this.closed_=!0,this.idTensor.dispose()}size(){return this.tensors.length}read(e){if(this.closed_)throw new Error(`TensorArray ${this.name} has already been closed.`);if(e<0||e>=this.size())throw new Error(`Tried to read from index ${e}, but array size is: ${this.size()}`);let t=this.tensors[e];if(t.cleared)throw new Error(`TensorArray ${this.name}: Could not read index ${e} twice because it was cleared after a previous read (perhaps try setting clear_after_read = false?).`);return this.clearAfterRead&&(t.cleared=!0),t.read=!0,t.tensor}readMany(e){return e.map(t=>this.read(t))}write(e,t){if(this.closed_)throw new Error(`TensorArray ${this.name} has already been closed.`);if(e<0||!this.dynamicSize&&e>=this.maxSize)throw new Error(`Tried to write to index ${e}, but array is not resizeable and size is: ${this.maxSize}`);let n=this.tensors[e]||{};if(t.dtype!==this.dtype)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because the value dtype is ${t.dtype}, but TensorArray dtype is ${this.dtype}.`);if(this.size()===0&&(this.elementShape==null||this.elementShape.length===0)&&(this.elementShape=t.shape),An(this.elementShape,t.shape,`TensorArray ${this.name}: Could not write to TensorArray index ${e}.`),n.read)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because it has already been read.`);if(n.written)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because it has already been written.`);n.tensor=t,Dt(t),n.written=!0,this.tensors[e]=n}writeMany(e,t){if(e.length!==t.length)throw new Error(`TensorArray ${this.name}: could not write multiple tensors,because the index size: ${e.length} is not the same as tensors size: ${t.length}.`);e.forEach((n,o)=>this.write(n,t[o]))}gather(e,t){if(!!t&&t!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but gather requested dtype ${t}`);if(e)e=e.slice(0,this.size());else{e=[];for(let o=0;o=this.maxSize)throw new Error(`Max index must be < array size (${n} vs. ${this.maxSize})`);this.writeMany(e,pr(t,0))}split(e,t){if(t.dtype!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but tensor has dtype ${t.dtype}`);let n=0,o=e.map(l=>(n+=l,n));if(n!==t.shape[0])throw new Error(`Expected sum of lengths to be equal to tensor.shape[0], but sum of lengths is ${n}, and tensor's shape is: ${t.shape}`);if(!this.dynamicSize&&e.length!==this.maxSize)throw new Error(`TensorArray's size is not equal to the size of lengths (${this.maxSize} vs. ${e.length}), and the TensorArray is not marked as dynamically resizeable`);let s=n===0?0:t.size/n,a=[];V(()=>{t=L(t,[1,n,s]);for(let l=0;l{if(n!==s.dtype)throw new Error(`Invalid data types; op elements ${n}, but list elements ${s.dtype}`);An(t,s.shape,"TensorList shape mismatch: "),Dt(s)}),this.idTensor=ue(0),this.maxNumElements=o,Dt(this.idTensor)}get id(){return this.idTensor.id}copy(){return new dc([...this.tensors],this.elementShape,this.elementDtype)}clearAndClose(e){this.tensors.forEach(t=>{(e==null||!e.has(t.id))&&t.dispose()}),this.tensors.length=0,this.idTensor.dispose()}size(){return this.tensors.length}stack(e,t,n=-1){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);if(n!==-1&&this.tensors.length!==n)throw new Error(`Operation expected a list with ${n} elements but got a list with ${this.tensors.length} elements.`);An(e,this.elementShape,"TensorList shape mismatch: ");let o=Yp(this.elementShape,this.tensors,e);return V(()=>{let s=this.tensors.map(a=>L(a,o));return Vt(s,0)})}popBack(e,t){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);if(this.size()===0)throw new Error("Trying to pop from an empty list.");let n=Yp(this.elementShape,this.tensors,e),o=this.tensors.pop();return An(o.shape,e,"TensorList shape mismatch: "),L(o,n)}pushBack(e){if(e.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${e.dtype}, but list elements ${this.elementDtype}`);if(An(e.shape,this.elementShape,"TensorList shape mismatch: "),this.maxNumElements===this.size())throw new Error("Trying to push element into a full list.");Dt(e),this.tensors.push(e)}resize(e){if(e<0)throw new Error(`TensorListResize expects size to be non-negative. Got: ${e}`);if(this.maxNumElements!==-1&&e>this.maxNumElements)throw new Error(`TensorListResize input size ${e} is greater maxNumElement ${this.maxNumElements}.`);this.tensors.length=e}getItem(e,t,n){if(n!==this.elementDtype)throw new Error(`Invalid data types; op elements ${n}, but list elements ${this.elementDtype}`);if(e<0||e>this.tensors.length)throw new Error(`Trying to access element ${e} in a list with ${this.tensors.length} elements.`);if(this.tensors[e]==null)throw new Error(`element at index ${e} is null.`);An(this.tensors[e].shape,t,"TensorList shape mismatch: ");let o=Yp(this.elementShape,this.tensors,t);return L(this.tensors[e],o)}setItem(e,t){if(t.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t.dtype}, but list elements ${this.elementDtype}`);if(e<0||this.maxNumElements!==-1&&e>=this.maxNumElements)throw new Error(`Trying to set element ${e} in a list with max ${this.maxNumElements} elements.`);An(this.elementShape,t.shape,"TensorList shape mismatch: "),Dt(t),this.tensors[e]=t}gather(e,t,n){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);An(this.elementShape,n,"TensorList shape mismatch: "),e=e.slice(0,this.size());let o=Yp(this.elementShape,this.tensors,n);return e.length===0?Rr([],[0].concat(o)):V(()=>{let s=e.map(a=>L(this.tensors[a],o));return Vt(s,0)})}concat(e,t){if(!!e&&e!==this.elementDtype)throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${e}`);An(this.elementShape,t,"TensorList shape mismatch: ");let n=Yp(this.elementShape,this.tensors,t);return this.size()===0?Rr([],[0].concat(n)):V(()=>{let o=this.tensors.map(s=>L(s,n));return Ze(o,0)})}};function iz(r,e,t){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!==t)throw new Error(`Invalid data types; op elements ${r.dtype}, but list elements ${t}`);let o=r.shape.slice(1);An(o,e,"TensorList shape mismatch: ");let s=pr(r);return new dc(s,e,n)}function az(r,e,t){return new dc([],r,e,t)}function lz(r,e,t,n){if(e.length!==r.shape[0])throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${e.length} vs. ${r.shape[0]}`);let o=Math.max(...e);if(n!=null&&n!==-1&&o>=n)throw new Error(`Max index must be < array size (${o} vs. ${n})`);let s=new dc([],t,r.dtype,n),a=pr(r,0);return e.forEach((i,l)=>{s.setItem(i,a[l])}),s}function uz(r,e,t){let n=0,o=e.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),a=Qx(s,t),i=n===0?0:r.size/n,l=V(()=>{let c=[];r=L(r,[1,n,i]);for(let p=0;p{switch(r.op){case"If":case"StatelessIf":{let n=C("thenBranch",r,e,t),o=C("elseBranch",r,e,t),s=C("cond",r,e,t),a=C("args",r,e,t);return(await s.data())[0]?t.functionMap[n].executeFunctionAsync(a,t.tensorArrayMap,t.tensorListMap):t.functionMap[o].executeFunctionAsync(a,t.tensorArrayMap,t.tensorListMap)}case"While":case"StatelessWhile":{let n=C("body",r,e,t),o=C("cond",r,e,t),s=C("args",r,e,t),a=await t.functionMap[o].executeFunctionAsync(s,t.tensorArrayMap,t.tensorListMap),i=s.map(c=>c.id),l=await a[0].data();a.forEach(c=>{!c.kept&&i.indexOf(c.id)===-1&&c.dispose()});let u=s;for(;l[0];){let c=u;u=await t.functionMap[n].executeFunctionAsync(u,t.tensorArrayMap,t.tensorListMap);let p=u.map(f=>f.id);c.forEach(f=>{!f.kept&&i.indexOf(f.id)===-1&&p.indexOf(f.id)===-1&&f.dispose()});let m=await t.functionMap[o].executeFunctionAsync(u,t.tensorArrayMap,t.tensorListMap);l=await m[0].data(),m.forEach(f=>{!f.kept&&i.indexOf(f.id)===-1&&p.indexOf(f.id)===-1&&f.dispose()})}return u}case"LoopCond":{let n=C("pred",r,e,t);return[Gs(n)]}case"Switch":{let n=C("pred",r,e,t),o=C("data",r,e,t);return o.kept||(o=Gs(o)),(await n.data())[0]?[void 0,o]:[o,void 0]}case"Merge":{let n=r.inputNames.find(o=>yr(o,e,t)!==void 0);if(n){let o=yr(n,e,t);return[Gs(o)]}return}case"Enter":{let n=C("frameName",r,e,t),o=C("tensor",r,e,t);return t.enterFrame(n),[Gs(o)]}case"Exit":{let n=C("tensor",r,e,t);return t.exitFrame(),[Gs(n)]}case"NextIteration":{let n=C("tensor",r,e,t);return t.nextIteration(),[Gs(n)]}case"TensorArrayV3":{let n=C("size",r,e,t),o=C("dtype",r,e,t),s=C("elementShape",r,e,t),a=C("dynamicSize",r,e,t),i=C("clearAfterRead",r,e,t),l=C("identicalElementShapes",r,e,t),u=C("name",r,e,t),c=new MC(u,o,n,s,l,a,i);return t.addTensorArray(c),[c.idTensor,ue(1)]}case"TensorArrayWriteV3":{let n=C("tensorArrayId",r,e,t),o=C("index",r,e,t),s=C("tensor",r,e,t),a=t.getTensorArray(n.id);return a.write(o,s),[a.idTensor]}case"TensorArrayReadV3":{let n=C("tensorArrayId",r,e,t),o=C("index",r,e,t);return[t.getTensorArray(n.id).read(o)]}case"TensorArrayGatherV3":{let n=C("tensorArrayId",r,e,t),o=C("indices",r,e,t),s=C("dtype",r,e,t);return[t.getTensorArray(n.id).gather(o,s)]}case"TensorArrayScatterV3":{let n=C("tensorArrayId",r,e,t),o=C("indices",r,e,t),s=C("tensor",r,e,t),a=t.getTensorArray(n.id);return a.scatter(o,s),[a.idTensor]}case"TensorArrayConcatV3":{let n=C("tensorArrayId",r,e,t),o=t.getTensorArray(n.id),s=C("dtype",r,e,t);return[o.concat(s)]}case"TensorArraySplitV3":{let n=C("tensorArrayId",r,e,t),o=C("tensor",r,e,t),s=C("lengths",r,e,t),a=t.getTensorArray(n.id);return a.split(s,o),[a.idTensor]}case"TensorArraySizeV3":{let n=C("tensorArrayId",r,e,t),o=t.getTensorArray(n.id);return[ue(o.size(),"int32")]}case"TensorArrayCloseV3":{let n=C("tensorArrayId",r,e,t),o=t.getTensorArray(n.id);return o.clearAndClose(),[o.idTensor]}case"TensorListSetItem":{let n=C("tensorListId",r,e,t),o=C("index",r,e,t),s=C("tensor",r,e,t),a=t.getTensorList(n.id);return a.setItem(o,s),[a.idTensor]}case"TensorListGetItem":{let n=C("tensorListId",r,e,t),o=C("index",r,e,t),s=C("elementShape",r,e,t),a=C("elementDType",r,e,t);return[t.getTensorList(n.id).getItem(o,s,a)]}case"TensorListScatterV2":case"TensorListScatter":{let n=C("indices",r,e,t),o=C("tensor",r,e,t),s=C("elementShape",r,e,t),a=C("numElements",r,e,t),i=lz(o,n,s,a);return t.addTensorList(i),[i.idTensor]}case"TensorListReserve":case"EmptyTensorList":{let n=C("elementShape",r,e,t),o=C("elementDType",r,e,t),s;r.op==="TensorListReserve"?s="numElements":s="maxNumElements";let a=C(s,r,e,t),i=az(n,o,a);return t.addTensorList(i),[i.idTensor]}case"TensorListGather":{let n=C("tensorListId",r,e,t),o=C("indices",r,e,t),s=C("elementShape",r,e,t),a=C("elementDType",r,e,t);return[t.getTensorList(n.id).gather(o,a,s)]}case"TensorListStack":{let n=C("tensorListId",r,e,t),o=C("elementShape",r,e,t),s=C("elementDType",r,e,t),a=C("numElements",r,e,t);return[t.getTensorList(n.id).stack(o,s,a)]}case"TensorListFromTensor":{let n=C("tensor",r,e,t),o=C("elementShape",r,e,t),s=C("elementDType",r,e,t),a=iz(n,o,s);return t.addTensorList(a),[a.idTensor]}case"TensorListConcat":{let n=C("tensorListId",r,e,t),o=t.getTensorList(n.id),s=C("dtype",r,e,t),a=C("elementShape",r,e,t);return[o.concat(s,a)]}case"TensorListPushBack":{let n=C("tensorListId",r,e,t),o=C("tensor",r,e,t),s=t.getTensorList(n.id);return s.pushBack(o),[s.idTensor]}case"TensorListPopBack":{let n=C("tensorListId",r,e,t),o=C("elementShape",r,e,t),s=C("elementDType",r,e,t);return[t.getTensorList(n.id).popBack(o,s)]}case"TensorListSplit":{let n=C("tensor",r,e,t),o=C("elementShape",r,e,t),s=C("lengths",r,e,t),a=uz(n,s,o);return t.addTensorList(a),[a.idTensor]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};function pz(r,e,t){let[n,o]=C("fusedOps",r,e,t),s=n==="biasadd",a=o==="prelu",i=n==="fusedbatchnorm",l=C("numArgs",r,e,t);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&&l!==1)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd must have one extra argument: bias.")}if(i)throw new Error("FusedConv2d and DepthwiseConv2d with FusedBatchNorm is not supported.");let u=C("strides",r,e,t),c=nh(r,e,t),p=C("dataFormat",r,e,t).toUpperCase(),m=C("dilations",r,e,t),[f,d]=C("args",r,e,t),h=C("leakyreluAlpha",r,e,t);return{stride:u,pad:c,dataFormat:p,dilations:m,biasArg:f,preluArg:d,activationFunc:o,leakyreluAlpha:h}}var mz=(r,e,t)=>{switch(r.op){case"Conv1D":{let n=C("stride",r,e,t),o=C("pad",r,e,t),s=C("dataFormat",r,e,t).toUpperCase(),a=C("dilation",r,e,t);return[wu(C("x",r,e,t),C("filter",r,e,t),n,o,s,a)]}case"Conv2D":{let n=C("strides",r,e,t),o=nh(r,e,t),s=C("dataFormat",r,e,t).toUpperCase(),a=C("dilations",r,e,t);return[Kr(C("x",r,e,t),C("filter",r,e,t),[n[1],n[2]],o,s,[a[1],a[2]])]}case"_FusedConv2D":{let{stride:n,pad:o,dataFormat:s,dilations:a,biasArg:i,preluArg:l,activationFunc:u,leakyreluAlpha:c}=pz(r,e,t);return[Go.conv2d({x:C("x",r,e,t),filter:C("filter",r,e,t),strides:[n[1],n[2]],pad:o,dataFormat:s,dilations:[a[1],a[2]],bias:i,activation:u,preluActivationWeights:l,leakyreluAlpha:c})]}case"FusedDepthwiseConv2dNative":{let{stride:n,pad:o,dataFormat:s,dilations:a,biasArg:i,preluArg:l,activationFunc:u,leakyreluAlpha:c}=pz(r,e,t);return[Go.depthwiseConv2d({x:C("x",r,e,t),filter:C("filter",r,e,t),strides:[n[1],n[2]],pad:o,dataFormat:s,dilations:[a[1],a[2]],bias:i,activation:u,preluActivationWeights:l,leakyreluAlpha:c})]}case"Conv2DBackpropInput":case"Conv2dTranspose":{let n=C("outputShape",r,e,t),o=C("strides",r,e,t),s=nh(r,e,t);return[_u(C("x",r,e,t),C("filter",r,e,t),n,[o[1],o[2]],s)]}case"DepthwiseConv2dNative":case"DepthwiseConv2d":{let n=C("strides",r,e,t),o=nh(r,e,t),s=C("dilations",r,e,t),a=C("dataFormat",r,e,t).toUpperCase();return[Cs(C("input",r,e,t),C("filter",r,e,t),[n[1],n[2]],o,a,[s[1],s[2]])]}case"Conv3D":{let n=C("strides",r,e,t),o=C("pad",r,e,t),s=C("dataFormat",r,e,t).toUpperCase(),a=C("dilations",r,e,t);return[Dm(C("x",r,e,t),C("filter",r,e,t),[n[1],n[2],n[3]],o,s,[a[1],a[2],a[3]])]}case"AvgPool":{let n=C("strides",r,e,t),o=C("pad",r,e,t),s=C("kernelSize",r,e,t);return[wa(C("x",r,e,t),[s[1],s[2]],[n[1],n[2]],o)]}case"MaxPool":{let n=C("strides",r,e,t),o=C("pad",r,e,t),s=C("kernelSize",r,e,t);return[Na(C("x",r,e,t),[s[1],s[2]],[n[1],n[2]],o)]}case"MaxPoolWithArgmax":{let n=C("strides",r,e,t),o=C("pad",r,e,t),s=C("kernelSize",r,e,t),a=C("includeBatchInIndex",r,e,t),{result:i,indexes:l}=Mw(C("x",r,e,t),[s[1],s[2]],[n[1],n[2]],o,a);return[i,l]}case"AvgPool3D":{let n=C("strides",r,e,t),o=C("pad",r,e,t),s=C("kernelSize",r,e,t);return[Am(C("x",r,e,t),[s[1],s[2],s[3]],[n[1],n[2],n[3]],o)]}case"MaxPool3D":{let n=C("strides",r,e,t),o=C("pad",r,e,t),s=C("kernelSize",r,e,t);return[Bm(C("x",r,e,t),[s[1],s[2],s[3]],[n[1],n[2],n[3]],o)]}case"Dilation2D":{let n=C("strides",r,e,t),o=C("pad",r,e,t),s=C("dilations",r,e,t),a=n[1],i=n[2],l=s[1],u=s[2];return[Rm(C("x",r,e,t),C("filter",r,e,t),[a,i],o,[l,u],"NHWC")]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var fz=(r,e,t)=>{switch(r.op){case"Fill":{let n=C("shape",r,e,t),o=C("dtype",r,e,t),s=C("value",r,e,t);return[va(n,s,o)]}case"LinSpace":{let n=C("start",r,e,t),o=C("stop",r,e,t),s=C("num",r,e,t);return[Dw(n,o,s)]}case"Multinomial":{let n=C("logits",r,e,t),o=C("numSamples",r,e,t),s=C("seed",r,e,t);return[Lw(n,o,s)]}case"OneHot":{let n=C("indices",r,e,t),o=C("depth",r,e,t),s=C("onValue",r,e,t),a=C("offValue",r,e,t);return[vs(n,o,s,a)]}case"Ones":return[Nr(C("shape",r,e,t),C("dtype",r,e,t))];case"OnesLike":return[tr(C("x",r,e,t))];case"RandomUniform":return[As(C("shape",r,e,t),C("minval",r,e,t),C("maxval",r,e,t),C("dtype",r,e,t))];case"Range":{let n=C("start",r,e,t),o=C("stop",r,e,t),s=C("step",r,e,t);return[Jc(n,o,s,C("dtype",r,e,t))]}case"TruncatedNormal":{let n=C("shape",r,e,t),o=C("mean",r,e,t),s=C("stdDev",r,e,t),a=C("seed",r,e,t);return[Lu(n,o,s,C("dtype",r,e,t),a)]}case"Zeros":return[gt(C("shape",r,e,t),C("dtype",r,e,t))];case"ZerosLike":return[Ce(C("x",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function LC(r,e,t){let n=C("boxes",r,e,t),o=C("scores",r,e,t),s=C("maxOutputSize",r,e,t),a=C("iouThreshold",r,e,t),i=C("scoreThreshold",r,e,t),l=C("softNmsSigma",r,e,t);return{boxes:n,scores:o,maxOutputSize:s,iouThreshold:a,scoreThreshold:i,softNmsSigma:l}}var dz=async(r,e,t)=>{switch(r.op){case"NonMaxSuppressionV5":{let{boxes:n,scores:o,maxOutputSize:s,iouThreshold:a,scoreThreshold:i,softNmsSigma:l}=LC(r,e,t),u=await Ds.nonMaxSuppressionWithScoreAsync(n,o,s,a,i,l);return[u.selectedIndices,u.selectedScores]}case"NonMaxSuppressionV4":{let{boxes:n,scores:o,maxOutputSize:s,iouThreshold:a,scoreThreshold:i}=LC(r,e,t),l=C("padToMaxOutputSize",r,e,t),u=await Ds.nonMaxSuppressionPaddedAsync(n,o,s,a,i,l);return[u.selectedIndices,u.validOutputs]}case"NonMaxSuppressionV3":case"NonMaxSuppressionV2":{let{boxes:n,scores:o,maxOutputSize:s,iouThreshold:a,scoreThreshold:i}=LC(r,e,t);return[await Ds.nonMaxSuppressionAsync(n,o,s,a,i)]}case"Where":{let n=oe(C("condition",r,e,t),"bool"),o=[await Qm(n)];return n.dispose(),o}case"ListDiff":return Kw(C("x",r,e,t),C("y",r,e,t));default:throw TypeError(`Node type ${r.op} is not implemented`)}};var hz=(r,e,t)=>{switch(r.op){case"TopKV2":{let n=C("x",r,e,t),o=C("k",r,e,t),s=C("sorted",r,e,t),a=Zm(n,o,s);return[a.values,a.indices]}case"Unique":{let n=C("x",r,e,t),o=ep(n);return[o.values,o.indices]}case"UniqueV2":{let n=C("x",r,e,t),o=C("axis",r,e,t),s=ep(n,o);return[s.values,s.indices]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var gz=(r,e,t)=>{switch(r.op){case"Const":return e[r.name];case"PlaceholderWithDefault":let n=C("default",r,e,t);return[yr(r.name,e,t)||n];case"Placeholder":return[yr(r.name,e,t)];case"Identity":case"StopGradient":case"FakeQuantWithMinMaxVars":{let u=C("x",r,e,t);return[Gs(u)]}case"IdentityN":return C("x",r,e,t).map(u=>Gs(u));case"Snapshot":let o=C("x",r,e,t);return[Gs(o)];case"Shape":return[Gt(C("x",r,e,t).shape,"int32")];case"ShapeN":return C("x",r,e,t).map(u=>Gt(u.shape));case"Size":return[ue(C("x",r,e,t).size,"int32")];case"Rank":return[ue(C("x",r,e,t).rank,"int32")];case"NoOp":return[ue(1)];case"Print":let s=C("x",r,e,t),a=C("data",r,e,t),i=C("message",r,e,t),l=C("summarize",r,e,t);console.warn("The graph has a tf.print() operation,usually used for debugging, which slows down performance."),console.log(i);for(let u=0;ue.dispose()),this.tensorMap.clear(),this.handle.dispose()}size(){return this.tensorMap.size}async import(e,t){this.checkKeyAndValueTensor(e,t);let n=await e.data();return this.tensorMap.forEach(o=>o.dispose()),this.tensorMap.clear(),V(()=>{let o=pr(t),s=n.length,a=o.length;y.assert(s===a,()=>`The number of elements doesn't match, keys has ${s} elements, the values has ${a} elements.`);for(let i=0;i{let o=[];for(let s=0;s{switch(r.op){case"HashTable":case"HashTableV2":{let o=C("keyDType",r,e,t),s=C("valueDType",r,e,t),a=new zC(o,s);return n.addHashTable(r.name,a),[a.handle]}case"LookupTableImport":case"LookupTableImportV2":{let o=C("tableHandle",r,e,t,n),s=C("keys",r,e,t),a=C("values",r,e,t);return[await n.getHashTableById(o.id).import(s,a)]}case"LookupTableFind":case"LookupTableFindV2":{let o=C("tableHandle",r,e,t,n),s=C("keys",r,e,t),a=C("defaultValue",r,e,t);return[await n.getHashTableById(o.id).find(s,a)]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var yz=(r,e,t)=>{switch(r.op){case"ResizeBilinear":{let n=C("images",r,e,t),o=C("size",r,e,t),s=C("alignCorners",r,e,t),a=C("halfPixelCenters",r,e,t);return[Ds.resizeBilinear(n,[o[0],o[1]],s,a)]}case"ResizeNearestNeighbor":{let n=C("images",r,e,t),o=C("size",r,e,t),s=C("alignCorners",r,e,t),a=C("halfPixelCenters",r,e,t);return[Ds.resizeNearestNeighbor(n,[o[0],o[1]],s,a)]}case"CropAndResize":{let n=C("image",r,e,t),o=C("boxes",r,e,t),s=C("boxInd",r,e,t),a=C("cropSize",r,e,t),i=C("method",r,e,t),l=C("extrapolationValue",r,e,t);return[Ds.cropAndResize(n,o,s,a,i,l)]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var bz=(r,e,t)=>{switch(r.op){case"Equal":return[vn(C("a",r,e,t),C("b",r,e,t))];case"NotEqual":return[Vo(C("a",r,e,t),C("b",r,e,t))];case"Greater":return[er(C("a",r,e,t),C("b",r,e,t))];case"GreaterEqual":return[an(C("a",r,e,t),C("b",r,e,t))];case"Less":return[Iu(C("a",r,e,t),C("b",r,e,t))];case"LessEqual":return[Bn(C("a",r,e,t),C("b",r,e,t))];case"LogicalAnd":return[hr(C("a",r,e,t),C("b",r,e,t))];case"LogicalNot":return[Ia(C("a",r,e,t))];case"LogicalOr":return[Tu(C("a",r,e,t),C("b",r,e,t))];case"Select":case"SelectV2":return[$t(C("condition",r,e,t),C("a",r,e,t),C("b",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var wz=(r,e,t)=>{switch(r.op){case"BatchMatMul":case"BatchMatMulV2":case"MatMul":return[je(C("a",r,e,t),C("b",r,e,t),C("transposeA",r,e,t),C("transposeB",r,e,t))];case"Transpose":return[Ue(C("x",r,e,t),C("perm",r,e,t))];case"_FusedMatMul":let[n,o]=C("fusedOps",r,e,t),s=n==="biasadd",a=o==="prelu",i=C("numArgs",r,e,t),l=C("leakyreluAlpha",r,e,t);if(s){if(a&&i!==2)throw new Error("Fused MatMul with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!a&&i!==1)throw new Error("Fused MatMul with BiasAdd must have one extra argument: bias.")}let[u,c]=C("args",r,e,t);return[Go.matMul({a:C("a",r,e,t),b:C("b",r,e,t),transposeA:C("transposeA",r,e,t),transposeB:C("transposeB",r,e,t),bias:u,activation:o,preluActivationWeights:c,leakyreluAlpha:l})];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var _z=(r,e,t)=>{switch(r.op){case"FusedBatchNorm":case"FusedBatchNormV2":return[Lo(C("x",r,e,t),C("mean",r,e,t),C("variance",r,e,t),C("offset",r,e,t),C("scale",r,e,t),C("epsilon",r,e,t))];case"FusedBatchNormV3":return[Lo(C("x",r,e,t),C("mean",r,e,t),C("variance",r,e,t),C("offset",r,e,t),C("scale",r,e,t),C("epsilon",r,e,t))];case"LRN":return[Mm(C("x",r,e,t),C("radius",r,e,t),C("bias",r,e,t),C("alpha",r,e,t),C("beta",r,e,t))];case"Softmax":return[Aa(C("x",r,e,t))];case"LogSoftmax":return[Su(C("x",r,e,t))];case"SparseToDense":return[ef(C("sparseIndices",r,e,t),C("outputShape",r,e,t),C("sparseValues",r,e,t),C("defaultValue",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var kz=(r,e,t)=>{switch(r.op){case"Max":{let a=C("axis",r,e,t),i=C("keepDims",r,e,t);return[ur(C("x",r,e,t),a,i)]}case"Mean":{let a=C("axis",r,e,t),i=C("keepDims",r,e,t);return[ht(C("x",r,e,t),a,i)]}case"Min":{let a=C("axis",r,e,t),i=C("keepDims",r,e,t);return[Pi(C("x",r,e,t),a,i)]}case"Sum":{let a=C("axis",r,e,t),i=C("keepDims",r,e,t);return[ge(C("x",r,e,t),a,i)]}case"All":{let a=C("axis",r,e,t),i=C("keepDims",r,e,t);return[xu(C("x",r,e,t),a,i)]}case"Any":{let a=C("axis",r,e,t),i=C("keepDims",r,e,t);return[sl(C("x",r,e,t),a,i)]}case"ArgMax":{let a=C("axis",r,e,t);return[il(C("x",r,e,t),a)]}case"ArgMin":{let a=C("axis",r,e,t);return[vm(C("x",r,e,t),a)]}case"Prod":{let a=C("axis",r,e,t),i=C("keepDims",r,e,t);return[Au(C("x",r,e,t),a,i)]}case"Cumsum":{let a=C("axis",r,e,t),i=C("exclusive",r,e,t),l=C("reverse",r,e,t);return[vu(C("x",r,e,t),a,i,l)]}case"Bincount":let n=C("x",r,e,t),o=C("weights",r,e,t),s=C("size",r,e,t);return[_w(n,o,s)];case"DenseBincount":{let a=C("x",r,e,t),i=C("weights",r,e,t),l=C("size",r,e,t),u=C("binaryOutput",r,e,t);return[Nw(a,i,l,u)]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var vz=(r,e,t)=>{switch(r.op){case"ConcatV2":case"Concat":{let n=C("n",r,e,t),o=C("axis",r,e,t),s=C("tensors",r,e,t);return s=s.slice(0,n),[Ze(s,o)]}case"Gather":{let n=C("x",r,e,t),o=C("indices",r,e,t);return[zo(n,oe(o,"int32"),0)]}case"GatherV2":{let n=C("axis",r,e,t),o=C("batchDims",r,e,t),s=C("x",r,e,t),a=C("indices",r,e,t);return[zo(s,oe(a,"int32"),n,o)]}case"Reverse":{let n=C("dims",r,e,t),o=[];for(let a=0;a{let n=C("axis",r,e,t),o=C("tensors",r,e,t),s=o[0].shape,a=Cn(o[0]).shape,i=o.map(l=>{let u=y.arraysEqual(l.shape,s);if(!u&&!y.arraysEqual(Cn(l).shape,a))throw new Error("the input tensors shape does not match");return u?l:L(l,s)});return[Vt(i,n)]});case"Unpack":{let n=C("axis",r,e,t),o=C("tensor",r,e,t);return pr(o,n)}case"Tile":{let n=C("reps",r,e,t);return[zn(C("x",r,e,t),n)]}case"Split":case"SplitV":{let n=C("axis",r,e,t),o=C("numOrSizeSplits",r,e,t),s=C("x",r,e,t);return cr(s,o,n)}case"ScatterNd":{let n=C("indices",r,e,t),o=C("values",r,e,t),s=C("shape",r,e,t);return[Zw(n,o,s)]}case"GatherNd":{let n=C("x",r,e,t),o=C("indices",r,e,t);return[Jw(n,o)]}case"SparseToDense":{let n=C("sparseIndices",r,e,t),o=C("outputShape",r,e,t),s=C("sparseValues",r,e,t),a=C("defaultValue",r,e,t);return[ef(n,s,o,s.dtype===a.dtype?a:oe(a,s.dtype))]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var Cz=(r,e,t)=>{switch(r.op){case"FFT":return[Ea(C("x",r,e,t))];case"IFFT":return[Mi(C("x",r,e,t))];case"RFFT":return[Da(C("x",r,e,t))];case"IRFFT":return[Pu(C("x",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var Iz=(r,e,t)=>{switch(r.op){case"Cast":return[oe(C("x",r,e,t),C("dtype",r,e,t))];case"ExpandDims":{let n=C("axis",r,e,t);return[ar(C("x",r,e,t),n)]}case"Squeeze":{let n=C("axis",r,e,t);return[Cn(C("x",r,e,t),n)]}case"Reshape":return[L(C("x",r,e,t),C("shape",r,e,t))];case"MirrorPad":return[Vm(C("x",r,e,t),C("padding",r,e,t),C("mode",r,e,t))];case"PadV2":case"Pad":return[Fr(C("x",r,e,t),C("padding",r,e,t),C("constantValue",r,e,t))];case"SpaceToBatchND":{let n=C("blockShape",r,e,t),o=C("paddings",r,e,t);return[Sa(C("x",r,e,t),n,o)]}case"BatchToSpaceND":{let n=C("blockShape",r,e,t),o=C("crops",r,e,t);return[_a(C("x",r,e,t),n,o)]}case"DepthToSpace":{let n=C("blockSize",r,e,t),o=C("dataFormat",r,e,t).toUpperCase();return[$m(C("x",r,e,t),n,o)]}case"BroadcastTo":return[al(C("x",r,e,t),C("shape",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function BC(r,e,t,n){let o=((s,a,i)=>{switch(s.category){case"arithmetic":return V(()=>nz(s,a,i));case"basic_math":return V(()=>oz(s,a,i));case"control":return cz(s,a,i);case"convolution":return V(()=>mz(s,a,i));case"creation":return V(()=>fz(s,a,i));case"dynamic":return dz(s,a,i);case"evaluation":return V(()=>hz(s,a,i));case"image":return V(()=>yz(s,a,i));case"graph":return V(()=>gz(s,a,i));case"logical":return V(()=>bz(s,a,i));case"matrices":return V(()=>wz(s,a,i));case"normalization":return V(()=>_z(s,a,i));case"reduction":return V(()=>kz(s,a,i));case"slice_join":return V(()=>vz(s,a,i));case"spectral":return V(()=>Cz(s,a,i));case"transformation":return V(()=>Iz(s,a,i));case"hash_table":return xz(s,a,i,n);case"custom":let l=Bx(s.op);if(l&&l.customExecutor)return l.customExecutor(new PC(s,a,i));throw TypeError(`Custom op ${s.op} is not registered.`);default:throw TypeError(`Unknown op '${s.op}'. File an issue at https://github.com/tensorflow/tfjs/issues so we can add it, or register a custom execution with tf.registerOp()`)}})(r,e,t);return y.isPromise(o)?o.then(s=>[].concat(s)):[].concat(o)}var ey=class{constructor(e={},t={},n={},o={}){this.weightMap=e,this.tensorArrayMap=t,this.tensorListMap=n,this.functionMap=o,this.rootContext={id:0,frameName:"",iterationId:0},this.contexts=[this.rootContext],this.lastId=0,this.generateCurrentContextIds()}newFrame(e,t){return{id:e,frameName:t,iterationId:0}}set currentContext(e){this.contexts!==e&&(this.contexts=e,this.generateCurrentContextIds())}get currentContext(){return this.contexts}get currentContextId(){return this._currentContextIds[0]}get currentContextIds(){return this._currentContextIds}generateCurrentContextIds(){let e=[];for(let t=0;tt.id===0&&t.iterationId===0?"":`${t.frameName}-${t.iterationId}`).join("/"):""}enterFrame(e){this.contexts&&(this.lastId++,this.contexts=this.contexts.slice(),this.contexts.push(this.newFrame(this.lastId,e)),this._currentContextIds.unshift(this.contextIdforContexts(this.contexts)))}exitFrame(){if(this.contexts&&this.contexts.length>1)this.contexts=this.contexts.slice(),this.contexts.splice(-1),this.currentContextIds.shift();else throw new Error("Cannot exit frame, the context is empty")}nextIteration(){if(this.contexts&&this.contexts.length>0){this.contexts=this.contexts.slice(),this.lastId++;let e=Object.assign({},this.contexts[this.contexts.length-1]);e.iterationId+=1,e.id=this.lastId,this.contexts.splice(-1,1,e),this._currentContextIds.splice(0,1,this.contextIdforContexts(this.contexts))}else throw new Error("Cannot increase frame iteration, the context is empty")}getWeight(e){return this.weightMap[e]}addTensorArray(e){this.tensorArrayMap[e.id]=e}getTensorArray(e){return this.tensorArrayMap[e]}addTensorList(e){this.tensorListMap[e.id]=e}getTensorList(e){return this.tensorListMap[e]}dispose(e){for(let t in this.tensorArrayMap)this.tensorArrayMap[t].clearAndClose(e);for(let t in this.tensorListMap)this.tensorListMap[t].clearAndClose(e)}};function GC(r,e,t,n){let o=new Set,s=[],a=null,i=null,l=new Set,u=Object.keys(r).map(m=>en(m)[0]),c=[];n!=null&&(c=n.map(m=>en(m.name)[0]));let p=[...e];for(;p.length>0;){let m=p.pop();if((VC(m)||ite(m)||ate(m))&&a==null&&(a=m,i=a.children.map(f=>f.name).filter(f=>o.has(f))),o.add(m.name),t[m.name]==null&&u.indexOf(m.name)===-1&&c.indexOf(m.name)===-1){if(m.inputs.length===0){s.push(m.name);continue}m.inputs.forEach(f=>{l.has(f.name)||(l.add(f.name),p.push(f))})}}return{inputs:r,outputs:e,usedNodes:o,missingInputs:s,dynamicNode:a,syncInputs:i}}function Nz(r,e,t){let{usedNodes:n,inputs:o}=t,s=[],a=Object.keys(o).map(c=>en(c)[0]).map(c=>r.nodes[c]),i=r.initNodes;a.forEach(c=>{n.has(c.name)&&s.push(c)}),r.weights.forEach(c=>{n.has(c.name)&&s.push(c)}),i!=null&&i.forEach(c=>{n.has(c.name)&&s.push(c)});let l=new Set,u=[];for(;s.length>0;){let c=s.pop();l.add(c.name),e[c.name]||u.push(c),c.children.forEach(p=>{!l.has(p.name)&&n.has(p.name)&&p.inputs.every(m=>l.has(m.name))&&s.push(p)})}return u}var lte=["Switch","Merge","Enter","Exit","NextIteration","StatelessIf","StatelessWhile","if","While"],ute=["NonMaxSuppressionV2","NonMaxSuppressionV3","NonMaxSuppressionV5","Where"],cte=["HashTable","HashTableV2","LookupTableImport","LookupTableImportV2","LookupTableFind","LookupTableFindV2"];function VC(r){return lte.indexOf(r.op)>=0}function ite(r){return ute.indexOf(r.op)>=0}function ate(r){return cte.indexOf(r.op)>=0}var Zp=class{constructor(e,t){this.graph=e,this.parent=t,this.compiledMap=new Map,this._weightMap={},this.SEPERATOR=",",this._functions={},this._functionExecutorMap={},this._outputs=e.outputs,this._inputs=e.inputs,this._initNodes=e.initNodes,this._signature=e.signature,this._functions=e.functions,e.functions!=null&&Object.keys(e.functions).forEach(n=>{this._functionExecutorMap[n]=new Zp(e.functions[n],this)})}get weightIds(){return this.parent?this.parent.weightIds:this._weightIds}get functionExecutorMap(){return this.parent?this.parent.functionExecutorMap:this._functionExecutorMap}get weightMap(){return this.parent?this.parent.weightMap:this._weightMap}set weightMap(e){let t=Object.keys(e).map(n=>e[n].map(o=>o.id));this._weightIds=[].concat(...t),this._weightMap=e}set resourceManager(e){this._resourceManager=e}get inputs(){return this._inputs.map(e=>({name:e.name,shape:e.attrParams.shape?e.attrParams.shape.value:void 0,dtype:e.attrParams.dtype?e.attrParams.dtype.value:void 0}))}get outputs(){return this._outputs.map(e=>({name:e.name,shape:e.attrParams.shape?e.attrParams.shape.value:void 0,dtype:e.attrParams.dtype?e.attrParams.dtype.value:void 0}))}get inputNodes(){return this._inputs.map(e=>e.signatureKey||e.name)}get outputNodes(){return this._outputs.map(e=>{let t=e.signatureKey||e.name;return e.defaultOutput?`${t}:${e.defaultOutput}`:t})}get functions(){return Object.keys(this._functions).reduce((e,t)=>(e[t]=this._functions[t].signature,e),{})}getCompilationKey(e,t){let n=e.map(s=>s.name).sort(),o=t.map(s=>s.name).sort();return n.join(this.SEPERATOR)+"--"+o.join(this.SEPERATOR)}compile(e,t){let n=GC(e,t,this.weightMap,this._initNodes),{missingInputs:o,dynamicNode:s,syncInputs:a}=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 [${a}]`);if(o.length>0){let i=t.map(u=>u.name),l=Object.keys(e);throw new Error(`Cannot compute the outputs [${i}] from the provided inputs [${l}]. Missing the following inputs: [${o}]`)}return Nz(this.graph,this.weightMap,n)}execute(e,t){e=this.mapInputs(e);let n=Object.keys(e).sort();this.checkInputs(e),this.checkInputShapeAndType(e),t=this.mapOutputs(t),this.checkOutputs(t);let o=n.map(p=>this.graph.nodes[en(p)[0]]),s=t.map(p=>en(p)[0]),a=s.map(p=>this.graph.nodes[p]);a.length===0&&(a=this._outputs);let i=this.getCompilationKey(o,a),l=this.compiledMap.get(i);l==null&&(l=this.compile(e,a),this.compiledMap.set(i,l));let u={},c={};return V(()=>{let p=new ey(this.weightMap,u,c,this.functionExecutorMap),m=Object.assign({},this.weightMap);Object.keys(e).forEach(h=>{let[g,x]=en(h),w=[];w[x]=e[h],m[g]=w});let f=this.getFrozenTensorIds(m),d={};for(let h=0;hyr(h,m,p))})}getFrozenTensorIds(e){let t=[].concat.apply([],Object.keys(e).map(n=>e[n]).map(n=>n.map(o=>o.id)));return new Set(t)}checkTensorForDisposal(e,t,n,o,s,a,i){t.category==="control"||a.indexOf(e)!==-1||(n[e].forEach(l=>{l!=null&&(i[l.id]=(i[l.id]||0)+t.children.length)}),t.inputs.forEach(l=>{if(l.category!=="control"){let u=QL(l.name,n,o);u!=null&&u.forEach(c=>{if(c&&!s.has(c.id)){let p=i[c.id];p===1?(c.dispose(),delete i[c.id]):p!=null&&i[c.id]--}})}}))}async executeAsync(e,t){return this._executeAsync(e,t)}async _executeAsync(e,t,n=!1,o={},s={}){n||(e=this.mapInputs(e),this.checkInputs(e),this.checkInputShapeAndType(e),t=this.mapOutputs(t),this.checkOutputs(t));let a=new ey(this.weightMap,o,s,this.functionExecutorMap),i=await this.executeWithControlFlow(e,a,t,n),l=t.map(m=>yr(m,i,a)),u=l.map(m=>m.id),c=Object.keys(e).map(m=>e[m].id),p=new Set([...u,...c,...this.weightIds]);return Object.keys(i).forEach(m=>{i[m].forEach(d=>{d&&!d.isDisposed&&!p.has(d.id)&&d.dispose()})}),this.parent==null&&a.dispose(p),l}async executeFunctionAsync(e,t,n){let o=e.reduce((s,a,i)=>(s[this.inputs[i].name]=a,s),{});return this._executeAsync(o,this.outputNodes,!0,t,n)}async executeWithControlFlow(e,t,n,o){let s=Object.keys(e),a=s.map(b=>this.graph.nodes[en(b)[0]]),i=n.map(b=>en(b)[0]),l=i.map(b=>this.graph.nodes[b]);l.length===0&&(l=this._outputs);let{usedNodes:u,missingInputs:c,dynamicNode:p,syncInputs:m}=GC(e,l,this.weightMap,this._initNodes),f=[...a,...this.graph.weights,...this._initNodes||[]].map(b=>({node:b,contexts:t.currentContext})),d=Object.assign({},this.weightMap);Object.keys(e).forEach(b=>{let[_,k]=en(b),A=[];A[k]=e[b],d[_]=A});let h={},g=this.getFrozenTensorIds(d),x={};for(;f.length>0;){let b=this.processStack(a,f,t,d,x,g,i,h,u);await Promise.all(b)}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 w=l.filter(b=>!VC(b)&&!yr(b.name,d,t)).map(b=>b.name);if(w.length>0){let b="";throw p!=null&&(b=`Alternatively, to avoid the dynamic ops, use model.execute() and specify the inputs [${m}]`),new Error(`Cannot compute the outputs [${w}] from the provided inputs [${s}]. Consider providing the following inputs: [${c}]. ${b}`)}return d}processStack(e,t,n,o,s,a,i,l,u){let c=[];for(;t.length>0;){let p=t.pop();n.currentContext=p.contexts;let m="";if(p.node.op==="Enter"&&C("isConstant",p.node,o,n)&&([m]=Vs(p.node.name,n)),o[p.node.name]==null){let f=BC(p.node,o,n,this._resourceManager);m||([m]=Vs(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,a,i,l),this.processChildNodes(p.node,t,n,o,s,u),h))):(o[m]=f,this.checkTensorForDisposal(m,p.node,o,n,a,i,l),this.processChildNodes(p.node,t,n,o,s,u))}else this.processChildNodes(p.node,t,n,o,s,u)}return c}processChildNodes(e,t,n,o,s,a){e.children.forEach(i=>{let[l]=Vs(i.name,n);s[l]||!a.has(i.name)||(i.op==="Merge"?i.inputNames.some(u=>!!yr(u,o,n))&&(s[l]=!0,t.push({contexts:n.currentContext,node:i})):i.inputNames.every(u=>!!yr(u,o,n))&&(s[l]=!0,t.push({contexts:n.currentContext,node:i})))})}dispose(){Object.keys(this.weightMap).forEach(e=>this.weightMap[e].forEach(t=>t.dispose()))}checkInputShapeAndType(e){Object.keys(e).forEach(t=>{let n=e[t],[o]=en(t),s=this.graph.nodes[o];if(s.attrParams.shape&&s.attrParams.shape.value){let a=s.attrParams.shape.value,i=a.length===n.shape.length&&n.shape.every((l,u)=>a[u]===-1||a[u]===l);y.assert(i,()=>`The shape of dict['${s.name}'] provided in model.execute(dict) must be [${a}], 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(e){let t={};for(let n in e)if(this._signature!=null&&this._signature.inputs!=null&&this._signature.inputs[n]!=null){let o=this._signature.inputs[n];t[o.name]=e[n]}else t[n]=e[n];return t}checkInputs(e){let t=Object.keys(e).filter(n=>{let[o]=en(n);return this.graph.nodes[o]==null});if(t.length>0)throw new Error(`The dict provided in model.execute(dict) has keys: [${t}] that are not part of graph`)}mapOutputs(e){return e.map(t=>this._signature!=null&&this._signature.outputs!=null&&this._signature.outputs[t]!=null?this._signature.outputs[t].name:t,{})}checkOutputs(e){e.forEach(t=>{let[n]=en(t);if(!this.graph.nodes[n])throw new Error(`The output '${t}' is not found in the graph`)})}};var jC=class{constructor(e={},t={}){this.hashTableNameToHandle=e,this.hashTableMap=t}addHashTable(e,t){this.hashTableNameToHandle[e]=t.handle,this.hashTableMap[t.id]=t}getHashTableHandleByName(e){return this.hashTableNameToHandle[e]}getHashTableById(e){return this.hashTableMap[e]}dispose(){for(let e in this.hashTableMap)this.hashTableMap[e].clearAndClose(),delete this.hashTableMap[e];for(let e in this.hashTableNameToHandle)this.hashTableNameToHandle[e].dispose(),delete this.hashTableNameToHandle[e]}};var pte="?tfjs-format=file",mte="model.json",ty=class{constructor(e,t={}){this.modelUrl=e,this.loadOptions=t,this.version="n/a",t==null&&(this.loadOptions={}),this.resourceManager=new jC}get modelVersion(){return this.version}get inputNodes(){return this.executor.inputNodes}get outputNodes(){return this.executor.outputNodes}get inputs(){return this.executor.inputs}get outputs(){return this.executor.outputs}get weights(){return this.executor.weightMap}get metadata(){return this.artifacts.userDefinedMetadata}get modelSignature(){return this.signature}findIOHandler(){let e=this.modelUrl;if(e.load!=null)this.handler=e;else if(this.loadOptions.requestInit!=null)this.handler=Ir.browserHTTPRequest(e,this.loadOptions);else{let t=Ir.getLoadHandlers(e,this.loadOptions);if(t.length===0)t.push(Ir.browserHTTPRequest(e,this.loadOptions));else if(t.length>1)throw new Error(`Found more than one (${t.length}) load handlers for URL '${[e]}'`);this.handler=t[0]}}async load(){if(this.findIOHandler(),this.handler.load==null)throw new Error("Cannot proceed with model loading because the IOHandler provided does not have the `load` method implemented.");let e=await this.handler.load();return this.loadSync(e)}loadSync(e){this.artifacts=e;let t=this.artifacts.modelTopology,n;this.artifacts.userDefinedMetadata!=null&&this.artifacts.userDefinedMetadata.signature!=null?n=this.artifacts.userDefinedMetadata.signature:n=this.artifacts.signature,this.signature=n,this.version=`${t.versions.producer}.${t.versions.minConsumer}`;let o=Ir.decodeWeights(this.artifacts.weightData,this.artifacts.weightSpecs);if(this.executor=new Zp(Gx.Instance.transformGraph(t,this.signature)),this.executor.weightMap=this.convertTensorMapToTensorsMap(o),this.executor.resourceManager=this.resourceManager,e.modelInitializer!=null&&e.modelInitializer.node!=null){let s=Gx.Instance.transformGraph(e.modelInitializer);this.initializer=new Zp(s),this.initializer.weightMap=this.executor.weightMap,this.initializer.resourceManager=this.resourceManager,this.initializer.executeAsync({},[])}return!0}async save(e,t){if(typeof e=="string"){let n=Ir.getSaveHandlers(e);if(n.length===0)throw new Error(`Cannot find any save handlers for URL '${e}'`);if(n.length>1)throw new Error(`Found more than one (${n.length}) save handlers for URL '${e}'`);e=n[0]}if(e.save==null)throw new Error("GraphModel.save() cannot proceed because the IOHandler provided does not have the `save` attribute defined.");return e.save(this.artifacts)}predict(e,t){return this.execute(e,this.outputNodes)}normalizeInputs(e){if(!(e instanceof Ve)&&!Array.isArray(e))return e;if(e=Array.isArray(e)?e:[e],e.length!==this.inputNodes.length)throw new Error(`Input tensor count mismatch,the graph model has ${this.inputNodes.length} placeholders, while there are ${e.length} input tensors.`);return this.inputNodes.reduce((t,n,o)=>(t[n]=e[o],t),{})}normalizeOutputs(e){return e=e||this.outputNodes,Array.isArray(e)?e:[e]}execute(e,t){e=this.normalizeInputs(e),t=this.normalizeOutputs(t);let n=this.executor.execute(e,t);return n.length>1?n:n[0]}async executeAsync(e,t){e=this.normalizeInputs(e),t=this.normalizeOutputs(t);let n=await this.executor.executeAsync(e,t);return n.length>1?n:n[0]}convertTensorMapToTensorsMap(e){return Object.keys(e).reduce((t,n)=>(t[n]=[e[n]],t),{})}dispose(){this.executor.dispose(),this.initializer&&this.initializer.dispose(),this.resourceManager.dispose()}};async function Sz(r,e={}){if(r==null)throw new Error("modelUrl in loadGraphModel() cannot be null. Please provide a url or an IOHandler that loads the model");e==null&&(e={}),e.fromTFHub&&r.load==null&&(r.endsWith("/")||(r=r+"/"),r=`${r}${mte}${pte}`);let t=new ty(r,e);return await t.load(),t}var Tz="3.2.0";var uy={};Ke(uy,{CSVDataset:()=>lh,Dataset:()=>Ki,FileDataSource:()=>fh,TextLineDataset:()=>ih,URLDataSource:()=>dh,array:()=>p3,csv:()=>_3,func:()=>k3,generator:()=>v3,microphone:()=>I3,version_data:()=>N3,webcam:()=>C3,zip:()=>m3});var c3=Tc(YC());var Xz=Tc(YC());function Wz(r,e){return ny(r,e)}function ny(r,e,t=new Map,n=new Set){if(r==null)return null;if(n.has(r))throw new Error("Circular references are not supported.");if(t.has(r))return t.get(r);let o=e(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(El(r)){let s=Array.isArray(r)?[]:{};n.add(r);for(let a in r){let i=r[a],l=ny(i,e,t,n);s[a]=l}return n.delete(r),s}else throw new Error(`Can't recurse into non-iterable type: ${r}`);else return t.set(r,o.value),o.value}function qz(r,e=ZC){return Uz(r,e)}function Uz(r,e,t=new Set){let n=r[0];if(t.has(n))throw new Error("Circular references are not supported.");let o=e(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(El(n)){let s=Array.isArray(n)?[]:{};t.add(n);for(let a in n){let i=r.map(u=>u[a]),l=Uz(i,e,t);s[a]=l}return t.delete(n),s}else throw new Error(`Can't recurse into non-iterable type: ${n}`);else return o.value}function ZC(r){return r===null?null:El(r[0])?{value:null,recurse:!0}:{value:r,recurse:!1}}async function oy(r,e){let t=new Map;ny(r,e,t);for(let o of Array.from(t.keys())){let s=t.get(o);if(y.isPromise(s)){let a=await s;t.set(o,a)}}return ny(r,e,t)}function El(r){return r!=null&&!ArrayBuffer.isView(r)&&(Array.isArray(r)||typeof r=="object"&&!(r instanceof Ve))}function Hz(r){return r==null||bte(r)||Array.isArray(r)||typeof r=="object"&&r instanceof Ve||y.isTypedArray(r)}function bte(r){return r===null||typeof r!="object"&&typeof r!="function"}function Kz(r){return Wz(r,wte)}function wte(r){return r instanceof Ve?{value:r.clone(),recurse:!1}:El(r)?{value:null,recurse:!0}:{value:r,recurse:!1}}var oh=class{constructor(e){if(this.capacity=e,this.begin=0,this.end=0,e==null)throw new RangeError("Can't create a ring buffer of unknown capacity.");if(e<1)throw new RangeError("Can't create ring buffer of capacity < 1.");this.data=new Array(e),this.doubledCapacity=2*e}wrap(e){for(;e<0;)e+=this.doubledCapacity;return e%this.doubledCapacity}get(e){if(e<0)throw new RangeError("Can't get item at a negative index.");return this.data[e%this.capacity]}set(e,t){if(e<0)throw new RangeError("Can't set item at a negative index.");this.data[e%this.capacity]=t}length(){let e=this.end-this.begin;return e<0&&(e=this.doubledCapacity+e),e}isFull(){return this.length()===this.capacity}isEmpty(){return this.length()===0}push(e){if(this.isFull())throw new RangeError("Ring buffer is full.");this.set(this.end,e),this.end=this.wrap(this.end+1)}pushAll(e){for(let t of e)this.push(t)}pop(){if(this.isEmpty())throw new RangeError("Ring buffer is empty.");this.end=this.wrap(this.end-1);let e=this.get(this.end);return this.set(this.end,void 0),e}unshift(e){if(this.isFull())throw new RangeError("Ring buffer is full.");this.begin=this.wrap(this.begin-1),this.set(this.begin,e)}shift(){if(this.isEmpty())throw new RangeError("Ring buffer is empty.");let e=this.get(this.begin);return this.set(this.begin,void 0),this.begin=this.wrap(this.begin+1),e}shuffleExcise(e){if(this.isEmpty())throw new RangeError("Ring buffer is empty.");let t=this.wrap(this.begin+e),n=this.get(t);return this.set(t,this.pop()),n}};var Jp=class extends oh{constructor(){super(Jp.INITIAL_CAPACITY)}isFull(){return!1}push(e){super.isFull()&&this.expand(),super.push(e)}unshift(e){super.isFull()&&this.expand(),super.unshift(e)}expand(){let e=this.capacity*2,t=new Array(e),n=this.length();for(let o=0;ot===!0)}rowMajorBatch(e,t=!0){return new o3(this,e,t)}columnMajorBatch(e,t=!0,n=ZC){return this.rowMajorBatch(e,t).map(s=>qz(s,n))}concatenate(e,t){return new QC(JC([this,e]),t)}take(e){return e<0||e==null?this:new n3(this,e)}skip(e){return e<0||e==null?this:new r3(this,e)}prefetch(e){return new tI(this,e)}shuffle(e,t){return new u3(this,e,t)}serial(){return new t3(this)}},Yz=class extends Kt{constructor(e){super();this.items=e,this.trav=0}summary(){return`Array of ${this.items.length} items`}async next(){if(this.trav>=this.items.length)return{value:null,done:!0};let e=this.items[this.trav];return this.trav++,{value:Kz(e),done:!1}}},Zz=class extends Kt{constructor(e){super();this.nextFn=e}summary(){return"Function call"}async next(){try{return this.nextFn()}catch(e){throw e.message=`Error thrown while iterating through a dataset: ${e.message}`,e}}},t3=class extends Kt{constructor(e){super();this.upstream=e,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> Serial`}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){return this.upstream.next()}},r3=class extends Kt{constructor(e,t){super();this.upstream=e,this.maxCount=t,this.count=0,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> Skip`}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){for(;this.count++ Take`}async next(){return this.count++>=this.maxCount?{value:null,done:!0}:this.upstream.next()}},o3=class extends Kt{constructor(e,t,n=!0){super();this.upstream=e,this.batchSize=t,this.enableSmallLastBatch=n,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> RowMajorBatch`}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){let e=[];for(;e.length0?{value:e,done:!1}:{value:null,done:!0};e.push(t.value)}return{value:e,done:!1}}},s3=class extends Kt{constructor(e,t){super();this.upstream=e,this.predicate=t,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> Filter`}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){for(;;){let e=await this.upstream.next();if(e.done||this.predicate(e.value))return e;Ae(e.value)}}},i3=class extends Kt{constructor(e,t){super();this.upstream=e,this.transform=t}summary(){return`${this.upstream.summary()} -> Map`}async next(){let e=await this.upstream.next();if(e.done)return{value:null,done:!0};let t=Mo.getTensorsInContainer(e.value),n=this.transform(e.value),o=Mo.getTensorsInContainer(n);for(let s of t)Mo.isTensorInList(s,o)||s.dispose();return{value:n,done:!1}}},a3=class extends Kt{constructor(e,t){super();this.upstream=e,this.handler=t,this.count=0,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> handleErrors`}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){for(;;)try{return await this.upstream.next()}catch(e){if(!this.handler(e))return{value:null,done:!0}}}},eI=class extends Kt{constructor(e,t){super();this.upstream=e,this.transform=t}summary(){return`${this.upstream.summary()} -> AsyncMap`}async next(){let e=await this.upstream.next();if(e.done)return{value:null,done:!0};let t=Mo.getTensorsInContainer(e.value),n=await this.transform(e.value),o=Mo.getTensorsInContainer(n);for(let s of t)Mo.isTensorInList(s,o)||s.dispose();return{value:n,done:!1}}},Qp=class extends Kt{constructor(){super();this.outputQueue=new Jp,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}}},l3=class extends Qp{constructor(e,t){super();this.upstream=e,this.transform=t}summary(){return`${this.upstream.summary()} -> Flatmap`}async pump(){let e=await this.upstream.next();if(e.done)return!1;let t=Mo.getTensorsInContainer(e.value),n=this.transform(e.value),o=Mo.getTensorsInContainer(n);this.outputQueue.pushAll(n);for(let s of t)Mo.isTensorInList(s,o)||s.dispose();return!0}},QC=class extends Kt{constructor(e,t){super();this.baseErrorHandler=t,this.lastRead=null,this.iterator=null,this.moreIterators=e}summary(){return"TODO: fill in upstream of chained summaries -> Chained"}async next(){return this.lastRead=this.readFromChain(this.lastRead),this.lastRead}async readFromChain(e){if(await e,this.iterator==null){let n=await this.moreIterators.next();if(n.done)return{value:null,done:!0};this.iterator=n.value,this.baseErrorHandler!=null&&(this.iterator=this.iterator.handleErrors(this.baseErrorHandler))}let t=await this.iterator.next();return t.done?(this.iterator=null,this.readFromChain(e)):t}},Wa;(function(r){r[r.FAIL=0]="FAIL",r[r.SHORTEST=1]="SHORTEST",r[r.LONGEST=2]="LONGEST"})(Wa||(Wa={}));var Qz=class extends Kt{constructor(e,t=Wa.FAIL){super();this.iterators=e,this.mismatchMode=t,this.count=0,this.currentPromise=null}summary(){return"{TODO: fill in upstream of zip summaries} -> Zip"}async nextState(e){await e;let t=0,n=0;function o(a){return a instanceof Kt?{value:a.next().then(l=>(t++,l.done&&n++,l.value)),recurse:!1}:{value:null,recurse:!0}}let s=await oy(this.iterators,o);if(t===n)return{value:null,done:!0};if(n>0)switch(this.mismatchMode){case Wa.FAIL:throw new Error(`Zipped streams should have the same length. Mismatched at element ${this.count}.`);case Wa.SHORTEST:return{value:null,done:!0};case Wa.LONGEST:default:}return this.count++,{value:s,done:!1}}async next(){return this.currentPromise=this.nextState(this.currentPromise),this.currentPromise}},tI=class extends Kt{constructor(e,t){super();this.upstream=e,this.bufferSize=t,this.buffer=new oh(t)}summary(){return`${this.upstream.summary()} -> Prefetch`}refill(){for(;!this.buffer.isFull();){let e=this.upstream.next();this.buffer.push(e)}}next(){return this.refill(),this.buffer.shift()}},u3=class extends tI{constructor(e,t,n){super(e,t);this.upstream=e,this.windowSize=t,this.upstreamExhausted=!1,this.random=Xz.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(e){return Math.floor(this.random()*e)}chooseIndex(){return this.randomInt(this.buffer.length())}async serialNext(){for(this.upstreamExhausted||this.refill();!this.buffer.isEmpty();){let e=this.chooseIndex(),t=await this.buffer.shuffleExcise(e);if(t.done)this.upstreamExhausted=!0;else return this.refill(),t}return{value:null,done:!0}}};var Ki=class{constructor(){this.size=null}batch(e,t=!0){let n=this;y.assert(e>0,()=>`batchSize needs to be positive, but it is ${e}`);let o;return this.size===Infinity||this.size==null?o=this.size:t?o=Math.ceil(this.size/e):o=Math.floor(this.size/e),gn(async()=>(await n.iterator()).columnMajorBatch(e,t,_te),o)}concatenate(e){let t=this,n;return this.size===Infinity||e.size===Infinity?n=Infinity:this.size!=null&&e.size!=null?n=this.size+e.size:n=null,gn(async()=>(await t.iterator()).concatenate(await e.iterator()),n)}filter(e){let t=this,n;return this.size===Infinity?n=Infinity:n=null,gn(async()=>(await t.iterator()).filter(o=>V(()=>e(o))),n)}async forEachAsync(e){return(await this.iterator()).forEachAsync(e)}map(e){let t=this;return gn(async()=>(await t.iterator()).map(n=>V(()=>e(n))),this.size)}mapAsync(e){let t=this;return gn(async()=>(await t.iterator()).mapAsync(e),this.size)}prefetch(e){if(e==null)throw new RangeError("`Dataset.prefetch()` requires bufferSize to be specified.");let t=this;return gn(async()=>(await t.iterator()).prefetch(e),this.size)}repeat(e){let t=this,n;return this.size!=null&&e>0?n=this.size*e:e===0?n=0:this.size!=null&&(e===void 0||e<0)?n=Infinity:n=null,gn(async()=>{let o=sh(async()=>({value:await t.iterator(),done:!1}));return Jz(o.take(e))},n)}skip(e){let t=this,n;return this.size!=null&&e>=0&&this.size>=e?n=this.size-e:this.size!=null&&(this.size(await t.iterator()).skip(e),n)}shuffle(e,t,n=!0){if(e==null||e<0)throw this.size==null?new RangeError("`Dataset.shuffle()` requires bufferSize to be specified."):new RangeError(`\`Dataset.shuffle()\` requires bufferSize to be specified. If your data fits in main memory (for regular JS objects), and/or GPU memory (for \`tf.Tensor\`s), consider setting bufferSize to the dataset size (${this.size} elements)`);let o=this,s=c3.alea(t||y.now().toString());return gn(async()=>{let a=s.int32();return n&&(a+=s.int32()),(await o.iterator()).shuffle(e,a.toString())},this.size)}take(e){let t=this,n;return this.size!=null&&this.size>e?n=e:this.size!=null&&this.size<=e?n=this.size:n=null,gn(async()=>(await t.iterator()).take(e),n)}async toArray(){if(this.size===Infinity)throw new Error("Can not convert infinite data stream to array.");return(await this.iterator()).toArray()}async toArrayForTest(){if(this.size===Infinity)throw new Error("Can not convert infinite data stream to array.");return(await this.iterator()).toArrayForTest()}};Ki.MAX_BUFFER_SIZE=1e4;function gn(r,e=null){return new class extends Ki{constructor(){super(...arguments);this.size=e}async iterator(){return r()}}}function p3(r){return gn(async()=>JC(r),r.length)}function m3(r){if(!El(r))throw new Error("The argument to zip() must be an object or array.");let e;if(Array.isArray(r))for(let t=0;t{let t=await oy(r,n=>{if(n instanceof Ki)return{value:n.iterator(),recurse:!1};if(El(n))return{value:null,recurse:!0};throw new Error("Leaves of the structure passed to zip() must be Datasets, not primitives.")});return e3(t,Wa.SHORTEST)},e)}function _te(r){if(r===null)return null;let e=r[0];return Hz(e)?{value:kte(r),recurse:!1}:{value:null,recurse:!0}}function kte(r){if(r.length===0)throw new Error("Can't make a batch of zero elements.");return r[0]instanceof Ve?Vt(r):Rr(r)}var ih=class extends Ki{constructor(e){super();this.input=e}async iterator(){return(await this.input.iterator()).decodeUTF8().split(` `).map(o=>(o.endsWith("\r")&&(o=o.slice(0,-1)),o))}};var sy='"',ah=Symbol("out"),f3=Symbol("field"),iy=Symbol("quote"),rI=Symbol("quoteafterquote"),d3=Symbol("quoteinquote"),lh=class extends Ki{constructor(e,t){super();this.input=e,this.hasHeader=!0,this.fullColumnNames=null,this.columnNamesValidated=!1,this.columnConfigs=null,this.configuredColumnsOnly=!1,this.delimiter=",",this.delimWhitespace=!1,this.base=new ih(e),t||(t={}),this.hasHeader=t.hasHeader!==!1,this.fullColumnNames=t.columnNames,this.columnConfigs=t.columnConfigs,this.configuredColumnsOnly=t.configuredColumnsOnly,t.delimWhitespace?(y.assert(t.delimiter==null,()=>"Delimiter should not be provided when delimWhitespace is true."),this.delimWhitespace=!0,this.delimiter=" "):this.delimiter=t.delimiter?t.delimiter:","}async columnNames(){return this.columnNamesValidated||await this.setColumnNames(),this.configuredColumnsOnly?Object.keys(this.columnConfigs):this.fullColumnNames}async setColumnNames(){let e=await this.maybeReadHeaderLine();if(!this.fullColumnNames&&!e)throw new Error("Column names must be provided if there is no header line.");this.fullColumnNames&&e&&y.assert(e.length===this.fullColumnNames.length,()=>"The length of provided columnNames ("+this.fullColumnNames.length.toString()+") does not match the length of the header line read from file ("+e.length.toString()+")."),this.fullColumnNames||(this.fullColumnNames=e);let t=this.fullColumnNames.reduce((o,s)=>(o[s]=o[s]+1||1,o),{}),n=Object.keys(t).filter(o=>t[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 t=await(await this.base.iterator()).next();if(t.done)throw new Error("No data was found for CSV parsing.");let n=t.value;return this.parseRow(n,!1)}else return null}async iterator(){this.columnNamesValidated||await this.setColumnNames();let e=await this.base.iterator();return this.hasHeader&&(e=e.skip(1)),e.map(t=>this.makeDataElement(t))}makeDataElement(e){let t=this.parseRow(e),n={},o={};for(let s=0;s14||!Number.isInteger(t))throw new Error(`Invalid fftSize: it must be a power of 2 between 2 to 4 and 2 to 14, but got ${this.fftSize}`);if(this.numFrames=e.numFramesPerSpectrogram||43,this.sampleRateHz=e.sampleRateHz,this.columnTruncateLength=e.columnTruncateLength||this.fftSize,this.audioTrackConstraints=e.audioTrackConstraints,this.smoothingTimeConstant=e.smoothingTimeConstant||0,this.includeSpectrogram=e.includeSpectrogram!==!1,this.includeWaveform=e.includeWaveform===!0,!this.includeSpectrogram&&!this.includeWaveform)throw new Error("Both includeSpectrogram and includeWaveform are false. At least one type of data should be returned.")}summary(){return"microphone"}static async create(e={}){if(W().get("IS_NODE"))throw new Error("microphone API is only supported in browser environment.");let t=new uh(e);return await t.start(),t}async start(){try{this.stream=await navigator.mediaDevices.getUserMedia({audio:this.audioTrackConstraints==null?!0:this.audioTrackConstraints,video:!1})}catch(n){throw new Error(`Error thrown while initializing video stream: ${n.message}`)}if(!this.stream)throw new Error("Could not obtain audio from microphone.");let e=window.AudioContext||window.webkitAudioContext;if(this.audioContext=new e,!this.sampleRateHz)this.sampleRateHz=this.audioContext.sampleRate;else if(this.audioContext.sampleRate!==this.sampleRateHz)throw new Error(`Mismatch in sampling rate: Expected: ${this.sampleRateHz}; Actual: ${this.audioContext.sampleRate}`);let t=this.audioContext.createMediaStreamSource(this.stream);this.analyser=this.audioContext.createAnalyser(),this.analyser.fftSize=this.fftSize*2,this.analyser.smoothingTimeConstant=this.smoothingTimeConstant,t.connect(this.analyser),this.freqData=new Float32Array(this.fftSize),this.timeData=new Float32Array(this.fftSize)}async next(){if(this.isClosed)return{value:null,done:!0};let e,t,n=await this.getAudioData();if(this.includeSpectrogram){let o=this.flattenQueue(n.freqDataQueue);e=this.getTensorFromAudioDataArray(o,[this.numFrames,this.columnTruncateLength,1])}if(this.includeWaveform){let o=this.flattenQueue(n.timeDataQueue);t=this.getTensorFromAudioDataArray(o,[this.numFrames*this.fftSize,1])}return{value:{spectrogram:e,waveform:t},done:!1}}async capture(){return(await this.next()).value}async getAudioData(){let e=[],t=[],n=0;return new Promise(o=>{let s=setInterval(()=>{this.includeSpectrogram&&(this.analyser.getFloatFrequencyData(this.freqData),this.freqData[0]===-Infinity&&o({freqDataQueue:e,timeDataQueue:t}),e.push(this.freqData.slice(0,this.columnTruncateLength))),this.includeWaveform&&(this.analyser.getFloatTimeDomainData(this.timeData),t.push(this.timeData.slice())),++n===this.numFrames&&(clearInterval(s),o({freqDataQueue:e,timeDataQueue:t}))},this.fftSize/this.sampleRateHz*1e3)})}stop(){this.isClosed||(this.isClosed=!0,this.analyser.disconnect(),this.audioContext.close(),this.stream!=null&&this.stream.getTracks().length>0&&this.stream.getTracks()[0].stop())}toArray(){throw new Error("Can not convert infinite audio stream to array.")}getSampleRate(){return this.sampleRateHz}flattenQueue(e){let t=e[0].length,n=new Float32Array(e.length*t);return e.forEach((o,s)=>n.set(o,s*t)),n}getTensorFromAudioDataArray(e,t){let n=new Float32Array(y.sizeFromShape(t));return n.set(e,n.length-e.length),Rr(n,t)}};var ch=class extends Kt{constructor(e,t){super();if(this.webcamVideoElement=e,this.webcamConfig=t,this.isClosed=!0,this.resize=!1,this.needToResize())if(this.resize=!0,this.cropSize=[this.webcamConfig.resizeHeight,this.webcamConfig.resizeWidth],this.cropBoxInd=Gt([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,a=(1-o)/2,i=s+n,l=o+a;this.cropBox=Li([a,s,l,i],[1,4])}else this.cropBox=Li([0,0,1,1],[1,4])}summary(){return"webcam"}static async create(e,t={}){if(W().get("IS_NODE"))throw new Error("tf.data.webcam is only supported in browser environment.");if(!e){if(e=document.createElement("video"),!t.resizeWidth||!t.resizeHeight)throw new Error("Please provide webcam video element, or resizeWidth and resizeHeight to create a hidden video element.");e.width=t.resizeWidth,e.height=t.resizeHeight}let n=new ch(e,t);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(e){throw e.message=`Error thrown while initializing video stream: ${e.message}`,e}if(!this.stream)throw new Error("Could not obtain video from webcam.");try{this.webcamVideoElement.srcObject=this.stream}catch(e){console.log(e),this.webcamVideoElement.src=window.URL.createObjectURL(this.stream)}return this.webcamVideoElement.play(),this.isClosed=!1,new Promise(e=>{this.webcamVideoElement.onloadedmetadata=()=>{e()}})}async next(){if(this.isClosed)return{value:null,done:!0};let e;try{e=Kh.fromPixels(this.webcamVideoElement)}catch(t){throw new Error(`Error thrown converting video to pixels: ${JSON.stringify(t)}`)}if(this.resize)try{return{value:this.cropAndResizeFrame(e),done:!1}}catch(t){throw new Error(`Error thrown cropping the video: ${t.message}`)}finally{e.dispose()}else return{value:e,done:!1}}needToResize(){return!!(this.webcamConfig.resizeWidth&&this.webcamConfig.resizeHeight&&(this.webcamVideoElement.width!==this.webcamConfig.resizeWidth||this.webcamVideoElement.height!==this.webcamConfig.resizeHeight))}cropAndResizeFrame(e){return V(()=>{let t=ar(oe(e,"float32"),0),n;n=Ds.cropAndResize(t,this.cropBox,this.cropBoxInd,this.cropSize,"bilinear");let o=n.shape;return L(n,o.slice(1))})}async capture(){return(await this.next()).value}stop(){this.stream.getTracks().forEach(t=>t.stop());try{this.webcamVideoElement.srcObject=null}catch(t){console.log(t),this.webcamVideoElement.src=null}this.isClosed=!0}toArray(){throw new Error("Can not convert infinite video stream to array.")}};var ph=class{};var ay=class extends Kt{split(e){return new h3(this,e)}},h3=class extends ay{constructor(e,t){super();this.upstream=e,this.impl=new g3(e,t)}summary(){return this.impl.summary()}async next(){return this.impl.next()}},g3=class extends Qp{constructor(e,t){super();this.upstream=e,this.separator=t,this.carryover=""}summary(){return`${this.upstream.summary()} -> Split('${this.separator}')`}async pump(){let e=await this.upstream.next();if(e.done)return this.carryover===""?!1:(this.outputQueue.push(this.carryover),this.carryover="",!0);let t=e.value.split(this.separator);t[0]=this.carryover+t[0];for(let n of t.slice(0,-1))this.outputQueue.push(n);return this.carryover=t[t.length-1],!0}};var nI=class extends Kt{decodeUTF8(){return new y3(this)}},y3=class extends ay{constructor(e){super();this.upstream=e,this.impl=new b3(e)}summary(){return this.impl.summary()}async next(){return this.impl.next()}},b3=class extends Qp{constructor(e){super();if(this.upstream=e,W().get("IS_BROWSER"))this.decoder=new TextDecoder("utf-8");else{let{StringDecoder:t}=x3();this.decoder=new t("utf8")}}summary(){return`${this.upstream.summary()} -> Utf8`}async pump(){let e=await this.upstream.next(),t;if(e.done)return!1;t=e.value;let n;return W().get("IS_BROWSER")?n=this.decoder.decode(t,{stream:!0}):n=this.decoder.write(Buffer.from(t.buffer)),this.outputQueue.push(n),!0}};var mh=class extends nI{constructor(e,t={}){super();this.file=e,this.options=t,y.assert(e instanceof Uint8Array||(W().get("IS_BROWSER")?e instanceof File||e instanceof Blob:!1),()=>"FileChunkIterator only supports File, Blob and Uint8Array right now."),this.offset=t.offset||0,this.chunkSize=t.chunkSize||1024*1024}summary(){return`FileChunks ${this.file}`}async next(){return this.offset>=(this.file instanceof Uint8Array?this.file.byteLength:this.file.size)?{value:null,done:!0}:{value:await new Promise((t,n)=>{let o=this.offset+this.chunkSize;if(this.file instanceof Uint8Array)t(new Uint8Array(this.file.slice(this.offset,o)));else{let s=new FileReader;s.onload=i=>{let l=s.result;if(l instanceof ArrayBuffer&&(l=new Uint8Array(l)),!(l instanceof Uint8Array))return n(new TypeError("FileReader returned unknown type."));t(l)},s.onabort=i=>n(new Error("Aborted")),s.onerror=i=>n(new Error(i.type));let a=this.file.slice(this.offset,o);s.readAsArrayBuffer(a)}this.offset=o}),done:!1}}};async function w3(r,e={}){let t,n;typeof r=="string"?t=r:(t=r.url,n=vte(r));let o=await y.fetch(t,n);if(o.ok){let s=new Uint8Array(await o.arrayBuffer());return new mh(s,e)}else throw new Error(o.statusText)}var vte=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 ly(r){return typeof r=="string"&&r.substr(0,7)==="file://"}var fh=class extends ph{constructor(e,t={}){super();this.input=e,this.options=t}async iterator(){if(ly(this.input)&&W().get("IS_NODE")){let e=require("fs");this.input=e.readFileSync(this.input.substr(7))}return new mh(this.input,this.options)}};var dh=class extends ph{constructor(e,t={}){super();this.url=e,this.fileOptions=t}async iterator(){return ly(this.url)?new fh(this.url,this.fileOptions).iterator():w3(this.url,this.fileOptions)}};function _3(r,e={}){return new lh(new dh(r),e)}function k3(r){let e=sh(r);return gn(async()=>e)}function v3(r){return gn(async()=>{let e=await r();return sh(()=>e.next())})}async function C3(r,e){return ch.create(r,e)}async function I3(r){return uh.create(r)}var N3="3.2.0";var Cte={tfjs:gI,"tfjs-core":xI,"tfjs-data":yI,"tfjs-layers":bI,"tfjs-converter":wI,"tfjs-backend-cpu":x_,"tfjs-backend-webgl":Rk,"tfjs-backend-wasm":d0};export{as as Abs,qs as Acos,Hs as Acosh,rp as AdadeltaOptimizer,np as AdagradOptimizer,op as AdamOptimizer,sp as AdamaxOptimizer,wn as Add,qn as AddN,Ml as All,Ll as Any,Hn as ArgMax,ea as ArgMin,Ks as Asin,Xs as Asinh,Ys as Atan,Js as Atan2,Zs as Atanh,Kn as AvgPool,ta as AvgPool3D,Bl as AvgPool3DGrad,zl as AvgPoolGrad,nx as BackendWasm,Xn as BatchMatMul,ra as BatchToSpaceND,Vl as Bincount,Rb as BroadcastTo,Mx as Callback,bx as CallbackList,$n as Cast,Yn as Ceil,Rn as ClipByValue,Gl as Complex,na as ComplexAbs,ls as Concat,Zn as Conv2D,jl as Conv2DBackpropFilter,Jn as Conv2DBackpropInput,oa as Conv3D,Wl as Conv3DBackpropFilterV2,Ul as Conv3DBackpropInputV2,Qn as Cos,Qs as Cosh,ei as CropAndResize,eo as Cumsum,_x as CustomCallback,Za as DataStorage,ql as DenseBincount,ti as DepthToSpace,to as DepthwiseConv2dNative,Hl as DepthwiseConv2dNativeBackpropFilter,Kl as DepthwiseConv2dNativeBackpropInput,Xl as Diag,sa as Dilation2D,Fc as Dilation2DBackpropFilter,Rc as Dilation2DBackpropInput,Eb as ENV,zx as EarlyStopping,ri as Elu,Yl as EluGrad,Lh as Environment,oi as Equal,ni as Erf,no as Exp,us as ExpandDims,si as Expm1,Zl as FFT,ia as Fill,ii as FlipLeftRight,oo as Floor,so as FloorDiv,Oc as FromPixels,io as FusedBatchNorm,_s as FusedConv2D,ks as FusedDepthwiseConv2D,Mg as GPGPUContext,ai as GatherNd,cs as GatherV2,ty as GraphModel,li as Greater,ao as GreaterEqual,wx as History,Jl as IFFT,Fn as Identity,Ql as Imag,Tt as InputSpec,ui as IsFinite,ci as IsInf,pi as IsNan,js as KernelBackend,aa as LRN,tu as LRNGrad,Kf as LayerVariable,Tn as LayersModel,lo as LeakyRelu,mi as Less,fi as LessEqual,eu as LinSpace,uo as Log,di as Log1p,Fb as LogSoftmax,hi as LogicalAnd,Ja as LogicalNot,Qa as LogicalOr,Wu as MathBackendCPU,Yu as MathBackendWebGL,co as Max,mo as MaxPool,la as MaxPool3D,nu as MaxPool3DGrad,ru as MaxPoolGrad,ou as MaxPoolWithArgmax,po as Maximum,fo as Mean,ho as Min,go as Minimum,ua as MirrorPad,gi as Mod,ip as MomentumOptimizer,su as Multinomial,xo as Multiply,ps as Neg,yi as NonMaxSuppressionV3,bi as NonMaxSuppressionV4,wi as NonMaxSuppressionV5,xi as NotEqual,zI as OP_SCOPE_SUFFIX,yo as OneHot,ms as OnesLike,Pr as Optimizer,fs as Pack,bo as PadV2,HB as Pool,wo as Pow,_o as Prelu,_i as Prod,ap as RMSPropOptimizer,hn as RNN,ca as Range,zb as Rank,iu as Real,ro as RealDiv,ki as Reciprocal,jt as Reduction,ko as Relu,Co as Relu6,ds as Reshape,vo as ResizeBilinear,lu as ResizeBilinearGrad,pa as ResizeNearestNeighbor,au as ResizeNearestNeighborGrad,Io as Reverse,Di as RotateWithOffset,No as Round,So as Rsqrt,ul as SGDOptimizer,vi as ScatterNd,hs as Select,Ci as Selu,Hi as Sequential,Ao as Sigmoid,Ni as Sign,To as Sin,Ii as Sinh,gs as Slice,$o as Softmax,Si as Softplus,ma as SpaceToBatchND,uu as SparseToDense,xs as SplitV,Eo as Sqrt,fa as Square,Ro as SquaredDifference,On as Step,Ti as StridedSlice,Fo as Sub,Do as Sum,Vr as SymbolicTensor,Ai as Tan,Oo as Tanh,Ve as Tensor,lt as TensorBuffer,_n as Tile,Ei as TopK,Po as Transpose,cu as Unique,ys as Unpack,da as UnsortedSegmentSum,rl as Variable,bs as ZerosLike,ws as _FusedMatMul,Nt as abs,_m as acos,km as acosh,Q as add,dw as addN,xu as all,sl as any,il as argMax,vm as argMin,Cm as asin,Im as asinh,Nm as atan,Sm as atan2,Tm as atanh,wa as avgPool,Am as avgPool3d,fw as backend,N as backend_util,qG as basicLSTMCell,Lo as batchNorm,yw as batchNorm2d,bw as batchNorm3d,ww as batchNorm4d,_a as batchToSpaceND,_w as bincount,eU as booleanMaskAsync,al as broadcastTo,Kh as browser,ve as buffer,XL as callbacks,oe as cast,Em as ceil,ir as clipByValue,Pn as clone,kn as complex,Ze as concat,kw as concat1d,vw as concat2d,Cw as concat3d,Iw as concat4d,v0 as constraints,wu as conv1d,Kr as conv2d,_u as conv2dTranspose,Dm as conv3d,fj as conv3dTranspose,YB as copyRegisteredKernels,ka as cos,ku as cosh,tf as cosineWindow,vu as cumsum,Xr as customGrad,uy as data,Nw as denseBincount,eg as deprecationWarn,$m as depthToSpace,Cs as depthwiseConv2d,JL as deregisterOp,Vc as device_util,_j as diag,Rm as dilation2d,sG as disableDeprecationWarnings,Ae as dispose,iG as disposeVariables,me as div,Fm as divNoNan,Sw as dot,Qw as dropout,Is as elu,oG as enableDebugMode,nG as enableProdMode,e_ as enclosingPowerOfTwo,Mn as engine,W as env,vn as equal,Om as erf,Zt as exp,ar as expandDims,Pm as expm1,Xc as eye,Ea as fft,va as fill,mG as findBackend,fG as findBackendFactory,Ns as floor,gu as floorDiv,Fk as forceHalfFloat,Go as fused,zo as gather,Jw as gatherND,Xh as gather_util,cG as getBackend,zh as getGradient,Mc as getKernel,hm as getKernelsForBackend,iE as gpgpu_util,Yj as grad,Zj as grads,er as greater,an as greaterEqual,Mi as ifft,Cu as imag,Ds as image,uU as inTopKAsync,T0 as initializers,Ox as input,Ir as io,Pu as irfft,Tw as isFinite,Aw as isInf,Ew as isNaN,Dt as keep,Ar as kernel_impls,cC as layers,Ca as leakyRelu,Iu as less,Bn as lessEqual,s_ as linalg,Dw as linspace,Sz as loadGraphModel,PL as loadLayersModel,Mm as localResponseNormalization,lr as log,Nu as log1p,$w as logSigmoid,Su as logSoftmax,zm as logSumExp,hr as logicalAnd,Ia as logicalNot,Tu as logicalOr,Pw as logicalXor,tq as losses,je as matMul,gN as math,ur as max,Na as maxPool,Bm as maxPool3d,Mw as maxPoolWithArgmax,Yr as maximum,ht as mean,qc as memory,dC as metrics,Pi as min,Ts as minimum,Vm as mirrorPad,Gm as mod,FL as model,hC as models,Yc as moments,nU as movingAverage,P as mul,NW as multiRNNCell,Lw as multinomial,qe as neg,rf as nextFrame,zu as norm,Vo as notEqual,vs as oneHot,Nr as ones,tr as onesLike,T as op,DW as outerProduct,Fr as pad,FW as pad1d,PW as pad2d,LW as pad3d,BW as pad4d,zw as pool,Or as pow,Ta as prelu,nw as print,Au as prod,aG as profile,XW as rand,n4 as randomGamma,lg as randomNormal,As as randomUniform,Jc as range,uG as ready,ll as real,jm as reciprocal,hu as registerBackend,ML as registerCallbackConstructor,Pb as registerGradient,el as registerKernel,ZL as registerOp,gC as regularizers,Sr as relu,Du as relu6,pG as removeBackend,L as reshape,Ht as reverse,m4 as reverse1d,d4 as reverse2d,g4 as reverse3d,y4 as reverse4d,Da as rfft,Wm as round,$u as rsqrt,ue as scalar,Zw as scatterND,Yh as scatter_util,Ru as selu,Um as separableConv2d,OL as sequential,J as serialization,$N as setBackend,dG as setPlatform,EZ as setWasmPath,DZ as setWasmPaths,L_ as setWebGLContext,Kw as setdiff1dAsync,yg as shared,Hr as sigmoid,qm as sign,eq as signal,Fu as sin,Ou as sinh,Re as slice,Hm as slice1d,ug as slice2d,Km as slice3d,Qc as slice4d,sr as slice_util,Aa as softmax,Ss as softplus,Sa as spaceToBatchND,ef as sparseToDense,QU as spectral,cr as split,xt as sqrt,Oe as square,Mu as squaredDifference,Cn as squeeze,Vt as stack,Es as step,Xm as stridedSlice,ce as sub,ge as sum,mu as sumOutType,Ym as tan,Oi as tanh,Rr as tensor,Gt as tensor1d,Li as tensor2d,aw as tensor3d,W4 as tensor4d,U4 as tensor5d,q4 as tensor6d,Mo as tensor_util,AN as test_util,V as tidy,zn as tile,lG as time,Zm as topk,cl as train,Ue as transpose,Lu as truncatedNormal,ep as unique,XB as unregisterGradient,KB as unregisterKernel,Jm as unsortedSegmentSum,pr as unstack,dr as upcastType,y as util,Jj as valueAndGrad,Qj as valueAndGrads,Xw as variable,og as variableGrads,Cte as version,Tz as version_converter,rG as version_core,x_ as version_cpu,Gp as version_layers,d0 as version_wasm,Rk as version_webgl,P5 as webgl,tE as webgl_util,$t as where,Qm as whereAsync,gt as zeros,Ce as zerosLike}; /** * @license * Copyright 2017 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============================================================================= */ /** * @license * Copyright 2018 Google LLC * * Use of this source code is governed by an MIT-style * license that can be found in the LICENSE file or at * https://opensource.org/licenses/MIT. * ============================================================================= */ /** * @license * Copyright 2018 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * ============================================================================= */ /** * @license * Copyright 2018 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============================================================================= */ /** * @license * Copyright 2019 Google LLC * * Use of this source code is governed by an MIT-style * license that can be found in the LICENSE file or at * https://opensource.org/licenses/MIT. * ============================================================================= */ /** * @license * Copyright 2019 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * ============================================================================= */ /** * @license * Copyright 2019 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============================================================================= */ /** * @license * Copyright 2020 Google Inc. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============================================================================= */ /** * @license * Copyright 2020 Google LLC * * Use of this source code is governed by an MIT-style * license that can be found in the LICENSE file or at * https://opensource.org/licenses/MIT. * ============================================================================= */ /** * @license * Copyright 2020 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============================================================================= */ /** * @license * Copyright 2020 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the License); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an AS IS BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============================================================================= */ /** * @license * Copyright 2021 Google LLC. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============================================================================= */ /** @license See the LICENSE file. */ //# sourceMappingURL=tfjs.esm.js.map