You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
3814 lines
851 KiB
3814 lines
851 KiB
(self.webpackChunk=self.webpackChunk||[]).push([[1512],{18299:function(Qt,$e,U){"use strict";U.d($e,{Z:function(){return ne}});var D=U(87462),ke=U(67294),le={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M912 190h-69.9c-9.8 0-19.1 4.5-25.1 12.2L404.7 724.5 207 474a32 32 0 00-25.1-12.2H112c-6.7 0-10.4 7.7-6.3 12.9l273.9 347c12.8 16.2 37.4 16.2 50.3 0l488.4-618.9c4.1-5.1.4-12.8-6.3-12.8z"}}]},name:"check",theme:"outlined"},Se=le,be=U(74643),ee=function(K,Y){return ke.createElement(be.Z,(0,D.Z)({},K,{ref:Y,icon:Se}))},ne=ke.forwardRef(ee)},46415:function(Qt,$e,U){"use strict";U.r($e),U.d($e,{default:function(){return TA}});var D=U(67294),ke=U(35973),le=U(55054),Se=U(3363),be=U(2453),ee=U(71577),ne=U(71230),M=U(15746),K=U(14446),Y={flex_box_center:"flex_box_center___uIDcP",flex_space_between:"flex_space_between___l5roZ",flex_box_vertical_center:"flex_box_vertical_center___mj8nW",flex_box_center_end:"flex_box_center_end___v4Eig",flex_box_column:"flex_box_column___SQn0H",bg:"bg___H5S8d",steps:"steps___mrlSw",qrcode:"qrcode___xRSbG"},pe=U(28706),ge=U(15835),ae=U(79361),we=U.n(ae),me=U(34155),Qe=U(48764).lW;var Et=function(r,t){return(Et=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,n){e.__proto__=n}||function(e,n){for(var o in n)n.hasOwnProperty(o)&&(e[o]=n[o])})(r,t)};function De(r,t){function e(){this.constructor=r}Et(r,t),r.prototype=t===null?Object.create(t):(e.prototype=t.prototype,new e)}function xe(r,t,e,n){return new(e||(e=Promise))(function(o,i){function a(c){try{u(n.next(c))}catch(l){i(l)}}function s(c){try{u(n.throw(c))}catch(l){i(l)}}function u(c){c.done?o(c.value):new e(function(l){l(c.value)}).then(a,s)}u((n=n.apply(r,t||[])).next())})}function Ie(r,t){var e,n,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},typeof Symbol=="function"&&(i[Symbol.iterator]=function(){return this}),i;function s(u){return function(c){return function(l){if(e)throw new TypeError("Generator is already executing.");for(;a;)try{if(e=1,n&&(o=2&l[0]?n.return:l[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,l[1])).done)return o;switch(n=0,o&&(l=[2&l[0],o.value]),l[0]){case 0:case 1:o=l;break;case 4:return a.label++,{value:l[1],done:!1};case 5:a.label++,n=l[1],l=[0];continue;case 7:l=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(l[0]===6||l[0]===2)){a=0;continue}if(l[0]===3&&(!o||l[1]>o[0]&&l[1]<o[3])){a.label=l[1];break}if(l[0]===6&&a.label<o[1]){a.label=o[1],o=l;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(l);break}o[2]&&a.ops.pop(),a.trys.pop();continue}l=t.call(r,a)}catch(f){l=[6,f],n=0}finally{e=o=0}if(5&l[0])throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}([u,c])}}}var Bt=function(){function r(t){this.global=t,this.flags={},this.flagRegistry={},this.urlFlags={},this.populateURLFlags()}return r.prototype.setPlatform=function(t,e){this.platform!=null&&console.warn("Platform "+this.platformName+" has already been set. Overwriting the platform with "+e+"."),this.platformName=t,this.platform=e},r.prototype.registerFlag=function(t,e,n){if(this.flagRegistry[t]={evaluationFn:e,setHook:n},this.urlFlags[t]!=null){var o=this.urlFlags[t];console.warn("Setting feature override from URL "+t+": "+o+"."),this.set(t,o)}},r.prototype.get=function(t){return t in this.flags?this.flags[t]:(this.flags[t]=this.evaluateFlag(t),this.flags[t])},r.prototype.getNumber=function(t){return this.get(t)},r.prototype.getBool=function(t){return this.get(t)},r.prototype.getFlags=function(){return this.flags},Object.defineProperty(r.prototype,"features",{get:function(){return this.flags},enumerable:!0,configurable:!0}),r.prototype.set=function(t,e){if(this.flagRegistry[t]==null)throw new Error("Cannot set flag "+t+" as it has not been registered.");this.flags[t]=e,this.flagRegistry[t].setHook!=null&&this.flagRegistry[t].setHook(e)},r.prototype.evaluateFlag=function(t){if(this.flagRegistry[t]==null)throw new Error("Cannot evaluate flag '"+t+"': no evaluation function found.");return this.flagRegistry[t].evaluationFn()},r.prototype.setFlags=function(t){this.flags=Object.assign({},t)},r.prototype.reset=function(){this.flags={},this.urlFlags={},this.populateURLFlags()},r.prototype.populateURLFlags=function(){var t=this;if(this.global!==void 0&&this.global.location!==void 0&&this.global.location.search!==void 0){var e,n,o=(e=this.global.location.search,n={},e.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,function(i){for(var a=[],s=1;s<arguments.length;s++)a[s-1]=arguments[s];return cn(n,a[0],a[1]),a.join("=")}),n);"tfjsflags"in o&&o.tfjsflags.split(",").forEach(function(i){var a=i.split(":"),s=a[0],u=a[1];t.urlFlags[s]=function(c,l){if((l=l.toLowerCase())==="true"||l==="false")return l==="true";if(""+ +l===l)return+l;throw new Error("Could not parse value flag value "+l+" for flag "+c+".")}(s,u)})}},r}();function cn(r,t,e){r[decodeURIComponent(t)]=decodeURIComponent(e||"")}function J(){return Zt}var Zt=null,ut=new Map,rt=new Map;function Vt(r,t){var e=Ae(r,t);return ut.get(e)}function _t(r){return rt.get(r)}function zt(r){for(var t=ut.entries(),e=[];;){var n=t.next(),o=n.done,i=n.value;if(o)break;var a=i[0],s=i[1];a.split("_")[0]===r&&e.push(s)}return e}function qt(r){var t=r.kernelName,e=r.backendName,n=Ae(t,e);if(ut.has(n))throw new Error("The kernel '"+t+"' for backend '"+e+"' is already registered");ut.set(n,r)}function Ut(r){var t=r.kernelName;rt.has(t)&&console.warn("Overriding the gradient for '"+t+"'"),rt.set(t,r)}function Ee(r,t){var e=Ae(r,t);if(!ut.has(e))throw new Error("The kernel '"+r+"' for backend '"+t+"' is not registered");ut.delete(e)}function re(r){if(!rt.has(r))throw new Error("The gradient '"+r+"' for backend is not registered");rt.delete(r)}function Ae(r,t){return t+"_"+r}function fe(r){for(var t=r.length,e=0,n=0;t>0;)n=Math.random()*t|0,e=r[--t],r[t]=r[n],r[n]=e}function Oe(r,t,e){return Math.max(r,Math.min(t,e))}function _e(r){return r%2==0?r:r+1}function Ve(r){for(var t=0,e=0;e<r.length;e++)t+=r[e];return t}function R(r,t){if(!r)throw new Error(typeof t=="string"?t:t())}function Je(r,t,e){e===void 0&&(e=""),R(Ke(r,t),function(){return e+" Shapes "+r+" and "+t+" must match"})}function Yt(r){R(r!=null,function(){return"The input to the tensor constructor must be a non-null value."})}function kt(r,t,e){if(t===void 0&&(t=[]),e===void 0&&(e=!1),t==null&&(t=[]),Array.isArray(r)||I(r)&&!e)for(var n=0;n<r.length;++n)kt(r[n],t,e);else t.push(r);return t}function Re(r){if(r.length===0)return 1;for(var t=r[0],e=1;e<r.length;e++)t*=r[e];return t}function Ke(r,t){if(r===t)return!0;if(r==null||t==null||r.length!==t.length)return!1;for(var e=0;e<r.length;e++)if(r[e]!==t[e])return!1;return!0}function He(r){return r%1==0}function Ft(r){if(Math.tanh!=null)return Math.tanh(r);if(r===1/0)return 1;if(r===-1/0)return-1;var t=Math.exp(2*r);return(t-1)/(t+1)}function Ct(r){var t=Math.ceil(Math.sqrt(r));return[t,Math.ceil(r/t)]}function It(r,t){return t<=r.length?r:r+" ".repeat(t-r.length)}function Ht(r,t,e){return t===void 0&&(t=function(n){return 0}),new Promise(function(n,o){var i=0,a=function(){if(r())n();else{i++;var s=t(i);e!=null&&i>=e?o():setTimeout(a,s)}};a()})}function Kt(r,t){for(var e=1,n=-1,o=0;o<r.length;++o)if(r[o]>=0)e*=r[o];else if(r[o]===-1){if(n!==-1)throw Error("Shapes can only have 1 implicit size. Found -1 at dim "+n+" and dim "+o);n=o}else if(r[o]<0)throw Error("Shapes can not be < 0. Found "+r[o]+" at dim "+o);if(n===-1){if(t>0&&t!==e)throw Error("Size("+t+") must match the product of shape "+r);return r}if(e===0)throw Error("Cannot infer the missing size in ["+r+"] when there are 0 elements");if(t%e!=0)throw Error("The implicit shape can't be a fractional number. Got "+t+" / "+e);var i=r.slice();return i[n]=t/e,i}function ht(r,t){var e=t.length;return R((r=r==null?t.map(function(n,o){return o}):[].concat(r)).every(function(n){return n>=-e&&n<e}),function(){return"All values in axis param must be in range [-"+e+", "+e+") but got axis "+r}),R(r.every(function(n){return He(n)}),function(){return"All values in axis param must be integers but got axis "+r}),r.map(function(n){return n<0?e+n:n})}function Cn(r,t){for(var e=[],n=[],o=t!=null&&Array.isArray(t)&&t.length===0,i=t==null||o?null:ht(t,r).sort(),a=0,s=0;s<r.length;++s){if(i!=null){if(i[a]===s&&r[s]!==1)throw new Error("Can't squeeze axis "+s+" since its dim '"+r[s]+"' is not 1");(i[a]==null||i[a]>s)&&r[s]===1&&(e.push(r[s]),n.push(s)),i[a]<=s&&a++}r[s]!==1&&(e.push(r[s]),n.push(s))}return{newShape:e,keptDims:n}}function T(r,t){var e=null;if(r==null||r==="float32")e=new Float32Array(t);else if(r==="int32")e=new Int32Array(t);else{if(r!=="bool")throw new Error("Unknown data type "+r);e=new Uint8Array(t)}return e}function m(r,t){var e=null;if(r==null||r==="float32")e=new Float32Array(t);else if(r==="int32")e=new Int32Array(t);else if(r==="bool")e=new Uint8Array(t);else{if(r!=="string")throw new Error("Unknown data type "+r);e=new Array(t)}return e}function y(r,t){for(var e=0;e<r.length;e++){var n=r[e];if(isNaN(n)||!isFinite(n))throw Error("A tensor of type "+t+" being uploaded contains "+n+".")}}function k(r){return r==="bool"||r==="complex64"||r==="float32"||r==="int32"||r==="string"}function b(r,t){return t!=="complex64"&&(t!=="float32"||r==="complex64")&&(t!=="int32"||r==="float32"||r==="complex64")&&(t!=="bool"||r!=="bool")}function I(r){return r instanceof Float32Array||r instanceof Int32Array||r instanceof Uint8Array}function W(r){if(r==="float32"||r==="int32")return 4;if(r==="complex64")return 8;if(r==="bool")return 1;throw new Error("Unknown dtype "+r)}function X(r){if(r==null)return 0;var t=0;return r.forEach(function(e){return t+=e.length}),t}function oe(r){return typeof r=="string"||r instanceof String}function ue(r){return typeof r=="boolean"}function Ne(r){return typeof r=="number"}function je(r){return Array.isArray(r)?je(r[0]):r instanceof Float32Array?"float32":r instanceof Int32Array||r instanceof Uint8Array?"int32":Ne(r)?"float32":oe(r)?"string":ue(r)?"bool":"float32"}function qe(r){return!!(r&&r.constructor&&r.call&&r.apply)}function Ot(r,t){for(var e=t;e<r;++e)if(r%e==0)return e;return r}function jt(r){var t=r.length;if(t<2)return[];var e=new Array(t-1);e[t-2]=r[t-1];for(var n=t-3;n>=0;--n)e[n]=e[n+1]*r[n+1];return e}function en(r,t,e){if(t==="string")throw new Error("Cannot convert a string[] to a TypedArray");if(Array.isArray(r)&&(r=kt(r)),e&&y(r,t),function(i,a){return i instanceof Float32Array&&a==="float32"||i instanceof Int32Array&&a==="int32"||i instanceof Uint8Array&&a==="bool"}(r,t))return r;if(t==null||t==="float32"||t==="complex64")return new Float32Array(r);if(t==="int32")return new Int32Array(r);if(t==="bool"){for(var n=new Uint8Array(r.length),o=0;o<n.length;++o)Math.round(r[o])!==0&&(n[o]=1);return n}throw new Error("Unknown data type "+t)}function xt(r,t){if(r.length===0)return t[0];var e=r.reduce(function(n,o){return n*o});if(e===0)return[];if(e!==t.length)throw new Error("["+r+"] does not match the input size.");return function n(o,i,a){var s=new Array;if(i.length===1)for(var u=i[0],c=0;c<u;c++)s[c]=a[o+c];else{u=i[0];var l=i.slice(1),f=l.reduce(function(h,d){return h*d});for(c=0;c<u;c++)s[c]=n(o+c*f,l,a)}return s}(0,r,t)}function H(r,t){for(var e=Z(r,t),n=0;n<e.length;n++)e[n]=1;return e}function Z(r,t){if(t==null||t==="float32"||t==="complex64")return new Float32Array(r);if(t==="int32")return new Int32Array(r);if(t==="bool")return new Uint8Array(r);throw new Error("Unknown data type "+t)}function $(){return J().platform.now()}function Ce(r){r.forEach(function(t){R(Number.isInteger(t)&&t>=0,function(){return"Tensor must have a shape comprised of positive integers but got shape ["+r+"]."})})}function Fe(r,t){return t===void 0&&(t="utf-8"),t=t||"utf-8",J().platform.encode(r,t)}function Me(r,t){return t===void 0&&(t="utf-8"),t=t||"utf-8",J().platform.decode(r,t)}function Xe(r,t,e){if(t===0)return 0;if(t===1)return r[0];for(var n=r[r.length-1],o=0;o<r.length-1;++o)n+=e[o]*r[o];return n}function Ge(r,t,e){if(t===0)return[];if(t===1)return[r];for(var n=new Array(t),o=0;o<n.length-1;++o)n[o]=Math.floor(r/e[o]),r-=n[o]*e[o];return n[n.length-1]=r,n}var Ze=Object.freeze({shuffle:fe,clamp:Oe,nearestLargerEven:_e,sum:Ve,randUniform:function(r,t){var e=Math.random();return t*e+(1-e)*r},distSquared:function(r,t){for(var e=0,n=0;n<r.length;n++){var o=Number(r[n])-Number(t[n]);e+=o*o}return e},assert:R,assertShapesMatch:Je,assertNonNull:Yt,flatten:kt,sizeFromShape:Re,isScalarShape:function(r){return r.length===0},arraysEqual:Ke,isInt:He,tanh:Ft,sizeToSquarishShape:Ct,createShuffledIndices:function(r){for(var t=new Uint32Array(r),e=0;e<r;++e)t[e]=e;return fe(t),t},rightPad:It,repeatedTry:Ht,inferFromImplicitShape:Kt,parseAxisParam:ht,squeezeShape:Cn,getTypedArrayFromDType:T,getArrayFromDType:m,checkConversionForErrors:y,isValidDtype:k,hasEncodingLoss:b,isTypedArray:I,bytesPerElement:W,bytesFromStringArray:X,isString:oe,isBoolean:ue,isNumber:Ne,inferDtype:je,isFunction:qe,nearestDivisor:Ot,computeStrides:jt,toTypedArray:en,toNestedArray:xt,makeOnesTypedArray:H,makeZerosTypedArray:Z,now:$,assertNonNegativeIntegerDimensions:Ce,fetch:function(r,t){return J().platform.fetch(r,t)},encodeString:Fe,decodeString:Me,locToIndex:Xe,indexToLoc:Ge}),ft=function(){function r(t,e){this.backendTimer=t,this.logger=e,e==null&&(this.logger=new ot)}return r.prototype.profileKernel=function(t,e,n){var o,i=this,a=this.backendTimer.time(function(){o=n()});return o.forEach(function(s){s.data().then(function(u){(function(c,l,f){if(l!=="float32")return!1;for(var h=0;h<c.length;h++){var d=c[h];if(isNaN(d)||!isFinite(d))return console.warn("Found "+d+" in the result of '"+f+"'"),!0}})(u,s.dtype,t),a.then(function(c){var l="";c.getExtraProfileInfo!=null&&(l=c.getExtraProfileInfo()),i.logger.logKernelProfile(t,s,u,c.kernelMs,e,l)})})}),o},r}(),ot=function(){function r(){}return r.prototype.logKernelProfile=function(t,e,n,o,i,a){var s=typeof o=="number"?It(o+"ms",9):o.error,u=It(t,25),c=e.rank,l=e.size,f=It(e.shape.toString(),14),h="";for(var d in i){var p=i[d].shape||e.shape,v=p.length;h+=d+": "+v+"D "+(v>0?p:"")+" "}console.log("%c"+u+" %c"+s+" %c"+c+"D "+f+" %c"+l+" %c"+h+" %c"+a,"font-weight:bold","color:red","color:blue","color: orange","color: green","color: steelblue")},r}(),mt=20,bt=3,Gt=7;function Xt(r,t,e,n){var o=jt(t),i=function(c,l,f,h){var d=Re(l),p=h[h.length-1],v=new Array(p).fill(0),g=l.length,A=f==="complex64"?Pt(c):c;if(g>1)for(var w=0;w<d/p;w++)for(var E=w*p,x=0;x<p;x++)v[x]=Math.max(v[x],At(A[E+x],0,f).length);return v}(r,t,e,o),a=t.length,s=function c(l,f,h,d,p,v){v===void 0&&(v=!0);var g=h==="complex64"?2:1,A=f[0],w=f.length;if(w===0)return h==="complex64"?[At(Pt(l)[0],0,h)]:h==="bool"?[dt(l[0])]:[l[0].toString()];if(w===1){if(A>mt){var E=bt*g,x=Array.from(l.slice(0,E)),C=Array.from(l.slice((A-bt)*g,A*g));return h==="complex64"&&(x=Pt(x),C=Pt(C)),["["+x.map(function(te,ce){return At(te,p[ce],h)}).join(", ")+", ..., "+C.map(function(te,ce){return At(te,p[A-bt+ce],h)}).join(", ")+"]"]}return["["+(h==="complex64"?Pt(l):Array.from(l)).map(function(te,ce){return At(te,p[ce],h)}).join(", ")+"]"]}var S=f.slice(1),N=d.slice(1),O=d[0]*g,F=[];if(A>mt){for(var P=0;P<bt;P++){var z=(_=P*O)+O;F.push.apply(F,c(l.slice(_,z),S,h,N,p,!1))}for(F.push("..."),P=A-bt;P<A;P++)z=(_=P*O)+O,F.push.apply(F,c(l.slice(_,z),S,h,N,p,P===A-1))}else for(P=0;P<A;P++){var _;z=(_=P*O)+O,F.push.apply(F,c(l.slice(_,z),S,h,N,p,P===A-1))}var V=w===2?",":"";for(F[0]="["+F[0]+V,P=1;P<F.length-1;P++)F[P]=" "+F[P]+V;var G=`,
|
|
`;for(P=2;P<w;P++)G+=`
|
|
`;return F[F.length-1]=" "+F[F.length-1]+"]"+(v?"":G),F}(r,t,e,o,i),u=["Tensor"];return n&&(u.push(" dtype: "+e),u.push(" rank: "+a),u.push(" shape: ["+t+"]"),u.push(" values:")),u.push(s.map(function(c){return" "+c}).join(`
|
|
`)),u.join(`
|
|
`)}function At(r,t,e){return It(Array.isArray(r)?parseFloat(r[0].toFixed(Gt))+" + "+parseFloat(r[1].toFixed(Gt))+"j":oe(r)?"'"+r+"'":e==="bool"?dt(r):parseFloat(r.toFixed(Gt)).toString(),t)}function dt(r){return r===0?"false":"true"}function Pt(r){for(var t=[],e=0;e<r.length;e+=2)t.push([r[e],r[e+1]]);return t}var wt=function(){function r(t,e,n){var o=this;if(this.dtype=e,this.shape=t.slice(),this.size=Re(t),n!=null){var i=n.length;R(i===this.size,function(){return"Length of values '"+i+"' does not match the size inferred by the shape '"+o.size+"'."})}if(e==="complex64")throw new Error("complex64 dtype TensorBuffers are not supported. Please create a TensorBuffer for the real and imaginary parts separately and call tf.complex(real, imag).");this.values=n||m(e,this.size),this.strides=jt(t)}return r.prototype.set=function(t){for(var e=this,n=[],o=1;o<arguments.length;o++)n[o-1]=arguments[o];n.length===0&&(n=[0]),R(n.length===this.rank,function(){return"The number of provided coordinates ("+n.length+") must match the rank ("+e.rank+")"});var i=this.locToIndex(n);this.values[i]=t},r.prototype.get=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];t.length===0&&(t=[0]);for(var n=0,o=0,i=t;o<i.length;o++){var a=i[o];if(a<0||a>=this.shape[n]){var s="Requested out of range element at "+t+". Buffer shape="+this.shape;throw new Error(s)}n++}for(var u=t[t.length-1],c=0;c<t.length-1;++c)u+=this.strides[c]*t[c];return this.values[u]},r.prototype.locToIndex=function(t){if(this.rank===0)return 0;if(this.rank===1)return t[0];for(var e=t[t.length-1],n=0;n<t.length-1;++n)e+=this.strides[n]*t[n];return e},r.prototype.indexToLoc=function(t){if(this.rank===0)return[];if(this.rank===1)return[t];for(var e=new Array(this.shape.length),n=0;n<e.length-1;++n)e[n]=Math.floor(t/this.strides[n]),t-=e[n]*this.strides[n];return e[e.length-1]=t,e},Object.defineProperty(r.prototype,"rank",{get:function(){return this.shape.length},enumerable:!0,configurable:!0}),r.prototype.toTensor=function(){return ct().makeTensor(this.values,this.shape,this.dtype)},r}(),ct=null,j=null,hn=null,at=function(){function r(t,e,n,o){this.kept=!1,this.isDisposedInternal=!1,this.shape=t.slice(),this.dtype=e||"float32",this.size=Re(t),this.strides=jt(t),this.dataId=n,this.id=o,this.rankType=this.rank<5?this.rank.toString():"higher"}return r.prototype.flatten=function(){return this.throwIfDisposed(),this.as1D()},r.prototype.asScalar=function(){return this.throwIfDisposed(),R(this.size===1,function(){return"The array must have only 1 element."}),this.reshape([])},r.prototype.as1D=function(){return this.throwIfDisposed(),this.reshape([this.size])},r.prototype.as2D=function(t,e){return this.throwIfDisposed(),this.reshape([t,e])},r.prototype.as3D=function(t,e,n){return this.throwIfDisposed(),this.reshape([t,e,n])},r.prototype.as4D=function(t,e,n,o){return this.throwIfDisposed(),this.reshape([t,e,n,o])},r.prototype.as5D=function(t,e,n,o,i){return this.throwIfDisposed(),this.reshape([t,e,n,o,i])},r.prototype.asType=function(t){return this.throwIfDisposed(),j.cast(this,t)},Object.defineProperty(r.prototype,"rank",{get:function(){return this.shape.length},enumerable:!0,configurable:!0}),r.prototype.buffer=function(){return xe(this,void 0,void 0,function(){var t;return Ie(this,function(e){switch(e.label){case 0:return[4,this.data()];case 1:return t=e.sent(),[2,j.buffer(this.shape,this.dtype,t)]}})})},r.prototype.bufferSync=function(){return j.buffer(this.shape,this.dtype,this.dataSync())},r.prototype.array=function(){return xe(this,void 0,void 0,function(){var t;return Ie(this,function(e){switch(e.label){case 0:return[4,this.data()];case 1:return t=e.sent(),[2,xt(this.shape,t)]}})})},r.prototype.arraySync=function(){return xt(this.shape,this.dataSync())},r.prototype.data=function(){return xe(this,void 0,void 0,function(){var t,e;return Ie(this,function(n){switch(n.label){case 0:return this.throwIfDisposed(),t=ct().read(this.dataId),this.dtype!=="string"?[3,2]:[4,t];case 1:e=n.sent();try{return[2,e.map(function(o){return Me(o)})]}catch(o){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}n.label=2;case 2:return[2,t]}})})},r.prototype.dataSync=function(){this.throwIfDisposed();var t=ct().readSync(this.dataId);if(this.dtype==="string")try{return t.map(function(e){return Me(e)})}catch(e){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}return t},r.prototype.bytes=function(){return xe(this,void 0,void 0,function(){var t;return Ie(this,function(e){switch(e.label){case 0:return this.throwIfDisposed(),[4,ct().read(this.dataId)];case 1:return t=e.sent(),this.dtype==="string"?[2,t]:[2,new Uint8Array(t.buffer)]}})})},r.prototype.dispose=function(){this.isDisposed||(ct().disposeTensor(this),this.isDisposedInternal=!0)},Object.defineProperty(r.prototype,"isDisposed",{get:function(){return this.isDisposedInternal},enumerable:!0,configurable:!0}),r.prototype.throwIfDisposed=function(){if(this.isDisposed)throw new Error("Tensor is disposed.")},r.prototype.toFloat=function(){return this.asType("float32")},r.prototype.toInt=function(){return this.asType("int32")},r.prototype.toBool=function(){return this.asType("bool")},r.prototype.print=function(t){return t===void 0&&(t=!1),j.print(this,t)},r.prototype.reshape=function(t){return this.throwIfDisposed(),j.reshape(this,t)},r.prototype.reshapeAs=function(t){return this.throwIfDisposed(),this.reshape(t.shape)},r.prototype.expandDims=function(t){return t===void 0&&(t=0),j.expandDims(this,t)},r.prototype.cumsum=function(t,e,n){return t===void 0&&(t=0),e===void 0&&(e=!1),n===void 0&&(n=!1),j.cumsum(this,t,e,n)},r.prototype.squeeze=function(t){return this.throwIfDisposed(),j.squeeze(this,t)},r.prototype.clone=function(){return this.throwIfDisposed(),j.clone(this)},r.prototype.oneHot=function(t,e,n){return this.throwIfDisposed(),j.oneHot(this,t,e,n)},r.prototype.toString=function(t){return t===void 0&&(t=!1),Xt(this.dataSync(),this.shape,this.dtype,t)},r.prototype.tile=function(t){return this.throwIfDisposed(),j.tile(this,t)},r.prototype.gather=function(t,e){return e===void 0&&(e=0),this.throwIfDisposed(),j.gather(this,t,e)},r.prototype.matMul=function(t,e,n){return e===void 0&&(e=!1),n===void 0&&(n=!1),this.throwIfDisposed(),j.matMul(this,t,e,n)},r.prototype.dot=function(t){return this.throwIfDisposed(),j.dot(this,t)},r.prototype.norm=function(t,e,n){return t===void 0&&(t="euclidean"),e===void 0&&(e=null),n===void 0&&(n=!1),this.throwIfDisposed(),j.norm(this,t,e,n)},r.prototype.slice=function(t,e){return this.throwIfDisposed(),j.slice(this,t,e)},r.prototype.reverse=function(t){return this.throwIfDisposed(),j.reverse(this,t)},r.prototype.concat=function(t,e){return e===void 0&&(e=0),this.throwIfDisposed(),t instanceof r&&(t=[t]),j.concat([this].concat(t),e)},r.prototype.split=function(t,e){return e===void 0&&(e=0),this.throwIfDisposed(),j.split(this,t,e)},r.prototype.stack=function(t,e){return e===void 0&&(e=0),j.stack([this,t],e)},r.prototype.unstack=function(t){return t===void 0&&(t=0),j.unstack(this,t)},r.prototype.pad=function(t,e){return e===void 0&&(e=0),j.pad(this,t,e)},r.prototype.batchNormalization=function(t,e,n,o,i){return n===void 0&&(n=.001),hn("tf.batchNormalization() is going away. Use tf.batchNorm() instead, and note the positional argument change of scale, offset, and varianceEpsilon"),this.batchNorm(t,e,i,o,n)},r.prototype.batchNorm=function(t,e,n,o,i){return i===void 0&&(i=.001),this.throwIfDisposed(),j.batchNorm(this,t,e,n,o,i)},r.prototype.all=function(t,e){return t===void 0&&(t=null),e===void 0&&(e=!1),this.throwIfDisposed(),j.all(this,t,e)},r.prototype.any=function(t,e){return t===void 0&&(t=null),e===void 0&&(e=!1),this.throwIfDisposed(),j.any(this,t,e)},r.prototype.logSumExp=function(t,e){return t===void 0&&(t=null),e===void 0&&(e=!1),this.throwIfDisposed(),j.logSumExp(this,t,e)},r.prototype.sum=function(t,e){return t===void 0&&(t=null),e===void 0&&(e=!1),this.throwIfDisposed(),j.sum(this,t,e)},r.prototype.prod=function(t,e){return t===void 0&&(t=null),e===void 0&&(e=!1),this.throwIfDisposed(),j.prod(this,t,e)},r.prototype.mean=function(t,e){return t===void 0&&(t=null),e===void 0&&(e=!1),this.throwIfDisposed(),j.mean(this,t,e)},r.prototype.min=function(t,e){return t===void 0&&(t=null),e===void 0&&(e=!1),this.throwIfDisposed(),j.min(this,t,e)},r.prototype.max=function(t,e){return t===void 0&&(t=null),e===void 0&&(e=!1),this.throwIfDisposed(),j.max(this,t,e)},r.prototype.argMin=function(t){return t===void 0&&(t=null),this.throwIfDisposed(),j.argMin(this,t)},r.prototype.argMax=function(t){return t===void 0&&(t=null),this.throwIfDisposed(),j.argMax(this,t)},r.prototype.cast=function(t){return this.throwIfDisposed(),j.cast(this,t)},r.prototype.add=function(t){return this.throwIfDisposed(),j.add(this,t)},r.prototype.addStrict=function(t){return this.throwIfDisposed(),j.addStrict(this,t)},r.prototype.atan2=function(t){return this.throwIfDisposed(),j.atan2(this,t)},r.prototype.sub=function(t){return this.throwIfDisposed(),j.sub(this,t)},r.prototype.subStrict=function(t){return this.throwIfDisposed(),j.subStrict(this,t)},r.prototype.pow=function(t){return this.throwIfDisposed(),j.pow(this,t)},r.prototype.powStrict=function(t){return this.throwIfDisposed(),j.powStrict(this,t)},r.prototype.mul=function(t){return this.throwIfDisposed(),j.mul(this,t)},r.prototype.mulStrict=function(t){return this.throwIfDisposed(),j.mulStrict(this,t)},r.prototype.div=function(t){return this.throwIfDisposed(),j.div(this,t)},r.prototype.divNoNan=function(t){return this.throwIfDisposed(),j.divNoNan(this,t)},r.prototype.floorDiv=function(t){return this.throwIfDisposed(),j.floorDiv(this,t)},r.prototype.divStrict=function(t){return this.throwIfDisposed(),j.divStrict(this,t)},r.prototype.minimum=function(t){return this.throwIfDisposed(),j.minimum(this,t)},r.prototype.minimumStrict=function(t){return this.throwIfDisposed(),j.minimumStrict(this,t)},r.prototype.maximum=function(t){return this.throwIfDisposed(),j.maximum(this,t)},r.prototype.maximumStrict=function(t){return this.throwIfDisposed(),j.maximumStrict(this,t)},r.prototype.mod=function(t){return this.throwIfDisposed(),j.mod(this,t)},r.prototype.modStrict=function(t){return this.throwIfDisposed(),j.modStrict(this,t)},r.prototype.squaredDifferenceStrict=function(t){return this.throwIfDisposed(),j.squaredDifferenceStrict(this,t)},r.prototype.transpose=function(t){return this.throwIfDisposed(),j.transpose(this,t)},r.prototype.notEqual=function(t){return this.throwIfDisposed(),j.notEqual(this,t)},r.prototype.notEqualStrict=function(t){return this.throwIfDisposed(),j.notEqualStrict(this,t)},r.prototype.less=function(t){return this.throwIfDisposed(),j.less(this,t)},r.prototype.lessStrict=function(t){return this.throwIfDisposed(),j.lessStrict(this,t)},r.prototype.equal=function(t){return this.throwIfDisposed(),j.equal(this,t)},r.prototype.equalStrict=function(t){return this.throwIfDisposed(),j.equalStrict(this,t)},r.prototype.lessEqual=function(t){return this.throwIfDisposed(),j.lessEqual(this,t)},r.prototype.lessEqualStrict=function(t){return this.throwIfDisposed(),j.lessEqualStrict(this,t)},r.prototype.greater=function(t){return this.throwIfDisposed(),j.greater(this,t)},r.prototype.greaterStrict=function(t){return this.throwIfDisposed(),j.greaterStrict(this,t)},r.prototype.greaterEqual=function(t){return this.throwIfDisposed(),j.greaterEqual(this,t)},r.prototype.greaterEqualStrict=function(t){return this.throwIfDisposed(),j.greaterEqualStrict(this,t)},r.prototype.logicalAnd=function(t){return this.throwIfDisposed(),j.logicalAnd(this,t)},r.prototype.logicalOr=function(t){return this.throwIfDisposed(),j.logicalOr(this,t)},r.prototype.logicalNot=function(){return this.throwIfDisposed(),j.logicalNot(this)},r.prototype.logicalXor=function(t){return this.throwIfDisposed(),j.logicalXor(this,t)},r.prototype.where=function(t,e){return this.throwIfDisposed(),j.where(t,this,e)},r.prototype.neg=function(){return this.throwIfDisposed(),j.neg(this)},r.prototype.ceil=function(){return this.throwIfDisposed(),j.ceil(this)},r.prototype.floor=function(){return this.throwIfDisposed(),j.floor(this)},r.prototype.sign=function(){return this.throwIfDisposed(),j.sign(this)},r.prototype.isNaN=function(){return this.throwIfDisposed(),j.isNaN(this)},r.prototype.isInf=function(){return this.throwIfDisposed(),j.isInf(this)},r.prototype.isFinite=function(){return this.throwIfDisposed(),j.isFinite(this)},r.prototype.exp=function(){return this.throwIfDisposed(),j.exp(this)},r.prototype.expm1=function(){return this.throwIfDisposed(),j.expm1(this)},r.prototype.log=function(){return this.throwIfDisposed(),j.log(this)},r.prototype.log1p=function(){return this.throwIfDisposed(),j.log1p(this)},r.prototype.sqrt=function(){return this.throwIfDisposed(),j.sqrt(this)},r.prototype.rsqrt=function(){return this.throwIfDisposed(),j.rsqrt(this)},r.prototype.square=function(){return this.throwIfDisposed(),j.square(this)},r.prototype.reciprocal=function(){return this.throwIfDisposed(),j.reciprocal(this)},r.prototype.abs=function(){return this.throwIfDisposed(),j.abs(this)},r.prototype.clipByValue=function(t,e){return this.throwIfDisposed(),j.clipByValue(this,t,e)},r.prototype.relu=function(){return this.throwIfDisposed(),j.relu(this)},r.prototype.relu6=function(){return this.throwIfDisposed(),j.relu6(this)},r.prototype.elu=function(){return this.throwIfDisposed(),j.elu(this)},r.prototype.selu=function(){return this.throwIfDisposed(),j.selu(this)},r.prototype.leakyRelu=function(t){return t===void 0&&(t=.2),this.throwIfDisposed(),j.leakyRelu(this,t)},r.prototype.prelu=function(t){return this.throwIfDisposed(),j.prelu(this,t)},r.prototype.sigmoid=function(){return this.throwIfDisposed(),j.sigmoid(this)},r.prototype.logSigmoid=function(){return this.throwIfDisposed(),j.logSigmoid(this)},r.prototype.softplus=function(){return this.throwIfDisposed(),j.softplus(this)},r.prototype.zerosLike=function(){return this.throwIfDisposed(),j.zerosLike(this)},r.prototype.onesLike=function(){return this.throwIfDisposed(),j.onesLike(this)},r.prototype.sin=function(){return this.throwIfDisposed(),j.sin(this)},r.prototype.cos=function(){return this.throwIfDisposed(),j.cos(this)},r.prototype.tan=function(){return this.throwIfDisposed(),j.tan(this)},r.prototype.asin=function(){return this.throwIfDisposed(),j.asin(this)},r.prototype.acos=function(){return this.throwIfDisposed(),j.acos(this)},r.prototype.atan=function(){return this.throwIfDisposed(),j.atan(this)},r.prototype.sinh=function(){return this.throwIfDisposed(),j.sinh(this)},r.prototype.cosh=function(){return this.throwIfDisposed(),j.cosh(this)},r.prototype.tanh=function(){return this.throwIfDisposed(),j.tanh(this)},r.prototype.asinh=function(){return this.throwIfDisposed(),j.asinh(this)},r.prototype.acosh=function(){return this.throwIfDisposed(),j.acosh(this)},r.prototype.atanh=function(){return this.throwIfDisposed(),j.atanh(this)},r.prototype.erf=function(){return this.throwIfDisposed(),j.erf(this)},r.prototype.round=function(){return this.throwIfDisposed(),j.round(this)},r.prototype.step=function(t){return t===void 0&&(t=0),this.throwIfDisposed(),j.step(this,t)},r.prototype.softmax=function(t){return t===void 0&&(t=-1),this.throwIfDisposed(),j.softmax(this,t)},r.prototype.logSoftmax=function(t){return t===void 0&&(t=-1),this.throwIfDisposed(),j.logSoftmax(this,t)},r.prototype.resizeBilinear=function(t,e){return e===void 0&&(e=!1),this.throwIfDisposed(),j.image.resizeBilinear(this,t,e)},r.prototype.resizeNearestNeighbor=function(t,e){return e===void 0&&(e=!1),this.throwIfDisposed(),j.image.resizeNearestNeighbor(this,t,e)},r.prototype.conv1d=function(t,e,n,o,i,a){return o===void 0&&(o="NWC"),i===void 0&&(i=1),this.throwIfDisposed(),j.conv1d(this,t,e,n,o,i,a)},r.prototype.conv2d=function(t,e,n,o,i,a){return o===void 0&&(o="NHWC"),i===void 0&&(i=[1,1]),this.throwIfDisposed(),j.conv2d(this,t,e,n,o,i,a)},r.prototype.conv2dTranspose=function(t,e,n,o,i){return this.throwIfDisposed(),j.conv2dTranspose(this,t,e,n,o,i)},r.prototype.depthwiseConv2D=function(t,e,n,o,i,a){return o===void 0&&(o="NHWC"),i===void 0&&(i=[1,1]),this.throwIfDisposed(),j.depthwiseConv2d(this,t,e,n,o,i,a)},r.prototype.separableConv2d=function(t,e,n,o,i,a){return i===void 0&&(i=[1,1]),a===void 0&&(a="NHWC"),this.throwIfDisposed(),j.separableConv2d(this,t,e,n,o,i,a)},r.prototype.avgPool=function(t,e,n,o){return this.throwIfDisposed(),j.avgPool(this,t,e,n,o)},r.prototype.maxPool=function(t,e,n,o){return this.throwIfDisposed(),j.maxPool(this,t,e,n,o)},r.prototype.localResponseNormalization=function(t,e,n,o){return t===void 0&&(t=5),e===void 0&&(e=1),n===void 0&&(n=1),o===void 0&&(o=.5),j.localResponseNormalization(this,t,e,n,o)},r.prototype.pool=function(t,e,n,o,i){return this.throwIfDisposed(),j.pool(this,t,e,n,o,i)},r.prototype.variable=function(t,e,n){return t===void 0&&(t=!0),this.throwIfDisposed(),ct().makeVariable(this,t,e,n)},r.prototype.unsortedSegmentSum=function(t,e){return this.throwIfDisposed(),j.unsortedSegmentSum(this,t,e)},r.prototype.batchToSpaceND=function(t,e){return this.throwIfDisposed(),j.batchToSpaceND(this,t,e)},r.prototype.spaceToBatchND=function(t,e){return this.throwIfDisposed(),j.spaceToBatchND(this,t,e)},r.prototype.topk=function(t,e){return t===void 0&&(t=1),e===void 0&&(e=!0),this.throwIfDisposed(),j.topk(this,t,e)},r.prototype.stridedSlice=function(t,e,n,o,i,a,s,u){return o===void 0&&(o=0),i===void 0&&(i=0),a===void 0&&(a=0),s===void 0&&(s=0),u===void 0&&(u=0),this.throwIfDisposed(),j.stridedSlice(this,t,e,n,o,i,a,s,u)},r.prototype.depthToSpace=function(t,e){return this.throwIfDisposed(),j.depthToSpace(this,t,e)},r.prototype.fft=function(){return this.throwIfDisposed(),j.spectral.fft(this)},r.prototype.ifft=function(){return this.throwIfDisposed(),j.spectral.ifft(this)},r.prototype.rfft=function(){return this.throwIfDisposed(),j.spectral.rfft(this)},r.prototype.irfft=function(){return this.throwIfDisposed(),j.spectral.irfft(this)},r}();Object.defineProperty(at,Symbol.hasInstance,{value:function(r){return!!r&&r.dataId!=null&&r.shape!=null&&r.dtype!=null}});var In,gn,Kn,Sn,$n,ln=function(r){function t(e,n,o,i){var a=r.call(this,e.shape,e.dtype,e.dataId,i)||this;return a.trainable=n,a.name=o,a}return De(t,r),t.prototype.assign=function(e){if(e.dtype!==this.dtype)throw new Error("dtype of the new value ("+e.dtype+") and previous value ("+this.dtype+") must match");if(!Ke(e.shape,this.shape))throw new Error("shape of the new value ("+e.shape+") and previous value ("+this.shape+") must match");ct().disposeTensor(this),this.dataId=e.dataId,ct().incRef(this,null)},t.prototype.dispose=function(){ct().disposeVariable(this),this.isDisposedInternal=!0},t}(at);Object.defineProperty(ln,Symbol.hasInstance,{value:function(r){return r instanceof at&&r.assign!=null&&r.assign instanceof Function}}),function(r){r.R0="R0",r.R1="R1",r.R2="R2",r.R3="R3",r.R4="R4",r.R5="R5",r.R6="R6"}(In||(In={})),function(r){r.float32="float32",r.int32="int32",r.bool="int32",r.complex64="complex64"}(gn||(gn={})),function(r){r.float32="float32",r.int32="int32",r.bool="bool",r.complex64="complex64"}(Kn||(Kn={})),function(r){r.float32="float32",r.int32="float32",r.bool="float32",r.complex64="complex64"}(Sn||(Sn={})),function(r){r.float32="complex64",r.int32="complex64",r.bool="complex64",r.complex64="complex64"}($n||($n={}));var nn={float32:Sn,int32:gn,bool:Kn,complex64:$n};function Mt(r,t){if(r==="string"||t==="string"){if(r==="string"&&t==="string")return"string";throw new Error("Can not upcast "+r+" with "+t)}return nn[r][t]}function dn(r){return Mt(r,"int32")}function pt(r,t){if(r.dtype===t.dtype)return[r,t];var e=Mt(r.dtype,t.dtype);return[r.cast(e),t.cast(e)]}function lo(r,t){R(r.dtype===t.dtype,function(){return"The dtypes of the first("+r.dtype+") and second("+t.dtype+") input must match"})}function fo(r){var t=[];return function e(n,o,i){if(n!=null){if(n instanceof at)return void o.push(n);if(a=n,!(!Array.isArray(a)&&typeof a!="object")){var a,s=n;for(var u in s){var c=s[u];i.has(c)||(i.add(c),e(c,o,i))}}}}(r,t,new Set),t}var Oo,hu=Object.freeze({makeTypesMatch:pt,assertTypesMatch:lo,isTensorInList:function(r,t){return t.some(function(e){return e.id===r.id})},getTensorsInContainer:fo}),Jr=function(){function r(){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}}return r.prototype.dispose=function(){for(var t in this.registeredVariables)this.registeredVariables[t].dispose()},r}(),ho=function(){function r(t){this.ENV=t,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new Jr}return r.prototype.ready=function(){return xe(this,void 0,void 0,function(){var t,e,n;return Ie(this,function(o){switch(o.label){case 0:if(this.pendingBackendInit!=null)return[2,this.pendingBackendInit.then(function(){})];if(this.backendInstance!=null)return[2];t=this.getSortedBackends(),e=0,o.label=1;case 1:return e<t.length?(n=t[e],[4,this.initializeBackend(n).success]):[3,5];case 2:return o.sent()?[4,this.setBackend(n)]:[3,4];case 3:return o.sent(),[2];case 4:return e++,[3,1];case 5:throw new Error("Could not initialize any backends, all backend initializations failed.")}})})},Object.defineProperty(r.prototype,"backend",{get:function(){if(this.pendingBackendInit!=null)throw new Error("Backend '"+this.backendName+"' has not yet been initialized. Make sure to await tf.ready() or await tf.setBackend() before calling other methods");if(this.backendInstance==null){var t=this.initializeBackendsAndReturnBest(),e=t.name;if(t.asyncInit)throw new Error("The highest priority backend '"+e+"' has not yet been initialized. Make sure to await tf.ready() or await tf.setBackend() before calling other methods");this.setBackend(e)}return this.backendInstance},enumerable:!0,configurable:!0}),r.prototype.backendNames=function(){return Object.keys(this.registryFactory)},r.prototype.findBackend=function(t){return!(t in this.registry)&&(!(t in this.registryFactory)||this.initializeBackend(t).asyncInit)?null:this.registry[t]},r.prototype.findBackendFactory=function(t){return t in this.registryFactory?this.registryFactory[t].factory:null},r.prototype.registerBackend=function(t,e,n){return n===void 0&&(n=1),t in this.registryFactory?(console.warn(t+" backend was already registered. Reusing existing backend factory."),!1):(this.registryFactory[t]={factory:e,priority:n},!0)},r.prototype.setBackend=function(t){return xe(this,void 0,void 0,function(){var e,n,o;return Ie(this,function(i){switch(i.label){case 0:if(this.registryFactory[t]==null)throw new Error("Backend name '"+t+"' not found in registry");return this.backendName=t,this.registry[t]!=null?[3,4]:(this.backendInstance=null,e=this.initializeBackend(t),n=e.success,e.asyncInit?[4,n]:[3,2]);case 1:return o=i.sent(),[3,3];case 2:o=n,i.label=3;case 3:if(!o)return[2,!1];i.label=4;case 4:return this.backendInstance=this.registry[t],this.setupRegisteredKernels(),this.profiler=new ft(this.backendInstance),[2,!0]}})})},r.prototype.setupRegisteredKernels=function(){var t=this;zt(this.backendName).forEach(function(e){e.setupFunc!=null&&e.setupFunc(t.backendInstance)})},r.prototype.disposeRegisteredKernels=function(t){var e=this;zt(t).forEach(function(n){n.disposeFunc!=null&&n.disposeFunc(e.registry[t])})},r.prototype.initializeBackend=function(t){var e=this,n=this.registryFactory[t];if(n==null)throw new Error("Cannot initialize backend "+t+", no registration found.");try{var o=n.factory();if(Promise.resolve(o)===o){var i=++this.pendingBackendInitId,a=o.then(function(s){return!(i<e.pendingBackendInitId)&&(e.registry[t]=s,e.pendingBackendInit=null,!0)}).catch(function(s){return!(i<e.pendingBackendInitId)&&(e.pendingBackendInit=null,console.warn("Initialization of backend "+t+" failed"),console.warn(s.stack||s.message),!1)});return this.pendingBackendInit=a,{success:a,asyncInit:!0}}return this.registry[t]=o,{success:!0,asyncInit:!1}}catch(s){return console.warn("Initialization of backend "+t+" failed"),console.warn(s.stack||s.message),{success:!1,asyncInit:!1}}},r.prototype.removeBackend=function(t){if(!(t in this.registryFactory))throw new Error(t+" backend not found in registry");this.backendName===t&&this.pendingBackendInit!=null&&this.pendingBackendInitId++,t in this.registry&&(this.disposeRegisteredKernels(t),this.registry[t].dispose(),delete this.registry[t]),delete this.registryFactory[t],this.backendName===t&&(this.pendingBackendInit=null,this.backendName=null,this.backendInstance=null)},r.prototype.getSortedBackends=function(){var t=this;if(Object.keys(this.registryFactory).length===0)throw new Error("No backend found in registry.");return Object.keys(this.registryFactory).sort(function(e,n){return t.registryFactory[n].priority-t.registryFactory[e].priority})},r.prototype.initializeBackendsAndReturnBest=function(){for(var t=this.getSortedBackends(),e=0;e<t.length;e++){var n=t[e],o=this.initializeBackend(n),i=o.success,a=o.asyncInit;if(a||i)return{name:n,asyncInit:a}}throw new Error("Could not initialize any backends, all backend initializations failed.")},r.prototype.moveData=function(t,e){var n=this.state.tensorInfo.get(e),o=n.backend,i=this.readSync(e);o.disposeData(e),n.backend=t,t.move(e,i,n.shape,n.dtype),this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack[this.state.numDataMovesStack.length-1]++},r.prototype.tidy=function(t,e){var n,o=this,i=null;if(e==null){if(typeof t!="function")throw new Error("Please provide a function to tidy()");e=t}else{if(typeof t!="string"&&!(t instanceof String))throw new Error("When calling with two arguments, the first argument to tidy() must be a string");if(typeof e!="function")throw new Error("When calling with two arguments, the 2nd argument to tidy() must be a function");i=t}return this.scopedRun(function(){return o.startScope(i)},function(){return o.endScope(n)},function(){return(n=e())instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),n})},r.prototype.scopedRun=function(t,e,n){t();try{var o=n();return e(),o}catch(i){throw e(),i}},r.prototype.nextTensorId=function(){return r.nextTensorId++},r.prototype.nextVariableId=function(){return r.nextVariableId++},r.prototype.clone=function(t){var e=this.makeTensorFromDataId(t.dataId,t.shape,t.dtype),n={x:t};return this.addTapeNode(this.state.activeScope.name,n,[e],function(o){return{x:function(){return o.toFloat()}}},[]),e},r.prototype.runKernel=function(t,e,n,o,i){return this.runKernelFunc(null,e,null,t,n,o,i)},r.prototype.shouldCheckForMemLeaks=function(){return this.ENV.getBool("IS_TEST")},r.prototype.checkKernelForMemLeak=function(t,e,n){var o=this.backend.numDataIds(),i=0;n.forEach(function(u){i+=u.dtype==="complex64"?3:1});var a=this.state.numDataMovesStack[this.state.numDataMovesStack.length-1],s=o-e-i-a;if(s>0)throw new Error("Backend '"+this.backendName+"' has an internal memory leak ("+s+" data ids) after running '"+t+"'")},r.prototype.runKernelFunc=function(t,e,n,o,i,a,s){var u,c=this;a===void 0&&(a=[]),s===void 0&&(s=[]);var l=[],f=this.isTapeOn();o==null&&(o=this.state.activeScope!=null?this.state.activeScope.name:"");var h,d=function(w){f&&(l=w.map(function(E){return c.keep(c.clone(E))}))},p=this.state.numBytes,v=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);var g,A=Vt(o,this.backendName);return h=A!=null?function(){var w=c.backend.numDataIds();g=A.kernelFunc({inputs:e,attrs:i,backend:c.backend});var E=Array.isArray(g)?g:[g];c.shouldCheckForMemLeaks()&&c.checkKernelForMemLeak(o,w,E);var x=E.map(function(S){var N=S.dataId,O=S.shape,F=S.dtype;return c.makeTensorFromDataId(N,O,F)}),C=x.filter(function(S,N){return s[N]});return d((a||[]).slice().concat(C)),x}:function(){var w=c.backend.numDataIds();g=c.tidy(function(){return t(c.backend,d)});var E=Array.isArray(g)?g:[g];return c.shouldCheckForMemLeaks()&&c.checkKernelForMemLeak(o,w,E),E},this.scopedRun(function(){return c.state.kernelDepth++},function(){return c.state.kernelDepth--},function(){u=c.ENV.getBool("DEBUG")?c.profiler.profileKernel(o,e,function(){return h()}):h()}),f&&this.addTapeNode(o,e,u,n,l),this.state.profiling&&this.state.activeProfile.kernels.push({name:o,bytesAdded:this.state.numBytes-p,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-v,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(e).map(function(w){return e[w].shape}),outputShapes:u.map(function(w){return w.shape})}),Array.isArray(g)?u:u[0]},r.prototype.makeTensor=function(t,e,n,o){if(t==null)throw new Error("Values passed to engine.makeTensor() are null");n=n||"float32",o=o||this.backend;var i=t;n==="string"&&oe(t[0])&&(i=t.map(function(l){return Fe(l)}));var a=o.write(i,e,n),s=new at(e,n,a,this.nextTensorId());if(this.incRef(s,o),n==="string"){var u=this.state.tensorInfo.get(a),c=X(i);this.state.numBytes+=c-u.bytes,u.bytes=c}return s},r.prototype.makeTensorFromDataId=function(t,e,n,o){var i=new at(e,n=n||"float32",t,this.nextTensorId());return this.incRef(i,o),i},r.prototype.makeVariable=function(t,e,n,o){e===void 0&&(e=!0),n=n||this.nextVariableId().toString(),o!=null&&o!==t.dtype&&(t=t.asType(o));var i=new ln(t,e,n,this.nextTensorId());if(this.state.registeredVariables[i.name]!=null)throw new Error("Variable with name "+i.name+" was already registered");return this.state.registeredVariables[i.name]=i,this.incRef(i,this.backend),i},r.prototype.incRef=function(t,e){var n=this.state.tensorInfo.has(t.dataId)?this.state.tensorInfo.get(t.dataId).refCount:0;if(this.state.numTensors++,t.dtype==="string"&&this.state.numStringTensors++,n===0){this.state.numDataBuffers++;var o=0;t.dtype!=="complex64"&&t.dtype!=="string"&&(o=t.size*W(t.dtype)),this.state.tensorInfo.set(t.dataId,{backend:e||this.backend,dtype:t.dtype,shape:t.shape,bytes:o,refCount:0}),this.state.numBytes+=o}this.state.tensorInfo.get(t.dataId).refCount++,t instanceof ln||this.track(t)},r.prototype.disposeTensor=function(t){if(this.state.tensorInfo.has(t.dataId)){this.state.numTensors--,t.dtype==="string"&&this.state.numStringTensors--;var e=this.state.tensorInfo.get(t.dataId);e.refCount<=1?(t.dtype!=="complex64"&&(this.state.numBytes-=e.bytes),this.state.numDataBuffers--,e.backend.disposeData(t.dataId),this.state.tensorInfo.delete(t.dataId)):this.state.tensorInfo.get(t.dataId).refCount--}},r.prototype.disposeVariables=function(){for(var t in this.state.registeredVariables){var e=this.state.registeredVariables[t];this.disposeVariable(e)}},r.prototype.disposeVariable=function(t){this.disposeTensor(t),this.state.registeredVariables[t.name]!=null&&delete this.state.registeredVariables[t.name]},r.prototype.memory=function(){var t=this.backend.memory();return t.numTensors=this.state.numTensors,t.numDataBuffers=this.state.numDataBuffers,t.numBytes=this.state.numBytes,this.state.numStringTensors>0&&(t.unreliable=!0,t.reasons==null&&(t.reasons=[]),t.reasons.push("Memory usage by string tensors is approximate (2 bytes per character)")),t},r.prototype.profile=function(t){return xe(this,void 0,void 0,function(){var e,n;return Ie(this,function(o){return this.state.profiling=!0,e=this.state.numBytes,n=this.state.numTensors,this.state.activeProfile.kernels=[],this.state.activeProfile.result=t(),this.state.profiling=!1,this.state.activeProfile.peakBytes=Math.max.apply(Math,this.state.activeProfile.kernels.map(function(i){return i.totalBytesSnapshot})),this.state.activeProfile.newBytes=this.state.numBytes-e,this.state.activeProfile.newTensors=this.state.numTensors-n,[2,this.state.activeProfile]})})},r.prototype.isTapeOn=function(){return this.state.gradientDepth>0&&this.state.kernelDepth===0},r.prototype.addTapeNode=function(t,e,n,o,i){var a=this,s={id:this.state.nextTapeNodeId++,kernelName:t,inputs:e,outputs:n,saved:i},u=_t(t);u!=null&&(o=u.gradFunc),o!=null&&(s.gradient=function(c){return c=c.map(function(l,f){if(l==null){var h=n[f],d=Z(h.size,h.dtype);return a.makeTensor(d,h.shape,h.dtype)}return l}),o(c.length>1?c:c[0],i)}),this.state.activeTape.push(s)},r.prototype.keep=function(t){return t.kept=!0,t},r.prototype.startTape=function(){this.state.gradientDepth===0&&(this.state.activeTape=[]),this.state.gradientDepth++},r.prototype.endTape=function(){this.state.gradientDepth--},r.prototype.startScope=function(t){var e={track:[],name:"unnamed scope",id:this.state.nextScopeId++};t&&(e.name=t),this.state.scopeStack.push(e),this.state.activeScope=e},r.prototype.endScope=function(t){for(var e=this,n=fo(t),o=new Set(n.map(function(u){return u.id})),i=0;i<this.state.activeScope.track.length;i++){var a=this.state.activeScope.track[i];a.kept||o.has(a.id)||a.dispose()}var s=this.state.scopeStack.pop();this.state.activeScope=this.state.scopeStack.length===0?null:this.state.scopeStack[this.state.scopeStack.length-1],n.forEach(function(u){u.kept||u.scopeId!==s.id||e.track(u)})},r.prototype.gradients=function(t,e,n,o){var i=this;if(o===void 0&&(o=!1),R(e.length>0,function(){return"gradients() received an empty list of xs."}),n!=null&&n.dtype!=="float32")throw new Error("dy must have 'float32' dtype, but has '"+n.dtype+"'");var a=this.scopedRun(function(){return i.startTape()},function(){return i.endTape()},function(){return i.tidy("forward",t)});R(a instanceof at,function(){return"The result y returned by f() must be a tensor."});var s=function(u,c,l){for(var f={},h={},d=0;d<c.length;d++)f[c[d].id]=!0;for(d=0;d<u.length;d++){var p=(S=u[d]).inputs;for(var v in p){for(var g=p[v],A=!1,w=0;w<c.length;w++)if(f[g.id]){S.outputs.forEach(function(P){return f[P.id]=!0}),A=!0,h[S.id]=!0;break}if(A)break}}var E={};E[l.id]=!0;var x={};for(d=u.length-1;d>=0;d--)for(p=(S=u[d]).inputs,w=0;w<S.outputs.length;w++)if(E[S.outputs[w].id]){for(var v in p)E[p[v].id]=!0,x[S.id]=!0;break}var C=[];for(d=0;d<u.length;d++){var S;if(h[(S=u[d]).id]&&x[S.id]){var N={};for(var v in S.inputs){var O=S.inputs[v];f[O.id]&&(N[v]=O)}var F=Object.assign({},S);F.inputs=N,F.outputs=S.outputs,C.push(F)}}return C}(this.state.activeTape,e,a);if(!o&&s.length===0&&e.length>0)throw new Error("Cannot compute gradient of y=f(x) with respect to x. Make sure that the f you passed encloses all operations that lead from x to y.");return this.tidy("backward",function(){var u,c,l={};l[a.id]=n==null?(u=a.shape,c=H(Re(u),"float32"),L.makeTensor(c,u,"float32")):n,function(h,d,p){for(var v=function(A){var w=d[A],E=[];if(w.outputs.forEach(function(N){var O=h[N.id];O!=null?E.push(O):E.push(null)}),w.gradient==null)throw new Error("Cannot compute gradient: gradient function not found for "+w.kernelName+".");var x=w.gradient(E),C=function(N){if(!(N in x))throw new Error("Cannot backprop through input "+N+". Available gradients found: "+Object.keys(x)+".");var O=p(function(){return x[N]()});if(O.dtype!=="float32")throw new Error("Error in gradient for op "+w.kernelName+". The gradient of input "+N+" must have 'float32' dtype, but has '"+O.dtype+"'");var F=w.inputs[N];if(!Ke(O.shape,F.shape))throw new Error("Error in gradient for op "+w.kernelName+". The gradient of input '"+N+"' has shape '"+O.shape+"', which does not match the shape of the input '"+F.shape+"'");if(h[F.id]==null)h[F.id]=O;else{var P=h[F.id];h[F.id]=P.add(O),P.dispose()}};for(var S in w.inputs)C(S)},g=d.length-1;g>=0;g--)v(g)}(l,s,function(h){return i.tidy(h)});var f=e.map(function(h){return l[h.id]});return i.state.gradientDepth===0&&(i.state.activeTape.forEach(function(h){for(var d=0,p=h.saved;d<p.length;d++)p[d].dispose()}),i.state.activeTape=null),{value:a,grads:f}})},r.prototype.customGrad=function(t){var e=this;return R(qe(t),function(){return"The f passed in customGrad(f) must be a function."}),function(){for(var n,o=[],i=0;i<arguments.length;i++)o[i]=arguments[i];R(o.every(function(s){return s instanceof at}),function(){return"The args passed in customGrad(f)(x1, x2,...) must all be tensors"});var a={};return o.forEach(function(s,u){a[u]=s}),e.runKernelFunc(function(s,u){return R((n=t.apply(void 0,o.concat([u]))).value instanceof at,function(){return"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"}),R(qe(n.gradFunc),function(){return"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function."}),n.value},a,function(s,u){var c=n.gradFunc(s,u),l=Array.isArray(c)?c:[c];R(l.length===o.length,function(){return"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(...)."}),R(l.every(function(h){return h instanceof at}),function(){return"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns a list of only tensors."});var f={};return l.forEach(function(h,d){f[d]=function(){return h}}),f})}},r.prototype.readSync=function(t){return this.state.tensorInfo.get(t).backend.readSync(t)},r.prototype.read=function(t){return this.state.tensorInfo.get(t).backend.read(t)},r.prototype.time=function(t){return xe(this,void 0,void 0,function(){var e,n;return Ie(this,function(o){switch(o.label){case 0:return e=$(),[4,this.backend.time(t)];case 1:return(n=o.sent()).wallMs=$()-e,[2,n]}})})},r.prototype.track=function(t){return this.state.activeScope!=null&&(t.scopeId=this.state.activeScope.id,this.state.activeScope.track.push(t)),t},Object.defineProperty(r.prototype,"registeredVariables",{get:function(){return this.state.registeredVariables},enumerable:!0,configurable:!0}),r.prototype.reset=function(){for(var t in this.pendingBackendInitId++,this.state.dispose(),this.ENV.reset(),this.state=new Jr,this.registry)this.disposeRegisteredKernels(t),this.registry[t].dispose(),delete this.registry[t];this.backendName=null,this.backendInstance=null,this.pendingBackendInit=null},r.nextTensorId=0,r.nextVariableId=0,r}(),L=function(){var r=function(){if(Oo==null){var e=void 0;if(typeof window!="undefined")e=window;else if(typeof U.g!="undefined")e=U.g;else if(typeof me!="undefined")e=me;else{if(typeof self=="undefined")throw new Error("Could not find a global object");me=self}Oo=e}return Oo}();if(r._tfengine==null){var t=new Bt(r);r._tfengine=new ho(t)}return function(e){Zt=e}(r._tfengine.ENV),ct=function(){return r._tfengine},r._tfengine}();function wr(){return typeof window!="undefined"&&window.document!=null||typeof WorkerGlobalScope!="undefined"}var Un=J();Un.registerFlag("DEBUG",function(){return!1},function(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.")}),Un.registerFlag("IS_BROWSER",function(){return wr()}),Un.registerFlag("IS_NODE",function(){return typeof me!="undefined"&&me.versions!==void 0&&me.versions.node!==void 0}),Un.registerFlag("IS_CHROME",function(){return typeof navigator!="undefined"&&navigator!=null&&navigator.userAgent!=null&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor)}),Un.registerFlag("PROD",function(){return!1}),Un.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY",function(){return Un.getBool("DEBUG")}),Un.registerFlag("DEPRECATION_WARNINGS_ENABLED",function(){return!0}),Un.registerFlag("IS_TEST",function(){return!1});var er,bn,Rn,ur={},ci={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function li(r,t){ur[r]=t}function cr(r){r in ur||(ur[r]=function(e){if(e!==1&&e!==2)throw new Error("Cannot get WebGL rendering context, WebGL is disabled.");var n=function(o){if(typeof OffscreenCanvas!="undefined"&&o===2)return new OffscreenCanvas(300,150);if(typeof document!="undefined")return document.createElement("canvas");throw new Error("Cannot create a canvas in this context")}(e);return n.addEventListener("webglcontextlost",function(o){o.preventDefault(),delete ur[e]},!1),e===1?n.getContext("webgl",ci)||n.getContext("experimental-webgl",ci):n.getContext("webgl2",ci)}(r));var t=ur[r];return t.isContextLost()?(delete ur[r],cr(r)):(t.disable(t.DEPTH_TEST),t.disable(t.STENCIL_TEST),t.disable(t.BLEND),t.disable(t.DITHER),t.disable(t.POLYGON_OFFSET_FILL),t.disable(t.SAMPLE_COVERAGE),t.enable(t.SCISSOR_TEST),t.enable(t.CULL_FACE),t.cullFace(t.BACK),ur[r])}function fi(r,t){return[t,r]}function Mo(r){var t=Re(r);return Ct(Math.ceil(t/4))}function Lo(r,t){return[Math.max(1,Math.ceil(t/2)),Math.max(1,Math.ceil(r/2))]}function fa(r,t){var e,n,o,i,a,s,u,c,l,f=r;return J().getNumber("WEBGL_VERSION")===2?(e=f.R32F,n=f.R16F,o=f.RGBA16F,i=f.RGBA32F,a=f.RED,s=4,u=1,c=f.HALF_FLOAT,l=f.FLOAT):(e=r.RGBA,n=r.RGBA,o=r.RGBA,i=f.RGBA,a=r.RGBA,s=4,u=4,c=t!=null?t.HALF_FLOAT_OES:null,l=r.FLOAT),{internalFormatFloat:e,internalFormatHalfFloat:n,internalFormatPackedHalfFloat:o,internalFormatPackedFloat:i,textureFormatFloat:a,downloadTextureFormat:r.RGBA,downloadUnpackNumChannels:s,defaultNumChannels:u,textureTypeHalfFloat:c,textureTypeFloat:l}}function We(r,t,e){var n=e();return t&&function(o){var i=o.getError();if(i!==o.NO_ERROR)throw new Error("WebGL Error: "+pu(o,i))}(r),n}(function(r){r[r.DENSE=0]="DENSE",r[r.SHARED_BATCH=1]="SHARED_BATCH"})(er||(er={})),function(r){r[r.RENDER=0]="RENDER",r[r.UPLOAD=1]="UPLOAD",r[r.PIXELS=2]="PIXELS",r[r.DOWNLOAD=3]="DOWNLOAD"}(bn||(bn={})),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"}(Rn||(Rn={}));var uh=596e-10,ch=65504;function du(r){return!!(J().getBool("WEBGL_RENDER_FLOAT32_ENABLED")||r===0||uh<Math.abs(r)&&Math.abs(r)<ch)}function pu(r,t){switch(t){case r.NO_ERROR:return"NO_ERROR";case r.INVALID_ENUM:return"INVALID_ENUM";case r.INVALID_VALUE:return"INVALID_VALUE";case r.INVALID_OPERATION:return"INVALID_OPERATION";case r.INVALID_FRAMEBUFFER_OPERATION:return"INVALID_FRAMEBUFFER_OPERATION";case r.OUT_OF_MEMORY:return"OUT_OF_MEMORY";case r.CONTEXT_LOST_WEBGL:return"CONTEXT_LOST_WEBGL";default:return"Unknown error code "+t}}function Wo(r,t,e){return Er(r,t,function(){return r.getExtension(e)},'Extension "'+e+'" not supported on this browser.')}function vu(r,t,e){var n=Er(r,t,function(){return r.createShader(r.VERTEX_SHADER)},"Unable to create vertex WebGLShader.");if(We(r,t,function(){return r.shaderSource(n,e)}),We(r,t,function(){return r.compileShader(n)}),r.getShaderParameter(n,r.COMPILE_STATUS)===!1)throw console.log(r.getShaderInfoLog(n)),new Error("Failed to compile vertex shader.");return n}function gu(r,t,e){var n=Er(r,t,function(){return r.createShader(r.FRAGMENT_SHADER)},"Unable to create fragment WebGLShader.");if(We(r,t,function(){return r.shaderSource(n,e)}),We(r,t,function(){return r.compileShader(n)}),r.getShaderParameter(n,r.COMPILE_STATUS)===!1)throw function(o,i){var a=lh.exec(i);if(a==null)return console.log("Couldn't parse line number in error: "+i),void console.log(o);for(var s=+a[1],u=o.split(`
|
|
`),c=u.length.toString().length+2,l=u.map(function(g,A){return It((A+1).toString(),c)+g}),f=0,h=0;h<l.length;h++)f=Math.max(l[h].length,f);var d=l.slice(0,s-1),p=l.slice(s-1,s),v=l.slice(s);console.log(d.join(`
|
|
`)),console.log(i.split(`
|
|
`)[0]),console.log("%c "+It(p[0],f),"border:1px solid red; background-color:#e3d2d2; color:#a61717"),console.log(v.join(`
|
|
`))}(e,r.getShaderInfoLog(n)),new Error("Failed to compile fragment shader.");return n}var hi,di,lh=/ERROR: [0-9]+:([0-9]+):/g;function mu(r,t){return Er(r,t,function(){return r.createProgram()},"Unable to create WebGLProgram.")}function Au(r,t,e){if(We(r,t,function(){return 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 pi(r,t,e){if(We(r,t,function(){return r.validateProgram(e)}),r.getProgramParameter(e,r.VALIDATE_STATUS)===!1)throw console.log(r.getProgramInfoLog(e)),new Error("Shader program validation failed.")}function yu(r,t,e){var n=Er(r,t,function(){return r.createBuffer()},"Unable to create WebGLBuffer");return We(r,t,function(){return r.bindBuffer(r.ARRAY_BUFFER,n)}),We(r,t,function(){return r.bufferData(r.ARRAY_BUFFER,e,r.STATIC_DRAW)}),n}function xu(r,t,e){var n=Er(r,t,function(){return r.createBuffer()},"Unable to create WebGLBuffer");return We(r,t,function(){return r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,n)}),We(r,t,function(){return r.bufferData(r.ELEMENT_ARRAY_BUFFER,e,r.STATIC_DRAW)}),n}function bu(r,t){return Er(r,t,function(){return r.createTexture()},"Unable to create WebGLTexture.")}function wu(r,t){var e=J().getNumber("WEBGL_MAX_TEXTURE_SIZE");if(r<=0||t<=0){var n="["+r+"x"+t+"]";throw new Error("Requested texture size "+n+" is invalid.")}if(r>e||t>e)throw n="["+r+"x"+t+"]",new Error("Requested texture size "+n+" greater than WebGL maximum on this browser / GPU "+("["+e+"x"+e+"]")+".")}function Eu(r,t){return Er(r,t,function(){return r.createFramebuffer()},"Unable to create WebGLFramebuffer.")}function ha(r,t,e,n,o,i,a,s){var u=r.getAttribLocation(e,n);return u!==-1&&(We(r,t,function(){return r.bindBuffer(r.ARRAY_BUFFER,o)}),We(r,t,function(){return r.vertexAttribPointer(u,i,r.FLOAT,!1,a,s)}),We(r,t,function(){return r.enableVertexAttribArray(u)}),!0)}function Cu(r,t,e,n){ku(r,n),We(r,t,function(){return r.activeTexture(r.TEXTURE0+n)}),We(r,t,function(){return r.bindTexture(r.TEXTURE_2D,e)})}function Iu(r,t,e,n){return Er(r,t,function(){return r.getUniformLocation(e,n)},'uniform "'+n+'" not present in program.')}function Su(r,t,e){return r.getUniformLocation(t,e)}function Ru(r,t,e,n,o,i){We(r,t,function(){return Cu(r,t,n,i)}),We(r,t,function(){return r.uniform1i(o,i)})}function vi(r,t,e,n){We(r,t,function(){return r.bindFramebuffer(r.FRAMEBUFFER,n)}),We(r,t,function(){return r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,e,0)})}function da(r,t,e){We(r,t,function(){return r.bindFramebuffer(r.FRAMEBUFFER,e)}),We(r,t,function(){return r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,null,0)})}function Qo(r){var t=r.checkFramebufferStatus(r.FRAMEBUFFER);if(t!==r.FRAMEBUFFER_COMPLETE)throw new Error("Error binding framebuffer: "+Bu(r,t))}function Bu(r,t){switch(t){case r.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_ATTACHMENT";case r.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT";case r.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:return"FRAMEBUFFER_INCOMPLETE_DIMENSIONS";case r.FRAMEBUFFER_UNSUPPORTED:return"FRAMEBUFFER_UNSUPPORTED";default:return"unknown error "+t}}function Er(r,t,e,n){var o=We(r,t,function(){return e()});if(o==null)throw new Error(n);return o}function ku(r,t){var e=r.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,n=t+r.TEXTURE0;if(n<r.TEXTURE0||n>e)throw new Error("textureUnit must be in "+("[gl.TEXTURE0, gl.TEXTURE"+e+"]")+".")}function _o(r,t){return t===void 0&&(t=2),Re(r.slice(0,r.length-t))}function zo(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 gi(r){var t=[1,1,1];return r.length===0||r.length===1&&r[0]===1||(t=[_o(r)].concat(zo(r))),t}function Tu(r,t){var e;t===void 0&&(t=!1);var n=J().getNumber("WEBGL_MAX_TEXTURE_SIZE");if(t&&(n*=2,(r=r.map(function(c,l){return l>=r.length-2?_e(r[l]):r[l]})).length===1&&(r=[2,r[0]])),r.length!==2){var o=Cn(r);r=o.newShape}var i=Re(r);if(r.length<=1&&i<=n)return[1,i];if(r.length===2&&r[0]<=n&&r[1]<=n)return r;if(r.length===3&&r[0]*r[1]<=n&&r[2]<=n)return[r[0]*r[1],r[2]];if(r.length===3&&r[0]<=n&&r[1]*r[2]<=n)return[r[0],r[1]*r[2]];if(r.length===4&&r[0]*r[1]*r[2]<=n&&r[3]<=n)return[r[0]*r[1]*r[2],r[3]];if(r.length===4&&r[0]<=n&&r[1]*r[2]*r[3]<=n)return[r[0],r[1]*r[2]*r[3]];if(t){var a=_o(r),s=2,u=2;return r.length&&(s=(e=zo(r))[0],u=e[1]),Ct(i=a*(s/2)*(u/2)).map(function(c){return 2*c})}return Ct(i)}function mi(r){return r%2==0}function Uo(r,t){if(Ke(r=r.slice(-2),t=t.slice(-2))||!r.length||!t.length||r[0]===0||r[1]===0||t[0]===0||t[1]===0)return!0;if(r.length!==t.length){var e=r.slice(-1)[0],n=t.slice(-1)[0];if(e===n||mi(e)&&mi(n)&&(r[0]===1||t[0]===1))return!0}return r[1]===t[1]&&mi(r[0])&&mi(t[0])}function Du(r){if(hi==null){var t=cr(r);hi=t.getParameter(t.MAX_TEXTURE_SIZE)}return hi}function Fu(r){if(di==null){var t=cr(r);di=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,di)}function Pu(r){if(r===0)return 0;var t=cr(r);return Hn(t,"EXT_disjoint_timer_query_webgl2")&&r===2?2:Hn(t,"EXT_disjoint_timer_query")?1:0}function Hn(r,t){return r.getExtension(t)!=null}function pa(r){try{if(cr(r)!=null)return!0}catch(t){return!1}return!1}function Nu(r){if(r===0)return!1;var t=cr(r);if(r===1){if(!Hn(t,"OES_texture_float"))return!1}else if(!Hn(t,"EXT_color_buffer_float"))return!1;return va(t)}function Ou(r){if(r===0)return!1;var t=cr(r);if(r!==1){if(Hn(t,"EXT_color_buffer_float"))return va(t);if(Hn(t,"EXT_color_buffer_half_float")){var e=t.getExtension("EXT_color_buffer_half_float");return function(n,o){var i=fa(n,o),a=n.createTexture();n.bindTexture(n.TEXTURE_2D,a),n.texImage2D(n.TEXTURE_2D,0,i.internalFormatHalfFloat,1,1,0,i.textureFormatFloat,i.textureTypeHalfFloat,null);var s=n.createFramebuffer();n.bindFramebuffer(n.FRAMEBUFFER,s),n.framebufferTexture2D(n.FRAMEBUFFER,n.COLOR_ATTACHMENT0,n.TEXTURE_2D,a,0);var u=n.checkFramebufferStatus(n.FRAMEBUFFER)===n.FRAMEBUFFER_COMPLETE;return n.bindTexture(n.TEXTURE_2D,null),n.bindFramebuffer(n.FRAMEBUFFER,null),n.deleteTexture(a),n.deleteFramebuffer(s),u}(t,e)}return!1}return!!Hn(t,"OES_texture_float")&&!!Hn(t,"WEBGL_color_buffer_float")&&va(t)}function va(r){var t=fa(r),e=r.createTexture();r.bindTexture(r.TEXTURE_2D,e),r.texImage2D(r.TEXTURE_2D,0,t.internalFormatFloat,1,1,0,t.textureFormatFloat,t.textureTypeFloat,null);var n=r.createFramebuffer();r.bindFramebuffer(r.FRAMEBUFFER,n),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,e,0);var o=r.checkFramebufferStatus(r.FRAMEBUFFER)===r.FRAMEBUFFER_COMPLETE;return r.bindTexture(r.TEXTURE_2D,null),r.bindFramebuffer(r.FRAMEBUFFER,null),r.deleteTexture(e),r.deleteFramebuffer(n),o}function Mu(r){return r===2&&cr(r).fenceSync!=null}var fh=Object.freeze({callAndCheck:We,canBeRepresented:du,getWebGLErrorMessage:pu,getExtensionOrThrow:Wo,createVertexShader:vu,createFragmentShader:gu,createProgram:mu,linkProgram:Au,validateProgram:pi,createStaticVertexBuffer:yu,createStaticIndexBuffer:xu,getNumChannels:function(){return J().getNumber("WEBGL_VERSION")===2?1:4},createTexture:bu,validateTextureSize:wu,createFramebuffer:Eu,bindVertexBufferToProgramAttribute:ha,bindTextureUnit:Cu,unbindTextureUnit:function(r,t,e){ku(r,e),We(r,t,function(){return r.activeTexture(r.TEXTURE0+e)}),We(r,t,function(){return r.bindTexture(r.TEXTURE_2D,null)})},getProgramUniformLocationOrThrow:Iu,getProgramUniformLocation:Su,bindTextureToProgramUniformSampler:Ru,bindCanvasToFramebuffer:function(r,t){We(r,t,function(){return r.bindFramebuffer(r.FRAMEBUFFER,null)}),We(r,t,function(){return r.viewport(0,0,r.canvas.width,r.canvas.height)}),We(r,t,function(){return r.scissor(0,0,r.canvas.width,r.canvas.height)})},bindColorTextureToFramebuffer:vi,unbindColorTextureFromFramebuffer:da,validateFramebuffer:Qo,getFramebufferErrorMessage:Bu,getBatchDim:_o,getRowsCols:zo,getShapeAs3D:gi,getTextureShapeFromLogicalShape:Tu,isReshapeFree:Uo,getWebGLMaxTextureSize:Du,resetMaxTextureSize:function(){hi=null},resetMaxTexturesInShader:function(){di=null},getMaxTexturesInShader:Fu,getWebGLDisjointQueryTimerVersion:Pu,hasExtension:Hn,isWebGLVersionEnabled:pa,isCapableOfRenderingToFloatTexture:Nu,isDownloadFloatTextureEnabled:Ou,isWebGLFenceEnabled:Mu}),tt=J();function NA(){J().set("PROD",!0)}function OA(){J().set("DEBUG",!0)}function MA(){J().set("DEPRECATION_WARNINGS_ENABLED",!1),console.warn("TensorFlow.js deprecation warnings have been disabled.")}function Lu(r){J().getBool("DEPRECATION_WARNINGS_ENABLED")&&console.warn(r+" You can disable deprecation warnings with tf.disableDeprecationWarnings().")}function LA(){L.disposeVariables()}function WA(){return L}function QA(){return L.memory()}function _A(r){return L.profile(r)}function Le(r,t){return L.tidy(r,t)}function Wn(r){fo(r).forEach(function(t){return t.dispose()})}function hh(r){return L.keep(r)}function zA(r){return L.time(r)}function UA(r){return L.setBackend(r)}function HA(){return L.ready()}function jA(){return L.backendName}function VA(r){L.removeBackend(r)}function GA(r){return L.findBackend(r)}function XA(r){return L.findBackendFactory(r)}function JA(r,t,e){return e===void 0&&(e=1),L.registerBackend(r,t,e)}function KA(){return L.backend}function ZA(r,t){J().setPlatform(r,t)}function Ai(){for(var r=[],t=0;t<arguments.length;t++)r[t]=arguments[t];J().getBool("IS_TEST")||console.warn.apply(console,r)}function lr(r,t){var e=r;if(I(r))return t==="string"?[]:[r.length];if(!Array.isArray(r))return[];for(var n=[];Array.isArray(e)||I(e)&&t!=="string";)n.push(e.length),e=e[0];return Array.isArray(r)&&J().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")&&function o(i,a,s){if(s=s||[],!Array.isArray(i)&&!I(i))return void R(a.length===0,function(){return"Element arr["+s.join("][")+"] is a primitive, but should be an array/TypedArray of "+a[0]+" elements"});R(a.length>0,function(){return"Element arr["+s.join("][")+"] should be a primitive, but is an array of "+i.length+" elements"}),R(i.length===a[0],function(){return"Element arr["+s.join("][")+"] should have "+a[0]+" elements, but has "+i.length+" elements"});for(var u=a.slice(1),c=0;c<i.length;++c)o(i[c],u,s.concat(c))}(r,n,[]),n}function Wu(r,t,e,n){if(r!=null&&(r!=="numeric"&&r!==t||r==="numeric"&&t==="string"))throw new Error("Argument '"+e+"' passed to '"+n+"' must be "+r+" tensor, but got "+t+" tensor")}function B(r,t,e,n){if(n===void 0&&(n="numeric"),r instanceof at)return Wu(n,r.dtype,t,e),r;var o=je(r);if(o!=="string"&&["bool","int32","float32"].indexOf(n)>=0&&(o=n),Wu(n,o,t,e),r==null||!I(r)&&!Array.isArray(r)&&typeof r!="number"&&typeof r!="boolean"&&typeof r!="string"){var i=r==null?"null":r.constructor.name;throw new Error("Argument '"+t+"' passed to '"+e+"' must be a Tensor or TensorLike, but got '"+i+"'")}var a=lr(r,o);I(r)||Array.isArray(r)||(r=[r]);var s=o!=="string"?en(r,o,J().getBool("DEBUG")):kt(r,[],!0);return L.makeTensor(s,a,o)}function Ho(r,t,e,n){if(n===void 0&&(n="numeric"),!Array.isArray(r))throw new Error("Argument "+t+" passed to "+e+" must be a `Tensor[]` or `TensorLike[]`");return r.map(function(o,i){return B(o,t+"["+i+"]",e)},n)}function ga(r,t){for(var e=0;e<r.length;++e)if(r[r.length-e-1]!==t-1-e)return!1;return!0}function Qu(r,t,e){for(var n=r.length+t.length,o=[],i=0,a=0,s=0;s<n;s++)e.indexOf(s)===-1?o.push(r[i++]):o.push(t[a++]);return o}function Bn(r,t){for(var e=[],n=r.length,o=0;o<n;o++)t.indexOf(o)===-1&&e.push(r[o]);return[e,t.map(function(i){return r[i]})]}function Mn(r,t){return Qu(r,t.map(function(e){return 1}),t)}function Qn(r,t,e){R(ga(t,e),function(){return r+" supports only inner-most axes for now. Got axes "+t+" and rank-"+e+" input."})}function tr(r,t){if(ga(r,t))return null;for(var e=[],n=0;n<t;++n)r.indexOf(n)===-1&&e.push(n);return r.forEach(function(o){return e.push(o)}),e}function yi(r){return r.map(function(t,e){return[e,t]}).sort(function(t,e){return t[1]-e[1]}).map(function(t){return t[0]})}function nr(r,t){for(var e=[],n=t-r;n<t;++n)e.push(n);return e}function _u(r,t){var e=r[0].length;r.forEach(function(o,i){R(o.length===e,function(){return"Error in concat"+e+"D: rank of tensors["+i+"] must be the same as the rank of the rest ("+e+")"})}),R(t>=0&&t<e,function(){return"Error in concat"+e+"D: axis must be between 0 and "+(e-1)+"."});var n=r[0];r.forEach(function(o,i){for(var a=0;a<e;a++)R(a===t||o[a]===n[a],function(){return"Error in concat"+e+"D: Shape of tensors["+i+"] ("+o+") does not match the shape of the rest ("+n+") along the non-concatenated axis "+i+"."})})}function Kr(r,t){for(var e=r[0].slice(),n=1;n<r.length;n++)e[t]+=r[n][t];return e}function Q(r){var t=Object.keys(r);if(t.length!==1)throw new Error("Please provide an object with a single key (operation name) mapping to a function. Got an object with "+t.length+" keys.");var e=t[0],n=r[e];e.endsWith("_")&&(e=e.substring(0,e.length-1));var o=function(){for(var i=[],a=0;a<arguments.length;a++)i[a]=arguments[a];L.startScope(e);try{var s=n.apply(void 0,i);return s instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),L.endScope(s),s}catch(u){throw L.endScope(null),u}};return Object.defineProperty(o,"name",{value:e,configurable:!0}),o}tt.registerFlag("HAS_WEBGL",function(){return tt.getNumber("WEBGL_VERSION")>0}),tt.registerFlag("WEBGL_VERSION",function(){return pa(2)?2:pa(1)?1:0}),tt.registerFlag("WEBGL_BUFFER_SUPPORTED",function(){return tt.get("WEBGL_VERSION")===2}),tt.registerFlag("WEBGL_CPU_FORWARD",function(){return!0}),tt.registerFlag("WEBGL_FORCE_F16_TEXTURES",function(){return!1}),tt.registerFlag("WEBGL_PACK",function(){return tt.getBool("HAS_WEBGL")}),tt.registerFlag("WEBGL_PACK_NORMALIZATION",function(){return tt.getBool("WEBGL_PACK")}),tt.registerFlag("WEBGL_PACK_CLIP",function(){return tt.getBool("WEBGL_PACK")}),tt.registerFlag("WEBGL_PACK_DEPTHWISECONV",function(){return!1}),tt.registerFlag("WEBGL_PACK_BINARY_OPERATIONS",function(){return tt.getBool("WEBGL_PACK")}),tt.registerFlag("WEBGL_PACK_UNARY_OPERATIONS",function(){return tt.getBool("WEBGL_PACK")}),tt.registerFlag("WEBGL_PACK_ARRAY_OPERATIONS",function(){return tt.getBool("WEBGL_PACK")}),tt.registerFlag("WEBGL_PACK_IMAGE_OPERATIONS",function(){return tt.getBool("WEBGL_PACK")}),tt.registerFlag("WEBGL_PACK_REDUCE",function(){return tt.getBool("WEBGL_PACK")}),tt.registerFlag("WEBGL_LAZILY_UNPACK",function(){return tt.getBool("WEBGL_PACK")}),tt.registerFlag("WEBGL_CONV_IM2COL",function(){return tt.getBool("WEBGL_PACK")}),tt.registerFlag("WEBGL_MAX_TEXTURE_SIZE",function(){return Du(tt.getNumber("WEBGL_VERSION"))}),tt.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER",function(){return Fu(tt.getNumber("WEBGL_VERSION"))}),tt.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION",function(){var r=tt.getNumber("WEBGL_VERSION");return r===0?0:Pu(r)}),tt.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE",function(){return tt.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0&&(r=navigator.userAgent||navigator.vendor||window.opera,!(/(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))));var r}),tt.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE",function(){return Nu(tt.getNumber("WEBGL_VERSION"))}),tt.registerFlag("WEBGL_RENDER_FLOAT32_ENABLED",function(){return!tt.getBool("WEBGL_FORCE_F16_TEXTURES")&&tt.getBool("WEBGL_RENDER_FLOAT32_CAPABLE")}),tt.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED",function(){return Ou(tt.getNumber("WEBGL_VERSION"))}),tt.registerFlag("WEBGL_FENCE_API_ENABLED",function(){return Mu(tt.getNumber("WEBGL_VERSION"))}),tt.registerFlag("WEBGL_SIZE_UPLOAD_UNIFORM",function(){return tt.getBool("WEBGL_RENDER_FLOAT32_ENABLED")?4:0}),hn=Lu;var kn=Q({complex_:function(r,t){var e=B(r,"real","complex"),n=B(t,"imag","complex");return Je(e.shape,n.shape,"real and imag shapes, "+e.shape+" and "+n.shape+", must match in call to tf.complex()."),L.runKernelFunc(function(o){return o.complex(e,n)},{$real:e,$imag:n})}}),Zn=Q({real_:function(r){var t=B(r,"input","real");return L.runKernelFunc(function(e){return e.real(t)},{$input:t})}}),fr=Q({imag_:function(r){var t=B(r,"input","imag");return L.runKernelFunc(function(e){return e.imag(t)},{$input:t})}});function Tn(r,t,e){return Or(r,t,lr(r,e),e)}function Or(r,t,e,n){if(n==null&&(n=je(r)),n==="complex64")throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).");if(!I(r)&&!Array.isArray(r)&&typeof r!="number"&&typeof r!="boolean"&&typeof r!="string")throw new Error("values passed to tensor(values) must be a number/boolean/string or an array of numbers/booleans/strings, or a TypedArray");if(t!=null){Ce(t);var o=Re(t),i=Re(e);R(o===i,function(){return"Based on the provided shape, ["+t+"], the tensor should have "+o+" values but has "+i});for(var a=0;a<e.length;++a){var s=e[a],u=a!==e.length-1||s!==Re(t.slice(a));R(e[a]===t[a]||!u,function(){return"Error creating a new Tensor. Inferred shape ("+e+") does not match the provided shape ("+t+"). "})}}return I(r)||Array.isArray(r)||(r=[r]),t=t||e,r=n!=="string"?en(r,n,J().getBool("DEBUG")):kt(r,[],!0),L.makeTensor(r,t,n)}function Te(r,t){if((I(r)&&t!=="string"||Array.isArray(r))&&t!=="complex64")throw new Error("Error creating a new Scalar: value must be a primitive (number|boolean|string)");if(t==="string"&&I(r)&&!(r instanceof Uint8Array))throw new Error("When making a scalar from encoded string, the value must be `Uint8Array`.");return Or(r,[],[],t)}function pn(r,t){Yt(r);var e=lr(r,t);if(e.length!==1)throw new Error("tensor1d() requires values to be a flat/TypedArray");return Or(r,null,e,t)}function Mr(r,t,e){if(Yt(r),t!=null&&t.length!==2)throw new Error("tensor2d() requires shape to have two numbers");var n=lr(r,e);if(n.length!==2&&n.length!==1)throw new Error("tensor2d() requires values to be number[][] or flat/TypedArray");if(n.length===1&&t==null)throw new Error("tensor2d() requires shape to be provided when `values` are a flat/TypedArray");return Or(r,t,n,e)}function ma(r,t,e){if(Yt(r),t!=null&&t.length!==3)throw new Error("tensor3d() requires shape to have three numbers");var n=lr(r,e);if(n.length!==3&&n.length!==1)throw new Error("tensor3d() requires values to be number[][][] or flat/TypedArray");if(n.length===1&&t==null)throw new Error("tensor3d() requires shape to be provided when `values` are a flat array");return Or(r,t,n,e)}function _n(r,t,e){if(Yt(r),t!=null&&t.length!==4)throw new Error("tensor4d() requires shape to have four numbers");var n=lr(r,e);if(n.length!==4&&n.length!==1)throw new Error("tensor4d() requires values to be number[][][][] or flat/TypedArray");if(n.length===1&&t==null)throw new Error("tensor4d() requires shape to be provided when `values` are a flat array");return Or(r,t,n,e)}function dh(r,t,e){if(Yt(r),t!=null&&t.length!==5)throw new Error("tensor5d() requires shape to have five numbers");var n=lr(r,e);if(n.length!==5&&n.length!==1)throw new Error("tensor5d() requires values to be number[][][][][] or flat/TypedArray");if(n.length===1&&t==null)throw new Error("tensor5d() requires shape to be provided when `values` are a flat array");return Or(r,t,n,e)}function ph(r,t,e){if(Yt(r),t!=null&&t.length!==6)throw new Error("tensor6d() requires shape to have six numbers");var n=lr(r,e);if(n.length!==6&&n.length!==1)throw new Error("tensor6d() requires values to be number[][][][][][] or flat/TypedArray");if(n.length===1&&t==null)throw new Error("tensor6d() requires shape to be provided when `values` are a flat array");return Or(r,t=t||n,n,e)}function vh(r,t,e,n){return t===void 0&&(t=!0),L.makeVariable(r,t,e,n)}function po(r,t){if(t===void 0&&(t="float32"),t==="complex64"){var e=po(r,"float32"),n=tn(r,"float32");return kn(e,n)}var o=H(Re(r),t);return L.makeTensor(o,r,t)}function tn(r,t){if(t===void 0&&(t="float32"),t==="complex64"){var e=tn(r,"float32"),n=tn(r,"float32");return kn(e,n)}var o=Z(Re(r),t);return L.makeTensor(o,r,t)}function hr(r,t,e){return L.runKernelFunc(function(n){return n.fill(r,t,e)},{})}function gh(r,t,e){if(e<=0)throw new Error("The number of values should be positive.");return L.runKernelFunc(function(n){return n.linspace(r,t,e)},{})}function xi(r,t,e,n){if(e===void 0&&(e=1),n===void 0&&(n="float32"),e===0)throw new Error("Cannot have a step of zero");if(r===t||r<t&&e<0||t<r&&e>1)return tn([0],n);var o=Z(Math.abs(Math.ceil((t-r)/e)),n);t<r&&e===1&&(e=-1),o[0]=r;for(var i=1;i<o.length;i++)o[i]=o[i-1]+e;return pn(o,n)}var zu=Q({onesLike_:function(r){var t=B(r,"x","onesLike");if(t.dtype==="complex64"){var e=zu(Zn(t)),n=Tt(fr(t));return kn(e,n)}return L.runKernelFunc(function(o){return o.onesLike(t)},{$x:t},function(o,i){return{$x:function(){return Tt(o)}}})}}),Tt=Q({zerosLike_:function(r){var t=B(r,"x","zerosLike");return L.runKernelFunc(function(e){return e.zerosLike(t)},{$x:t},function(e,n){return{$x:function(){return Tt(e)}}})}}),mn=Q({concat_:function(r,t){t===void 0&&(t=0),R(r.length>=1,function(){return"Pass at least one tensor to concat"});var e=Ho(r,"tensors","concat");e[0].dtype==="complex64"&&e.forEach(function(s){if(s.dtype!=="complex64")throw new Error(`Cannot concatenate complex64 tensors with a tensor
|
|
with dtype `+s.dtype+". ")}),t=ht(t,e[0].shape)[0];var n=Kr(e.map(function(s){return s.shape}),t);if(Re(n)===0)return Tn([],n);if((e=e.filter(function(s){return s.size>0})).length===1)return e[0];var o=e.map(function(s){return s.shape});_u(o,t);var i=e,a={axis:t};return L.runKernelFunc(function(s){return s.concat(e,t)},i,function(s){var u=o.map(function(c){return c[t]});return Aa(s,u,t).map(function(c){return function(){return c}})},"Concat",a)}}),mh=Q({concat1d_:function(r){return mn(r,0)}}),Ah=Q({concat2d_:function(r,t){return mn(r,t)}}),yh=Q({concat3d_:function(r,t){return mn(r,t)}}),xh=Q({concat4d_:function(r,t){return mn(r,t)}}),Aa=Q({split_:function(r,t,e){e===void 0&&(e=0);var n,o=B(r,"x","split");return e=ht(e,o.shape)[0],typeof t=="number"?(R(o.shape[e]%t==0,function(){return"Number of splits must evenly divide the axis."}),n=new Array(t).fill(o.shape[e]/t)):(R(o.shape[e]===t.reduce(function(i,a){return i+a}),function(){return"The sum of sizes must match the size of the axis dimension."}),n=t),L.runKernelFunc(function(i){return i.split(o,n,e)},{$x:o},function(i){return{$x:function(){return mn(i,e)}}})}});typeof globalThis!="undefined"||typeof window!="undefined"||typeof U.g!="undefined"&&U.g;function Zr(r,t){return r(t={exports:{}},t.exports),t.exports}var bh=Zr(function(r){(function(t,e,n){function o(s){var u,c=this,l=(u=4022871197,function(f){f=f.toString();for(var h=0;h<f.length;h++){var d=.02519603282416938*(u+=f.charCodeAt(h));d-=u=d>>>0,u=(d*=u)>>>0,u+=4294967296*(d-=u)}return 23283064365386963e-26*(u>>>0)});c.next=function(){var f=2091639*c.s0+23283064365386963e-26*c.c;return c.s0=c.s1,c.s1=c.s2,c.s2=f-(c.c=0|f)},c.c=1,c.s0=l(" "),c.s1=l(" "),c.s2=l(" "),c.s0-=l(s),c.s0<0&&(c.s0+=1),c.s1-=l(s),c.s1<0&&(c.s1+=1),c.s2-=l(s),c.s2<0&&(c.s2+=1),l=null}function i(s,u){return u.c=s.c,u.s0=s.s0,u.s1=s.s1,u.s2=s.s2,u}function a(s,u){var c=new o(s),l=u&&u.state,f=c.next;return f.int32=function(){return 4294967296*c.next()|0},f.double=function(){return f()+11102230246251565e-32*(2097152*f()|0)},f.quick=f,l&&(typeof l=="object"&&i(l,c),f.state=function(){return i(c,{})}),f}e&&e.exports?e.exports=a:n&&n.amd?n(function(){return a}):this.alea=a})(0,r,!1)}),wh=Zr(function(r){(function(t,e,n){function o(s){var u=this,c="";u.x=0,u.y=0,u.z=0,u.w=0,u.next=function(){var f=u.x^u.x<<11;return u.x=u.y,u.y=u.z,u.z=u.w,u.w^=u.w>>>19^f^f>>>8},s===(0|s)?u.x=s:c+=s;for(var l=0;l<c.length+64;l++)u.x^=0|c.charCodeAt(l),u.next()}function i(s,u){return u.x=s.x,u.y=s.y,u.z=s.z,u.w=s.w,u}function a(s,u){var c=new o(s),l=u&&u.state,f=function(){return(c.next()>>>0)/4294967296};return f.double=function(){do var h=((c.next()>>>11)+(c.next()>>>0)/4294967296)/2097152;while(h===0);return h},f.int32=c.next,f.quick=f,l&&(typeof l=="object"&&i(l,c),f.state=function(){return i(c,{})}),f}e&&e.exports?e.exports=a:n&&n.amd?n(function(){return a}):this.xor128=a})(0,r,!1)}),Eh=Zr(function(r){(function(t,e,n){function o(s){var u=this,c="";u.next=function(){var f=u.x^u.x>>>2;return u.x=u.y,u.y=u.z,u.z=u.w,u.w=u.v,(u.d=u.d+362437|0)+(u.v=u.v^u.v<<4^f^f<<1)|0},u.x=0,u.y=0,u.z=0,u.w=0,u.v=0,s===(0|s)?u.x=s:c+=s;for(var l=0;l<c.length+64;l++)u.x^=0|c.charCodeAt(l),l==c.length&&(u.d=u.x<<10^u.x>>>4),u.next()}function i(s,u){return u.x=s.x,u.y=s.y,u.z=s.z,u.w=s.w,u.v=s.v,u.d=s.d,u}function a(s,u){var c=new o(s),l=u&&u.state,f=function(){return(c.next()>>>0)/4294967296};return f.double=function(){do var h=((c.next()>>>11)+(c.next()>>>0)/4294967296)/2097152;while(h===0);return h},f.int32=c.next,f.quick=f,l&&(typeof l=="object"&&i(l,c),f.state=function(){return i(c,{})}),f}e&&e.exports?e.exports=a:n&&n.amd?n(function(){return a}):this.xorwow=a})(0,r,!1)}),Ch=Zr(function(r){(function(t,e,n){function o(s){var u=this;u.next=function(){var c,l,f=u.x,h=u.i;return c=f[h],l=(c^=c>>>7)^c<<24,l^=(c=f[h+1&7])^c>>>10,l^=(c=f[h+3&7])^c>>>3,l^=(c=f[h+4&7])^c<<7,c=f[h+7&7],l^=(c^=c<<13)^c<<9,f[h]=l,u.i=h+1&7,l},function(c,l){var f,h=[];if(l===(0|l))h[0]=l;else for(l=""+l,f=0;f<l.length;++f)h[7&f]=h[7&f]<<15^l.charCodeAt(f)+h[f+1&7]<<13;for(;h.length<8;)h.push(0);for(f=0;f<8&&h[f]===0;++f);for(f==8?h[7]=-1:h[f],c.x=h,c.i=0,f=256;f>0;--f)c.next()}(u,s)}function i(s,u){return u.x=s.x.slice(),u.i=s.i,u}function a(s,u){s==null&&(s=+new Date);var c=new o(s),l=u&&u.state,f=function(){return(c.next()>>>0)/4294967296};return f.double=function(){do var h=((c.next()>>>11)+(c.next()>>>0)/4294967296)/2097152;while(h===0);return h},f.int32=c.next,f.quick=f,l&&(l.x&&i(l,c),f.state=function(){return i(c,{})}),f}e&&e.exports?e.exports=a:n&&n.amd?n(function(){return a}):this.xorshift7=a})(0,r,!1)}),Ih=Zr(function(r){(function(t,e,n){function o(s){var u=this;u.next=function(){var c,l,f=u.w,h=u.X,d=u.i;return u.w=f=f+1640531527|0,l=h[d+34&127],c=h[d=d+1&127],l^=l<<13,c^=c<<17,l^=l>>>15,c^=c>>>12,l=h[d]=l^c,u.i=d,l+(f^f>>>16)|0},function(c,l){var f,h,d,p,v,g=[],A=128;for(l===(0|l)?(h=l,l=null):(l+="\0",h=0,A=Math.max(A,l.length)),d=0,p=-32;p<A;++p)l&&(h^=l.charCodeAt((p+32)%l.length)),p===0&&(v=h),h^=h<<10,h^=h>>>15,h^=h<<4,h^=h>>>13,p>=0&&(v=v+1640531527|0,d=(f=g[127&p]^=h+v)==0?d+1:0);for(d>=128&&(g[127&(l&&l.length||0)]=-1),d=127,p=512;p>0;--p)h=g[d+34&127],f=g[d=d+1&127],h^=h<<13,f^=f<<17,h^=h>>>15,f^=f>>>12,g[d]=h^f;c.w=v,c.X=g,c.i=d}(u,s)}function i(s,u){return u.i=s.i,u.w=s.w,u.X=s.X.slice(),u}function a(s,u){s==null&&(s=+new Date);var c=new o(s),l=u&&u.state,f=function(){return(c.next()>>>0)/4294967296};return f.double=function(){do var h=((c.next()>>>11)+(c.next()>>>0)/4294967296)/2097152;while(h===0);return h},f.int32=c.next,f.quick=f,l&&(l.X&&i(l,c),f.state=function(){return i(c,{})}),f}e&&e.exports?e.exports=a:n&&n.amd?n(function(){return a}):this.xor4096=a})(0,r,!1)}),Sh=Zr(function(r){(function(t,e,n){function o(s){var u=this,c="";u.next=function(){var f=u.b,h=u.c,d=u.d,p=u.a;return f=f<<25^f>>>7^h,h=h-d|0,d=d<<24^d>>>8^p,p=p-f|0,u.b=f=f<<20^f>>>12^h,u.c=h=h-d|0,u.d=d<<16^h>>>16^p,u.a=p-f|0},u.a=0,u.b=0,u.c=-1640531527,u.d=1367130551,s===Math.floor(s)?(u.a=s/4294967296|0,u.b=0|s):c+=s;for(var l=0;l<c.length+20;l++)u.b^=0|c.charCodeAt(l),u.next()}function i(s,u){return u.a=s.a,u.b=s.b,u.c=s.c,u.d=s.d,u}function a(s,u){var c=new o(s),l=u&&u.state,f=function(){return(c.next()>>>0)/4294967296};return f.double=function(){do var h=((c.next()>>>11)+(c.next()>>>0)/4294967296)/2097152;while(h===0);return h},f.int32=c.next,f.quick=f,l&&(typeof l=="object"&&i(l,c),f.state=function(){return i(c,{})}),f}e&&e.exports?e.exports=a:n&&n.amd?n(function(){return a}):this.tychei=a})(0,r,!1)}),qr=Zr(function(r){(function(t,e){var n,o=this,i=256,a=6,s="random",u=e.pow(i,a),c=e.pow(2,52),l=2*c,f=i-1;function h(A,w,E){var x=[],C=v(function O(F,P){var z,_=[],V=typeof F;if(P&&V=="object")for(z in F)try{_.push(O(F[z],P-1))}catch(G){}return _.length?_:V=="string"?F:F+"\0"}((w=w==1?{entropy:!0}:w||{}).entropy?[A,g(t)]:A==null?function(){try{var O;return n&&(O=n.randomBytes)?O=O(i):(O=new Uint8Array(i),(o.crypto||o.msCrypto).getRandomValues(O)),g(O)}catch(z){var F=o.navigator,P=F&&F.plugins;return[+new Date,o,P,o.screen,g(t)]}}():A,3),x),S=new d(x),N=function(){for(var O=S.g(a),F=u,P=0;O<c;)O=(O+P)*i,F*=i,P=S.g(1);for(;O>=l;)O/=2,F/=2,P>>>=1;return(O+P)/F};return N.int32=function(){return 0|S.g(4)},N.quick=function(){return S.g(4)/4294967296},N.double=N,v(g(S.S),t),(w.pass||E||function(O,F,P,z){return z&&(z.S&&p(z,S),O.state=function(){return p(S,{})}),P?(e[s]=O,F):O})(N,C,"global"in w?w.global:this==e,w.state)}function d(A){var w,E=A.length,x=this,C=0,S=x.i=x.j=0,N=x.S=[];for(E||(A=[E++]);C<i;)N[C]=C++;for(C=0;C<i;C++)N[C]=N[S=f&S+A[C%E]+(w=N[C])],N[S]=w;(x.g=function(O){for(var F,P=0,z=x.i,_=x.j,V=x.S;O--;)F=V[z=f&z+1],P=P*i+V[f&(V[z]=V[_=f&_+F])+(V[_]=F)];return x.i=z,x.j=_,P})(i)}function p(A,w){return w.i=A.i,w.j=A.j,w.S=A.S.slice(),w}function v(A,w){for(var E,x=A+"",C=0;C<x.length;)w[f&C]=f&(E^=19*w[f&C])+x.charCodeAt(C++);return g(w)}function g(A){return String.fromCharCode.apply(0,A)}if(e["seed"+s]=h,v(e.random(),t),r.exports){r.exports=h;try{n=U(64902)}catch(A){}}})([],Math)});qr.alea=bh,qr.xor128=wh,qr.xorwow=Eh,qr.xorshift7=Ch,qr.xor4096=Ih,qr.tychei=Sh;var bi=qr.alea,ya=function(){function r(t,e,n,o,i){this.mean=t,this.stdDev=e,this.dtype=n,this.nextVal=NaN,this.truncated=o,this.truncated&&(this.upper=this.mean+2*this.stdDev,this.lower=this.mean-2*this.stdDev);var a=i||Math.random();this.random=bi(a.toString())}return r.prototype.nextValue=function(){if(!isNaN(this.nextVal)){var t=this.nextVal;return this.nextVal=NaN,t}for(var e,n,o=!1;!o;){var i=void 0,a=void 0,s=void 0;do s=(i=2*this.random()-1)*i+(a=2*this.random()-1)*a;while(s>=1||s===0);var u=Math.sqrt(-2*Math.log(s)/s);e=this.mean+this.stdDev*i*u,n=this.mean+this.stdDev*a*u,this.truncated&&!this.isValidTruncated(e)||(o=!0)}return this.truncated&&!this.isValidTruncated(n)||(this.nextVal=this.convertValue(n)),this.convertValue(e)},r.prototype.convertValue=function(t){return this.dtype==null||this.dtype==="float32"?t:Math.round(t)},r.prototype.isValidTruncated=function(t){return t<=this.upper&&t>=this.lower},r}(),Rh=function(){function r(t,e,n,o){this.alpha=t,this.beta=1/e,this.dtype=n;var i=o||Math.random();this.randu=bi(i.toString()),this.randn=new ya(0,1,n,!1,this.randu()),this.d=t<1?t+2/3:t-1/3,this.c=1/Math.sqrt(9*this.d)}return r.prototype.nextValue=function(){for(var t,e,n,o,i,a;;){do o=this.randn.nextValue(),a=1+this.c*o;while(a<=0);if(a*=a*a,e=1-.331*(t=o*o)*t,n=.5*t+this.d*(1-a+Math.log(a)),(i=this.randu())<e||Math.log(i)<n)break}return a=1/this.beta*this.d*a,this.alpha<1&&(a*=Math.pow(this.randu(),1/this.alpha)),this.convertValue(a)},r.prototype.convertValue=function(t){return this.dtype==="float32"?t:Math.round(t)},r}(),Bh=function(){function r(t,e,n,o){var i=this;if(t===void 0&&(t=0),e===void 0&&(e=1),this.canReturnFloat=function(){return i.dtype==null||i.dtype==="float32"},this.min=t,this.range=e-t,this.dtype=n,o==null&&(o=Math.random()),typeof o=="number"&&(o=o.toString()),!this.canReturnFloat()&&this.range<=1)throw new Error("The difference between "+t+" - "+e+" <= 1 and dtype is not float");this.random=bi(o)}return r.prototype.convertValue=function(t){return this.canReturnFloat()?t:Math.round(t)},r.prototype.nextValue=function(){return this.convertValue(this.min+this.range*this.random())},r}();function it(r,t,e){return t===void 0&&(t="float32"),t=t||"float32",Ce(r),new wt(r,t,e)}function kh(r,t){t===void 0&&(t=!1),console.log(r.toString(t))}var Uu=Q({batchToSpaceND_:function(r,t,e){var n=B(r,"x","batchToSpaceND"),o=t.reduce(function(i,a){return i*a});return R(n.rank>=1+t.length,function(){return"input rank is "+n.rank+" but should be > than blockShape.length "+t.length}),R(e.length===t.length,function(){return"crops.length is "+e.length+" but should be equal to blockShape.length "+t.length}),R(n.shape[0]%o==0,function(){return"input tensor batch is "+n.shape[0]+" but is not divisible by the product of the elements of blockShape "+t.join(" * ")+" === "+o}),L.runKernelFunc(function(i){return i.batchToSpaceND(n,t,e)},{$x:n},function(i){return{$x:function(){return i.spaceToBatchND(t,e)}}})}}),Th=Q({broadcastTo_:function(r,t){var e=B(r,"broadcastTo","x"),n=e.shape;if(t.some(function(u){return!(u>0)||u%1!=0}))throw new Error("broadcastTo(): Invalid broadcast shape ["+t+"].");if(t.length<e.rank)throw new Error("broadcastTo(): shape.length="+t.length+" < input.rank="+e.rank+".");if(t.length>e.rank){for(var o=e.shape.slice();o.length<t.length;)o.unshift(1);e=e.reshape(o)}for(var i=Array.from(t),a=t.length-1;a>=0;a--)if(e.shape[a]===t[a])i[a]=1;else if(e.shape[a]!==1)throw new Error("broadcastTo(): ["+n+"] cannot be broadcast to ["+t+"].");var s=i.map(function(u,c){return u>1?c:-1}).filter(function(u){return u>=0});return s.length===0?e.clone():L.runKernelFunc(function(u){return u.tile(e,i)},{input:e},function(u){return{input:function(){return u.sum(s,!0)}}})}}),Dh=Q({cast_:function(r,t){var e=B(r,"x","cast");if(!k(t))throw new Error("Failed to cast to unknown dtype "+t);if(t==="string"&&e.dtype!=="string"||t!=="string"&&e.dtype==="string")throw new Error("Only strings can be casted to strings");var n={dtype:t};return L.runKernelFunc(function(o){return o.cast(e,t)},{x:e},function(o){return{x:function(){return o.clone()}}},"Cast",n)}}),Fh=Q({clone_:function(r){var t=B(r,"x","clone",null);return L.runKernelFunc(function(){return L.makeTensorFromDataId(t.dataId,t.shape,t.dtype)},{$x:t},function(e){return{$x:function(){return e.toFloat()}}})}}),Ph=Q({cumsum_:function(r,t,e,n){t===void 0&&(t=0),e===void 0&&(e=!1),n===void 0&&(n=!1);var o=B(r,"x","cumsum"),i=tr([t|=0],o.rank),a=o;i!=null&&(a=o.transpose(i));var s=nr(1,o.rank)[0],u=L.runKernelFunc(function(c){return c.cumsum(a,s,e,n)},{permutedX:a},function(c){return{permutedX:function(){return c.cumsum(t,e,!n)}}});return i!=null&&(u=u.transpose(i)),u}}),Nh=Q({depthToSpace_:function(r,t,e){e===void 0&&(e="NHWC");var n=B(r,"x","depthToSpace"),o=e==="NHWC"?n.shape[1]:n.shape[2],i=e==="NHWC"?n.shape[2]:n.shape[3],a=e==="NHWC"?n.shape[3]:n.shape[1];return R(o*t>=0,function(){return`Negative dimension size caused by overflow when multiplying
|
|
`+o+" and "+t+` for depthToSpace with input shape
|
|
`+n.shape}),R(i*t>=0,function(){return`Negative dimension size caused by overflow when multiplying
|
|
`+i+" and "+t+` for depthToSpace with input shape
|
|
`+n.shape}),R(a%(t*t)==0,function(){return"Dimension size must be evenly divisible by "+t*t+" but is "+a+" for depthToSpace with input shape "+n.shape}),L.runKernelFunc(function(s){return s.depthToSpace(n,t,e)},{$x:n})}}),qn=Q({expandDims_:function(r,t){t===void 0&&(t=0);var e=B(r,"x","expandDims",null);R(t<=e.rank,function(){return"Axis must be <= rank of the tensor"});var n=e.shape.slice();return t<0&&(R(-(e.rank+1)<=t,function(){return"Axis must be in the interval ["+-(e.rank+1)+", "+e.rank+"]"}),t=e.rank+t+1),n.splice(t,0,1),rr(e,n)}}),Hu=Q({eye_:function(r,t,e,n){n===void 0&&(n="float32"),t==null&&(t=r);for(var o=it([r,t],n),i=r<=t?r:t,a=0;a<i;++a)o.set(1,a,a);var s=o.toTensor().as2D(r,t);if(e==null)return s;if(e.length===1)return vo(qn(s,0),[e[0],1,1]);if(e.length===2)return vo(qn(qn(s,0),0),[e[0],e[1],1,1]);if(e.length===3)return vo(qn(qn(qn(s,0),0),0),[e[0],e[1],e[2],1,1]);throw new Error("eye() currently supports only 1D and 2D batchShapes, but received "+e.length+"D.")}}),Oh=Q({multinomial_:function(r,t,e,n){n===void 0&&(n=!1);var o=B(r,"logits","multinomial"),i=o.size,a=o.rank;if(i<2)throw new Error("Error in multinomial: you need at least 2 outcomes, but got "+i+".");if(a>2)throw new Error("Rank of probabilities must be 1 or 2, but is "+a);e=e||Math.random();var s=a===1?o.as2D(1,-1):o,u=L.runKernelFunc(function(c){return c.multinomial(s,n,t,e)},{logits2D:s});return a===1?u.as1D():u}}),xa=Q({oneHot_:function(r,t,e,n){if(e===void 0&&(e=1),n===void 0&&(n=0),t<2)throw new Error("Error in oneHot: depth must be >=2, but it is "+t);var o=B(r,"indices","oneHot","int32"),i=o.shape.concat([t]);return o=o.flatten(),L.runKernelFunc(function(a){return a.oneHot(o,t,e,n)},{$indices:o},function(a){return{$indices:function(){return tn(o.shape,"float32")}}}).reshape(i)}}),Yr=Q({pad_:function(r,t,e){e===void 0&&(e=0);var n=B(r,"x","pad");if(n.rank===0)throw new Error("pad(scalar) is not defined. Pass non-scalar to pad");var o={paddings:t,constantValue:e};return L.runKernelFunc(function(i){return i.pad(n,t,e)},{x:n},function(i){var a=t.map(function(s){return s[0]});return{x:function(){return i.slice(a,n.shape)}}},"PadV2",o)}}),Mh=Q({pad1d_:function(r,t,e){return e===void 0&&(e=0),R(t.length===2,function(){return"Invalid number of paddings. Must be length of 2."}),Yr(r,[t],e)}}),Lh=Q({pad2d_:function(r,t,e){return e===void 0&&(e=0),R(t.length===2&&t[0].length===2&&t[1].length===2,function(){return"Invalid number of paddings. Must be length of 2 each."}),Yr(r,t,e)}}),Wh=Q({pad3d_:function(r,t,e){return e===void 0&&(e=0),R(t.length===3&&t[0].length===2&&t[1].length===2&&t[2].length===2,function(){return"Invalid number of paddings. Must be length of 2 each."}),Yr(r,t,e)}}),Qh=Q({pad4d_:function(r,t,e){return e===void 0&&(e=0),R(t.length===4&&t[0].length===2&&t[1].length===2&&t[2].length===2&&t[3].length===2,function(){return"Invalid number of paddings. Must be length of 2 each."}),Yr(r,t,e)}}),_h=Q({rand_:function(r,t,e){var n=Re(r),o=null;if(e==null||e==="float32")o=new Float32Array(n);else if(e==="int32")o=new Int32Array(n);else{if(e!=="bool")throw new Error("Unknown data type "+e);o=new Uint8Array(n)}for(var i=0;i<n;i++)o[i]=t();return L.makeTensor(o,r,e)}}),zh=Q({randomNormal_:function(r,t,e,n,o){if(t===void 0&&(t=0),e===void 0&&(e=1),n!=null&&n==="bool")throw new Error("Unsupported data type "+n);for(var i=new ya(t,e,n,!1,o),a=it(r,n),s=0;s<a.values.length;s++)a.values[s]=i.nextValue();return a.toTensor()}}),Uh=Q({randomGamma_:function(r,t,e,n,o){if(e===void 0&&(e=1),n===void 0&&(n="float32"),e==null&&(e=1),n==null&&(n="float32"),n!=="float32"&&n!=="int32")throw new Error("Unsupported data type "+n);for(var i=new Rh(t,e,n,o),a=it(r,n),s=0;s<a.values.length;s++)a.values[s]=i.nextValue();return a.toTensor()}}),ju=Q({randomUniform_:function(r,t,e,n,o){t===void 0&&(t=0),e===void 0&&(e=1),n===void 0&&(n="float32");for(var i=it(r,n),a=new Bh(t,e,null,o),s=0;s<i.values.length;s++)i.values[s]=a.nextValue();return i.toTensor()}}),rr=Q({reshape_:function(r,t){var e=B(r,"x","reshape",null);t=Kt(t,e.size),R(e.size===Re(t),function(){return"new shape and old shape must have the same number of elements."});var n={shape:t};return L.runKernelFunc(function(o){return o.reshape(e,t)},{x:e},function(o){return{x:function(){return o.reshape(e.shape)}}},"Reshape",n)}}),Vu=Q({spaceToBatchND_:function(r,t,e){var n=B(r,"x","spaceToBatchND");return R(n.rank>=1+t.length,function(){return"input rank "+n.rank+" should be > than [blockShape] "+t.length}),R(e.length===t.length,function(){return"paddings.shape[0] "+e.length+" must be equal to [blockShape] "+t.length}),R(n.shape.reduce(function(o,i,a){return a>0&&a<=t.length?o&&(i+e[a-1][0]+e[a-1][1])%t[a-1]==0:o},!0),function(){return"input spatial dimensions "+n.shape.slice(1)+" with paddings "+e.toString()+" must be divisible by blockShapes "+t.toString()}),L.runKernelFunc(function(o){return o.spaceToBatchND(n,t,e)},{$x:n},function(o){return{$x:function(){return o.batchToSpaceND(t,e)}}})}}),Gu=Q({squeeze_:function(r,t){var e=B(r,"x","squeeze");return rr(e,Cn(e.shape,t).newShape)}}),jn=Q({stack_:function(r,t){t===void 0&&(t=0);var e=Ho(r,"tensors","stack");if(R(e.length>=1,function(){return"Pass at least one tensor to tf.stack"}),e.length===1)return e[0].expandDims(t);var n=e[0].rank,o=e[0].shape,i=e[0].dtype;R(t<=n,function(){return"Axis must be <= rank of the tensor"}),e.forEach(function(s){Je(o,s.shape,"All tensors passed to stack must have matching shapes")}),e.forEach(function(s){R(i===s.dtype,function(){return"All tensors passed to stack must have matching dtypes"})});var a=e.map(function(s){return s.expandDims(t)});return mn(a,t)}}),vo=Q({tile_:function(r,t){var e=B(r,"x","tile",null);R(e.rank===t.length,function(){return"Error in transpose: rank of input "+e.rank+" must match length of reps "+t+"."});var n=[e],o={reps:t};return L.runKernelFunc(function(i,a){var s=i.tile(e,t);return a([e]),s},{x:e},function(i,a){var s=a[0];return{x:function(){var u=Tt(s);if(s.rank===1)for(var c=0;c<t[0];++c)u=u.add(i.slice([c*s.shape[0]],[s.shape[0]]));else if(s.rank===2)for(c=0;c<t[0];++c)for(var l=0;l<t[1];++l)u=u.add(i.slice([c*s.shape[0],l*s.shape[1]],[s.shape[0],s.shape[1]]));else if(s.rank===3)for(c=0;c<t[0];++c)for(l=0;l<t[1];++l)for(var f=0;f<t[2];++f)u=u.add(i.slice([c*s.shape[0],l*s.shape[1],f*s.shape[2]],[s.shape[0],s.shape[1],s.shape[2]]));else{if(s.rank!==4)throw new Error("Gradient for tile operation is not implemented for rank-"+s.rank+" tensors yet.");for(c=0;c<t[0];++c)for(l=0;l<t[1];++l)for(f=0;f<t[2];++f)for(var h=0;h<t[3];++h)u=u.add(i.slice([c*s.shape[0],l*s.shape[1],f*s.shape[2],h*s.shape[3]],[s.shape[0],s.shape[1],s.shape[2],s.shape[3]]))}return u}}},"Tile",o,n)}}),Hh=Q({truncatedNormal_:function(r,t,e,n,o){if(t===void 0&&(t=0),e===void 0&&(e=1),n!=null&&n==="bool")throw new Error("Unsupported data type "+n);for(var i=new ya(t,e,n,!0,o),a=it(r,n),s=0;s<a.values.length;s++)a.values[s]=i.nextValue();return a.toTensor()}}),An=Q({unstack_:function(r,t){t===void 0&&(t=0),t=t||0;var e=B(r,"x","unstack");R(t>=-e.shape.length&&t<e.shape.length,function(){return"Axis = "+t+" is not in [-"+e.shape.length+", "+e.shape.length+")"}),t<0&&(t+=e.shape.length);var n={axis:t};return L.runKernelFunc(function(o){return o.unstack(e,t)},{x:e},function(o){return{x:function(){return jn(o,t)}}},"Unpack",n)}}),jh=function(r,t){return xe(this,void 0,void 0,function(){var e,n,o,i,a,s,u,c,l,f;return Ie(this,function(h){switch(h.label){case 0:return e=B(r,"x","setdiff1d"),n=B(t,"y","setdiff1d"),R(e.dtype===n.dtype,function(){return"x and y should have the same dtype, but got x ("+e.dtype+") and y ("+n.dtype+")."}),R(e.rank===1,function(){return"x should be 1D tensor, but got x ("+e.shape+")."}),R(n.rank===1,function(){return"y should be 1D tensor, but got y ("+n.shape+")."}),[4,e.data()];case 1:return o=h.sent(),[4,n.data()];case 2:for(i=h.sent(),a=new Set(i),s=0,l=0;l<o.length;l++)a.has(o[l])||s++;for(u=new wt([s],e.dtype),c=new wt([s],"int32"),l=0,f=0;l<o.length;l++)a.has(o[l])||(u.values[f]=o[l],c.values[f]=l,f++);return[2,[u.toTensor(),c.toTensor()]]}})})};function wi(r,t,e,n){n===void 0&&(n=!0);var o=[];if(n)(o=o.concat(t.slice(0))).push(r[0]/e),o=o.concat(r.slice(1));else{o=o.concat(r[0]);for(var i=t.length,a=0;a<i;++a)o=o.concat([r[a+1]/t[a],t[a]]);o=o.concat(r.slice(i+1))}return o}function Ei(r,t,e){e===void 0&&(e=!0);var n=[];if(e){n.push(t);for(var o=t+1;o<r;++o)o<=2*t?(n.push(o),n.push(o-(t+1))):n.push(o)}else{var i=[],a=[];for(o=1;o<r;++o)o>=2*t+1||o%2==1?a.push(o):i.push(o);n.push.apply(n,i),n.push(0),n.push.apply(n,a)}return n}function Ci(r,t,e,n){n===void 0&&(n=!0);var o=[];n?o.push(r[0]/e):o.push(r[0]*e);for(var i=1;i<r.length;++i)i<=t.length?n?o.push(t[i-1]*r[i]):o.push(r[i]/t[i-1]):o.push(r[i]);return o}function Xu(r,t){for(var e=[0],n=0;n<t;++n)e.push(r[n][0]);return e}function Ju(r,t,e){for(var n=r.slice(0,1),o=0;o<e;++o)n.push(r[o+1]-t[o][0]-t[o][1]);return n}function ba(r,t){if(r.rank<1)throw new Error("tf.gatherND() expects the input to be rank 1 or higher, but the rank was "+r.rank+".");if(t.rank<1)throw new Error("tf.gatherND() expects the indices to be rank 1 or higher, but the rank was "+t.rank+".");if(t.dtype!=="int32")throw new Error("tf.gatherND() expects the indices to be int32 type, but the dtype was "+t.dtype+".");if(t.shape[t.rank-1]>r.rank)throw new Error("index innermost dimension length must be <= tensor rank; saw: "+t.shape[t.rank-1]+" vs. "+r.rank);if(r.size===0)throw new Error("Requested more than 0 entries, but input is empty. Input shape: "+r.shape+".");for(var e=t.shape,n=e[e.length-1],o=1,i=0;i<e.length-1;++i)o*=e[i];var a=r.shape,s=e.slice();s.pop();var u=1;for(i=n;i<r.rank;++i)u*=a[i],s.push(a[i]);var c=jt(r.shape).map(function(l){return l/u}).concat([1]).slice(0,n);return[s,o,u,c]}var qA=Object.freeze({prepareAndValidate:ba}),wa=30;function Ii(r){return r<=wa?r:Ot(r,Math.floor(Math.sqrt(r)))}function Ku(r,t,e){var n=t.rank>1?t.shape[t.rank-1]:1,o=t.rank>1?t.rank-1:1,i="Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: "+e.shape+", indices.shape: "+t.shape+", shape: "+r+", sliceDim: "+n+", and batchDim: "+o+".";if(e.rank<o)throw new Error(i+" update.rank < "+o+". ");if(r.length<n+(e.rank-o))throw new Error(i+" Output shape length < "+(n+(e.rank-o)));if(e.rank!==o+r.length-n)throw new Error(i+" update.rank != "+(o+r.length-n));for(var a=0;a<o;++a)if(e.shape[a]!==t.shape[a])throw new Error(i+" updates.shape["+a+"] ("+e.shape[a]+") != indices.shape["+a+"] ("+t.shape[a]+").");for(a=0;a<e.rank-o;++a)if(e.shape[a+o]!==r[a+n])throw new Error(i+" updates.shape["+(a+o)+"] ("+e.shape[a+o]+") != shape["+(a+o)+"] ("+r[a+o]+")")}function Zu(r,t,e){if(t.rank<1)throw new Error("tf.scatterND() expects the indices to be rank 1 or higher, but the rank was "+t.rank+".");if(r.rank<1)throw new Error("tf.scatterND() expects the updates to be rank 1 or higher, but the rank was "+r.rank+".");if(t.dtype!=="int32")throw new Error("The dtype of 'indices' should be int32, but got dtype: "+t.dtype);if(e.length<1)throw new Error("Output rank must be greater or equal to 1, but got shape: "+e);if(e.length===0){if(t.size===0)throw new Error("Indices specified for empty output. indices shape: "+t.shape);if(r.size===0)throw new Error("Updates specified for empty output. updates shape: "+r.shape)}Ku(e,t,r)}function jo(r,t,e){for(var n=t.shape.length,o=n>1?t.shape[n-1]:1,i=e.length,a=1,s=o;s<i;++s)a*=e[s];var u=o<1?1:o;return{sliceRank:o,numUpdates:Re(t.shape)/u,sliceSize:a,strides:jt(e.slice(0,o)).concat([1]),outputSize:Re(e)}}var YA=Object.freeze({validateUpdateShape:Ku,validateInput:Zu,calculateShapes:jo});function qu(r,t,e){R(r.rank===t.length,function(){return"Error in slice"+r.rank+"D: Length of begin "+t+" must match the rank of the array ("+r.rank+")."}),R(r.rank===e.length,function(){return"Error in slice"+r.rank+"D: Length of size "+e+" must match the rank of the array ("+r.rank+")."});for(var n=function(i){R(t[i]+e[i]<=r.shape[i],function(){return"Error in slice"+r.rank+"D: begin["+i+"] + size["+i+"] ("+(t[i]+e[i])+") would overflow input.shape["+i+"] ("+r.shape[i]+")"})},o=0;o<r.rank;++o)n(o)}function Ea(r){for(var t=[],e=0;r>0;)1&r&&t.push(e),r/=2,e++;return t}function Si(r,t,e){for(var n=[],o=0;o<r.length;o++)n[o]=Math.ceil((t[o]-r[o])/e[o]);return n}function Yu(r,t,e,n,o){var i=t[o],a=e[o]||1;(r&1<<o||i==null)&&(i=a>0?Number.MIN_SAFE_INTEGER:Number.MAX_SAFE_INTEGER);var s=n[o];return i<0&&(i+=s),i=Oe(0,i,s-1)}function $u(r,t,e,n,o){var i=t[o],a=e[o]||1;(r&1<<o||i==null)&&(i=a>0?Number.MAX_SAFE_INTEGER:Number.MIN_SAFE_INTEGER);var s=n[o];return i<0&&(i+=s),i=a>0?Oe(0,i,s):Oe(-1,i,s-1)}function Ca(r,t,e){for(var n=e.length,o=0;o<e.length;o++)if(e[o]>1){n=o;break}for(o=n+1;o<e.length;o++)if(t[o]>0||e[o]!==r[o])return!1;return!0}function Ia(r,t){for(var e=r.length>0?r[r.length-1]:1,n=0;n<r.length-1;n++)e+=r[n]*t[n];return e}var $A=Object.freeze({assertParamsValid:qu,maskToAxes:Ea,computeOutShape:Si,startForAxis:Yu,stopForAxis:$u,isSliceContinous:Ca,computeFlatOffset:Ia});function e1(r){return R(qe(r),function(){return"The f passed in grad(f) must be a function"}),function(t,e){var n=B(t,"x","tf.grad",null),o=e!=null?B(e,"dy","tf.grad"):null;return L.tidy(function(){var i=L.gradients(function(){return r(n)},[n],o),a=i.value,s=i.grads;return o!=null&&Je(a.shape,o.shape,"The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)"),Bi(s),s[0]})}}function t1(r){return R(qe(r),function(){return"The f passed in grads(f) must be a function"}),function(t,e){R(Array.isArray(t),function(){return"The args passed in grads(f)(args) must be an array of `Tensor`s or `TensorLike`s"});var n=Ho(t,"args","tf.grads",null),o=e!=null?B(e,"dy","tf.grads"):null;return L.tidy(function(){var i=L.gradients(function(){return r.apply(void 0,n)},n,o),a=i.value,s=i.grads;return o!=null&&Je(a.shape,o.shape,"The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),Bi(s),s})}}function n1(r){return R(qe(r),function(){return"The f passed in valueAndGrad(f) must be a function"}),function(t,e){R(t instanceof at,function(){return"The x passed in valueAndGrad(f)(x) must be a tensor"}),R(e==null||e instanceof at,function(){return"The dy passed in valueAndGrad(f)(x, dy) must be a tensor"});var n=L.gradients(function(){return r(t)},[t],e),o=n.grads,i=n.value;return Bi(o),{grad:o[0],value:i}}}function r1(r){return R(qe(r),function(){return"The f passed in valueAndGrads(f) must be a function"}),function(t,e){R(Array.isArray(t)&&t.every(function(o){return o instanceof at}),function(){return"The args passed in valueAndGrads(f)(args) must be array of tensors"}),R(e==null||e instanceof at,function(){return"The dy passed in valueAndGrads(f)(args, dy) must be a tensor"});var n=L.gradients(function(){return r.apply(void 0,t)},t,e);return e!=null&&Je(n.value.shape,e.shape,"The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),Bi(n.grads),n}}function Vh(r,t){R(qe(r),function(){return"The f passed in variableGrads(f) must be a function"}),R(t==null||Array.isArray(t)&&t.every(function(l){return l instanceof ln}),function(){return"The varList passed in variableGrads(f, varList) must be an array of variables"});var e=t!=null;if(!e)for(var n in t=[],L.registeredVariables)t.push(L.registeredVariables[n]);var o=e?t.filter(function(l){return!l.trainable}):null,i=t.length;R((t=t.filter(function(l){return l.trainable})).length>0,function(){return"variableGrads() expects at least one of the input variables to be trainable, but none of the "+i+" variables is trainable."});var a=L.gradients(r,t,null,!0),s=a.value,u=a.grads;R(u.some(function(l){return l!=null}),function(){return"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()."}),R(s.rank===0,function(){return"The f passed in variableGrads(f) must return a scalar, but it returned a rank-"+s.rank+" tensor"});var c={};return t.forEach(function(l,f){u[f]!=null&&(c[l.name]=u[f])}),o!=null&&o.forEach(function(l){return c[l.name]=null}),{value:s,grads:c}}function Ri(r){return L.customGrad(r)}function Bi(r){if(r.filter(function(t){return 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.`)}var Cr=Q({softmax_:function(r,t){t===void 0&&(t=-1);var e=B(r,"logits","softmax","float32");if(t===-1&&(t=e.rank-1),t!==e.rank-1)throw Error("Softmax along a non-last dimension is not yet supported. Logits was rank "+e.rank+" and dim was "+t);return L.runKernelFunc(function(n,o){var i=n.softmax(e,t);return o([i]),i},{logits:e},function(n,o){var i=o[0],a=n.mul(i);return{logits:function(){return a.sub(a.sum([t],!0).mul(i))}}},"Softmax",{dim:t},[],[!0])}}),Gh=Q({logSoftmax_:function(r,t){t===void 0&&(t=-1);var e=B(r,"logits","logSoftmax");if(t===-1&&(t=e.rank-1),t!==e.rank-1)throw Error("Log Softmax along a non-last dimension is not yet supported. Logits was rank "+e.rank+" and axis was "+t);return Ri(function(n,o){var i=n.max(t,!0),a=n.sub(i),s=a.toFloat().sub(a.exp().sum(t,!0).log());return o([s]),{value:s,gradFunc:function(u,c){var l=c[0].exp();return u.sub(u.sum(t,!0).mul(l))}}})(e)}}),ec=function(){function r(t,e){this.backend=t,this.dataMover=e,this.data=new WeakMap,this.dataIdsCount=0}return r.prototype.get=function(t){return this.data.has(t)||this.dataMover.moveData(this.backend,t),this.data.get(t)},r.prototype.set=function(t,e){this.dataIdsCount++,this.data.set(t,e)},r.prototype.has=function(t){return this.data.has(t)},r.prototype.delete=function(t){return this.dataIdsCount--,this.data.delete(t)},r.prototype.numDataIds=function(){return this.dataIdsCount},r}(),tc=function(){function r(){}return r.prototype.time=function(t){return q("time")},r.prototype.read=function(t){return q("read")},r.prototype.readSync=function(t){return q("readSync")},r.prototype.numDataIds=function(){return q("numDataIds")},r.prototype.disposeData=function(t){return q("disposeData")},r.prototype.write=function(t,e,n){return q("write")},r.prototype.move=function(t,e,n,o){return q("move")},r.prototype.memory=function(){return q("memory")},r.prototype.floatPrecision=function(){return q("floatPrecision")},r.prototype.epsilon=function(){return this.floatPrecision()===32?1e-7:1e-4},r.prototype.batchMatMul=function(t,e,n,o){return q("batchMatMul")},r.prototype.fusedBatchMatMul=function(t){return t.a,t.b,t.transposeA,t.transposeB,t.bias,t.activation,t.preluActivationWeights,q("fusedBatchMatMul")},r.prototype.slice=function(t,e,n){return q("slice")},r.prototype.stridedSlice=function(t,e,n,o){return q("stridedSlice")},r.prototype.unstack=function(t,e){return q("unstack")},r.prototype.reverse=function(t,e){return q("reverse")},r.prototype.concat=function(t,e){return q("concat")},r.prototype.neg=function(t){return q("neg")},r.prototype.add=function(t,e){return q("add")},r.prototype.addN=function(t){return q("addN")},r.prototype.subtract=function(t,e){return q("subtract")},r.prototype.multiply=function(t,e){return q("multiply")},r.prototype.realDivide=function(t,e){return q("realDivide")},r.prototype.floorDiv=function(t,e){return q("floorDiv")},r.prototype.sum=function(t,e){return q("sum")},r.prototype.prod=function(t,e){return q("prod")},r.prototype.unsortedSegmentSum=function(t,e,n){return q("unsortedSegmentSum")},r.prototype.argMin=function(t,e){return q("argMin")},r.prototype.argMax=function(t,e){return q("argMax")},r.prototype.equal=function(t,e){return q("equal")},r.prototype.notEqual=function(t,e){return q("notEqual")},r.prototype.less=function(t,e){return q("less")},r.prototype.lessEqual=function(t,e){return q("lessEqual")},r.prototype.greater=function(t,e){return q("greater")},r.prototype.greaterEqual=function(t,e){return q("greaterEqual")},r.prototype.logicalNot=function(t){return q("logicalNot")},r.prototype.logicalAnd=function(t,e){return q("logicalAnd")},r.prototype.logicalOr=function(t,e){return q("logicalOr")},r.prototype.where=function(t){return q("where")},r.prototype.select=function(t,e,n){return q("select")},r.prototype.topk=function(t,e,n){return q("topk")},r.prototype.min=function(t,e){return q("min")},r.prototype.minimum=function(t,e){return q("minimum")},r.prototype.mod=function(t,e){return q("mod")},r.prototype.max=function(t,e){return q("max")},r.prototype.maximum=function(t,e){return q("maximum")},r.prototype.all=function(t,e){return q("all")},r.prototype.any=function(t,e){return q("any")},r.prototype.squaredDifference=function(t,e){return q("squaredDifference")},r.prototype.ceil=function(t){return q("ceil")},r.prototype.floor=function(t){return q("floor")},r.prototype.round=function(t){return q("round")},r.prototype.sign=function(t){return q("sign")},r.prototype.isNaN=function(t){return q("isNaN")},r.prototype.isInf=function(t){return q("isInf")},r.prototype.isFinite=function(t){return q("isFinite")},r.prototype.pow=function(t,e){return q("pow")},r.prototype.exp=function(t){return q("exp")},r.prototype.expm1=function(t){return q("expm1")},r.prototype.softmax=function(t,e){return q("softmax")},r.prototype.log=function(t){return q("log")},r.prototype.log1p=function(t){return q("log1p")},r.prototype.sqrt=function(t){return q("sqrt")},r.prototype.rsqrt=function(t){return q("rsqrt")},r.prototype.square=function(t){return q("square")},r.prototype.reciprocal=function(t){return q("reciprocal")},r.prototype.relu=function(t){return q("relu")},r.prototype.relu6=function(t){return q("relu6")},r.prototype.prelu=function(t,e){return q("prelu")},r.prototype.elu=function(t){return q("elu")},r.prototype.eluDer=function(t,e){return q("eluDer")},r.prototype.selu=function(t){return q("selu")},r.prototype.int=function(t){return q("int")},r.prototype.clip=function(t,e,n){return q("clip")},r.prototype.abs=function(t){return q("abs")},r.prototype.complexAbs=function(t){return q("complexAbs")},r.prototype.sigmoid=function(t){return q("sigmoid")},r.prototype.softplus=function(t){return q("softplus")},r.prototype.sin=function(t){return q("sin")},r.prototype.cos=function(t){return q("cos")},r.prototype.tan=function(t){return q("tan")},r.prototype.asin=function(t){return q("asin")},r.prototype.acos=function(t){return q("acos")},r.prototype.atan=function(t){return q("atan")},r.prototype.atan2=function(t,e){return q("atan2")},r.prototype.sinh=function(t){return q("sinh")},r.prototype.cosh=function(t){return q("cosh")},r.prototype.tanh=function(t){return q("tanh")},r.prototype.asinh=function(t){return q("asinh")},r.prototype.acosh=function(t){return q("acosh")},r.prototype.atanh=function(t){return q("atanh")},r.prototype.erf=function(t){return q("erf")},r.prototype.step=function(t,e){return q("step")},r.prototype.fusedConv2d=function(t){return t.input,t.filter,t.convInfo,t.bias,t.activation,t.preluActivationWeights,q("fusedConv2d")},r.prototype.conv2d=function(t,e,n){return q("conv2d")},r.prototype.conv2dDerInput=function(t,e,n){return q("conv2dDerInput")},r.prototype.conv2dDerFilter=function(t,e,n){return q("conv2dDerFilter")},r.prototype.fusedDepthwiseConv2D=function(t){return t.input,t.filter,t.convInfo,t.bias,t.activation,t.preluActivationWeights,q("fusedDepthwiseConv2D")},r.prototype.depthwiseConv2D=function(t,e,n){return q("depthwiseConv2D")},r.prototype.depthwiseConv2DDerInput=function(t,e,n){return q("depthwiseConv2DDerInput")},r.prototype.depthwiseConv2DDerFilter=function(t,e,n){return q("depthwiseConv2DDerFilter")},r.prototype.conv3d=function(t,e,n){return q("conv3d")},r.prototype.conv3dDerInput=function(t,e,n){return q("conv3dDerInput")},r.prototype.conv3dDerFilter=function(t,e,n){return q("conv3dDerFilter")},r.prototype.maxPool=function(t,e){return q("maxPool")},r.prototype.maxPoolBackprop=function(t,e,n,o){return q("maxPoolBackprop")},r.prototype.avgPool=function(t,e){return q("avgPool")},r.prototype.avgPoolBackprop=function(t,e,n){return q("avgPoolBackprop")},r.prototype.avgPool3d=function(t,e){return q("avgPool3d")},r.prototype.avgPool3dBackprop=function(t,e,n){return q("avgPool3dBackprop")},r.prototype.maxPool3d=function(t,e){return q("maxPool3d")},r.prototype.maxPool3dBackprop=function(t,e,n,o){return q("maxPool3dBackprop")},r.prototype.reshape=function(t,e){return q("reshape")},r.prototype.cast=function(t,e){return q("cast")},r.prototype.tile=function(t,e){return q("tile")},r.prototype.pad=function(t,e,n){return q("pad")},r.prototype.transpose=function(t,e){return q("transpose")},r.prototype.gather=function(t,e,n){return q("gather")},r.prototype.gatherND=function(t,e){return q("gatherND")},r.prototype.scatterND=function(t,e,n){return q("scatterND")},r.prototype.batchToSpaceND=function(t,e,n){return q("batchToSpaceND")},r.prototype.spaceToBatchND=function(t,e,n){return q("spaceToBatchND")},r.prototype.resizeBilinear=function(t,e,n,o){return q("resizeBilinear")},r.prototype.resizeBilinearBackprop=function(t,e,n){return q("resizeBilinearBackprop")},r.prototype.resizeNearestNeighbor=function(t,e,n,o){return q("resizeNearestNeighbor")},r.prototype.resizeNearestNeighborBackprop=function(t,e,n){return q("resizeNearestNeighborBackprop")},r.prototype.batchNormalization=function(t,e,n,o,i,a){return q("batchNormalization")},r.prototype.localResponseNormalization4D=function(t,e,n,o,i){return q("localResponseNormalization4D")},r.prototype.LRNGrad=function(t,e,n,o,i,a,s){return q("LRNGrad")},r.prototype.multinomial=function(t,e,n,o){return q("multinomial")},r.prototype.oneHot=function(t,e,n,o){return q("oneHot")},r.prototype.cumsum=function(t,e,n,o){return q("cumsum")},r.prototype.nonMaxSuppression=function(t,e,n,o,i){return q("nonMaxSuppression")},r.prototype.fft=function(t){return q("fft")},r.prototype.ifft=function(t){return q("ifft")},r.prototype.complex=function(t,e){return q("complex")},r.prototype.real=function(t){return q("real")},r.prototype.imag=function(t){return q("imag")},r.prototype.cropAndResize=function(t,e,n,o,i,a){return q("cropAndResize")},r.prototype.depthToSpace=function(t,e,n){return q("depthToSpace")},r.prototype.split=function(t,e,n){return q("split")},r.prototype.sparseToDense=function(t,e,n,o){return q("sparseToDense")},r.prototype.diag=function(t){return q("diag")},r.prototype.fill=function(t,e,n){return q("fill")},r.prototype.onesLike=function(t){return q("onesLike")},r.prototype.zerosLike=function(t){return q("zerosLike")},r.prototype.linspace=function(t,e,n){return q("linspace")},r.prototype.dispose=function(){return q("dispose")},r}();function q(r){throw new Error("'"+r+"' not yet implemented or not found in the registry. Did you forget to import the kernel?")}function Ir(r,t){for(var e=r.length,n=[],o=0;o<e;o++){var i=e-1-o,a=r[i]||1;(t[t.length-1-o]||1)>1&&a===1&&n.unshift(i)}return n}function vn(r,t){for(var e=[],n=0;n<t.length;n++){var o=r[r.length-n-1],i=t.length-n-1,a=t[i];(o==null||o===1&&a>1)&&e.unshift(i)}return e}function vt(r,t){for(var e=[],n=Math.max(r.length,t.length),o=0;o<n;o++){var i=r[r.length-o-1];i==null&&(i=1);var a=t[t.length-o-1];if(a==null&&(a=1),i===1)e.unshift(a);else if(a===1)e.unshift(i);else{if(i!==a)throw Error("Operands could not be broadcast together with shapes "+r+" and "+t+".");e.unshift(i)}}return e}function go(r,t,e,n,o,i,a){a===void 0&&(a="channelsLast");var s,u=ki(t),c=u[0],l=u[1];if(a==="channelsLast")s=[c,l,r[3],r[3]];else{if(a!=="channelsFirst")throw new Error("Unknown dataFormat "+a);s=[c,l,r[1],r[1]]}return Lr(r,s,e,n,o,i,!1,a)}function Vo(r,t,e,n,o,i,a){a===void 0&&(a="NDHWC");var s,u,c=Ra(t),l=c[0],f=c[1],h=c[2];if(a==="NDHWC")u="channelsLast",s=[l,f,h,r[4],r[4]];else{if(a!=="NCDHW")throw new Error("Unknown dataFormat "+a);u="channelsFirst",s=[l,f,h,r[1],r[1]]}return Go(r,s,e,n,o,!1,u,i)}function Lr(r,t,e,n,o,i,a,s){a===void 0&&(a=!1),s===void 0&&(s="channelsLast");var u=[-1,-1,-1,-1],c=u[0],l=u[1],f=u[2],h=u[3];if(s==="channelsLast")c=r[0],l=r[1],f=r[2],h=r[3];else{if(s!=="channelsFirst")throw new Error("Unknown dataFormat "+s);c=r[0],h=r[1],l=r[2],f=r[3]}var d,p=t[0],v=t[1],g=t[3],A=ki(e),w=A[0],E=A[1],x=ki(n),C=x[0],S=x[1],N=mo(p,C),O=mo(v,S),F=function(G,te,ce,se,ie,de,ve,ye){var Be,Pe,et;if(typeof G=="number"){Be={top:G,bottom:G,left:G,right:G,type:G===0?"VALID":"NUMBER"};var Ye=function(Rt,Jt,Wt,un,on){un==null&&(un=Sa(Rt,Jt,Wt));var an=Rt[0],yr=Rt[1],xr=Xo((an-Jt+2*un)/Wt+1,on);R(He(xr),function(){return"The output # of rows ("+xr+") must be an integer. Change the stride and/or zero pad parameters"});var Jn=Xo((yr-Jt+2*un)/Wt+1,on);return R(He(Jn),function(){return"The output # of columns ("+Jn+") must be an integer. Change the stride and/or zero pad parameters"}),[xr,Jn]}([te,ce],de,se,G,ye);Pe=Ye[0],et=Ye[1]}else if(G==="same"){Pe=Math.ceil(te/se),et=Math.ceil(ce/ie);var st=Math.max(0,(Pe-1)*se+de-te),yt=Math.max(0,(et-1)*ie+ve-ce),St=Math.floor(st/2),Dt=st-St,fn=Math.floor(yt/2);Be={top:St,bottom:Dt,left:fn,right:yt-fn,type:"SAME"}}else{if(G!=="valid")throw Error("Unknown padding parameter: "+G);Be={top:0,bottom:0,left:0,right:0,type:"VALID"},Pe=Math.ceil((te-de+1)/se),et=Math.ceil((ce-ve+1)/ie)}return{padInfo:Be,outHeight:Pe,outWidth:et}}(o,l,f,w,E,N,O,i),P=F.padInfo,z=F.outHeight,_=F.outWidth,V=a?g*h:g;return s==="channelsFirst"?d=[c,V,z,_]:s==="channelsLast"&&(d=[c,z,_,V]),{batchSize:c,dataFormat:s,inHeight:l,inWidth:f,inChannels:h,outHeight:z,outWidth:_,outChannels:V,padInfo:P,strideHeight:w,strideWidth:E,filterHeight:p,filterWidth:v,effectiveFilterHeight:N,effectiveFilterWidth:O,dilationHeight:C,dilationWidth:S,inShape:r,outShape:d,filterShape:t}}function Go(r,t,e,n,o,i,a,s){i===void 0&&(i=!1),a===void 0&&(a="channelsLast");var u=[-1,-1,-1,-1,-1],c=u[0],l=u[1],f=u[2],h=u[3],d=u[4];if(a==="channelsLast")c=r[0],l=r[1],f=r[2],h=r[3],d=r[4];else{if(a!=="channelsFirst")throw new Error("Unknown dataFormat "+a);c=r[0],d=r[1],l=r[2],f=r[3],h=r[4]}var p,v=t[0],g=t[1],A=t[2],w=t[4],E=Ra(e),x=E[0],C=E[1],S=E[2],N=Ra(n),O=N[0],F=N[1],P=N[2],z=mo(v,O),_=mo(g,F),V=mo(A,P),G=function(ve,ye,Be,Pe,et,Ye,st,yt,St,Dt,fn){var Rt,Jt,Wt,un;if(typeof ve=="number"){Rt={top:ve,bottom:ve,left:ve,right:ve,front:ve,back:ve,type:ve===0?"VALID":"NUMBER"};var on=function(Po,Nr,su,No,br,uu){br==null&&(br=Sa(Po,Nr,No));var DA=Po[0],FA=Po[1],PA=Po[2],cu=Xo((DA-Nr+2*br)/No+1,uu);R(He(cu),function(){return"The output # of depths ("+cu+") must be an integer. Change the stride and/or zero pad parameters"});var lu=Xo((FA-Nr+2*br)/No+1,uu);R(He(lu),function(){return"The output # of rows ("+lu+") must be an integer. Change the stride and/or zero pad parameters"});var fu=Xo((PA-Nr+2*br)/No+1,uu);return R(He(fu),function(){return"The output # of columns ("+fu+") must be an integer. Change the stride and/or zero pad parameters"}),[cu,lu,fu,su]}([ye,Be,Pe,1],yt,1,et,ve,fn);Jt=on[0],Wt=on[1],un=on[2]}else if(ve==="same"){Jt=Math.ceil(ye/et),Wt=Math.ceil(Be/Ye),un=Math.ceil(Pe/st);var an=(Jt-1)*et+yt-ye,yr=(Wt-1)*Ye+St-Be,xr=(un-1)*st+Dt-Pe,Jn=Math.floor(an/2),Fo=an-Jn,Fr=Math.floor(yr/2),Xr=yr-Fr,Pr=Math.floor(xr/2);Rt={top:Fr,bottom:Xr,left:Pr,right:xr-Pr,front:Jn,back:Fo,type:"SAME"}}else{if(ve!=="valid")throw Error("Unknown padding parameter: "+ve);Rt={top:0,bottom:0,left:0,right:0,front:0,back:0,type:"VALID"},Jt=Math.ceil((ye-yt+1)/et),Wt=Math.ceil((Be-St+1)/Ye),un=Math.ceil((Pe-Dt+1)/st)}return{padInfo:Rt,outDepth:Jt,outHeight:Wt,outWidth:un}}(o,l,f,h,x,C,S,z,_,V,s),te=G.padInfo,ce=G.outDepth,se=G.outHeight,ie=G.outWidth,de=i?w*d:w;return a==="channelsFirst"?p=[c,de,ce,se,ie]:a==="channelsLast"&&(p=[c,ce,se,ie,de]),{batchSize:c,dataFormat:a,inDepth:l,inHeight:f,inWidth:h,inChannels:d,outDepth:ce,outHeight:se,outWidth:ie,outChannels:de,padInfo:te,strideDepth:x,strideHeight:C,strideWidth:S,filterDepth:v,filterHeight:g,filterWidth:A,effectiveFilterDepth:z,effectiveFilterHeight:_,effectiveFilterWidth:V,dilationDepth:O,dilationHeight:F,dilationWidth:P,inShape:r,outShape:p,filterShape:t}}function Sa(r,t,e,n){n===void 0&&(n=1);var o=mo(t,n);return Math.floor((r[0]*(e-1)-e+o)/2)}function ki(r){return typeof r=="number"?[r,r,r]:r.length===2?[r[0],r[1],1]:r}function Ra(r){return typeof r=="number"?[r,r,r]:r}function mo(r,t){return t<=1?r:r+(r-1)*(t-1)}function Xo(r,t){if(!t)return r;switch(t){case"round":return Math.round(r);case"ceil":return Math.ceil(r);case"floor":return Math.floor(r);default:throw new Error("Unknown roundingMode "+t)}}function $r(r){var t=ki(r),e=t[0],n=t[1],o=t[2];return e===1&&n===1&&o===1}function Ln(r,t){return $r(r)||$r(t)}function Ti(r){if(r==="NHWC")return"channelsLast";if(r==="NCHW")return"channelsFirst";throw new Error("Unknown dataFormat "+r)}function Ba(r,t,e){if(t==="complex64"){if(r.dtype==="complex64")return r.clone();var n=tn(r.shape),o=r.toFloat(),i=e.complex(o,n);return n.dispose(),o.dispose(),i}if(!b(r.dtype,t))return L.makeTensorFromDataId(r.dataId,r.shape,t);if(r.dtype==="complex64"){var a=e.real(r);return i=a.cast(t),a.dispose(),i}if(t==="int32")return e.int(r);if(t==="bool"){var s=Te(0,r.dtype);return i=e.notEqual(r,s),s.dispose(),i}throw new Error("Error in Cast: failed to cast "+r.dtype+" to "+t)}function Di(r,t){return L.makeTensorFromDataId(r.dataId,t,r.dtype)}function ka(r,t,e){var n=(t-r)/(e-1),o=Z(e,"float32");o[0]=r;for(var i=1;i<o.length;i++)o[i]=o[i-1]+n;return pn(o,"float32")}var o1=Object.freeze({castTensor:Ba,reshapeTensor:Di,linspaceImpl:ka,upcastType:Mt,axesAreInnerMostDims:ga,combineLocations:Qu,computeOutAndReduceShapes:Bn,expandShapeToKeepDim:Mn,assertAxesAreInnerMostDims:Qn,getAxesPermutation:tr,getUndoAxesPermutation:yi,getInnerMostAxes:nr,getBroadcastDims:Ir,getReductionAxes:vn,assertAndGetBroadcastShape:vt,assertParamsConsistent:_u,computeOutShape:Kr,computePool2DInfo:go,computePool3DInfo:Vo,computeConv2DInfo:Lr,computeConv3DInfo:Go,computeDefaultPad:Sa,tupleValuesAreOne:$r,eitherStridesOrDilationsAreOne:Ln,convertConv2DDataFormat:Ti,PARALLELIZE_THRESHOLD:wa,computeOptimalWindowSize:Ii});function Ta(r,t){if(r.length!==t.length)throw new Error("Cannot merge real and imag arrays of different lengths. real:"+r.length+", imag: "+t.length+".");for(var e=new Float32Array(2*r.length),n=0;n<e.length;n+=2)e[n]=r[n/2],e[n+1]=t[n/2];return e}function nc(r,t){return{real:r[2*t],imag:r[2*t+1]}}function Xh(r,t,e,n){r[2*n]=t,r[2*n+1]=e}function Jh(r,t,e){var n=(e?2:-2)*Math.PI*(r/t);return{real:Math.cos(n),imag:Math.sin(n)}}function Kh(r,t,e){var n=function(i,a,s){return function(u,c,l){for(var f=0,h=u.length,d=0,p=!1;f<h;){var v=l(c,u[d=f+(h-f>>>1)]);v>0?f=d+1:(h=d,p=!v)}return p?f:-f-1}(i,a,s||Zh)}(r,t,e),o=n<0?-(n+1):n;r.splice(o,0,t)}function Zh(r,t){return r>t?1:r<t?-1:0}function Da(r,t,e,n,o){return rc(r,t,e,n,o,0).selectedIndices}function Fa(r,t,e,n,o,i){var a=rc(r,t,e,n,o,i,!0);return a.numValidOutputs.dispose(),{selectedIndices:a.selectedIndices,selectedScores:a.selectedScores}}function rc(r,t,e,n,o,i,a,s){a===void 0&&(a=!1),s===void 0&&(s=!1);for(var u=Array.from(t).map(function(x,C){return{score:x,boxIndex:C,suppressBeginIndex:0}}).filter(function(x){return x.score>o}).sort(oc),c=i>0?-.5/i:0,l=[],f=[];l.length<e&&u.length>0;){var h=u.pop(),d=h.score,p=h.boxIndex,v=h.suppressBeginIndex;if(d<o)break;for(var g=!1,A=l.length-1;A>=v;--A){var w=qh(r,p,l[A]);if(w>=n){g=!0;break}if(h.score=h.score*Yh(n,c,w),h.score<=o)break}h.suppressBeginIndex=l.length,g||(h.score===d?(l.push(p),f.push(h.score)):h.score>o&&Kh(u,h,oc))}var E=l.length;return s&&(l.fill(0,E),f.fill(0,E)),{selectedIndices:pn(l,"int32"),selectedScores:pn(f,"float32"),numValidOutputs:Te(E,"int32")}}function qh(r,t,e){var n=r.subarray(4*t,4*t+4),o=r.subarray(4*e,4*e+4),i=Math.min(n[0],n[2]),a=Math.min(n[1],n[3]),s=Math.max(n[0],n[2]),u=Math.max(n[1],n[3]),c=Math.min(o[0],o[2]),l=Math.min(o[1],o[3]),f=Math.max(o[0],o[2]),h=Math.max(o[1],o[3]),d=(s-i)*(u-a),p=(f-c)*(h-l);if(d<=0||p<=0)return 0;var v=Math.max(i,c),g=Math.max(a,l),A=Math.min(s,f),w=Math.min(u,h),E=Math.max(A-v,0)*Math.max(w-g,0);return E/(d+p-E)}function Yh(r,t,e){var n=Math.exp(t*e*e);return e<=r?n:0}function oc(r,t){return r.score-t.score||r.score===t.score&&t.boxIndex-r.boxIndex}function ic(r,t,e){var n=new Array(r.rank).fill(0),o=r.shape.slice();return t.map(function(i){o[e]=i;var a=r.slice(n,o);return n[e]+=i,a})}function ac(r,t){for(var e=new Array(r.rank),n=0;n<e.length;n++)e[n]=r.shape[n]*t[n];var o=it(e,r.dtype);for(n=0;n<o.values.length;++n){for(var i=o.indexToLoc(n),a=new Array(r.rank),s=0;s<a.length;s++)a[s]=i[s]%r.shape[s];var u=r.locToIndex(a);o.values[n]=r.values[u]}return o.toTensor()}function sc(r,t,e,n,o){for(var i=t[t.length-1],a=[r.length/i,i],s=a[0],u=a[1],c=T(e,s*n),l=T("int32",s*n),f=0;f<s;f++){for(var h=f*u,d=r.subarray(h,h+u),p=[],v=0;v<d.length;v++)p.push({value:d[v],index:v});p.sort(function(x,C){return C.value-x.value});var g=f*n,A=c.subarray(g,g+n),w=l.subarray(g,g+n);for(v=0;v<n;v++)A[v]=p[v].value,w[v]=p[v].index}var E=t.slice();return E[E.length-1]=n,[Tn(c,E,e),Tn(l,E,"int32")]}function Pa(r,t){for(var e=[],n=0;n<t.length;n++)t[n]&&e.push(n);var o=it(r,"int32"),i=it([e.length,r.length],"int32");for(n=0;n<e.length;n++){var a=o.indexToLoc(e[n]),s=n*r.length;i.values.set(a,s)}return i.toTensor()}var $h=function(r,t){this.outputShape=[],this.outputShape=r,this.variableNames=t.map(function(o,i){return"T"+i});var e=[];this.variableNames.forEach(function(o){e.push("float v"+o+" = get"+o+"AtOutCoords();")});var n=this.variableNames.map(function(o){return"v"+o}).join(" + ");this.userCode=`
|
|
void main() {
|
|
`+e.join(`
|
|
`)+`
|
|
|
|
float result = `+n+`;
|
|
setOutput(result);
|
|
}
|
|
`},ed=function(r,t){this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=r,this.variableNames=t.map(function(o,i){return"T"+i});var e=[];this.variableNames.forEach(function(o){e.push("vec4 v"+o+" = get"+o+"AtOutCoords();")});var n=this.variableNames.map(function(o){return"v"+o}).join(" + ");this.userCode=`
|
|
void main() {
|
|
`+e.join(`
|
|
`)+`
|
|
|
|
vec4 result = `+n+`;
|
|
setOutput(result);
|
|
}
|
|
`},td=function(r,t,e){this.variableNames=["A"];var n=r.windowSize,o=r.batchSize,i=r.inSize,a=Math.ceil(i/n);e||this.variableNames.push("bestIndicesA"),this.outputShape=[o,a];var s=t==="max"?">":"<",u=e?"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 * `+n+`;
|
|
|
|
int bestIndex = inOffset;
|
|
float bestValue = getA(batch, bestIndex);
|
|
|
|
for (int i = 0; i < `+n+`; i++) {
|
|
int inIdx = `+u+`;
|
|
float candidate = getA(batch, inIdx);
|
|
if (candidate `+s+` bestValue) {
|
|
bestValue = candidate;
|
|
bestIndex = inIdx;
|
|
}
|
|
}
|
|
setOutput(float(bestIndex));
|
|
}
|
|
`};function uc(r,t){return["x","y","z","w","u","v"].slice(0,t).map(function(e){return r+"."+e})}function zn(r,t){return t===1?[r]:uc(r,t)}function Dn(){var r,t,e,n,o,i,a,s,u,c;return J().getNumber("WEBGL_VERSION")===2?(r="#version 300 es",t="in",e="out",n="in",o="texture",i="outputColor",a="out vec4 outputColor;",s=`
|
|
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)
|
|
`,u="",c=`
|
|
#define round(value) newRound(value)
|
|
int newRound(float value) {
|
|
return int(floor(value + 0.5));
|
|
}
|
|
|
|
ivec4 newRound(vec4 value) {
|
|
return ivec4(floor(value + vec4(0.5)));
|
|
}
|
|
`):(r="",t="attribute",e="varying",n="varying",o="texture2D",i="gl_FragColor",a="",s=`
|
|
#define isnan(value) isnan_custom(value)
|
|
bool isnan_custom(float val) {
|
|
return (val > 0. || val < 1. || val == 0.) ? false : true;
|
|
}
|
|
bvec4 isnan_custom(vec4 val) {
|
|
return bvec4(isnan(val.x), isnan(val.y), isnan(val.z), isnan(val.w));
|
|
}
|
|
`,u=`
|
|
uniform float INFINITY;
|
|
|
|
bool isinf(float val) {
|
|
return abs(val) == INFINITY;
|
|
}
|
|
bvec4 isinf(vec4 val) {
|
|
return equal(abs(val), vec4(INFINITY));
|
|
}
|
|
`,c=`
|
|
int round(float value) {
|
|
return int(floor(value + 0.5));
|
|
}
|
|
|
|
ivec4 round(vec4 value) {
|
|
return ivec4(floor(value + vec4(0.5)));
|
|
}
|
|
`),{version:r,attribute:t,varyingVs:e,varyingFs:n,texture2D:o,output:i,defineOutput:a,defineSpecialNaN:s,defineSpecialInf:u,defineRound:c}}function eo(r,t,e){e===void 0&&(e="index");var n=jt(t);return n.map(function(o,i){return"int "+r[i]+" = "+e+" / "+o+"; "+(i===n.length-1?"int "+r[i+1]+" = "+e+" - "+r[i]+" * "+o:"index -= "+r[i]+" * "+o)+";"}).join("")}function Na(r){var t=jt(r).map(function(e){return e.toString()});return`
|
|
int getFlatIndex(ivec3 coords) {
|
|
return coords.x * `+t[0]+" + coords.y * "+t[1]+` + coords.z;
|
|
}
|
|
`}var cc=`
|
|
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;
|
|
}
|
|
`;function nd(r,t,e,n){var o=[];r.forEach(function(d){var p=Re(d.shapeInfo.logicalShape);d.shapeInfo.isUniform?o.push("uniform float "+d.name+(p>1?"["+p+"]":"")+";"):(o.push("uniform sampler2D "+d.name+";"),o.push("uniform int offset"+d.name+";"))});var i,a,s=o.join(`
|
|
`),u=r.map(function(d){return function(p,v,g){g===void 0&&(g=!1);var A="";A+=g?lc(p):Ao(p);var w=p.shapeInfo.logicalShape,E=v.logicalShape;return w.length<=E.length&&(A+=g?function(x,C){var S,N=x.name,O=N.charAt(0).toUpperCase()+N.slice(1),F="get"+O+"AtOutCoords",P=x.shapeInfo.logicalShape.length,z=C.logicalShape.length,_=Ir(x.shapeInfo.logicalShape,C.logicalShape),V=$t(z),G=z-P,te=["x","y","z","w","u","v"];S=P===0?"":z<2&&_.length>=1?"coords = 0;":_.map(function(Be){return"coords."+te[Be+G]+" = 0;"}).join(`
|
|
`);var ce="";ce=z<2&&P>0?"coords":x.shapeInfo.logicalShape.map(function(Be,Pe){return"coords."+te[Pe+G]}).join(", ");var se="return outputValue;",ie=Re(x.shapeInfo.logicalShape)===1,de=Re(C.logicalShape)===1;if(P!==1||ie||de){if(ie&&!de)se=z===1?`
|
|
return vec4(outputValue.x, outputValue.x, 0., 0.);
|
|
`:`
|
|
return vec4(outputValue.x);
|
|
`;else if(_.length){var ve=P-2,ye=P-1;_.indexOf(ve)>-1&&_.indexOf(ye)>-1?se="return vec4(outputValue.x);":_.indexOf(ve)>-1?se="return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);":_.indexOf(ye)>-1&&(se="return vec4(outputValue.xx, outputValue.zz);")}}else se=`
|
|
return vec4(outputValue.xy, outputValue.xy);
|
|
`;return`
|
|
vec4 `+F+`() {
|
|
`+V+` coords = getOutputCoords();
|
|
`+S+`
|
|
vec4 outputValue = get`+O+"("+ce+`);
|
|
`+se+`
|
|
}
|
|
`}(p,v):function(x,C){var S=x.name,N=S.charAt(0).toUpperCase()+S.slice(1),O="get"+N+"AtOutCoords",F=C.texShape,P=x.shapeInfo.texShape,z=x.shapeInfo.logicalShape.length,_=C.logicalShape.length;if(!x.shapeInfo.isUniform&&z===_&&x.shapeInfo.flatOffset==null&&Ke(P,F))return`
|
|
float `+O+`() {
|
|
return sampleTexture(`+S+`, resultUV);
|
|
}
|
|
`;var V,G=$t(_),te=Ir(x.shapeInfo.logicalShape,C.logicalShape),ce=_-z,se=["x","y","z","w","u","v"];V=z===0?"":_<2&&te.length>=1?"coords = 0;":te.map(function(de){return"coords."+se[de+ce]+" = 0;"}).join(`
|
|
`);var ie="";return ie=_<2&&z>0?"coords":x.shapeInfo.logicalShape.map(function(de,ve){return"coords."+se[ve+ce]}).join(", "),`
|
|
float `+O+`() {
|
|
`+G+` coords = getOutputCoords();
|
|
`+V+`
|
|
return get`+N+"("+ie+`);
|
|
}
|
|
`}(p,v)),A}(d,t,n)}).join(`
|
|
`),c=t.texShape,l=Dn(),f=function(d){return`
|
|
float sampleTexture(sampler2D textureSampler, vec2 uv) {
|
|
return `+d.texture2D+`(textureSampler, uv).r;
|
|
}
|
|
`}(l),h=function(d){return d.version+`
|
|
precision highp float;
|
|
precision highp int;
|
|
precision highp sampler2D;
|
|
`+d.varyingFs+` vec2 resultUV;
|
|
`+d.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;
|
|
`+d.defineSpecialNaN+`
|
|
`+d.defineSpecialInf+`
|
|
`+d.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);
|
|
}
|
|
|
|
`+rd+`
|
|
`+od+`
|
|
`+id+`
|
|
`}(l);return t.isPacked?(i=function(d,p){switch(d.length){case 0:return`
|
|
int getOutputCoords() {
|
|
return 0;
|
|
}
|
|
`;case 1:return function(x,C){var S=[Math.ceil(C[0]/2),Math.ceil(C[1]/2)];return S[0]===1?`
|
|
int getOutputCoords() {
|
|
return 2 * int(resultUV.x * `+S[1]+`.0);
|
|
}
|
|
`:S[1]===1?`
|
|
int getOutputCoords() {
|
|
return 2 * int(resultUV.y * `+S[0]+`.0);
|
|
}
|
|
`:`
|
|
int getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(`+S[0]+", "+S[1]+`));
|
|
return 2 * (resTexRC.x * `+S[1]+` + resTexRC.y);
|
|
}
|
|
`}(0,p);case 2:return function(x,C){var S=[Math.ceil(C[0]/2),Math.ceil(C[1]/2)];if(Ke(x,C))return`
|
|
ivec2 getOutputCoords() {
|
|
return 2 * ivec2(resultUV.yx * vec2(`+S[0]+", "+S[1]+`));
|
|
}
|
|
`;var N=Math.ceil(x[1]/2);return`
|
|
ivec2 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(`+S[0]+", "+S[1]+`));
|
|
|
|
int index = resTexRC.x * `+S[1]+` + resTexRC.y;
|
|
int r = 2 * (index / `+N+`);
|
|
int c = imod(index, `+N+`) * 2;
|
|
|
|
return ivec2(r, c);
|
|
}
|
|
`}(d,p);case 3:return v=d,g=p,A=[Math.ceil(g[0]/2),Math.ceil(g[1]/2)],w=Math.ceil(v[2]/2),E=w*Math.ceil(v[1]/2),`
|
|
ivec3 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(`+A[0]+", "+A[1]+`));
|
|
int index = resTexRC.x * `+A[1]+` + resTexRC.y;
|
|
|
|
int b = index / `+E+`;
|
|
index -= b * `+E+`;
|
|
|
|
int r = 2 * (index / `+w+`);
|
|
int c = imod(index, `+w+`) * 2;
|
|
|
|
return ivec3(b, r, c);
|
|
}
|
|
`;default:return function(x,C){for(var S=[Math.ceil(C[0]/2),Math.ceil(C[1]/2)],N=Math.ceil(x[x.length-1]/2),O=N*Math.ceil(x[x.length-2]/2),F=O,P="",z="b, r, c",_=2;_<x.length-1;_++)F*=x[x.length-_-1],P=`
|
|
int b`+_+" = index / "+F+`;
|
|
index -= b`+_+" * "+F+`;
|
|
`+P,z="b"+_+", "+z;return`
|
|
ivec`+x.length+` getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(`+S[0]+", "+S[1]+`));
|
|
int index = resTexRC.x * `+S[1]+` + resTexRC.y;
|
|
|
|
`+P+`
|
|
|
|
int b = index / `+O+`;
|
|
index -= b * `+O+`;
|
|
|
|
int r = 2 * (index / `+N+`);
|
|
int c = imod(index, `+N+`) * 2;
|
|
|
|
return ivec`+x.length+"("+z+`);
|
|
}
|
|
`}(d,p)}var v,g,A,w,E}(t.logicalShape,c),a=function(d){return`
|
|
void setOutput(vec4 val) {
|
|
`+d.output+` = val;
|
|
}
|
|
`}(l)):(i=function(d,p){switch(d.length){case 0:return`
|
|
int getOutputCoords() {
|
|
return 0;
|
|
}
|
|
`;case 1:return function(A,w){return w[0]===1?`
|
|
int getOutputCoords() {
|
|
return int(resultUV.x * `+w[1]+`.0);
|
|
}
|
|
`:w[1]===1?`
|
|
int getOutputCoords() {
|
|
return int(resultUV.y * `+w[0]+`.0);
|
|
}
|
|
`:`
|
|
int getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(`+w[0]+", "+w[1]+`));
|
|
return resTexRC.x * `+w[1]+` + resTexRC.y;
|
|
}
|
|
`}(0,p);case 2:return function(A,w){return Ke(A,w)?`
|
|
ivec2 getOutputCoords() {
|
|
return ivec2(resultUV.yx * vec2(`+w[0]+", "+w[1]+`));
|
|
}
|
|
`:A[1]===1?`
|
|
ivec2 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(`+w[0]+", "+w[1]+`));
|
|
int index = resTexRC.x * `+w[1]+` + resTexRC.y;
|
|
return ivec2(index, 0);
|
|
}
|
|
`:A[0]===1?`
|
|
ivec2 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(`+w[0]+", "+w[1]+`));
|
|
int index = resTexRC.x * `+w[1]+` + resTexRC.y;
|
|
return ivec2(0, index);
|
|
}
|
|
`:`
|
|
ivec2 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(`+w[0]+", "+w[1]+`));
|
|
int index = resTexRC.x * `+w[1]+` + resTexRC.y;
|
|
int r = index / `+A[1]+`;
|
|
int c = index - r * `+A[1]+`;
|
|
return ivec2(r, c);
|
|
}
|
|
`}(d,p);case 3:return v=p,g=eo(["r","c","d"],d),`
|
|
ivec3 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(`+v[0]+", "+v[1]+`));
|
|
int index = resTexRC.x * `+v[1]+` + resTexRC.y;
|
|
`+g+`
|
|
return ivec3(r, c, d);
|
|
}
|
|
`;case 4:return function(A,w){var E=eo(["r","c","d","d2"],A);return`
|
|
ivec4 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(`+w[0]+", "+w[1]+`));
|
|
int index = resTexRC.x * `+w[1]+` + resTexRC.y;
|
|
`+E+`
|
|
return ivec4(r, c, d, d2);
|
|
}
|
|
`}(d,p);case 5:return function(A,w){var E=eo(["r","c","d","d2","d3"],A);return`
|
|
ivec5 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx * vec2(`+w[0]+`,
|
|
`+w[1]+`));
|
|
|
|
int index = resTexRC.x * `+w[1]+` + resTexRC.y;
|
|
|
|
`+E+`
|
|
|
|
ivec5 outShape = ivec5(r, c, d, d2, d3);
|
|
return outShape;
|
|
}
|
|
`}(d,p);case 6:return function(A,w){var E=eo(["r","c","d","d2","d3","d4"],A);return`
|
|
ivec6 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(`+w[0]+", "+w[1]+`));
|
|
int index = resTexRC.x * `+w[1]+` + resTexRC.y;
|
|
|
|
`+E+`
|
|
|
|
ivec6 result = ivec6(r, c, d, d2, d3, d4);
|
|
return result;
|
|
}
|
|
`}(d,p);default:throw new Error(d.length+"-D output sampling is not yet supported")}var v,g}(t.logicalShape,c),a=function(d){return`
|
|
void setOutput(float val) {
|
|
`+d.output+` = vec4(val, 0, 0, 0);
|
|
}
|
|
`}(l)),n&&(h+=ad),[h,f,a,s,i,u,e].join(`
|
|
`)}function Ao(r){var t=r.shapeInfo.logicalShape;switch(t.length){case 0:return function(e){var n=e.name,o="get"+n.charAt(0).toUpperCase()+n.slice(1);if(e.shapeInfo.isUniform)return"float "+o+"() {return "+n+";}";var i=e.shapeInfo.texShape,a=i[0],s=i[1];if(a===1&&s===1)return`
|
|
float `+o+`() {
|
|
return sampleTexture(`+n+`, halfCR);
|
|
}
|
|
`;var u=e.shapeInfo.texShape,c=u[0],l=u[1],f=to(n);return`
|
|
float `+o+`() {
|
|
vec2 uv = uvFromFlat(`+c+", "+l+", "+f+`);
|
|
return sampleTexture(`+n+`, uv);
|
|
}
|
|
`}(r);case 1:return function(e){var n=e.name,o="get"+n.charAt(0).toUpperCase()+n.slice(1);if(e.shapeInfo.isUniform)return`
|
|
float `+o+`(int index) {
|
|
`+yo(e)+`
|
|
}
|
|
`;var i=e.shapeInfo.texShape,a=i[0],s=i[1];if(s===1&&a===1)return`
|
|
float `+o+`(int index) {
|
|
return sampleTexture(`+n+`, halfCR);
|
|
}
|
|
`;var u=to(n);return s===1?`
|
|
float `+o+`(int index) {
|
|
vec2 uv = vec2(0.5, (float(index + `+u+") + 0.5) / "+a+`.0);
|
|
return sampleTexture(`+n+`, uv);
|
|
}
|
|
`:a===1?`
|
|
float `+o+`(int index) {
|
|
vec2 uv = vec2((float(index + `+u+") + 0.5) / "+s+`.0, 0.5);
|
|
return sampleTexture(`+n+`, uv);
|
|
}
|
|
`:`
|
|
float `+o+`(int index) {
|
|
vec2 uv = uvFromFlat(`+a+", "+s+", index + "+u+`);
|
|
return sampleTexture(`+n+`, uv);
|
|
}
|
|
`}(r);case 2:return function(e){var n=e.shapeInfo.logicalShape,o=e.name,i="get"+o.charAt(0).toUpperCase()+o.slice(1),a=e.shapeInfo.texShape;if(a!=null&&Ke(n,a)){var s=a[0],u=a[1];return`
|
|
float `+i+`(int row, int col) {
|
|
vec2 uv = (vec2(col, row) + halfCR) / vec2(`+u+".0, "+s+`.0);
|
|
return sampleTexture(`+o+`, uv);
|
|
}
|
|
`}var c=Cn(n),l=c.newShape,f=c.keptDims,h=l;if(h.length<n.length){var d=xo(e,h);return`
|
|
`+Ao(d)+`
|
|
float `+i+`(int row, int col) {
|
|
return `+i+"("+bo(["row","col"],f)+`);
|
|
}
|
|
`}if(e.shapeInfo.isUniform)return`
|
|
float `+i+`(int row, int col) {
|
|
int index = round(dot(vec2(row, col), vec2(`+n[1]+`, 1)));
|
|
`+yo(e)+`
|
|
}
|
|
`;var p=a[0],v=a[1],g=to(o);return v===1?`
|
|
float `+i+`(int row, int col) {
|
|
float index = dot(vec3(row, col, `+g+"), vec3("+n[1]+`, 1, 1));
|
|
vec2 uv = vec2(0.5, (index + 0.5) / `+p+`.0);
|
|
return sampleTexture(`+o+`, uv);
|
|
}
|
|
`:p===1?`
|
|
float `+i+`(int row, int col) {
|
|
float index = dot(vec3(row, col, `+g+"), vec3("+n[1]+`, 1, 1));
|
|
vec2 uv = vec2((index + 0.5) / `+v+`.0, 0.5);
|
|
return sampleTexture(`+o+`, uv);
|
|
}
|
|
`:`
|
|
float `+i+`(int row, int col) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
int index = row * `+n[1]+" + col + "+g+`;
|
|
vec2 uv = uvFromFlat(`+p+", "+v+`, index);
|
|
return sampleTexture(`+o+`, uv);
|
|
}
|
|
`}(r);case 3:return function(e){var n=e.shapeInfo.logicalShape,o=e.name,i="get"+o.charAt(0).toUpperCase()+o.slice(1),a=n[1]*n[2],s=n[2],u=Cn(n),c=u.newShape,l=u.keptDims,f=c;if(f.length<n.length){var h=xo(e,f);return`
|
|
`+Ao(h)+`
|
|
float `+i+`(int row, int col, int depth) {
|
|
return `+i+"("+bo(["row","col","depth"],l)+`);
|
|
}
|
|
`}if(e.shapeInfo.isUniform)return`
|
|
float `+i+`(int row, int col, int depth) {
|
|
int index = round(dot(vec3(row, col, depth),
|
|
vec3(`+a+", "+s+`, 1)));
|
|
`+yo(e)+`
|
|
}
|
|
`;var d=e.shapeInfo.texShape,p=d[0],v=d[1],g=e.shapeInfo.flatOffset;if(v===a&&g==null)return`
|
|
float `+i+`(int row, int col, int depth) {
|
|
float texR = float(row);
|
|
float texC = dot(vec2(col, depth), vec2(`+s+`, 1));
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(`+v+".0, "+p+`.0);
|
|
return sampleTexture(`+o+`, uv);
|
|
}
|
|
`;if(v===s&&g==null)return`
|
|
float `+i+`(int row, int col, int depth) {
|
|
float texR = dot(vec2(row, col), vec2(`+n[1]+`, 1));
|
|
float texC = float(depth);
|
|
vec2 uv = (vec2(texC, texR) + halfCR) / vec2(`+v+".0, "+p+`.0);
|
|
return sampleTexture(`+o+`, uv);
|
|
}
|
|
`;var A=to(o);return`
|
|
float `+i+`(int row, int col, int depth) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
int index = row * `+a+" + col * "+s+" + depth + "+A+`;
|
|
vec2 uv = uvFromFlat(`+p+", "+v+`, index);
|
|
return sampleTexture(`+o+`, uv);
|
|
}
|
|
`}(r);case 4:return function(e){var n=e.shapeInfo.logicalShape,o=e.name,i="get"+o.charAt(0).toUpperCase()+o.slice(1),a=n[3],s=n[2]*a,u=n[1]*s,c=Cn(n),l=c.newShape,f=c.keptDims;if(l.length<n.length){var h=xo(e,l);return`
|
|
`+Ao(h)+`
|
|
float `+i+`(int row, int col, int depth, int depth2) {
|
|
return `+i+"("+bo(["row","col","depth","depth2"],f)+`);
|
|
}
|
|
`}if(e.shapeInfo.isUniform)return`
|
|
float `+i+`(int row, int col, int depth, int depth2) {
|
|
int index = round(dot(vec4(row, col, depth, depth2),
|
|
vec4(`+u+", "+s+", "+a+`, 1)));
|
|
`+yo(e)+`
|
|
}
|
|
`;var d=e.shapeInfo.flatOffset,p=e.shapeInfo.texShape,v=p[0],g=p[1];if(g===u&&d==null)return`
|
|
float `+i+`(int row, int col, int depth, int depth2) {
|
|
float texR = float(row);
|
|
float texC =
|
|
dot(vec3(col, depth, depth2),
|
|
vec3(`+s+", "+a+`, 1));
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(`+g+".0, "+v+`.0);
|
|
return sampleTexture(`+o+`, uv);
|
|
}
|
|
`;if(g===a&&d==null)return`
|
|
float `+i+`(int row, int col, int depth, int depth2) {
|
|
float texR = dot(vec3(row, col, depth),
|
|
vec3(`+n[1]*n[2]+", "+n[2]+`, 1));
|
|
float texC = float(depth2);
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(`+g+".0, "+v+`.0);
|
|
return sampleTexture(`+o+`, uv);
|
|
}
|
|
`;var A=to(o);return`
|
|
float `+i+`(int row, int col, int depth, int depth2) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
int index = row * `+u+" + col * "+s+` +
|
|
depth * `+a+` + depth2;
|
|
vec2 uv = uvFromFlat(`+v+", "+g+", index + "+A+`);
|
|
return sampleTexture(`+o+`, uv);
|
|
}
|
|
`}(r);case 5:return function(e){var n=e.shapeInfo.logicalShape,o=e.name,i="get"+o.charAt(0).toUpperCase()+o.slice(1),a=n[4],s=n[3]*a,u=n[2]*s,c=n[1]*u,l=Cn(n),f=l.newShape,h=l.keptDims;if(f.length<n.length){var d=xo(e,f);return`
|
|
`+Ao(d)+`
|
|
float `+i+`(int row, int col, int depth, int depth2, int depth3) {
|
|
return `+i+"("+bo(["row","col","depth","depth2","depth3"],h)+`);
|
|
}
|
|
`}if(e.shapeInfo.isUniform)return`
|
|
float `+i+`(int row, int col, int depth, int depth2, int depth3) {
|
|
float index = dot(
|
|
vec4(row, col, depth, depth2),
|
|
vec4(`+c+", "+u+", "+s+", "+a+`)) +
|
|
depth3;
|
|
`+yo(e)+`
|
|
}
|
|
`;var p=e.shapeInfo.flatOffset,v=e.shapeInfo.texShape,g=v[0],A=v[1];if(A===c&&p==null)return`
|
|
float `+i+`(int row, int col, int depth, int depth2, int depth3) {
|
|
int texR = row;
|
|
float texC = dot(vec4(col, depth, depth2, depth3),
|
|
vec4(`+u+", "+s+", "+a+`, 1));
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(`+A+".0, "+g+`.0);
|
|
return sampleTexture(`+o+`, uv);
|
|
}
|
|
`;if(A===a&&p==null)return`
|
|
float `+i+`(int row, int col, int depth, int depth2, int depth3) {
|
|
float texR = dot(
|
|
vec4(row, col, depth, depth2),
|
|
vec4(`+n[1]*n[2]*n[3]+`,
|
|
`+n[2]*n[3]+", "+n[3]+`, 1));
|
|
int texC = depth3;
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(`+A+".0, "+g+`.0);
|
|
return sampleTexture(`+o+`, uv);
|
|
}
|
|
`;var w=to(o);return`
|
|
float `+i+`(int row, int col, int depth, int depth2, int depth3) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
int index = row * `+c+" + col * "+u+" + depth * "+s+` +
|
|
depth2 * `+a+" + depth3 + "+w+`;
|
|
vec2 uv = uvFromFlat(`+g+", "+A+`, index);
|
|
return sampleTexture(`+o+`, uv);
|
|
}
|
|
`}(r);case 6:return function(e){var n=e.shapeInfo.logicalShape,o=e.name,i="get"+o.charAt(0).toUpperCase()+o.slice(1),a=Cn(n),s=a.newShape,u=a.keptDims;if(s.length<n.length){var c=xo(e,s);return`
|
|
`+Ao(c)+`
|
|
float `+i+`(int row, int col, int depth,
|
|
int depth2, int depth3, int depth4) {
|
|
return `+i+"("+bo(["row","col","depth","depth2","depth3","depth4"],u)+`);
|
|
}
|
|
`}var l=n[5],f=n[4]*l,h=n[3]*f,d=n[2]*h,p=n[1]*d;if(e.shapeInfo.isUniform)return`
|
|
float `+i+`(int row, int col, int depth,
|
|
int depth2, int depth3, int depth4) {
|
|
int index = round(dot(
|
|
vec4(row, col, depth, depth2),
|
|
vec4(`+p+", "+d+", "+h+", "+f+`)) +
|
|
dot(
|
|
vec2(depth3, depth4),
|
|
vec2(`+l+`, 1)));
|
|
`+yo(e)+`
|
|
}
|
|
`;var v=e.shapeInfo.flatOffset,g=e.shapeInfo.texShape,A=g[0],w=g[1];if(w===p&&v==null)return`
|
|
float `+i+`(int row, int col, int depth,
|
|
int depth2, int depth3, int depth4) {
|
|
int texR = row;
|
|
float texC = dot(vec4(col, depth, depth2, depth3),
|
|
vec4(`+d+", "+h+", "+f+", "+l+`)) +
|
|
float(depth4);
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(`+w+".0, "+A+`.0);
|
|
return sampleTexture(`+o+`, uv);
|
|
}
|
|
`;if(w===l&&v==null)return`
|
|
float `+i+`(int row, int col, int depth,
|
|
int depth2, int depth3, int depth4) {
|
|
float texR = dot(vec4(row, col, depth, depth2),
|
|
vec4(`+n[1]*n[2]*n[3]*n[4]+`,
|
|
`+n[2]*n[3]*n[4]+`,
|
|
`+n[3]*n[4]+`,
|
|
`+n[4]+`)) + float(depth3);
|
|
int texC = depth4;
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(`+w+".0, "+A+`.0);
|
|
return sampleTexture(`+o+`, uv);
|
|
}
|
|
`;var E=to(o);return`
|
|
float `+i+`(int row, int col, int depth,
|
|
int depth2, int depth3, int depth4) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
int index = row * `+p+" + col * "+d+" + depth * "+h+` +
|
|
depth2 * `+f+" + depth3 * "+l+" + depth4 + "+E+`;
|
|
vec2 uv = uvFromFlat(`+A+", "+w+`, index);
|
|
return sampleTexture(`+o+`, uv);
|
|
}
|
|
`}(r);default:throw new Error(t.length+"-D input sampling is not yet supported")}}function lc(r){var t,e,n;switch(r.shapeInfo.logicalShape.length){case 0:return t=r.name,e="get"+t.charAt(0).toUpperCase()+t.slice(1),n=Dn(),`
|
|
vec4 `+e+`() {
|
|
return `+n.texture2D+"("+t+`, halfCR);
|
|
}
|
|
`;case 1:return function(o){var i=o.name,a="get"+i.charAt(0).toUpperCase()+i.slice(1),s=o.shapeInfo.texShape,u=[Math.ceil(s[0]/2),Math.ceil(s[1]/2)],c=Dn();return`
|
|
vec4 `+a+`(int index) {
|
|
vec2 uv = packedUVfrom1D(
|
|
`+u[0]+", "+u[1]+`, index);
|
|
return `+c.texture2D+"("+i+`, uv);
|
|
}
|
|
`}(r);case 2:return function(o){var i=o.shapeInfo.logicalShape,a=o.name,s="get"+a.charAt(0).toUpperCase()+a.slice(1),u=o.shapeInfo.texShape,c=u[0],l=u[1],f=Dn();if(u!=null&&Ke(i,u))return`
|
|
vec4 `+s+`(int row, int col) {
|
|
vec2 uv = (vec2(col, row) + halfCR) / vec2(`+l+".0, "+c+`.0);
|
|
|
|
return `+f.texture2D+"("+a+`, uv);
|
|
}
|
|
`;var h=[Math.ceil(u[0]/2),Math.ceil(u[1]/2)],d=Math.ceil(i[1]/2);return`
|
|
vec4 `+s+`(int row, int col) {
|
|
vec2 uv = packedUVfrom2D(`+d+", "+h[0]+", "+h[1]+`, row, col);
|
|
return `+f.texture2D+"("+a+`, uv);
|
|
}
|
|
`}(r);case 3:return function(o){var i=o.shapeInfo.logicalShape,a=o.name,s="get"+a.charAt(0).toUpperCase()+a.slice(1),u=o.shapeInfo.texShape,c=[Math.ceil(u[0]/2),Math.ceil(u[1]/2)];if(i[0]===1){var l=i.slice(1),f=xo(o,l);return`
|
|
`+lc(f)+`
|
|
vec4 `+s+`(int b, int row, int col) {
|
|
return `+s+"("+bo(["b","row","col"],[1,2])+`);
|
|
}
|
|
`}var h=c[0],d=c[1],p=Math.ceil(i[2]/2),v=p*Math.ceil(i[1]/2),g=Dn();return`
|
|
vec4 `+s+`(int b, int row, int col) {
|
|
vec2 uv = packedUVfrom3D(
|
|
`+h+", "+d+", "+v+", "+p+`, b, row, col);
|
|
return `+g.texture2D+"("+a+`, uv);
|
|
}
|
|
`}(r);default:return function(o){for(var i=o.shapeInfo.logicalShape,a=i.length,s=o.name,u="get"+s.charAt(0).toUpperCase()+s.slice(1),c=o.shapeInfo.texShape,l=[Math.ceil(c[0]/2),Math.ceil(c[1]/2)],f=l[0],h=l[1],d=Math.ceil(i[a-1]/2),p=d*Math.ceil(i[a-2]/2),v="int b, int row, int col",g="b * "+p+" + (row / 2) * "+d+" + (col / 2)",A=2;A<a-1;A++)v="int b"+A+", "+v,p*=i[a-A-1],g="b"+A+" * "+p+" + "+g;var w=Dn();return`
|
|
vec4 `+u+"("+v+`) {
|
|
int index = `+g+`;
|
|
int texR = index / `+h+`;
|
|
int texC = index - texR * `+h+`;
|
|
vec2 uv = (vec2(texC, texR) + halfCR) / vec2(`+h+", "+f+`);
|
|
return `+w.texture2D+"("+s+`, uv);
|
|
}
|
|
`}(r)}}var rd=`
|
|
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);
|
|
}
|
|
`,od=`
|
|
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);
|
|
}
|
|
`,id=`
|
|
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);
|
|
}
|
|
`,ad=`
|
|
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 to(r){return"offset"+r}function yo(r){var t=r.name,e=Re(r.shapeInfo.logicalShape);return e<2?"return "+t+";":`
|
|
for (int i = 0; i < `+e+`; i++) {
|
|
if (i == index) {
|
|
return `+t+`[i];
|
|
}
|
|
}
|
|
`}function $t(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 xo(r,t){var e=JSON.parse(JSON.stringify(r));return e.shapeInfo.logicalShape=t,e}function bo(r,t){return t.map(function(e){return r[e]}).join(", ")}var sd=function(r,t,e,n){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,R(r.length>2,function(){return"Packed arg"+(e.charAt(0).toUpperCase()+e.slice(1))+" supports only inputs with rank above 2."});var o=r[r.length-1],i=Math.ceil(o/t);this.outputShape=r.slice(0,-1),i>1&&this.outputShape.push(i),n||this.variableNames.push("bestIndicesA");var a,s,u=this.outputShape,c=u.length,l=$t(c),f=zn("coords",c);if(i===1){var h=$t(s=c+1);a=`
|
|
`+h+" sourceLocR = "+h+"("+f.join()+`, 0);
|
|
++`+f[c-1]+`;
|
|
`+h+" sourceLocG = "+h+"("+f.join()+`, 0);
|
|
++`+f[c-2]+`;
|
|
`+h+" sourceLocA = "+h+"("+f.join()+`, 0);
|
|
--`+f[c-1]+`;
|
|
`+h+" sourceLocB = "+h+"("+f.join()+`, 0);
|
|
--`+f[c-2]+";"}else s=c,a=`
|
|
`+l+` sourceLocR = coords;
|
|
++`+f[c-1]+`;
|
|
`+l+` sourceLocG = coords;
|
|
++`+f[c-2]+`;
|
|
`+l+` sourceLocA = coords;
|
|
--`+f[c-1]+`;
|
|
`+l+` sourceLocB = coords;
|
|
--`+f[c-2]+";";var d=["x","y","z","w","u","v"].slice(0,s),p="."+d[s-1],v=d.map(function(O){return"int "+O}),g=zn("sourceLocR",s-1).concat("inIdx.r"),A=zn("sourceLocG",s-1).concat("inIdx.g"),w=zn("sourceLocB",s-1).concat("inIdx.b"),E=zn("sourceLocA",s-1).concat("inIdx.a"),x=e==="max"?"greaterThan":"lessThan",C=n?"":`
|
|
inIdx = round(vec4(getBestIndicesAChannel(`+g.join()+`),
|
|
getBestIndicesAChannel(`+A.join()+`),
|
|
getBestIndicesAChannel(`+w.join()+`),
|
|
getBestIndicesAChannel(`+E.join()+")));",S=`vec4(
|
|
getAChannel(`+g.join()+`),
|
|
hasNextCol ? getAChannel(`+A.join()+`) : 0.,
|
|
hasNextRow ? getAChannel(`+w.join()+`) : 0.,
|
|
hasNextRow && hasNextCol ? getAChannel(`+E.join()+") : 0.)",N=n?"":`
|
|
float getBestIndicesAChannel(`+v.join()+`) {
|
|
return getChannel(getBestIndicesA(`+d.join()+`),
|
|
vec2(`+d.slice(-2).join()+`));
|
|
}`;this.userCode=`
|
|
float getAChannel(`+v.join()+`) {
|
|
return getChannel(getA(`+d.join()+`),
|
|
vec2(`+d.slice(-2).join()+`));
|
|
}
|
|
`+N+`
|
|
void main() {
|
|
`+l+` coords = getOutputCoords();
|
|
bool hasNextCol = `+f[c-1]+" < "+(u[c-1]-1)+`;
|
|
bool hasNextRow = `+f[c-2]+" < "+(u[c-2]-1)+`;
|
|
`+a+`
|
|
ivec4 srcIdx = ivec4(sourceLocR`+p+", sourceLocG"+p+`,
|
|
sourceLocB`+p+", sourceLocA"+p+") * "+t+`;
|
|
ivec4 inIdx = srcIdx;
|
|
vec4 bestIndex = vec4(inIdx);
|
|
vec4 bestValue = `+S+`;
|
|
|
|
for (int i = 0; i < `+t+`; i++) {
|
|
inIdx = srcIdx;
|
|
`+C+`
|
|
vec4 candidate = `+S+`;
|
|
bvec4 nan = isnan(candidate);
|
|
bvec4 replace = bvec4(
|
|
vec4(`+x+`(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);
|
|
}
|
|
`},ud=function(r){this.variableNames=["dy"],this.outputShape=r.inShape;var t=r.filterHeight,e=r.filterWidth,n=r.strideHeight,o=r.strideWidth,i=r.dilationHeight,a=r.dilationWidth,s=r.effectiveFilterHeight,u=r.effectiveFilterWidth,c=s-1-r.padInfo.top,l=u-1-r.padInfo.left,f=1/(t*e);this.userCode=`
|
|
const ivec2 pads = ivec2(`+c+", "+l+`);
|
|
const float avgMultiplier = float(`+f+`);
|
|
|
|
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 += `+i+`) {
|
|
float dyR = float(dyRCorner + wR) / `+n+`.0;
|
|
|
|
if (dyR < 0.0 || dyR >= `+r.outHeight+`.0 || fract(dyR) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyR = int(dyR);
|
|
|
|
for (int wC = 0; wC < `+u+`;
|
|
wC+= `+a+`) {
|
|
float dyC = float(dyCCorner + wC) / `+o+`.0;
|
|
|
|
if (dyC < 0.0 || dyC >= `+r.outWidth+`.0 ||
|
|
fract(dyC) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyC = int(dyC);
|
|
|
|
float dyValue = getDy(b, idyR, idyC, d);
|
|
|
|
dotProd += dyValue * avgMultiplier;
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`},cd=function(r){this.variableNames=["dy"],this.outputShape=r.inShape;var t=r.filterDepth,e=r.filterHeight,n=r.filterWidth,o=r.strideDepth,i=r.strideHeight,a=r.strideWidth,s=r.dilationDepth,u=r.dilationHeight,c=r.dilationWidth,l=r.effectiveFilterDepth,f=r.effectiveFilterHeight,h=r.effectiveFilterWidth,d=l-1-r.padInfo.front,p=f-1-r.padInfo.top,v=h-1-r.padInfo.left,g=1/(t*e*n);this.userCode=`
|
|
const ivec3 pads = ivec3(`+d+", "+p+", "+v+`);
|
|
const float avgMultiplier = float(`+g+`);
|
|
|
|
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 < `+l+`;
|
|
wD += `+s+`) {
|
|
float dyD = float(dyDCorner + wD) / `+o+`.0;
|
|
|
|
if (dyD < 0.0 || dyD >= `+r.outDepth+`.0 || fract(dyD) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyD = int(dyD);
|
|
|
|
for (int wR = 0; wR < `+f+`;
|
|
wR += `+u+`) {
|
|
float dyR = float(dyRCorner + wR) / `+i+`.0;
|
|
|
|
if (dyR < 0.0 || dyR >= `+r.outHeight+`.0 ||
|
|
fract(dyR) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyR = int(dyR);
|
|
|
|
for (int wC = 0; wC < `+h+`;
|
|
wC += `+c+`) {
|
|
float dyC = float(dyCCorner + wC) / `+a+`.0;
|
|
|
|
if (dyC < 0.0 || dyC >= `+r.outWidth+`.0 ||
|
|
fract(dyC) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyC = int(dyC);
|
|
|
|
float dyValue = getDy(batch, idyD, idyR, idyC, ch);
|
|
|
|
dotProd += dyValue * avgMultiplier;
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`},ld=function(r,t,e,n,o,i){this.outputShape=[],this.variableNames=["x","mean","variance"],vt(r,t),vt(r,e);var a="0.0";n!=null&&(vt(r,n),this.variableNames.push("offset"),a="getOffsetAtOutCoords()");var s="1.0";o!=null&&(vt(r,o),this.variableNames.push("scale"),s="getScaleAtOutCoords()"),this.outputShape=r,this.userCode=`
|
|
void main() {
|
|
float x = getXAtOutCoords();
|
|
float mean = getMeanAtOutCoords();
|
|
float variance = getVarianceAtOutCoords();
|
|
float offset = `+a+`;
|
|
float scale = `+s+`;
|
|
float inv = scale * inversesqrt(variance + float(`+i+`));
|
|
setOutput(dot(vec3(x, -mean, offset), vec3(inv, inv, 1)));
|
|
}
|
|
`},fd=function(r,t,e,n,o,i){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=["x","mean","variance"],vt(r,t),vt(r,e);var a="vec4(0.0)";n!=null&&(vt(r,n),this.variableNames.push("offset"),a="getOffsetAtOutCoords()");var s="vec4(1.0)";o!=null&&(vt(r,o),this.variableNames.push("scale"),s="getScaleAtOutCoords()"),this.outputShape=r,this.userCode=`
|
|
void main() {
|
|
vec4 offset = `+a+`;
|
|
vec4 scale = `+s+`;
|
|
|
|
vec4 x = getXAtOutCoords();
|
|
vec4 mean = getMeanAtOutCoords();
|
|
vec4 variance = getVarianceAtOutCoords();
|
|
|
|
vec4 inv = scale * inversesqrt(variance + vec4(`+i+`));
|
|
|
|
setOutput((x - mean) * inv + offset);
|
|
}
|
|
`},hd="return areal * breal - aimag * bimag;",dd="return areal * bimag + aimag * breal;",fc=function(r,t,e){this.variableNames=["AReal","AImag","BReal","BImag"],this.outputShape=vt(t,e),this.userCode=`
|
|
float binaryOpComplex(
|
|
float areal, float aimag, float breal, float bimag) {
|
|
`+r+`
|
|
}
|
|
|
|
void main() {
|
|
float areal = getARealAtOutCoords();
|
|
float aimag = getAImagAtOutCoords();
|
|
float breal = getBRealAtOutCoords();
|
|
float bimag = getBImagAtOutCoords();
|
|
setOutput(binaryOpComplex(areal, aimag, breal, bimag));
|
|
}
|
|
`},Oa="return a + b;",Ma="return a - b;",hc="return a * b;",dc="return (a < 0.) ? b * a : a;",sn=function(r,t,e){this.variableNames=["A","B"],this.outputShape=vt(t,e),this.userCode=`
|
|
float binaryOperation(float a, float b) {
|
|
`+r+`
|
|
}
|
|
|
|
void main() {
|
|
float a = getAAtOutCoords();
|
|
float b = getBAtOutCoords();
|
|
setOutput(binaryOperation(a, b));
|
|
}
|
|
`},pc=`
|
|
vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));
|
|
return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);
|
|
`,Sr=function(r,t,e,n){n===void 0&&(n=!1),this.variableNames=["A","B"],this.supportsBroadcasting=!0,this.packedInputs=!0,this.packedOutput=!0,this.outputShape=vt(t,e);var o=this.outputShape.length,i="";if(n)if(o===0||Re(this.outputShape)===1)i=`
|
|
result.y = 0.;
|
|
result.z = 0.;
|
|
result.w = 0.;
|
|
`;else if(i=`
|
|
`+$t(o)+` coords = getOutputCoords();
|
|
`,o===1)i+=`
|
|
result.y = (coords + 1) >= `+this.outputShape[0]+` ? 0. : result.y;
|
|
result.z = 0.;
|
|
result.w = 0.;
|
|
`;else{var a=zn("coords",o);i+=`
|
|
bool nextRowOutOfBounds =
|
|
(`+a[o-2]+" + 1) >= "+this.outputShape[o-2]+`;
|
|
bool nextColOutOfBounds =
|
|
(`+a[o-1]+" + 1) >= "+this.outputShape[o-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) {
|
|
`+r+`
|
|
}
|
|
|
|
void main() {
|
|
vec4 a = getAAtOutCoords();
|
|
vec4 b = getBAtOutCoords();
|
|
|
|
vec4 result = binaryOperation(a, b);
|
|
`+i+`
|
|
|
|
setOutput(result);
|
|
}
|
|
`},pd=function(){function r(t){this.variableNames=["A"],this.outputShape=t,this.userCode=`
|
|
uniform float minVal;
|
|
uniform float maxVal;
|
|
|
|
void main() {
|
|
float value = getAAtOutCoords();
|
|
if (isnan(value)) {
|
|
setOutput(value);
|
|
return;
|
|
}
|
|
|
|
setOutput(clamp(value, minVal, maxVal));
|
|
}
|
|
`}return r.prototype.getCustomSetupFunc=function(t,e){var n=this;return function(o,i){n.minLoc==null&&(n.minLoc=o.getUniformLocationNoThrow(i,"minVal"),n.maxLoc=o.getUniformLocationNoThrow(i,"maxVal")),o.gl.uniform1f(n.minLoc,t),o.gl.uniform1f(n.maxLoc,e)}},r}(),vd=function(){function r(t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t,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)));
|
|
}
|
|
`}return r.prototype.getCustomSetupFunc=function(t,e){var n=this;return function(o,i){n.minLoc==null&&(n.minLoc=o.getUniformLocationNoThrow(i,"minVal"),n.maxLoc=o.getUniformLocationNoThrow(i,"maxVal")),o.gl.uniform1f(n.minLoc,t),o.gl.uniform1f(n.maxLoc,e)}},r}(),gd=function(r){this.variableNames=["real","imag"],this.outputShape=r,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))
|
|
);
|
|
}
|
|
`},md=function(r){this.outputShape=[],this.outputShape=Kr(r,1),this.variableNames=r.map(function(s,u){return"T"+u});var t=new Array(r.length-1);t[0]=r[0][1];for(var e=1;e<t.length;e++)t[e]=t[e-1]+r[e][1];var n=["if (yC < "+t[0]+") setOutput(getT0(yR, yC));"];for(e=1;e<t.length;e++){var o=t[e-1];n.push("else if (yC < "+t[e]+") setOutput(getT"+e+"(yR, yC-"+o+"));")}var i=t.length,a=t[t.length-1];n.push("else setOutput(getT"+i+"(yR, yC-"+a+"));"),this.userCode=`
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
int yR = coords.x;
|
|
int yC = coords.y;
|
|
|
|
`+n.join(`
|
|
`)+`
|
|
}
|
|
`},Ad=function(r,t){this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[],this.outputShape=Kr(r,t);var e=this.outputShape,n=e.length,o=$t(n),i=zn("coords",n),a=["x","y","z","w","u","v"].slice(0,n);this.variableNames=r.map(function(g,A){return"T"+A});var s=new Array(r.length-1);s[0]=r[0][t];for(var u=1;u<s.length;u++)s[u]=s[u-1]+r[u][t];var c=a[t],l=a.slice(-2),f=a.join(),h="if ("+c+" < "+s[0]+`) {
|
|
return getChannel(
|
|
getT0(`+f+"), vec2("+l.join()+`));
|
|
}`;for(u=1;u<s.length;u++){var d=s[u-1];h+=`
|
|
if (`+c+" < "+s[u]+" && "+c+" >= "+s[u-1]+`) {
|
|
return getChannel(
|
|
getT`+u+"("+Fi(a,c,d)+`),
|
|
vec2(`+Fi(l,c,d)+`));
|
|
}`}var p=s.length,v=s[s.length-1];h+=`
|
|
return getChannel(
|
|
getT`+p+"("+Fi(a,c,v)+`),
|
|
vec2(`+Fi(l,c,v)+"));",this.userCode=`
|
|
float getValue(`+a.map(function(g){return"int "+g})+`) {
|
|
`+h+`
|
|
}
|
|
|
|
void main() {
|
|
`+o+` coords = getOutputCoords();
|
|
vec4 result = vec4(getValue(`+i+`), 0., 0., 0.);
|
|
|
|
`+i[n-1]+" = "+i[n-1]+` + 1;
|
|
if (`+i[n-1]+" < "+e[n-1]+`) {
|
|
result.g = getValue(`+i+`);
|
|
}
|
|
|
|
`+i[n-2]+" = "+i[n-2]+` + 1;
|
|
if (`+i[n-2]+" < "+e[n-2]+`) {
|
|
result.a = getValue(`+i+`);
|
|
}
|
|
|
|
`+i[n-1]+" = "+i[n-1]+` - 1;
|
|
if (`+i[n-2]+" < "+e[n-2]+` &&
|
|
`+i[n-1]+" < "+e[n-1]+`) {
|
|
result.b = getValue(`+i+`);
|
|
}
|
|
setOutput(result);
|
|
}
|
|
`};function Fi(r,t,e){var n=r.indexOf(t);return r.map(function(o,i){return i===n?o+" - "+e:o}).join()}var yd=function(r){this.variableNames=["x","dy"],this.outputShape=r.filterShape;var t=r.strideHeight,e=r.strideWidth,n=r.padInfo.top,o=r.padInfo.left,i=r.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 < `+r.batchSize+`; b++) {
|
|
for (int yR = 0; yR < `+r.outHeight+`; yR++) {
|
|
int xR = wR + yR * `+t+" - "+n+`;
|
|
|
|
if (xR < 0 || xR >= `+r.inHeight+`) {
|
|
continue;
|
|
}
|
|
|
|
for (int yC = 0; yC < `+r.outWidth+`; yC++) {
|
|
int xC = wC + yC * `+e+" - "+o+`;
|
|
|
|
if (xC < 0 || xC >= `+r.inWidth+`) {
|
|
continue;
|
|
}
|
|
|
|
if (`+i+`) {
|
|
float dyValue = getDy(b, yR, yC, d2);
|
|
float xValue = getX(b, xR, xC, d1);
|
|
dotProd += (xValue * dyValue);
|
|
} else {
|
|
float dyValue = getDy(b, d2, yR, yC);
|
|
float xValue = getX(b, d1, xR, xC);
|
|
dotProd += (xValue * dyValue);
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`},xd=function(r){this.variableNames=["dy","W"],this.outputShape=r.inShape;var t=r.filterHeight,e=r.filterWidth,n=r.strideHeight,o=r.strideWidth,i=r.dataFormat==="channelsLast",a=t-1-r.padInfo.top,s=e-1-r.padInfo.left,u=i?1:2,c=i?2:3,l=i?3:1;this.userCode=`
|
|
const ivec2 pads = ivec2(`+a+", "+s+`);
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int d1 = coords[`+l+`];
|
|
|
|
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) / `+n+`.0;
|
|
|
|
if (dyR < 0.0 || dyR >= `+r.outHeight+`.0 || fract(dyR) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyR = int(dyR);
|
|
|
|
int wRPerm = `+t+` - 1 - wR;
|
|
|
|
for (int wC = 0; wC < `+e+`; wC++) {
|
|
float dyC = float(dyCCorner + wC) / `+o+`.0;
|
|
|
|
if (dyC < 0.0 || dyC >= `+r.outWidth+`.0 ||
|
|
fract(dyC) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyC = int(dyC);
|
|
|
|
int wCPerm = `+e+` - 1 - wC;
|
|
|
|
for (int d2 = 0; d2 < `+r.outChannels+`; d2++) {
|
|
|
|
if (`+i+`) {
|
|
float xValue = getDy(batch, idyR, idyC, d2);
|
|
float wValue = getW(wRPerm, wCPerm, d1, d2);
|
|
dotProd += xValue * wValue;
|
|
} else {
|
|
float xValue = getDy(batch, d2, idyR, idyC);
|
|
float wValue = getW(wRPerm, wCPerm, d1, d2);
|
|
dotProd += xValue * wValue;
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`},bd=function(r){this.variableNames=["x","dy"],this.outputShape=r.filterShape;var t=r.strideDepth,e=r.strideHeight,n=r.strideWidth,o=r.padInfo.front,i=r.padInfo.top,a=r.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 < `+r.batchSize+`; b++) {
|
|
for (int yF = 0; yF < `+r.outDepth+`; yF++) {
|
|
int xF = wF + yF * `+t+" - "+o+`;
|
|
|
|
if (xF < 0 || xF >= `+r.inDepth+`) {
|
|
continue;
|
|
}
|
|
|
|
for (int yR = 0; yR < `+r.outHeight+`; yR++) {
|
|
int xR = wR + yR * `+e+" - "+i+`;
|
|
|
|
if (xR < 0 || xR >= `+r.inHeight+`) {
|
|
continue;
|
|
}
|
|
|
|
for (int yC = 0; yC < `+r.outWidth+`; yC++) {
|
|
int xC = wC + yC * `+n+" - "+a+`;
|
|
|
|
if (xC < 0 || xC >= `+r.inWidth+`) {
|
|
continue;
|
|
}
|
|
|
|
float dyValue = getDy(b, yF, yR, yC, d2);
|
|
float xValue = getX(b, xF, xR, xC, d1);
|
|
dotProd += (xValue * dyValue);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`},wd=function(r){this.variableNames=["dy","W"],this.outputShape=r.inShape;var t=r.filterDepth,e=r.filterHeight,n=r.filterWidth,o=r.strideDepth,i=r.strideHeight,a=r.strideWidth,s=t-1-r.padInfo.front,u=e-1-r.padInfo.top,c=n-1-r.padInfo.left;this.userCode=`
|
|
const ivec3 pads = ivec3(`+s+", "+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) / `+o+`.0;
|
|
|
|
if (dyF < 0.0 || dyF >= `+r.outDepth+`.0 || fract(dyF) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyF = int(dyF);
|
|
|
|
int wFPerm = `+t+` - 1 - wF;
|
|
|
|
for (int wR = 0; wR < `+e+`; wR++) {
|
|
float dyR = float(dyRCorner + wR) / `+i+`.0;
|
|
|
|
if (dyR < 0.0 || dyR >= `+r.outHeight+`.0 ||
|
|
fract(dyR) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyR = int(dyR);
|
|
|
|
int wRPerm = `+e+` - 1 - wR;
|
|
|
|
for (int wC = 0; wC < `+n+`; wC++) {
|
|
float dyC = float(dyCCorner + wC) / `+a+`.0;
|
|
|
|
if (dyC < 0.0 || dyC >= `+r.outWidth+`.0 ||
|
|
fract(dyC) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyC = int(dyC);
|
|
|
|
int wCPerm = `+n+` - 1 - wC;
|
|
|
|
for (int d2 = 0; d2 < `+r.outChannels+`; d2++) {
|
|
float xValue = getDy(batch, idyF, idyR, idyC, d2);
|
|
float wValue = getW(wFPerm, wRPerm, wCPerm, d1, d2);
|
|
dotProd += xValue * wValue;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`},Ed=function(r){this.variableNames=["x","dy"],this.outputShape=r.filterShape;var t=r.strideHeight,e=r.strideWidth,n=r.padInfo.top,o=r.padInfo.left,i=r.outChannels/r.inChannels;this.userCode=`
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int wR = coords.x;
|
|
int wC = coords.y;
|
|
int d1 = coords.z;
|
|
int dm = coords.w;
|
|
int d2 = d1 * `+i+` + dm;
|
|
|
|
float dotProd = 0.0;
|
|
|
|
// TO DO: Vec4 over the batch size
|
|
for (int b = 0; b < `+r.batchSize+`; b++) {
|
|
for (int yR = 0; yR < `+r.outHeight+`; yR++) {
|
|
int xR = wR + yR * `+t+" - "+n+`;
|
|
|
|
if (xR < 0 || xR >= `+r.inHeight+`) {
|
|
continue;
|
|
}
|
|
|
|
for (int yC = 0; yC < `+r.outWidth+`; yC++) {
|
|
int xC = wC + yC * `+e+" - "+o+`;
|
|
|
|
if (xC < 0 || xC >= `+r.inWidth+`) {
|
|
continue;
|
|
}
|
|
|
|
float dyValue = getDy(b, yR, yC, d2);
|
|
float xValue = getX(b, xR, xC, d1);
|
|
dotProd += (xValue * dyValue);
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`},Cd=function(r){this.variableNames=["dy","W"],this.outputShape=r.inShape;var t=r.filterHeight,e=r.filterWidth,n=r.strideHeight,o=r.strideWidth,i=t-1-r.padInfo.top,a=e-1-r.padInfo.left,s=r.outChannels/r.inChannels;this.userCode=`
|
|
const ivec2 pads = ivec2(`+i+", "+a+`);
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int d1 = coords[3];
|
|
ivec2 dyCorner = coords.yz - pads;
|
|
int dyRCorner = dyCorner.x;
|
|
int dyCCorner = dyCorner.y;
|
|
|
|
float dotProd = 0.0;
|
|
|
|
for (int wR = 0; wR < `+t+`; wR++) {
|
|
float dyR = float(dyRCorner + wR) / `+n+`.0;
|
|
|
|
if (dyR < 0.0 || dyR >= `+r.outHeight+`.0 || fract(dyR) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyR = int(dyR);
|
|
|
|
int wRPerm = `+t+` - 1 - wR;
|
|
|
|
for (int wC = 0; wC < `+e+`; wC++) {
|
|
float dyC = float(dyCCorner + wC) / `+o+`.0;
|
|
|
|
if (dyC < 0.0 || dyC >= `+r.outWidth+`.0 ||
|
|
fract(dyC) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyC = int(dyC);
|
|
|
|
int wCPerm = `+e+` - 1 - wC;
|
|
|
|
// TO DO: Vec4 over the channelMul
|
|
for (int dm = 0; dm < `+s+`; dm++) {
|
|
int d2 = d1 * `+s+` + dm;
|
|
float xValue = getDy(batch, idyR, idyC, d2);
|
|
float wValue = getW(wRPerm, wCPerm, d1, dm);
|
|
dotProd += xValue * wValue;
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`},vc=function(r,t,e,n){t===void 0&&(t=!1),e===void 0&&(e=null),n===void 0&&(n=!1),this.variableNames=["x","W"],this.outputShape=r.outShape;var o=r.padInfo.top,i=r.padInfo.left,a=r.strideHeight,s=r.strideWidth,u=r.dilationHeight,c=r.dilationWidth,l=r.filterHeight,f=r.filterWidth,h=4*Math.floor(r.inChannels/4),d=r.inChannels%4,p=r.dataFormat==="channelsLast",v=p?1:2,g=p?2:3,A=p?3:1,w="",E="";e&&(w=n?`float activation(float a) {
|
|
float b = getPreluActivationWeightsAtOutCoords();
|
|
`+e+`
|
|
}`:`
|
|
float activation(float x) {
|
|
`+e+`
|
|
}
|
|
`,E="result = activation(result);");var x=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),n&&this.variableNames.push("preluActivationWeights"),this.userCode=`
|
|
`+w+`
|
|
|
|
const ivec2 strides = ivec2(`+a+", "+s+`);
|
|
const ivec2 pads = ivec2(`+o+", "+i+`);
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int d2 = coords[`+A+`];
|
|
|
|
ivec2 xRCCorner =
|
|
ivec2(coords[`+v+"], coords["+g+`]) * 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 < `+l+`; wR++) {
|
|
int xR = xRCorner + wR * `+u+`;
|
|
|
|
if (xR < 0 || xR >= `+r.inHeight+`) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < `+f+`; wC++) {
|
|
int xC = xCCorner + wC * `+c+`;
|
|
|
|
if (xC < 0 || xC >= `+r.inWidth+`) {
|
|
continue;
|
|
}
|
|
|
|
for (int d1 = 0; d1 < `+h+`; 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 (`+p+`) {
|
|
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 (`+(d===1)+`) {
|
|
|
|
if (`+p+`) {
|
|
dotProd +=
|
|
getX(batch, xR, xC, `+h+`) *
|
|
getW(wR, wC, `+h+`, d2);
|
|
} else {
|
|
dotProd +=
|
|
getX(batch, `+h+`, xR, xC) *
|
|
getW(wR, wC, `+h+`, d2);
|
|
}
|
|
|
|
} else if (`+(d===2)+`) {
|
|
vec2 wValues = vec2(
|
|
getW(wR, wC, `+h+`, d2),
|
|
getW(wR, wC, `+h+` + 1, d2)
|
|
);
|
|
|
|
if (`+p+`) {
|
|
vec2 xValues = vec2(
|
|
getX(batch, xR, xC, `+h+`),
|
|
getX(batch, xR, xC, `+h+` + 1)
|
|
);
|
|
dotProd += dot(xValues, wValues);
|
|
} else {
|
|
vec2 xValues = vec2(
|
|
getX(batch, `+h+`, xR, xC),
|
|
getX(batch, `+h+` + 1, xR, xC)
|
|
);
|
|
dotProd += dot(xValues, wValues);
|
|
}
|
|
|
|
} else if (`+(d===3)+`) {
|
|
vec3 wValues = vec3(
|
|
getW(wR, wC, `+h+`, d2),
|
|
getW(wR, wC, `+h+` + 1, d2),
|
|
getW(wR, wC, `+h+` + 2, d2)
|
|
);
|
|
|
|
if (`+p+`) {
|
|
vec3 xValues = vec3(
|
|
getX(batch, xR, xC, `+h+`),
|
|
getX(batch, xR, xC, `+h+` + 1),
|
|
getX(batch, xR, xC, `+h+` + 2)
|
|
);
|
|
dotProd += dot(xValues, wValues);
|
|
} else {
|
|
vec3 xValues = vec3(
|
|
getX(batch, `+h+`, xR, xC),
|
|
getX(batch, `+h+` + 1, xR, xC),
|
|
getX(batch, `+h+` + 2, xR, xC)
|
|
);
|
|
dotProd += dot(xValues, wValues);
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
float result = dotProd;
|
|
`+x+`
|
|
`+E+`
|
|
setOutput(result);
|
|
}
|
|
`},Id=function(r){this.variableNames=["x","W"],this.outputShape=r.outShape;var t=r.padInfo.front,e=r.padInfo.top,n=r.padInfo.left,o=r.strideDepth,i=r.strideHeight,a=r.strideWidth,s=r.dilationDepth,u=r.dilationHeight,c=r.dilationWidth,l=r.filterDepth,f=r.filterHeight,h=r.filterWidth,d=4*Math.floor(r.inChannels/4),p=r.inChannels%4;this.userCode=`
|
|
const ivec3 strides = ivec3(`+o+", "+i+", "+a+`);
|
|
const ivec3 pads = ivec3(`+t+", "+e+", "+n+`);
|
|
|
|
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 < `+l+`; wF++) {
|
|
int xF = xFCorner + wF * `+s+`;
|
|
|
|
if (xF < 0 || xF >= `+r.inDepth+`) {
|
|
continue;
|
|
}
|
|
|
|
for (int wR = 0; wR < `+f+`; wR++) {
|
|
int xR = xRCorner + wR * `+u+`;
|
|
|
|
if (xR < 0 || xR >= `+r.inHeight+`) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < `+h+`; wC++) {
|
|
int xC = xCCorner + wC * `+c+`;
|
|
|
|
if (xC < 0 || xC >= `+r.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 (`+(p===1)+`) {
|
|
dotProd +=
|
|
getX(batch, xF, xR, xC, `+d+`) *
|
|
getW(wF, wR, wC, `+d+`, d2);
|
|
} else if (`+(p===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 (`+(p===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);
|
|
}
|
|
`},gc=function(r,t,e,n){t===void 0&&(t=!1),e===void 0&&(e=null),n===void 0&&(n=!1),this.variableNames=["x","W"],this.outputShape=r.outShape;var o=r.inHeight,i=r.inWidth,a=r.padInfo.top,s=r.padInfo.left,u=r.strideHeight,c=r.strideWidth,l=r.dilationHeight,f=r.dilationWidth,h=r.filterHeight,d=r.filterWidth,p=r.outChannels/r.inChannels,v="",g="";e&&(v=n?`float activation(float a) {
|
|
float b = getPreluActivationWeightsAtOutCoords();
|
|
`+e+`
|
|
}`:`
|
|
float activation(float x) {
|
|
`+e+`
|
|
}
|
|
`,g="result = activation(result);");var A=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),n&&this.variableNames.push("preluActivationWeights"),this.userCode=`
|
|
`+v+`
|
|
|
|
const ivec2 strides = ivec2(`+u+", "+c+`);
|
|
const ivec2 pads = ivec2(`+a+", "+s+`);
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int batch = coords.x;
|
|
ivec2 xRCCorner = coords.yz * strides - pads;
|
|
int d2 = coords.w;
|
|
int d1 = d2 / `+p+`;
|
|
int q = d2 - d1 * `+p+`;
|
|
|
|
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 < `+h+`; wR++) {
|
|
int xR = xRCorner + wR * `+l+`;
|
|
|
|
if (xR < 0 || xR >= `+o+`) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < `+d+`; 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;
|
|
`+A+`
|
|
`+g+`
|
|
setOutput(result);
|
|
}
|
|
`},mc=function(r,t,e,n){t===void 0&&(t=!1),e===void 0&&(e=null),n===void 0&&(n=!1),this.variableNames=["x","W"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=r.outShape;for(var o=r.inHeight,i=r.inWidth,a=r.padInfo.top,s=r.padInfo.left,u=r.strideHeight,c=r.strideWidth,l=r.dilationHeight,f=r.dilationWidth,h=r.filterHeight,d=r.filterWidth,p=d,v="int xR; int xC; int xCOffset;",g=0;g<h;g++)for(var A=0;A<d;A++)v+=`
|
|
vec4 xTexelR`+g+"C"+2*A+` = vec4(0.);
|
|
vec4 wR`+g+"C"+A+` = vec4(0.);
|
|
vec4 xR`+g+"C"+A+" = vec4(0.);";for(g=0;g<h;g++)for(var w=0;w<p;w++){if(v+=`
|
|
xR = xRCorner + `+g*l+`;
|
|
xC = xCCorner + `+(A=2*w)*f+`;
|
|
`,c===1){if(A<d&&(v+=s%2==1?`
|
|
xCOffset = xC + 1;
|
|
if(xR >= 0 && xR < `+o+" && xCOffset >= 0 && xCOffset < "+i+`) {
|
|
xTexelR`+g+"C"+A+` = getX(batch, xR, xCOffset, d1);
|
|
|
|
// Need to manually clear unused channels in case
|
|
// we're reading from recycled texture.
|
|
if(xCOffset + 1 >= `+i+`) {
|
|
xTexelR`+g+"C"+A+`.zw = vec2(0.);
|
|
}
|
|
} else {
|
|
xTexelR`+g+"C"+A+` = vec4(0.);
|
|
}
|
|
|
|
xCOffset = xC + 1 - 2;
|
|
if(xR >= 0 && xR < `+o+" && 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`+g+"C"+A+" = vec4(previous.zw, xTexelR"+g+"C"+A+`.xy);
|
|
} else {
|
|
xR`+g+"C"+A+" = vec4(0, 0, xTexelR"+g+"C"+A+`.xy);
|
|
}
|
|
`:`
|
|
if(xR >= 0 && xR < `+o+" && xC >= 0 && xC < "+i+`) {
|
|
xTexelR`+g+"C"+A+` = getX(batch, xR, xC, d1);
|
|
} else {
|
|
xTexelR`+g+"C"+A+` = vec4(0.);
|
|
}
|
|
|
|
xR`+g+"C"+A+" = xTexelR"+g+"C"+A+`;
|
|
`,A+1<d)){var E=s%2==0?_e(f):f;f%2==0&&s%2==1||f%2!=0&&s%2!=1?(v+=`
|
|
xCOffset = xC + `+s%2+" + "+E+`;
|
|
|
|
if(xR >= 0 && xR < `+o+` &&
|
|
xCOffset >= 0 && xCOffset < `+i+`) {
|
|
xTexelR`+g+"C"+(A+2)+` = getX(batch, xR, xCOffset, d1);
|
|
}
|
|
`,f>1&&(v+=`
|
|
xCOffset -= 2;
|
|
if(xR >= 0 && xR < `+o+` &&
|
|
xCOffset >= 0 && xCOffset < `+i+`) {
|
|
xTexelR`+g+"C"+A+` = getX(batch, xR, xCOffset, d1);
|
|
} else {
|
|
xTexelR`+g+"C"+A+` = vec4(0.);
|
|
}
|
|
`),v+=`
|
|
xR`+g+"C"+(A+1)+` = vec4(
|
|
xTexelR`+g+"C"+A+".zw, xTexelR"+g+"C"+(A+2)+`.xy);
|
|
`):v+=`
|
|
xCOffset = xC + `+E+`;
|
|
|
|
if(xR >= 0 && xR < `+o+` &&
|
|
xCOffset >= 0 && xCOffset < `+i+`) {
|
|
xTexelR`+g+"C"+(A+2)+` = getX(batch, xR, xCOffset, d1);
|
|
}
|
|
|
|
xR`+g+"C"+(A+1)+" = xTexelR"+g+"C"+(A+2)+`;
|
|
`}}else A<d&&(v+=`
|
|
if(xR >= 0 && xR < `+o+`) {
|
|
`,s%2==1?(v+=`
|
|
xCOffset = xC + 1 - `+c+`;
|
|
if(xCOffset >= 0 && xCOffset < `+i+`) {
|
|
xTexelR`+g+"C"+A+` = getX(batch, xR, xCOffset, d1);
|
|
} else {
|
|
xTexelR`+g+"C"+A+` = vec4(0.);
|
|
}
|
|
|
|
if(xC + 1 >= 0 && xC + 1 < `+i+`) {
|
|
xTexelR`+g+"C"+(A+2)+` = getX(batch, xR, xC + 1, d1);
|
|
} else {
|
|
xTexelR`+g+"C"+(A+2)+` = vec4(0.);
|
|
}
|
|
|
|
xR`+g+"C"+A+` = vec4(
|
|
xTexelR`+g+"C"+A+".zw, xTexelR"+g+"C"+(A+2)+`.zw);
|
|
`,A+1<d&&(v+=`
|
|
vec4 final = vec4(0.);
|
|
xCOffset = xC + 1 + `+c+`;
|
|
if(xCOffset >= 0 && xCOffset < `+i+`) {
|
|
final = getX(batch, xR, xCOffset, d1);
|
|
}
|
|
xR`+g+"C"+(A+1)+" = vec4(xTexelR"+g+"C"+(A+2)+`.xy, final.xy);
|
|
`)):(v+=`
|
|
if(xC >= 0 && xC < `+i+`) {
|
|
xTexelR`+g+"C"+A+` = getX(batch, xR, xC, d1);
|
|
} else {
|
|
xTexelR`+g+"C"+A+` = vec4(0.);
|
|
}
|
|
|
|
xCOffset = xC + `+c+`;
|
|
if(xCOffset >= 0 && xCOffset < `+i+`) {
|
|
xTexelR`+g+"C"+(A+2)+` = getX(batch, xR, xCOffset, d1);
|
|
} else {
|
|
xTexelR`+g+"C"+(A+2)+` = vec4(0.);
|
|
}
|
|
|
|
xR`+g+"C"+A+` = vec4(
|
|
xTexelR`+g+"C"+A+".xy, xTexelR"+g+"C"+(A+2)+`.xy);
|
|
`,A+1<d&&(v+=`
|
|
xR`+g+"C"+(A+1)+` = vec4(
|
|
xTexelR`+g+"C"+A+".zw, xTexelR"+g+"C"+(A+2)+`.zw);
|
|
`)),v+="}");A<d&&(v+=`
|
|
vec4 wTexelR`+g+"C"+A+" = getW("+g+", "+A+`, d1, q);
|
|
wR`+g+"C"+A+" = vec4(wTexelR"+g+"C"+A+".xz, wTexelR"+g+"C"+A+`.xz);
|
|
`,A+1<d&&(v+=`
|
|
vec4 wTexelR`+g+"C"+(A+1)+" = getW("+g+", "+(A+1)+`, d1, q);
|
|
wR`+g+"C"+(A+1)+` =
|
|
vec4(wTexelR`+g+"C"+(A+1)+".xz, wTexelR"+g+"C"+(A+1)+".xz);"))}for(g=0;g<h;g++)for(A=0;A<d;A++)v+="dotProd += xR"+g+"C"+A+" * wR"+g+"C"+A+";";var x="",C="";e&&(x=n?`vec4 activation(vec4 a) {
|
|
vec4 b = getPreluActivationWeightsAtOutCoords();
|
|
`+e+`
|
|
}`:`vec4 activation(vec4 x) {
|
|
`+e+`
|
|
}`,C="result = activation(result);");var S=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),n&&this.variableNames.push("preluActivationWeights"),this.userCode=`
|
|
`+x+`
|
|
|
|
const ivec2 strides = ivec2(`+u+", "+c+`);
|
|
const ivec2 pads = ivec2(`+a+", "+s+`);
|
|
|
|
void main() {
|
|
|
|
ivec4 coords = getOutputCoords();
|
|
int batch = coords.x;
|
|
ivec2 xRCCorner = coords.yz * strides - pads;
|
|
int d2 = coords.w;
|
|
int d1 = d2;
|
|
int q = 0;
|
|
int xRCorner = xRCCorner.x;
|
|
int xCCorner = xRCCorner.y;
|
|
|
|
vec4 dotProd = vec4(0.);
|
|
|
|
`+v+`
|
|
|
|
vec4 result = dotProd;
|
|
`+S+`
|
|
`+C+`
|
|
setOutput(result);
|
|
}
|
|
`},Sd=function(r,t,e,n,o){this.variableNames=["Image","Boxes","BoxInd"],this.outputShape=[];var i=r[0],a=r[1],s=r[2],u=r[3],c=t[0],l=e[0],f=e[1];this.outputShape=[c,l,f,u];var h=n==="bilinear"?1:0,d=[a-1+".0",s-1+".0"],p=d[0],v=d[1],g=l>1?[""+(a-1)/(l-1),"(y2-y1) * height_ratio","y1*"+p+" + float(y)*(height_scale)"]:["0.0","0.0","0.5 * (y1+y2) * "+p],A=g[0],w=g[1],E=g[2],x=f>1?[""+(s-1)/(f-1),"(x2-x1) * width_ratio","x1*"+v+" + float(x)*(width_scale)"]:["0.0","0.0","0.5 * (x1+x2) * "+v],C=x[0],S=x[1],N=x[2];this.userCode=`
|
|
const float height_ratio = float(`+A+`);
|
|
const float width_ratio = float(`+C+`);
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int y = coords[1];
|
|
int x = coords[2];
|
|
int d = coords[3];
|
|
|
|
// get box vals
|
|
float y1 = getBoxes(b,0);
|
|
float x1 = getBoxes(b,1);
|
|
float y2 = getBoxes(b,2);
|
|
float x2 = getBoxes(b,3);
|
|
|
|
// get image in batch index
|
|
int bInd = round(getBoxInd(b));
|
|
if(bInd < 0 || bInd >= `+i+`) {
|
|
return;
|
|
}
|
|
|
|
float height_scale = `+w+`;
|
|
float width_scale = `+S+`;
|
|
|
|
float in_y = `+E+`;
|
|
if( in_y < 0.0 || in_y > `+p+` ) {
|
|
setOutput(float(`+o+`));
|
|
return;
|
|
}
|
|
float in_x = `+N+`;
|
|
if( in_x < 0.0 || in_x > `+v+` ) {
|
|
setOutput(float(`+o+`));
|
|
return;
|
|
}
|
|
|
|
vec2 sourceFracIndexCR = vec2(in_x,in_y);
|
|
if(`+h+` == 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);
|
|
}
|
|
}
|
|
`},Rd=function(r,t,e){this.variableNames=["x"],this.outputShape=r;var n=r.length,o=r[r.length-1],i=e?"<":">";this.userCode=`
|
|
int getIndex(int i) {
|
|
`+(e?"return "+o+" -i - 1;":"return i;")+`
|
|
}
|
|
|
|
void main() {
|
|
`+$t(n)+` coords = getOutputCoords();
|
|
int end = `+Ac(n,"coords")+`;
|
|
float val = 0.0;
|
|
for (int i = `+o+` - 1; i >= 0; i -= 1) {
|
|
int idx = getIndex(i);
|
|
if (idx `+i+` end) {
|
|
continue;
|
|
}
|
|
if (idx == end && `+t+`) {
|
|
continue;
|
|
}
|
|
`+Ac(n,"coords")+` = idx;
|
|
val += getX(`+function(a,s){if(a===1)return""+s;if(a===2)return s+".x, "+s+".y";if(a===3)return s+".x, "+s+".y, "+s+".z";if(a===4)return s+".x, "+s+".y, "+s+".z, "+s+".w";throw Error("Cumulative sum for rank "+a+" is not yet supported")}(n,"coords")+`);
|
|
}
|
|
setOutput(val);
|
|
}
|
|
`};function Ac(r,t){if(r===1)return""+t;if(r===2)return t+".y";if(r===3)return t+".z";if(r===4)return t+".w";throw Error("Cumulative sum for rank "+r+" is not yet supported")}var Bd=function(r){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=er.DENSE;var t=Mo(r),e=Dn();this.outputShape=r,this.userCode=`
|
|
ivec3 outCoordsFromFlatIndex(int index) {
|
|
`+eo(["r","c","d"],r)+`
|
|
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);
|
|
}
|
|
|
|
`+e.output+` = result;
|
|
}
|
|
`},kd=function(r){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=er.DENSE;var t=Mo(r),e=Dn();this.outputShape=r,this.userCode=`
|
|
ivec3 outCoordsFromFlatIndex(int index) {
|
|
`+eo(["r","c","d"],r)+`
|
|
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));
|
|
}
|
|
|
|
`+e.output+` = result;
|
|
}
|
|
`},Td=function(){function r(t,e,n){this.variableNames=["x"],this.outputShape=[],this.outputShape=t,this.blockSize=e,this.dataFormat=n,this.userCode=`
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int h = `+this.getHeightCoordString()+`;
|
|
int w = `+this.getWidthCoordString()+`;
|
|
int d = `+this.getDepthCoordString()+`;
|
|
|
|
int in_h = h / `+e+`;
|
|
int offset_h = imod(h, `+e+`);
|
|
int in_w = w / `+e+`;
|
|
int offset_w = imod(w, `+e+`);
|
|
int offset_d = (offset_h * `+e+` + offset_w) *
|
|
`+this.getOutputDepthSize()+`;
|
|
int in_d = d + offset_d;
|
|
|
|
float result = `+this.getInputSamplingString()+`;
|
|
setOutput(result);
|
|
}
|
|
`}return r.prototype.getHeightCoordString=function(){return this.dataFormat==="NHWC"?"coords[1]":"coords[2]"},r.prototype.getWidthCoordString=function(){return this.dataFormat==="NHWC"?"coords[2]":"coords[3]"},r.prototype.getDepthCoordString=function(){return this.dataFormat==="NHWC"?"coords[3]":"coords[1]"},r.prototype.getOutputDepthSize=function(){return this.dataFormat==="NHWC"?this.outputShape[3]:this.outputShape[1]},r.prototype.getInputSamplingString=function(){return this.dataFormat==="NHWC"?"getX(b, in_h, in_w, in_d)":"getX(b, in_d, in_h, in_w)"},r}(),Dd=function(r){this.variableNames=["X"],this.outputShape=[r,r],this.userCode=`
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
float val = coords[0] == coords[1] ? getX(coords[0]) : 0.0;
|
|
setOutput(val);
|
|
}
|
|
`},Fd=function(r){this.variableNames=["A"],this.outTexUsage=bn.DOWNLOAD;var t=Dn();this.outputShape=r,this.userCode=`
|
|
`+cc+`
|
|
|
|
void main() {
|
|
float x = getAAtOutCoords();
|
|
`+t.output+` = encode_float(x);
|
|
}
|
|
`},Pd=function(r){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=bn.DOWNLOAD;var t=Dn();this.outputShape=r,this.userCode=`
|
|
`+cc+`
|
|
|
|
void main() {
|
|
ivec3 coords = getOutputCoords();
|
|
float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z));
|
|
`+t.output+` = encode_float(x);
|
|
}
|
|
`},Nd=function(r,t,e){e===void 0&&(e=!1),this.variableNames=["A"];var n=Dn(),o=t[0],i=t[1];this.outputShape=r;var a="result";e&&(a="floor(result * 255. + 0.5)"),this.userCode=`
|
|
`+Na(r)+`
|
|
|
|
void main() {
|
|
ivec3 coords = getOutputCoords();
|
|
|
|
int flatIndex = getFlatIndex(coords);
|
|
int offset = imod(flatIndex, 4);
|
|
|
|
flatIndex = idiv(flatIndex, 4, 1.);
|
|
|
|
int r = flatIndex / `+i+`;
|
|
int c = imod(flatIndex, `+i+`);
|
|
vec2 uv = (vec2(c, r) + halfCR) / vec2(`+i+".0, "+o+`.0);
|
|
vec4 values = `+n.texture2D+`(A, uv);
|
|
|
|
float result;
|
|
|
|
if(offset == 0) {
|
|
result = values[0];
|
|
} else if(offset == 1) {
|
|
result = values[1];
|
|
} else if(offset == 2) {
|
|
result = values[2];
|
|
} else {
|
|
result = values[3];
|
|
}
|
|
|
|
`+n.output+" = vec4("+a+`, 0., 0., 0.);
|
|
}
|
|
`},Od=function(r,t,e){e===void 0&&(e=!1),this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;var n=Dn(),o=t[0],i=t[1];this.outputShape=r;var a="",s="result";e&&(s="floor(result * 255. + 0.5)");for(var u=0;u<=1;u++)for(var c=0;c<=1;c++){var l=2*u+c;a+=`
|
|
localCoords = coords;
|
|
if(localCoords[2] + `+c+" < "+r[2]+`) {
|
|
localCoords[2] += `+c+`;
|
|
if(localCoords[1] + `+u+" < "+r[1]+`) {
|
|
localCoords[1] += `+u+`;
|
|
|
|
flatIndex = getFlatIndex(localCoords);
|
|
offset = imod(flatIndex, 4);
|
|
|
|
flatIndex = idiv(flatIndex, 4, 1.);
|
|
|
|
r = flatIndex / `+i+`;
|
|
c = imod(flatIndex, `+i+`);
|
|
uv = (vec2(c, r) + halfCR) / vec2(`+i+".0, "+o+`.0);
|
|
values = `+n.texture2D+`(A, uv);
|
|
|
|
if(offset == 0) {
|
|
result[`+l+`] = values[0];
|
|
} else if(offset == 1) {
|
|
result[`+l+`] = values[1];
|
|
} else if(offset == 2) {
|
|
result[`+l+`] = values[2];
|
|
} else {
|
|
result[`+l+`] = values[3];
|
|
}
|
|
}
|
|
}
|
|
`}this.userCode=`
|
|
`+Na(r)+`
|
|
|
|
void main() {
|
|
ivec3 coords = getOutputCoords();
|
|
|
|
vec4 result = vec4(0.);
|
|
int flatIndex, r, c, offset;
|
|
ivec3 localCoords;
|
|
vec2 uv;
|
|
vec4 values;
|
|
|
|
`+a+`
|
|
|
|
`+n.output+" = "+s+`;
|
|
}
|
|
`},Md="return real * expR - imag * expI;",Ld="return real * expI + imag * expR;",yc=function(r,t,e){this.variableNames=["real","imag"];var n=t[1];this.outputShape=t;var o=e?"2.0 * "+Math.PI:"-2.0 * "+Math.PI,i=e?n+".0":"1.0";this.userCode=`
|
|
const float exponentMultiplier = `+o+`;
|
|
|
|
float unaryOpComplex(float real, float expR, float imag, float expI) {
|
|
`+r+`
|
|
}
|
|
|
|
float mulMatDFT(int batch, int index) {
|
|
float indexRatio = float(index) / float(`+n+`);
|
|
float exponentMultiplierTimesIndexRatio =
|
|
exponentMultiplier * indexRatio;
|
|
|
|
float result = 0.0;
|
|
|
|
for (int i = 0; i < `+n+`; i++) {
|
|
// x = (-2|2 * PI / N) * index * i;
|
|
float x = exponentMultiplierTimesIndexRatio * float(i);
|
|
float expR = cos(x);
|
|
float expI = sin(x);
|
|
float real = getReal(batch, i);
|
|
float imag = getImag(batch, i);
|
|
|
|
result +=
|
|
unaryOpComplex(real, expR, imag, expI) / `+i+`;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
setOutput(mulMatDFT(coords[0], coords[1]));
|
|
}
|
|
`},Wd=function(){function r(t,e){this.outputShape=[],this.variableNames=["x"],this.outputShape=t,this.userCode=`
|
|
uniform float value;
|
|
void main() {
|
|
// Input can be obtained from uniform value.
|
|
setOutput(value);
|
|
}
|
|
`}return r.prototype.getCustomSetupFunc=function(t){var e=this;return function(n,o){e.valueLoc==null&&(e.valueLoc=n.getUniformLocationNoThrow(o,"value")),n.gl.uniform1f(e.valueLoc,t)}},r}(),Qd=function(r,t,e){this.variableNames=["A","indices"];var n=r.slice();n[e]=t,this.outputShape=n,this.rank=n.length;var o=$t(this.rank),i=function(a,s){var u=a.length;if(u>4)throw Error("Gather for rank "+u+" is not yet supported");if(u===1)return"int(getIndices(resRC))";for(var c=["resRC.x","resRC.y","resRC.z","resRC.w"],l=[],f=0;f<a.length;f++)f===s?l.push("int(getIndices("+c[f]+"))"):l.push(""+c[f]);return l.join()}(r,e);this.userCode=`
|
|
void main() {
|
|
`+o+` resRC = getOutputCoords();
|
|
setOutput(getA(`+i+`));
|
|
}
|
|
`},_d=function(r,t,e){this.sliceDim=r,this.strides=t,this.variableNames=["x","indices"],this.outputShape=e;var n=$t(t.length),o=$t(e.length),i=this.sliceDim>1?"strides[j]":"strides";this.userCode=`
|
|
`+n+" strides = "+n+"("+this.strides+`);
|
|
void main() {
|
|
`+o+` coords = getOutputCoords();
|
|
int flattenIndex = 0;
|
|
for (int j = 0; j < `+this.sliceDim+`; j++) {
|
|
int index = round(getIndices(coords[0], j));
|
|
flattenIndex += index * `+i+`;
|
|
}
|
|
setOutput(getX(flattenIndex, coords[1]));
|
|
}
|
|
`};function xc(r,t){var e=Dn();return vu(r,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;
|
|
}`)}function bc(r,t){return yu(r,t,new Float32Array([-1,1,0,0,1,-1,-1,0,0,0,1,1,0,1,1,1,-1,0,1,0]))}function wc(r,t){return xu(r,t,new Uint16Array([0,1,2,2,1,3]))}function Jo(r,t,e,n,o,i,a){wu(e,n);var s=bu(r,t),u=r.TEXTURE_2D;return We(r,t,function(){return r.bindTexture(u,s)}),We(r,t,function(){return r.texParameteri(u,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE)}),We(r,t,function(){return r.texParameteri(u,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE)}),We(r,t,function(){return r.texParameteri(u,r.TEXTURE_MIN_FILTER,r.NEAREST)}),We(r,t,function(){return r.texParameteri(u,r.TEXTURE_MAG_FILTER,r.NEAREST)}),We(r,t,function(){return r.texImage2D(u,0,o,e,n,0,i,a,null)}),We(r,t,function(){return r.bindTexture(r.TEXTURE_2D,null)}),s}function Ec(r,t,e,n,o){var i=fi(e,n);return Jo(r,t,i[0],i[1],o.internalFormatFloat,o.textureFormatFloat,r.FLOAT)}function Cc(r,t,e,n,o){var i=fi(e,n);return Jo(r,t,i[0],i[1],o.internalFormatHalfFloat,o.textureFormatFloat,o.textureTypeHalfFloat)}function Ic(r,t,e,n,o){var i=fi(e,n);return Jo(r,t,i[0],i[1],r.RGBA,r.RGBA,r.UNSIGNED_BYTE)}function Sc(r,t,e,n,o){var i=Lo(e,n);return Jo(r,t,i[0],i[1],o.internalFormatPackedFloat,r.RGBA,r.FLOAT)}function Rc(r,t,e,n,o){var i=Lo(e,n);return Jo(r,t,i[0],i[1],o.internalFormatPackedHalfFloat,r.RGBA,o.textureTypeHalfFloat)}function Bc(r,t,e,n){return We(r,t,function(){return r.bindBuffer(r.ARRAY_BUFFER,n)}),ha(r,t,e,"clipSpacePos",n,3,20,0)&&ha(r,t,e,"uv",n,2,20,12)}function kc(r,t,e,n,o,i,a){var s,u,c;We(r,t,function(){return r.bindTexture(r.TEXTURE_2D,e)}),i instanceof Uint8Array?(s=new Uint8Array(n*o*4),u=r.UNSIGNED_BYTE,c=r.RGBA):(s=new Float32Array(n*o*4),u=r.FLOAT,c=a.internalFormatPackedFloat),s.set(i),We(r,t,function(){return r.texImage2D(r.TEXTURE_2D,0,c,n,o,0,r.RGBA,u,s)}),We(r,t,function(){return r.bindTexture(r.TEXTURE_2D,null)})}function Tc(r,t,e,n){We(r,t,function(){return r.bindTexture(r.TEXTURE_2D,e)}),n.data instanceof Uint8Array?We(r,t,function(){return r.texImage2D(r.TEXTURE_2D,0,r.RGBA,n.width,n.height,0,r.RGBA,r.UNSIGNED_BYTE,n.data)}):We(r,t,function(){return r.texImage2D(r.TEXTURE_2D,0,r.RGBA,r.RGBA,r.UNSIGNED_BYTE,n)}),We(r,t,function(){return r.bindTexture(r.TEXTURE_2D,null)})}function Dc(r,t,e,n,o){var i=r.createBuffer();We(r,t,function(){return r.bindBuffer(r.PIXEL_PACK_BUFFER,i)});var a=16*e*n;return We(r,t,function(){return r.bufferData(r.PIXEL_PACK_BUFFER,a,r.STREAM_READ)}),We(r,t,function(){return r.readPixels(0,0,n,e,r.RGBA,r.FLOAT,0)}),We(r,t,function(){return r.bindBuffer(r.PIXEL_PACK_BUFFER,null)}),i}function Fc(r,t,e){var n=r,o=new Float32Array(e);return n.bindBuffer(n.PIXEL_PACK_BUFFER,t),n.getBufferSubData(n.PIXEL_PACK_BUFFER,0,o),n.bindBuffer(n.PIXEL_PACK_BUFFER,null),o}function Pc(r,t,e,n,o){var i=fi(e,n),a=i[0],s=i[1],u=new Uint8Array(e*n*4);return We(r,t,function(){return r.readPixels(0,0,a,s,o.downloadTextureFormat,r.UNSIGNED_BYTE,u)}),new Float32Array(u.buffer)}function Nc(r,t,e,n,o,i,a,s){var u=r,c=new Float32Array(function(l,f){var h=Lo(l,f);return h[0]*h[1]*4}(i,a));return u.bindBuffer(u.PIXEL_PACK_BUFFER,t),u.getBufferSubData(u.PIXEL_PACK_BUFFER,0,c),u.bindBuffer(u.PIXEL_PACK_BUFFER,null),c}function Oc(r,t,e,n){var o=new Float32Array(e*n*4);return We(r,t,function(){return r.readPixels(0,0,n,e,r.RGBA,r.FLOAT,o)}),o}var zd=Object.freeze({createVertexShader:xc,createVertexBuffer:bc,createIndexBuffer:wc,createFloat32MatrixTexture:Ec,createFloat16MatrixTexture:Cc,createUnsignedBytesMatrixTexture:Ic,createPackedMatrixTexture:Sc,createFloat16PackedMatrixTexture:Rc,bindVertexProgramAttributeStreams:Bc,uploadDenseMatrixToTexture:kc,uploadPixelDataToTexture:Tc,createBufferFromOutputTexture:Dc,downloadFloat32MatrixFromBuffer:Fc,downloadByteEncodedFloatMatrixFromOutputTexture:Pc,downloadPackedMatrixFromBuffer:Nc,downloadMatrixFromPackedOutputTexture:Oc}),Mc=function(){function r(t){this.outputTexture=null,this.program=null,this.disposed=!1,this.vertexAttrsAreBound=!1,this.itemsToPoll=[];var e=J().getNumber("WEBGL_VERSION");t!=null?(this.gl=t,li(e,t)):this.gl=cr(e);var n="WEBGL_color_buffer_float";if(J().getNumber("WEBGL_VERSION")===1){if(this.textureFloatExtension=Wo(this.gl,this.debug,"OES_texture_float"),Hn(this.gl,"OES_texture_half_float"))this.textureHalfFloatExtension=Wo(this.gl,this.debug,"OES_texture_half_float");else if(J().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),Hn(this.gl,"EXT_color_buffer_half_float"))this.colorBufferHalfFloatExtension=Wo(this.gl,this.debug,"EXT_color_buffer_half_float");else if(J().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",Hn(this.gl,n))this.colorBufferFloatExtension=this.gl.getExtension(n);else{if(!Hn(this.gl,"EXT_color_buffer_half_float"))throw new Error("GL context does not support color renderable floats");this.colorBufferHalfFloatExtension=this.gl.getExtension("EXT_color_buffer_half_float")}this.vertexBuffer=bc(this.gl,this.debug),this.indexBuffer=wc(this.gl,this.debug),this.framebuffer=Eu(this.gl,this.debug),this.textureConfig=fa(this.gl,this.textureHalfFloatExtension)}return Object.defineProperty(r.prototype,"debug",{get:function(){return J().getBool("DEBUG")},enumerable:!0,configurable:!0}),r.prototype.dispose=function(){var t=this;if(!this.disposed){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.");var e=this.gl;We(e,this.debug,function(){return e.finish()}),We(e,this.debug,function(){return e.bindFramebuffer(e.FRAMEBUFFER,null)}),We(e,this.debug,function(){return e.deleteFramebuffer(t.framebuffer)}),We(e,this.debug,function(){return e.bindBuffer(e.ARRAY_BUFFER,null)}),We(e,this.debug,function(){return e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null)}),We(e,this.debug,function(){return e.deleteBuffer(t.indexBuffer)}),this.disposed=!0}},r.prototype.createFloat32MatrixTexture=function(t,e){return this.throwIfDisposed(),Ec(this.gl,this.debug,t,e,this.textureConfig)},r.prototype.createFloat16MatrixTexture=function(t,e){return this.throwIfDisposed(),Cc(this.gl,this.debug,t,e,this.textureConfig)},r.prototype.createUnsignedBytesMatrixTexture=function(t,e){return this.throwIfDisposed(),Ic(this.gl,this.debug,t,e,this.textureConfig)},r.prototype.uploadPixelDataToTexture=function(t,e){this.throwIfDisposed(),Tc(this.gl,this.debug,t,e)},r.prototype.uploadDenseMatrixToTexture=function(t,e,n,o){this.throwIfDisposed(),kc(this.gl,this.debug,t,e,n,o,this.textureConfig)},r.prototype.createFloat16PackedMatrixTexture=function(t,e){return this.throwIfDisposed(),Rc(this.gl,this.debug,t,e,this.textureConfig)},r.prototype.createPackedMatrixTexture=function(t,e){return this.throwIfDisposed(),Sc(this.gl,this.debug,t,e,this.textureConfig)},r.prototype.deleteMatrixTexture=function(t){var e=this;this.throwIfDisposed(),this.outputTexture===t&&(da(this.gl,this.debug,this.framebuffer),this.outputTexture=null),We(this.gl,this.debug,function(){return e.gl.deleteTexture(t)})},r.prototype.downloadByteEncodedFloatMatrixFromOutputTexture=function(t,e,n){var o=this;return this.downloadMatrixDriver(t,function(){return Pc(o.gl,o.debug,e,n,o.textureConfig)})},r.prototype.downloadPackedMatrixFromBuffer=function(t,e,n,o,i,a){return Nc(this.gl,t,0,0,0,i,a,this.textureConfig)},r.prototype.downloadFloat32MatrixFromBuffer=function(t,e){return Fc(this.gl,t,e)},r.prototype.createBufferFromTexture=function(t,e,n){this.bindTextureToFrameBuffer(t);var o=Dc(this.gl,this.debug,e,n,this.textureConfig);return this.unbindTextureToFrameBuffer(),o},r.prototype.createAndWaitForFence=function(){var t=this.createFence(this.gl);return this.pollFence(t)},r.prototype.createFence=function(t){var e,n,o=this;if(J().getBool("WEBGL_FENCE_API_ENABLED")){var i=t,a=i.fenceSync(i.SYNC_GPU_COMMANDS_COMPLETE,0);t.flush(),n=function(){var s=i.clientWaitSync(a,0,0);return s===i.ALREADY_SIGNALED||s===i.CONDITION_SATISFIED},e=a}else J().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?(e=this.beginQuery(),this.endQuery(),n=function(){return o.isQueryAvailable(e,J().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))}):n=function(){return!0};return{query:e,isFencePassed:n}},r.prototype.downloadMatrixFromPackedTexture=function(t,e,n){var o=this;return this.downloadMatrixDriver(t,function(){return Oc(o.gl,o.debug,e,n)})},r.prototype.createProgram=function(t){this.throwIfDisposed();var e=this.gl,n=gu(e,this.debug,t),o=xc(e,this.debug),i=mu(e,this.debug);return We(e,this.debug,function(){return e.attachShader(i,o)}),We(e,this.debug,function(){return e.attachShader(i,n)}),Au(e,this.debug,i),this.debug&&pi(e,this.debug,i),this.vertexAttrsAreBound||(this.setProgram(i),this.vertexAttrsAreBound=Bc(e,this.debug,this.program,this.vertexBuffer)),i},r.prototype.deleteProgram=function(t){var e=this;this.throwIfDisposed(),t===this.program&&(this.program=null),t!=null&&We(this.gl,this.debug,function(){return e.gl.deleteProgram(t)})},r.prototype.setProgram=function(t){var e=this;this.throwIfDisposed(),this.program=t,this.program!=null&&this.debug&&pi(this.gl,this.debug,this.program),We(this.gl,this.debug,function(){return e.gl.useProgram(t)})},r.prototype.getUniformLocation=function(t,e,n){return n===void 0&&(n=!0),this.throwIfDisposed(),n?Iu(this.gl,this.debug,t,e):Su(this.gl,t,e)},r.prototype.getAttributeLocation=function(t,e){var n=this;return this.throwIfDisposed(),We(this.gl,this.debug,function(){return n.gl.getAttribLocation(t,e)})},r.prototype.getUniformLocationNoThrow=function(t,e){return this.throwIfDisposed(),this.gl.getUniformLocation(t,e)},r.prototype.setInputMatrixTexture=function(t,e,n){this.throwIfDisposed(),this.throwIfNoProgram(),Ru(this.gl,this.debug,this.program,t,e,n)},r.prototype.setOutputMatrixTexture=function(t,e,n){this.setOutputMatrixTextureDriver(t,n,e)},r.prototype.setOutputPackedMatrixTexture=function(t,e,n){this.throwIfDisposed();var o=Lo(e,n),i=o[0],a=o[1];this.setOutputMatrixTextureDriver(t,i,a)},r.prototype.setOutputMatrixWriteRegion=function(t,e,n,o){this.setOutputMatrixWriteRegionDriver(n,t,o,e)},r.prototype.setOutputPackedMatrixWriteRegion=function(t,e,n,o){throw new Error("setOutputPackedMatrixWriteRegion not implemented.")},r.prototype.debugValidate=function(){this.program!=null&&pi(this.gl,this.debug,this.program),Qo(this.gl)},r.prototype.executeProgram=function(){this.throwIfDisposed(),this.throwIfNoProgram();var t=this.gl;this.debug&&this.debugValidate(),We(t,this.debug,function(){return t.drawElements(t.TRIANGLES,6,t.UNSIGNED_SHORT,0)})},r.prototype.blockUntilAllProgramsCompleted=function(){var t=this;this.throwIfDisposed(),We(this.gl,this.debug,function(){return t.gl.finish()})},r.prototype.getQueryTimerExtension=function(){return this.disjointQueryTimerExtension==null&&(this.disjointQueryTimerExtension=Wo(this.gl,this.debug,J().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2?"EXT_disjoint_timer_query_webgl2":"EXT_disjoint_timer_query")),this.disjointQueryTimerExtension},r.prototype.getQueryTimerExtensionWebGL2=function(){return this.getQueryTimerExtension()},r.prototype.getQueryTimerExtensionWebGL1=function(){return this.getQueryTimerExtension()},r.prototype.beginQuery=function(){if(J().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){var t=this.gl,e=this.getQueryTimerExtensionWebGL2(),n=t.createQuery();return t.beginQuery(e.TIME_ELAPSED_EXT,n),n}var o=this.getQueryTimerExtensionWebGL1(),i=o.createQueryEXT();return o.beginQueryEXT(o.TIME_ELAPSED_EXT,i),i},r.prototype.endQuery=function(){if(J().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")!==2){var t=this.getQueryTimerExtensionWebGL1();t.endQueryEXT(t.TIME_ELAPSED_EXT)}else{var e=this.gl,n=this.getQueryTimerExtensionWebGL2();e.endQuery(n.TIME_ELAPSED_EXT)}},r.prototype.waitForQueryAndGetTime=function(t){return xe(this,void 0,void 0,function(){var e=this;return Ie(this,function(n){switch(n.label){case 0:return[4,Ht(function(){return e.disposed||e.isQueryAvailable(t,J().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))})];case 1:return n.sent(),[2,this.getQueryTime(t,J().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))]}})})},r.prototype.getQueryTime=function(t,e){if(e===0)return null;if(e===2){var n=this.gl;return n.getQueryParameter(t,n.QUERY_RESULT)/1e6}var o=this.getQueryTimerExtensionWebGL1();return o.getQueryObjectEXT(t,o.QUERY_RESULT_EXT)/1e6},r.prototype.isQueryAvailable=function(t,e){if(e===0)return!0;if(e===2){var n=this.gl,o=this.getQueryTimerExtensionWebGL2(),i=n.getQueryParameter(t,n.QUERY_RESULT_AVAILABLE);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(o.GPU_DISJOINT_EXT)),i&&!this.disjoint}return i=(o=this.getQueryTimerExtensionWebGL1()).getQueryObjectEXT(t,o.QUERY_RESULT_AVAILABLE_EXT),this.disjoint==null&&(this.disjoint=this.gl.getParameter(o.GPU_DISJOINT_EXT)),i&&!this.disjoint},r.prototype.pollFence=function(t){var e=this;return new Promise(function(n){e.addItemToPoll(function(){return t.isFencePassed()},function(){return n()})})},r.prototype.pollItems=function(){for(var t=function(n){for(var o=0;o<n.length&&n[o]();++o);return o-1}(this.itemsToPoll.map(function(n){return n.isDoneFn})),e=0;e<=t;++e)(0,this.itemsToPoll[e].resolveFn)();this.itemsToPoll=this.itemsToPoll.slice(t+1)},r.prototype.addItemToPoll=function(t,e){var n=this;this.itemsToPoll.push({isDoneFn:t,resolveFn:e}),this.itemsToPoll.length>1||Ht(function(){return n.pollItems(),n.itemsToPoll.length===0})},r.prototype.bindTextureToFrameBuffer=function(t){this.throwIfDisposed(),vi(this.gl,this.debug,t,this.framebuffer),this.debug&&Qo(this.gl)},r.prototype.unbindTextureToFrameBuffer=function(){this.outputTexture!=null?(vi(this.gl,this.debug,this.outputTexture,this.framebuffer),this.debug&&Qo(this.gl)):da(this.gl,this.debug,this.framebuffer)},r.prototype.downloadMatrixDriver=function(t,e){this.bindTextureToFrameBuffer(t);var n=e();return this.unbindTextureToFrameBuffer(),n},r.prototype.setOutputMatrixTextureDriver=function(t,e,n){this.throwIfDisposed();var o=this.gl;vi(o,this.debug,t,this.framebuffer),this.debug&&Qo(o),this.outputTexture=t,We(o,this.debug,function(){return o.viewport(0,0,e,n)}),We(o,this.debug,function(){return o.scissor(0,0,e,n)})},r.prototype.setOutputMatrixWriteRegionDriver=function(t,e,n,o){var i=this;this.throwIfDisposed(),We(this.gl,this.debug,function(){return i.gl.scissor(t,e,n,o)})},r.prototype.throwIfDisposed=function(){if(this.disposed)throw new Error("Attempted to use disposed GPGPUContext.")},r.prototype.throwIfNoProgram=function(){if(this.program==null)throw new Error("No GPU program is currently set.")},r}();function Lc(r,t){if(r.length!==t.length)throw Error("Binary was compiled with "+r.length+" inputs, but was executed with "+t.length+" inputs");r.forEach(function(e,n){var o=e.logicalShape,i=t[n],a=i.shape;if(!Ke(o,a))throw Error("Binary was compiled with different shapes than the current args. Shapes "+o+" and "+a+" must match");if(!e.isUniform||!i.isUniform){var s=e.texShape,u=i.isUniform?null:i.texData.texShape;if(!Ke(s,u))throw Error("Binary was compiled with different texture shapes than the current args. Shape "+s+" and "+u+" must match")}})}var Ud=function(r,t,e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=r;for(var n=e.filterWidth,o=e.inChannels,i=e.strideWidth,a=e.strideHeight,s=e.padInfo,u=e.outWidth,c=e.dilationWidth,l=e.dilationHeight,f=e.dataFormat,h=s.left,d=s.top,p=o*n,v=Dn(),g=f==="channelsLast",A=g?0:1,w=g?1:2,E="",x=0;x<=1;x++)for(var C=0;C<=1;C++)E+=`
|
|
blockIndex = rc.y + `+C+`;
|
|
pos = rc.x + `+x+`;
|
|
|
|
if(blockIndex < `+r[1]+" && pos < "+r[0]+`) {
|
|
offsetY = int(blockIndex / (`+u+")) * "+a+" - "+d+`;
|
|
d0 = offsetY + `+l+" * (pos / "+p+`);
|
|
|
|
if(d0 < `+t[A]+` && d0 >= 0) {
|
|
|
|
offsetX = int(mod(float(blockIndex), `+u+".) * "+i+". - "+h+`.);
|
|
d1 = offsetX + `+c+" * (int(mod(float(pos), "+p+".) / "+o+`.));
|
|
|
|
if(d1 < `+t[w]+` && d1 >= 0) {
|
|
|
|
ch = int(mod(float(pos), `+o+`.));
|
|
|
|
if (`+g+`) {
|
|
innerDims = vec2(d1, ch);
|
|
result[`+(2*x+C)+`] = getChannel(
|
|
getA(d0, int(innerDims.x),
|
|
int(innerDims.y)), innerDims);
|
|
} else {
|
|
innerDims = vec2(d0, d1);
|
|
result[`+(2*x+C)+`] = 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;
|
|
|
|
`+E+`
|
|
|
|
`+v.output+` = result;
|
|
}
|
|
`},Hd=function(r,t,e,n,o){this.variableNames=["x"],this.outputShape=[];var i,a=t,s=r[3]-1;this.outputShape=r;var u="float("+e+") + float("+n+") * sum";i=o===.5?"inversesqrt("+u+")":o===1?"1.0/("+u+")":"exp(log("+u+") * float(-"+o+"));",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 <= `+s+`) {
|
|
float z = getX(b, r, c, idx);
|
|
sum += z * z;
|
|
}
|
|
}
|
|
float val = x * `+i+`;
|
|
setOutput(val);
|
|
}
|
|
`},jd=function(r,t,e,n,o){this.variableNames=["inputImage","outputImage","dy"],this.outputShape=[],this.outputShape=r,this.depth=r[3],this.depthRadius=t,this.bias=e,this.alpha=n,this.beta=o,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(`+n+") * norm + float("+e+`);
|
|
|
|
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(`+n+`)
|
|
* float(`+o+`)
|
|
* getInputImage(b ,r ,c, k) * getOutputImage(b, r, c, d)
|
|
/ norm;
|
|
if (k == d) {
|
|
dyi += pow(norm, -1.0 * `+o+`);
|
|
}
|
|
if (k == coords[3]) {
|
|
dyi *= getDy(b, r, c, d);
|
|
result += dyi;
|
|
}
|
|
}
|
|
else {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
setOutput(result);
|
|
}
|
|
`},Vd=function(r,t,e,n,o){this.variableNames=["x"],this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0;var i,a=t,s=r[3]-1;this.outputShape=r;var u="float("+e+") + float("+n+") * sum";i=o===.5?"inversesqrt("+u+")":o===1?"1.0/("+u+")":"exp(log("+u+") * float(-"+o+"));",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(`+s+`));
|
|
|
|
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 * `+i+`;
|
|
setOutput(result);
|
|
}
|
|
`},Gd=function(r){this.variableNames=["dy","maxPos"],this.outputShape=r.inShape;var t=r.strideHeight,e=r.strideWidth,n=r.dilationHeight,o=r.effectiveFilterHeight,i=r.effectiveFilterWidth,a=o-1-r.padInfo.top,s=i-1-r.padInfo.left,u=o*i-1;this.userCode=`
|
|
const ivec2 pads = ivec2(`+a+", "+s+`);
|
|
|
|
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 < `+o+`;
|
|
wR += `+n+`) {
|
|
float dyR = float(dyRCorner + wR) / `+t+`.0;
|
|
|
|
if (dyR < 0.0 || dyR >= `+r.outHeight+`.0 || fract(dyR) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyR = int(dyR);
|
|
|
|
for (int wC = 0; wC < `+i+`; wC++) {
|
|
float dyC = float(dyCCorner + wC) / `+e+`.0;
|
|
|
|
if (dyC < 0.0 || dyC >= `+r.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 * `+i+` + wC;
|
|
float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);
|
|
|
|
dotProd += dyValue * mask;
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`},Xd=function(r){this.variableNames=["dy","maxPos"],this.outputShape=r.inShape;var t=r.strideDepth,e=r.strideHeight,n=r.strideWidth,o=r.dilationDepth,i=r.dilationHeight,a=r.dilationWidth,s=r.effectiveFilterDepth,u=r.effectiveFilterHeight,c=r.effectiveFilterWidth,l=s-1-r.padInfo.front,f=u-1-r.padInfo.top,h=c-1-r.padInfo.left,d=s*u*c-1;this.userCode=`
|
|
const ivec3 pads = ivec3(`+l+", "+f+", "+h+`);
|
|
|
|
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 < `+s+`;
|
|
wD += `+o+`) {
|
|
float dyD = float(dyDCorner + wD) / `+t+`.0;
|
|
|
|
if (dyD < 0.0 || dyD >= `+r.outDepth+`.0 || fract(dyD) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyD = int(dyD);
|
|
|
|
for (int wR = 0; wR < `+u+`;
|
|
wR += `+i+`) {
|
|
float dyR = float(dyRCorner + wR) / `+e+`.0;
|
|
|
|
if (dyR < 0.0 || dyR >= `+r.outHeight+`.0 ||
|
|
fract(dyR) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyR = int(dyR);
|
|
|
|
for (int wC = 0; wC < `+c+`;
|
|
wC += `+a+`) {
|
|
float dyC = float(dyCCorner + wC) / `+n+`.0;
|
|
|
|
if (dyC < 0.0 || dyC >= `+r.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);
|
|
}
|
|
`},La=function(r,t,e,n,o,i,a){e===void 0&&(e=!1),n===void 0&&(n=!1),o===void 0&&(o=!1),i===void 0&&(i=null),a===void 0&&(a=!1),this.variableNames=["matrixA","matrixB"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t;var s=e?r[1]:r[2],u=Math.ceil(s/2),c=e?"i * 2, rc.y":"rc.y, i * 2",l=n?"rc.z, i * 2":"i * 2, rc.z",f=e?["a.xxyy","a.zzww"]:["a.xxzz","a.yyww"],h=n?["b.xzxz","b.ywyw"]:["b.xyxy","b.zwzw"],d="",p="";i&&(d=a?`vec4 activation(vec4 a) {
|
|
vec4 b = getPreluActivationWeightsAtOutCoords();
|
|
`+i+`
|
|
}`:`vec4 activation(vec4 x) {
|
|
`+i+`
|
|
}`,p="result = activation(result);");var v=o?"result += getBiasAtOutCoords();":"";o&&this.variableNames.push("bias"),a&&this.variableNames.push("preluActivationWeights"),this.userCode=`
|
|
`+d+`
|
|
|
|
const float sharedDimension = `+u+`.0;
|
|
|
|
vec4 dot2x2ARowBCol(ivec3 rc) {
|
|
vec4 result = vec4(0);
|
|
for (int i = 0; i < `+u+`; i++) {
|
|
vec4 a = getMatrixA(rc.x, `+c+`);
|
|
vec4 b = getMatrixB(rc.x, `+l+`);
|
|
|
|
// These swizzled products need to be separately added.
|
|
// See: https://github.com/tensorflow/tfjs/issues/1735
|
|
result += (`+f[0]+" * "+h[0]+`);
|
|
result += (`+f[1]+" * "+h[1]+`);
|
|
}
|
|
return result;
|
|
}
|
|
|
|
void main() {
|
|
ivec3 rc = getOutputCoords();
|
|
vec4 result = dot2x2ARowBCol(rc);
|
|
|
|
`+v+`
|
|
|
|
`+p+`
|
|
|
|
setOutput(result);
|
|
}
|
|
`},Jd=function(){function r(t,e,n){this.variableNames=["probs"],this.outputShape=[t,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 < `+(e-1)+`; i++) {
|
|
cdf += getProbs(batch, i);
|
|
|
|
if (r < cdf) {
|
|
setOutput(float(i));
|
|
return;
|
|
}
|
|
}
|
|
|
|
// If no other event happened, last event happened.
|
|
setOutput(float(`+(e-1)+`));
|
|
}
|
|
`}return r.prototype.getCustomSetupFunc=function(t){var e=this;return function(n,o){e.seedLoc==null&&(e.seedLoc=n.getUniformLocation(o,"seed")),n.gl.uniform1f(e.seedLoc,t)}},r}(),Kd=function(r,t,e,n){this.variableNames=["indices"],this.outputShape=[r,t],this.userCode=`
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
int index = round(getIndices(coords.x));
|
|
setOutput(mix(float(`+n+"), float("+e+`),
|
|
float(index == coords.y)));
|
|
}
|
|
`},Zd=function(r){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outputShape=r;var t=r.length;if(t===0)this.userCode=`
|
|
void main() {
|
|
setOutput(vec4(getA(), 0., 0., 0.));
|
|
}
|
|
`;else{var e=zn("rc",t),n=$t(t),o=function(s,u,c){if(s===1)return"rc > "+u[0];for(var l="",f=s-2;f<s;f++)l+=c[f]+" >= "+u[f],f<s-1&&(l+="||");return l}(t,r,e),i=function(s,u,c,l){if(s===1)return"";var f=l.slice(-2);return`
|
|
int r = `+f[0]+`;
|
|
int c = `+f[1]+`;
|
|
int rp1 = r + 1;
|
|
int cp1 = c + 1;
|
|
|
|
bool cEdge = cp1 >= `+u+`;
|
|
bool rEdge = rp1 >= `+c+`;
|
|
`}(t,r[r.length-1],r[r.length-2],e),a=function(s,u){var c=s.length,l=function(f,h){for(var d=[],p=0;p<=1;p++)for(var v=0;v<=1;v++){for(var g=(p===0?"r":"rp1")+", "+(v===0?"c":"cp1"),A=2;A<f;A++)g=h[h.length-1-A]+","+g;d.push(g)}return d}(c,u);return c===1?`getA(rc),
|
|
rc + 1 >= `+s[0]+` ? 0. : getA(rc + 1),
|
|
0, 0`:"getA("+l[0]+`),
|
|
cEdge ? 0. : getA(`+l[1]+`),
|
|
rEdge ? 0. : getA(`+l[2]+`),
|
|
rEdge || cEdge ? 0. : getA(`+l[3]+")"}(r,e);this.userCode=`
|
|
void main() {
|
|
`+n+` rc = getOutputCoords();
|
|
|
|
if(`+o+`) {
|
|
setOutput(vec4(0));
|
|
} else {
|
|
`+i+`
|
|
|
|
setOutput(vec4(`+a+`));
|
|
}
|
|
}
|
|
`}},qd=function(r,t,e){this.variableNames=["x"],this.outputShape=t.map(function(u,c){return u[0]+r[c]+u[1]});var n=r.length,o=$t(n),i=t.map(function(u){return u[0]}).join(","),a=t.map(function(u,c){return u[0]+r[c]}).join(","),s=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,n);this.userCode=n!==1?`
|
|
`+o+" start = "+o+"("+i+`);
|
|
`+o+" end = "+o+"("+a+`);
|
|
|
|
void main() {
|
|
`+o+` outC = getOutputCoords();
|
|
if (any(lessThan(outC, start)) || any(greaterThanEqual(outC, end))) {
|
|
setOutput(float(`+e+`));
|
|
} else {
|
|
`+o+` coords = outC - start;
|
|
setOutput(getX(`+s+`));
|
|
}
|
|
}
|
|
`:`
|
|
int start = `+i+`;
|
|
int end = `+a+`;
|
|
|
|
void main() {
|
|
int outC = getOutputCoords();
|
|
if (outC < start || outC >= end) {
|
|
setOutput(float(`+e+`));
|
|
} else {
|
|
setOutput(getX(outC - start));
|
|
}
|
|
}
|
|
`},Yd=function(r,t,e){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t.map(function(g,A){return g[0]+r[A]+g[1]});for(var n=r.length,o=$t(n),i=t.map(function(g){return g[0]}).join(","),a=t.map(function(g,A){return g[0]+r[A]}).join(","),s=zn("rc",n),u=zn("source",n),c=s[n-1]+" < "+this.outputShape[n-1],l=n===1?"source":"vec2("+u.slice(-2).join()+")",f=[o+" rc = outputLoc;",s[n-1]+` += 1;
|
|
if(`+c+`) {
|
|
`,n===1?"":`}
|
|
rc = outputLoc;
|
|
`+s[n-2]+` += 1;
|
|
if(`+s[n-2]+" < "+this.outputShape[n-2]+") {",n===1?"":" "+s[n-1]+` += 1;
|
|
if(`+c+") {"],h=n===1?"rc < start || rc >= end":"any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))",d="",p=0,v=n===1?2:4;p<v;p++)d+=`
|
|
`+f[p]+`
|
|
if (`+h+`) {
|
|
result[`+p+"] = float("+e+`);
|
|
} else {
|
|
`+o+` source = rc - start;
|
|
result[`+p+"] = getChannel(getX("+u.join()+"), "+l+`);
|
|
}
|
|
`;d+=n===1?"} ":"}}",this.userCode=`
|
|
const `+o+" start = "+o+"("+i+`);
|
|
const `+o+" end = "+o+"("+a+`);
|
|
|
|
void main() {
|
|
`+o+` outputLoc = getOutputCoords();
|
|
vec4 result = vec4(0.);
|
|
`+d+`
|
|
setOutput(result);
|
|
}
|
|
`},Wa=function(r,t,e){if(this.variableNames=["x"],t==="avg"&&e)throw new Error("Cannot compute positions for average pool.");var n=r.filterWidth,o=r.strideHeight,i=r.strideWidth,a=r.dilationHeight,s=r.dilationWidth,u=r.effectiveFilterHeight,c=r.effectiveFilterWidth,l=r.padInfo.top,f=r.padInfo.left;this.outputShape=r.outShape;var h=t==="avg",d="0.0";if(h||(d="-1.0 / 1e-20"),e)this.userCode=`
|
|
const ivec2 strides = ivec2(`+o+", "+i+`);
|
|
const ivec2 pads = ivec2(`+l+", "+f+`);
|
|
|
|
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 < `+u+`;
|
|
wR += `+a+`) {
|
|
int xR = xRCorner + wR;
|
|
|
|
if (xR < 0 || xR >= `+r.inHeight+`) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < `+c+`;
|
|
wC += `+s+`) {
|
|
int xC = xCCorner + wC;
|
|
|
|
if (xC < 0 || xC >= `+r.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 = wR * `+c+` + wC;
|
|
}
|
|
}
|
|
}
|
|
setOutput(float(minMaxPosition));
|
|
}
|
|
`;else{var p=t+"("+t+"("+t+"(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])";t==="avg"&&(p="avgValue / count");var v=4*Math.floor(n/4),g=n%4,A=`
|
|
if (`+h+`) {
|
|
avgValue += dot(values, ones);
|
|
} else {
|
|
minMaxValue = max(values, minMaxValue);
|
|
}
|
|
`;this.userCode=`
|
|
const ivec2 strides = ivec2(`+o+", "+i+`);
|
|
const ivec2 pads = ivec2(`+l+", "+f+`);
|
|
const float initializationValue = `+d+`;
|
|
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 >= `+r.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(`+d+`);
|
|
float avgValue = 0.0;
|
|
count = 0.0;
|
|
|
|
for (int wR = 0; wR < `+u+`;
|
|
wR += `+a+`) {
|
|
int xR = xRCorner + wR;
|
|
|
|
if (xR < 0 || xR >= `+r.inHeight+`) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < `+v+`; wC += 4) {
|
|
int xC = xCCorner + wC * `+s+`;
|
|
|
|
vec4 values = vec4(
|
|
getValue(batch, xR, xC, d),
|
|
getValue(batch, xR, xC + `+s+`, d),
|
|
getValue(batch, xR, xC + 2 * `+s+`, d),
|
|
getValue(batch, xR, xC + 3 * `+s+`, d)
|
|
);
|
|
|
|
`+A+`
|
|
}
|
|
|
|
int xC = xCCorner + `+v+`;
|
|
if (`+(g===1)+`) {
|
|
vec4 values = vec4(
|
|
getValue(batch, xR, xC, d),
|
|
initializationValue,
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
`+A+`
|
|
} else if (`+(g===2)+`) {
|
|
vec4 values = vec4(
|
|
getValue(batch, xR, xC, d),
|
|
getValue(batch, xR, xC + `+s+`, d),
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
`+A+`
|
|
} else if (`+(g===3)+`) {
|
|
vec4 values = vec4(
|
|
getValue(batch, xR, xC, d),
|
|
getValue(batch, xR, xC + `+s+`, d),
|
|
getValue(batch, xR, xC + 2 * `+s+`, d),
|
|
initializationValue
|
|
);
|
|
|
|
`+A+`
|
|
}
|
|
}
|
|
setOutput(`+p+`);
|
|
}
|
|
`}},Qa=function(r,t,e){if(this.variableNames=["x"],t==="avg"&&e)throw new Error("Cannot compute positions for average pool.");var n=r.filterWidth,o=r.strideDepth,i=r.strideHeight,a=r.strideWidth,s=r.dilationDepth,u=r.dilationHeight,c=r.dilationWidth,l=r.effectiveFilterDepth,f=r.effectiveFilterHeight,h=r.effectiveFilterWidth,d=r.padInfo.front,p=r.padInfo.top,v=r.padInfo.left;this.outputShape=r.outShape;var g=t==="avg",A="0.0";if(g||(A="-1.0 / 1e-20"),e)this.userCode=`
|
|
const ivec3 strides =
|
|
ivec3(`+o+", "+i+", "+a+`);
|
|
const ivec3 pads = ivec3(`+d+", "+p+", "+v+`);
|
|
|
|
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 < `+l+`;
|
|
wD += `+s+`) {
|
|
int xD = xDCorner + wD;
|
|
|
|
if (xD < 0 || xD >= `+r.inDepth+`) {
|
|
continue;
|
|
}
|
|
|
|
for (int wR = 0; wR < `+f+`;
|
|
wR += `+u+`) {
|
|
int xR = xRCorner + wR;
|
|
|
|
if (xR < 0 || xR >= `+r.inHeight+`) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < `+h+`;
|
|
wC += `+c+`) {
|
|
int xC = xCCorner + wC;
|
|
|
|
if (xC < 0 || xC >= `+r.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 >= currMinMaxValue) {
|
|
minMaxValue = value;
|
|
minMaxValueFound = 1.0;
|
|
minMaxPosition =
|
|
wD * `+f+" * "+h+` +
|
|
wR * `+h+` + wC;;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
setOutput(float(minMaxPosition));
|
|
}
|
|
`;else{var w=t+"("+t+"("+t+"(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])";t==="avg"&&(w="avgValue / count");var E=4*Math.floor(n/4),x=n%4,C=`
|
|
if (`+g+`) {
|
|
avgValue += dot(values, ones);
|
|
} else {
|
|
minMaxValue = max(values, minMaxValue);
|
|
}
|
|
`;this.userCode=`
|
|
const ivec3 strides =
|
|
ivec3(`+o+", "+i+", "+a+`);
|
|
const ivec3 pads = ivec3(`+d+", "+p+", "+v+`);
|
|
const float initializationValue = `+A+`;
|
|
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 >= `+r.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(`+A+`);
|
|
float avgValue = 0.0;
|
|
count = 0.0;
|
|
|
|
for (int wD = 0; wD < `+l+`;
|
|
wD += `+s+`) {
|
|
int xD = xDCorner + wD;
|
|
|
|
if (xD < 0 || xD >= `+r.inDepth+`) {
|
|
continue;
|
|
}
|
|
|
|
for (int wR = 0; wR < `+f+`;
|
|
wR += `+u+`) {
|
|
int xR = xRCorner + wR;
|
|
|
|
if (xR < 0 || xR >= `+r.inHeight+`) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < `+E+`; wC += 4) {
|
|
int xC = xCCorner + wC * `+c+`;
|
|
|
|
vec4 values = vec4(
|
|
getValue(batch, xD, xR, xC, ch),
|
|
getValue(batch, xD, xR, xC + `+c+`, ch),
|
|
getValue(batch, xD, xR, xC + 2 * `+c+`, ch),
|
|
getValue(batch, xD, xR, xC + 3 * `+c+`, ch)
|
|
);
|
|
|
|
`+C+`
|
|
}
|
|
|
|
int xC = xCCorner + `+E+`;
|
|
if (`+(x===1)+`) {
|
|
vec4 values = vec4(
|
|
getValue(batch, xD, xR, xC, ch),
|
|
initializationValue,
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
`+C+`
|
|
} else if (`+(x===2)+`) {
|
|
vec4 values = vec4(
|
|
getValue(batch, xD, xR, xC, ch),
|
|
getValue(batch, xD, xR, xC + `+c+`, ch),
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
`+C+`
|
|
} else if (`+(x===3)+`) {
|
|
vec4 values = vec4(
|
|
getValue(batch, xD, xR, xC, ch),
|
|
getValue(batch, xD, xR, xC + `+c+`, ch),
|
|
getValue(batch, xD, xR, xC + 2 * `+c+`, ch),
|
|
initializationValue
|
|
);
|
|
|
|
`+C+`
|
|
}
|
|
}
|
|
setOutput(`+w+`);
|
|
}
|
|
}
|
|
`}},$d=function(r,t){this.variableNames=["x"];var e=r.windowSize,n=r.batchSize,o=r.inSize,i=Math.ceil(o/e);this.outputShape=[n,i];var a="0.0",s="";t==="prod"?a="1.0":t==="min"?(a="1.0 / 1e-20",s="min"):t==="max"&&(a="-1.0 / 1e-20",s="max");var 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");var c=4*Math.floor(e/4),l=e%4,f=`
|
|
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 = `+s+`(values, minMaxValue);
|
|
}
|
|
`,h="vec4";t==="all"?(a="1.0",f=`
|
|
bool reducedAllValue = all(values);
|
|
float floatedReducedAllValue = float(reducedAllValue);
|
|
allValue = float(allValue >= 1.0 && floatedReducedAllValue >= 1.0);
|
|
`,h="bvec4"):t==="any"&&(a="0.0",f=`
|
|
bool reducedAnyValue = any(values);
|
|
float floatedReducedAnyValue = float(reducedAnyValue);
|
|
anyValue = float(anyValue >= 1.0 || floatedReducedAnyValue >= 1.0);
|
|
`,h="bvec4");var d="";o%e>0&&(d=`
|
|
if (inIdx < 0 || inIdx >= `+o+`) {
|
|
return initializationValue;
|
|
}
|
|
`),this.userCode=`
|
|
const float initializationValue = `+a+`;
|
|
const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);
|
|
|
|
float getValue(int batch, int inIdx) {
|
|
`+d+`
|
|
return getX(batch, inIdx);
|
|
}
|
|
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int outIdx = coords[1];
|
|
int inOffset = outIdx * `+e+`;
|
|
|
|
vec4 minMaxValue = vec4(`+a+`);
|
|
float prodValue = 1.0;
|
|
float sumValue = 0.0;
|
|
float allValue = 1.0;
|
|
float anyValue = 0.0;
|
|
|
|
for (int i = 0; i < `+c+`; i += 4) {
|
|
int inIdx = inOffset + i;
|
|
`+h+" values = "+h+`(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1),
|
|
getValue(batch, inIdx + 2),
|
|
getValue(batch, inIdx + 3)
|
|
);
|
|
|
|
`+f+`
|
|
}
|
|
|
|
int inIdx = inOffset + `+c+`;
|
|
if (`+(l===1)+`) {
|
|
`+h+" values = "+h+`(
|
|
getValue(batch, inIdx),
|
|
initializationValue,
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
`+f+`
|
|
} else if (`+(l===2)+`) {
|
|
`+h+" values = "+h+`(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1),
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
`+f+`
|
|
} else if (`+(l===3)+`) {
|
|
`+h+" values = "+h+`(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1),
|
|
getValue(batch, inIdx + 2),
|
|
initializationValue
|
|
);
|
|
|
|
`+f+`
|
|
}
|
|
setOutput(`+u+`);
|
|
}
|
|
`},ep=function(r,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=r;for(var e="",n=0;n<4;n++){var o="thisRC = rc;";n%2==1&&(o+="thisRC.z += 1;"),n>1&&(o+="thisRC.y += 1;"),e+=`
|
|
`+o+`
|
|
`+(n>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[`+n+`] =
|
|
getChannel(getA(inputRC.x, inputRC.y, inputRC.z), inputRCInnerDims);
|
|
`+(n>0?"}":"")+`
|
|
`}this.userCode=`
|
|
|
|
ivec3 inputCoordsFromReshapedOutCoords(int index) {
|
|
`+eo(["r","c","d"],t)+`
|
|
return ivec3(r, c, d);
|
|
}
|
|
|
|
`+Na(r)+`
|
|
|
|
void main() {
|
|
ivec3 rc = getOutputCoords();
|
|
|
|
vec4 result = vec4(0.);
|
|
|
|
ivec3 thisRC;
|
|
int rows = `+r[1]+`;
|
|
int cols = `+r[2]+`;
|
|
|
|
`+e+`
|
|
|
|
setOutput(result);
|
|
}
|
|
`},tp=function(r,t,e){this.variableNames=["dy"],this.outputShape=[],this.outputShape=t.shape;var n=t.shape,o=n[1],i=n[2],a=r.shape,s=a[1],u=a[2],c=[e&&s>1?o-1:o,e&&u>1?i-1:i],l=[e&&s>1?s-1:s,e&&u>1?u-1:u],f=c[0]/l[0],h=c[1]/l[1],d=1/f,p=1/h,v=2*Math.ceil(d)+2,g=2*Math.ceil(p)+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(`+f+`);
|
|
const float widthScale = float(`+h+`);
|
|
|
|
const float invHeightScale = float(`+d+`);
|
|
const float invWidthScale = float(`+p+`);
|
|
|
|
const int winHeight = int(`+v+`);
|
|
const int winWidth = int(`+g+`);
|
|
|
|
// 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 >= `+s+`) {
|
|
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 >= `+u+`) {
|
|
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), `+(i-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);
|
|
}
|
|
`},np=function(r,t,e,n){this.variableNames=["A"],this.outputShape=[];var o=r[0],i=r[1],a=r[2],s=r[3];this.outputShape=[o,t,e,s];var u=[n&&t>1?i-1:i,n&&e>1?a-1:a],c=[n&&t>1?t-1:t,n&&e>1?e-1:e];this.userCode=`
|
|
const vec2 effectiveInputOverOutputRatioRC = vec2(
|
|
`+u[0]/c[0]+`,
|
|
`+u[1]/c[1]+`);
|
|
const vec2 inputShapeRC = vec2(`+i+".0, "+a+`.0);
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int d = coords[3];
|
|
ivec2 yRC = coords.yz;
|
|
|
|
// Fractional source index.
|
|
vec2 sourceFracIndexRC = vec2(yRC) * effectiveInputOverOutputRatioRC;
|
|
|
|
// Compute the four integer indices.
|
|
ivec2 sourceFloorRC = ivec2(sourceFracIndexRC);
|
|
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);
|
|
}
|
|
`},rp=function(r,t,e,n){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];var o=r[0],i=r[1],a=r[2],s=r[3];this.outputShape=[o,t,e,s];var u=[n&&t>1?i-1:i,n&&e>1?a-1:a],c=[n&&t>1?t-1:t,n&&e>1?e-1:e];this.userCode=`
|
|
const vec3 effectiveInputOverOutputRatioRC = vec3(
|
|
`+u[0]/c[0]+`,
|
|
`+u[1]/c[1]+`,
|
|
`+u[1]/c[1]+`);
|
|
const vec3 inputShapeRC = vec3(`+i+".0, "+a+`.0,
|
|
`+a+`.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 = vec3(yRC) * effectiveInputOverOutputRatioRC;
|
|
|
|
// Compute the four integer indices.
|
|
ivec3 sourceFloorRC = ivec3(sourceFracIndexRC);
|
|
ivec3 sourceCeilRC = ivec3(
|
|
min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));
|
|
|
|
// Should we calculate next column and row elements in 2x2 packed cell.
|
|
bool hasNextCol = d < `+(s-1)+`;
|
|
bool hasNextRow = coords.z < `+(e-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);
|
|
}
|
|
`},op=function(r,t,e){this.variableNames=["dy"],this.outputShape=[],this.outputShape=t.shape;var n=t.shape,o=n[1],i=n[2],a=r.shape,s=a[1],u=a[2],c=[e&&s>1?o-1:o,e&&u>1?i-1:i],l=[e&&s>1?s-1:s,e&&u>1?u-1:u],f=c[0]/l[0],h=c[1]/l[1],d=1/f,p=1/h,v=2*Math.ceil(d)+2,g=2*Math.ceil(p)+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(`+f+`);
|
|
const float widthScale = float(`+h+`);
|
|
|
|
const float invHeightScale = float(`+d+`);
|
|
const float invWidthScale = float(`+p+`);
|
|
|
|
const int winHeight = int(`+v+`);
|
|
const int winWidth = int(`+g+`);
|
|
|
|
// 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 >= `+s+`) {
|
|
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 >= `+u+`) {
|
|
continue;
|
|
}
|
|
|
|
float sourceFracRow =
|
|
float(`+c[0]+`) *
|
|
(float(dyR) / float(`+l[0]+`));
|
|
|
|
float sourceFracCol =
|
|
float(`+c[1]+`) *
|
|
(float(dyC) / float(`+l[1]+`));
|
|
|
|
int sourceNearestRow = int(min(
|
|
float(int(`+o+`) - 1),
|
|
`+e+` ? float(round(sourceFracRow)) :
|
|
float(floor(sourceFracRow))));
|
|
|
|
int sourceNearestCol = int(min(
|
|
float(int(`+i+`) - 1),
|
|
`+e+` ? float(round(sourceFracCol)) :
|
|
float(floor(sourceFracCol))));
|
|
|
|
if (r == sourceNearestRow && c == sourceNearestCol) {
|
|
accumulator += getDy(b, dyR, dyC, d);
|
|
}
|
|
}
|
|
}
|
|
// End loop over dy
|
|
|
|
setOutput(accumulator);
|
|
}
|
|
`},ip=function(r,t,e,n){this.variableNames=["A"],this.outputShape=[];var o=r[0],i=r[1],a=r[2],s=r[3];this.outputShape=[o,t,e,s];var u=[n&&t>1?i-1:i,n&&e>1?a-1:a],c=[n&&t>1?t-1:t,n&&e>1?e-1:e],l=n?"0.5":"0.0";this.userCode=`
|
|
const vec2 effectiveInputOverOutputRatioRC = vec2(
|
|
`+u[0]/c[0]+`,
|
|
`+u[1]/c[1]+`);
|
|
const vec2 inputShapeRC = vec2(`+i+".0, "+a+`.0);
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int d = coords[3];
|
|
ivec2 yRC = coords.yz;
|
|
|
|
// Fractional source index.
|
|
vec2 sourceFracIndexRC = vec2(yRC) * effectiveInputOverOutputRatioRC;
|
|
|
|
// Compute the coordinators of nearest neighbor point.
|
|
ivec2 sourceNearestRC = ivec2(
|
|
min(inputShapeRC - 1.0, floor(sourceFracIndexRC + `+l+`)));
|
|
|
|
float newValue = getA(b, sourceNearestRC.x, sourceNearestRC.y, d);
|
|
|
|
setOutput(newValue);
|
|
}
|
|
`},ap=function(r,t){this.variableNames=["x"];var e=r.length;if(e>4)throw new Error("WebGL backend: Reverse of rank-"+e+" tensor is not yet supported");if(this.outputShape=r,e!==1){var n=r.map(function(i,a){return function(s){return t.indexOf(s)!==-1&&r[s]!==1?r[s]+" - coords["+s+"] - 1":"coords["+s+"]"}(a)}).join(","),o=$t(e);this.userCode=`
|
|
void main() {
|
|
`+o+` coords = getOutputCoords();
|
|
setOutput(getX(`+n+`));
|
|
}
|
|
`}else this.userCode=`
|
|
void main() {
|
|
int coord = getOutputCoords();
|
|
setOutput(getX(`+r[0]+` - coord - 1));
|
|
}
|
|
`},sp=function(r,t){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0;var e=r.length;if(e>4)throw new Error("WebGL backend: Reverse of rank-"+e+" tensor is not yet supported");this.outputShape=r;var n=zn("rc",e),o=n[e-1]+" + 1 < "+this.outputShape[e-1],i=n[e-2]+" + 1 < "+this.outputShape[e-2],a=$t(e);function s(u){var c=r.map(function(l,f){return function(h,d){return t.indexOf(h)!==-1&&r[h]!==1?r[h]+" - "+d[h]+" - 1":""+d[h]}(f,u)});return"getChannel(getX("+c.join(",")+"), vec2("+c.slice(-2).join(",")+"))"}this.userCode=e===1?`
|
|
void main(){
|
|
int rc = getOutputCoords();
|
|
vec4 result = vec4(0.);
|
|
result.r = getChannel(getX(`+r[0]+` - rc - 1),
|
|
`+r[0]+` - rc - 1);
|
|
if(`+o+`){
|
|
result.g = getChannel(getX(`+r[0]+` - (rc + 1) - 1),
|
|
`+r[0]+` - (rc + 1) - 1);
|
|
}
|
|
setOutput(result);
|
|
}
|
|
`:`
|
|
void main() {
|
|
`+a+` rc = getOutputCoords();
|
|
vec4 result = vec4(0.);
|
|
result.r = `+function(u){return s(u)}(n.slice())+`;
|
|
if(`+o+`){
|
|
result.g = `+function(u){return u[e-1]="("+u[e-1]+" + 1)",s(u)}(n.slice())+`;
|
|
}
|
|
if(`+i+`) {
|
|
result.b = `+function(u){return u[e-2]="("+u[e-2]+" + 1)",s(u)}(n.slice())+`;
|
|
if(`+o+`) {
|
|
result.a = `+function(u){return u[e-1]="("+u[e-1]+" + 1)",u[e-2]="("+u[e-2]+" + 1)",s(u)}(n.slice())+`;
|
|
}
|
|
}
|
|
setOutput(result);
|
|
}
|
|
`},Wc=function(r,t,e,n,o,i,a){a===void 0&&(a=!0),this.variableNames=["updates","indices","defaultValue"],this.outputShape=i;var s=$t(o.length),u=$t(i.length),c="";e===1?c="i":e===2&&(c="i, j");var l="getIndices("+c+")",f="";n===1?f="i":n===2&&(f="i, coords[1]");var h="getUpdates("+f+")",d=t>1?"strides[j]":"strides";this.userCode=`
|
|
`+s+" strides = "+s+"("+o+`);
|
|
|
|
void main() {
|
|
`+u+` coords = getOutputCoords();
|
|
float sum = 0.0;
|
|
bool found = false;
|
|
for (int i = 0; i < `+r+`; i++) {
|
|
int flattenedIndex = 0;
|
|
for (int j = 0; j < `+t+`; j++) {
|
|
int index = round(`+l+`);
|
|
flattenedIndex += index * `+d+`;
|
|
}
|
|
if (flattenedIndex == coords[0]) {
|
|
sum += `+h+`;
|
|
found = true;
|
|
}
|
|
}
|
|
setOutput(mix(getDefaultValue(), sum, float(found)));
|
|
}
|
|
`},up=function(r,t){this.variableNames=["x","segmentIds"];var e=r.windowSize,n=r.batchSize,o=r.inSize,i=r.numSegments,a=i*Math.ceil(o/e);this.outputShape=[n,a];var s=4*Math.floor(e/4),u=e%4,c=`
|
|
sumValue += dot(values, segFilter);
|
|
`,l="";o%e>0&&(l=`
|
|
if (inIdx < 0 || inIdx >= `+o+`) {
|
|
return initializationValue;
|
|
}
|
|
`);var f="";o%e>0&&(f=`
|
|
if (inIdx < 0 || inIdx >= `+o+`) {
|
|
return -1.0;
|
|
}
|
|
`),this.userCode=`
|
|
const float initializationValue = 0.0;
|
|
|
|
float getValue(int batch, int inIdx) {
|
|
`+l+`
|
|
return getX(batch, inIdx);
|
|
}
|
|
|
|
float getSegmentIdAtIndex(int inIdx) {
|
|
`+f+`
|
|
return getSegmentIds(inIdx);
|
|
}
|
|
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int outIdx = coords[1];
|
|
int inOffset = int(floor(float(outIdx) / float(
|
|
`+i+")) * float("+e+`));
|
|
int currentSeg = int(mod(float(outIdx), float(`+i+`)));
|
|
|
|
float sumValue = 0.0;
|
|
|
|
for (int i = 0; i < `+s+`; 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
|
|
);
|
|
|
|
`+c+`
|
|
}
|
|
|
|
int inIdx = inOffset + `+s+`;
|
|
if (`+(u===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
|
|
);
|
|
|
|
`+c+`
|
|
} else if (`+(u===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
|
|
);
|
|
|
|
`+c+`
|
|
} else if (`+(u===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
|
|
);
|
|
|
|
`+c+`
|
|
}
|
|
setOutput(sumValue);
|
|
}
|
|
`},cp=function(r,t,e){var n,o;if(this.variableNames=["c","a","b"],this.outputShape=t,e>4)throw Error("Where for rank "+e+" is not yet supported");if(e===1)o="resRC",n="resRC";else{for(var i=["resRC.x","resRC.y","resRC.z","resRC.w"],a=[],s=[],u=0;u<t.length;u++)s.push(""+i[u]),u<r&&a.push(""+i[u]);n=a.join(),o=s.join()}var c=$t(e);this.userCode=`
|
|
void main() {
|
|
`+c+` resRC = getOutputCoords();
|
|
float cVal = getC(`+n+`);
|
|
if (cVal >= 1.0) {
|
|
setOutput(getA(`+o+`));
|
|
} else {
|
|
setOutput(getB(`+o+`));
|
|
}
|
|
}
|
|
`},lp=function(){function r(t){this.variableNames=["source"],this.outputShape=t,this.rank=t.length;var e,n=$t(this.rank),o="uniform int start["+this.rank+"];",i=function(a){if(a===1)return"sourceLoc";if(a<=6)return _a.slice(0,a).map(function(s){return"sourceLoc."+s}).join(",");throw Error("Slicing for rank "+a+" is not yet supported")}(this.rank);e=`
|
|
`+n+` sourceLoc;
|
|
`+n+` coords = getOutputCoords();
|
|
`+t.map(function(a,s){return"sourceLoc."+_a[s]+" = start["+s+"] + coords."+_a[s]+";"}).join(`
|
|
`)+`
|
|
`,this.userCode=`
|
|
`+o+`
|
|
void main() {
|
|
`+e+`
|
|
setOutput(getSource(`+i+`));
|
|
}
|
|
`}return r.prototype.getCustomSetupFunc=function(t){var e=this;if(t.length!==this.rank)throw Error("The rank ("+this.rank+") of the program must match the length of start ("+t.length+")");return function(n,o){e.startLoc==null&&(e.startLoc=n.getUniformLocationNoThrow(o,"start"),e.startLoc==null)||n.gl.uniform1iv(e.startLoc,t)}},r}(),_a=["x","y","z","w","u","v"],fp=function(){function r(t){this.variableNames=["source"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t,this.rank=t.length;var e=$t(this.rank),n=zn("coords",this.rank),o=zn("sourceLoc",this.rank),i=this.rank===1?"sourceLoc":"vec2("+o.slice(-2).join()+")",a="getChannel(getSource("+o.join()+"), "+i+")",s=`
|
|
result.x = `+a+`;
|
|
if (++`+n[this.rank-1]+" < "+t[this.rank-1]+`) {
|
|
++`+o[this.rank-1]+`;
|
|
result.y = `+a+`;
|
|
--`+o[this.rank-1]+`;
|
|
}
|
|
`,u=this.rank===1?"":`
|
|
--`+n[this.rank-1]+`;
|
|
if (++`+n[this.rank-2]+" < "+t[this.rank-2]+`) {
|
|
++`+o[this.rank-2]+`;
|
|
result.z = `+a+`;
|
|
if (++`+n[this.rank-1]+" < "+t[this.rank-1]+`) {
|
|
++`+o[this.rank-1]+`;
|
|
result.w = `+a+`;
|
|
}
|
|
}
|
|
`,c=this.rank<=4?`sourceLoc = coords +
|
|
`+e+"("+t.map(function(l,f){return"start["+f+"]"}).join()+");":t.map(function(l,f){return o[f]+" = "+n[f]+" + start["+f+"];"}).join(`
|
|
`);this.userCode=`
|
|
uniform int start[`+this.rank+`];
|
|
void main() {
|
|
`+e+` coords = getOutputCoords();
|
|
`+e+` sourceLoc;
|
|
`+c+`
|
|
vec4 result = vec4(0.);
|
|
`+s+`
|
|
`+u+`
|
|
setOutput(result);
|
|
}
|
|
`}return r.prototype.getCustomSetupFunc=function(t){var e=this;if(t.length!==this.rank)throw Error("The rank ("+this.rank+") of the program must match the length of start ("+t.length+")");return function(n,o){e.startLoc==null&&(e.startLoc=n.getUniformLocationNoThrow(o,"start"),e.startLoc==null)||n.gl.uniform1iv(e.startLoc,t)}},r}(),hp=function(r,t,e){this.variableNames=["x"],this.outputShape=e;var n=e.length,o=$t(e.length),i=$t(e.length),a="";if(n===1)a="coords * strides + begin";else{var s=0;a=e.map(function(u,c){return s++,e.length===1?"coords * strides["+c+"] + begin["+c+"]":"coords["+(s-1)+"] * strides["+c+"] + begin["+c+"]"}).join(",")}this.userCode=`
|
|
`+o+" begin = "+o+"("+r+`);
|
|
`+o+" strides = "+o+"("+t+`);
|
|
|
|
void main() {
|
|
`+i+` coords = getOutputCoords();
|
|
setOutput(getX(`+a+`));
|
|
}
|
|
`},dp=function(){function r(t){this.gpgpu=t,this.numUsedTextures=0,this.numFreeTextures=0,this.freeTextures={},this.logEnabled=!1,this.usedTextures={}}return r.prototype.acquireTexture=function(t,e,n){var o,i=Qc(e,n),a=_c(t,i,n);if(a in this.freeTextures||(this.freeTextures[a]=[]),a in this.usedTextures||(this.usedTextures[a]=[]),this.freeTextures[a].length>0){this.numFreeTextures--,this.numUsedTextures++,this.log();var s=this.freeTextures[a].shift();return this.usedTextures[a].push(s),s}return this.numUsedTextures++,this.log(),i===Rn.PACKED_2X2_FLOAT32?o=this.gpgpu.createPackedMatrixTexture(t[0],t[1]):i===Rn.PACKED_2X2_FLOAT16?o=this.gpgpu.createFloat16PackedMatrixTexture(t[0],t[1]):i===Rn.UNPACKED_FLOAT32?o=this.gpgpu.createFloat32MatrixTexture(t[0],t[1]):i===Rn.UNPACKED_FLOAT16?o=this.gpgpu.createFloat16MatrixTexture(t[0],t[1]):i===Rn.PACKED_4X1_UNSIGNED_BYTE&&(o=this.gpgpu.createUnsignedBytesMatrixTexture(t[0],t[1])),this.usedTextures[a].push(o),o},r.prototype.releaseTexture=function(t,e,n,o){if(this.freeTextures!=null){var i=_c(e,Qc(n,o),o);i in this.freeTextures||(this.freeTextures[i]=[]),this.freeTextures[i].push(t),this.numFreeTextures++,this.numUsedTextures--;var a=this.usedTextures[i],s=a.indexOf(t);if(s<0)throw new Error("Cannot release a texture that was never provided by this texture manager");a.splice(s,1),this.log()}},r.prototype.log=function(){if(this.logEnabled){var t=this.numFreeTextures+this.numUsedTextures;console.log("Free/Used",this.numFreeTextures+" / "+this.numUsedTextures,"("+t+")")}},r.prototype.getNumUsedTextures=function(){return this.numUsedTextures},r.prototype.getNumFreeTextures=function(){return this.numFreeTextures},r.prototype.dispose=function(){var t=this;if(this.freeTextures!=null){for(var e in this.freeTextures)this.freeTextures[e].forEach(function(n){t.gpgpu.deleteMatrixTexture(n)});for(var e in this.usedTextures)this.usedTextures[e].forEach(function(o){t.gpgpu.deleteMatrixTexture(o)});this.freeTextures=null,this.usedTextures=null,this.numUsedTextures=0,this.numFreeTextures=0}},r}();function Qc(r,t){if(r===bn.UPLOAD)return Rn.PACKED_2X2_FLOAT32;if(r===bn.RENDER||r==null)return function(e){return J().getBool("WEBGL_RENDER_FLOAT32_ENABLED")?e?Rn.PACKED_2X2_FLOAT32:Rn.UNPACKED_FLOAT32:e?Rn.PACKED_2X2_FLOAT16:Rn.UNPACKED_FLOAT16}(t);if(r===bn.DOWNLOAD||r===bn.PIXELS)return Rn.PACKED_4X1_UNSIGNED_BYTE;throw new Error("Unknown logical texture type "+r)}function _c(r,t,e){return r[0]+"_"+r[1]+"_"+t+"_"+e}var pp=function(r,t){this.variableNames=["A"];for(var e=new Array(r.length),n=0;n<e.length;n++)e[n]=r[n]*t[n];this.outputShape=e,this.rank=e.length;var o=$t(this.rank),i=function(a){var s=a.length;if(s>5)throw Error("Tile for rank "+s+" is not yet supported");if(s===1)return"imod(resRC, "+a[0]+")";for(var u=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u"],c=[],l=0;l<a.length;l++)c.push("imod("+u[l]+", "+a[l]+")");return c.join()}(r);this.userCode=`
|
|
void main() {
|
|
`+o+` resRC = getOutputCoords();
|
|
setOutput(getA(`+i+`));
|
|
}
|
|
`},vp=function(r,t){this.variableNames=["A"];for(var e=new Array(r.length),n=0;n<e.length;n++)e[n]=r[t[n]];this.outputShape=e,this.rank=e.length;var o=$t(this.rank),i=function(a){var s=a.length;if(s>6)throw Error("Transpose for rank "+s+" is not yet supported");for(var u=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u","resRC.v"],c=new Array(s),l=0;l<a.length;l++)c[a[l]]=u[l];return c.join()}(t);this.userCode=`
|
|
void main() {
|
|
`+o+` resRC = getOutputCoords();
|
|
setOutput(getA(`+i+`));
|
|
}
|
|
`},gp=function(r,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0;for(var e=new Array(r.length),n=0;n<e.length;n++)e[n]=r[t[n]];if(this.outputShape=e,this.rank=e.length,this.rank>6)throw Error("Packed transpose for rank "+this.rank+" is not yet supported.");var o=$t(this.rank),i=uc("rc",this.rank),a=new Array(this.rank);for(n=0;n<t.length;n++)a[t[n]]=i[n];var s="vec2("+a.slice(-2).join()+")",u="++"+i[this.rank-1]+" < "+e[this.rank-1],c="getChannel(getA("+a.join()+"), "+s+")";this.userCode=`
|
|
void main() {
|
|
`+o+` rc = getOutputCoords();
|
|
vec4 result = vec4(0.);
|
|
result[0] = `+c+`;
|
|
if(`+u+`) {
|
|
result[1] = `+c+`;
|
|
}
|
|
--`+i[this.rank-1]+`;
|
|
if(++`+i[this.rank-2]+" < "+e[this.rank-2]+`) {
|
|
result[2] = `+c+`;
|
|
if(`+u+`) {
|
|
result[3] = `+c+`;
|
|
}
|
|
}
|
|
setOutput(result);
|
|
}
|
|
`},za=1.7580993408473768,Ua=1.0507009873554805,lt=function(r,t){this.variableNames=["A"],this.outputShape=r,this.userCode=`
|
|
float unaryOperation(float x) {
|
|
`+t+`
|
|
}
|
|
|
|
void main() {
|
|
float x = getAAtOutCoords();
|
|
float y = unaryOperation(x);
|
|
|
|
setOutput(y);
|
|
}
|
|
`},or="if (isnan(x)) return x;",mp="return x;",zc="return abs(x);",Uc=or+`
|
|
return (x < 0.0) ? 0.0 : x;
|
|
`,Hc=or+`
|
|
return (x < 0.0) ? 0.0 : min(6.0, x);
|
|
`,jc="return (x >= 0.0) ? x : (exp(x) - 1.0);",Ap=`
|
|
// Stable and Attracting Fixed Point (0, 1) for Normalized Weights.
|
|
// see: https://arxiv.org/abs/1706.02515
|
|
float scaleAlpha = `+za+`;
|
|
float scale = `+Ua+`;
|
|
return (x >= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0);
|
|
`,Vc="return -x;",Gc="return ceil(x);",Xc="return floor(x);",Jc="return exp(x);",Kc="return exp(x) - 1.0;",yp=or+`
|
|
return sin(x);
|
|
`,xp=or+`
|
|
return cos(x);
|
|
`,bp=or+`
|
|
if (abs(x) > 1.) {
|
|
return NAN;
|
|
}
|
|
return asin(x);
|
|
`,wp=or+`
|
|
if (abs(x) > 1.) {
|
|
return NAN;
|
|
}
|
|
return acos(x);
|
|
`,Ep=or+`
|
|
return atan(x);
|
|
`,Cp=or+"return log(x + sqrt(x * x + 1.0));",Ip=or+`
|
|
if (x < 1.0) return NAN;
|
|
return log(x + sqrt(x * x - 1.0));`,Sp=or+`
|
|
if ((x < -1.0) || (x > 1.0)) return NAN;
|
|
return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Pi="return x;",Rp="return x;",Zc=`
|
|
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;
|
|
`,qc=`
|
|
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;
|
|
`,Yc=`
|
|
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;
|
|
`,Ko=function(r,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=r,this.userCode=`
|
|
vec4 unaryOperation(vec4 x) {
|
|
`+t+`
|
|
}
|
|
|
|
void main() {
|
|
vec4 x = getAAtOutCoords();
|
|
vec4 y = unaryOperation(x);
|
|
|
|
setOutput(y);
|
|
}
|
|
`},Bp=function(r){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=r;var t=r.length,e=zn("rc",t),n=$t(t),o=function(s,u){if(s===1)return"rc";for(var c="",l=0;l<s;l++)c+=u[l],l<s-1&&(c+=",");return c}(t,e),i=e.slice(-2),a=t<=1?"rc":"vec2("+i.join(",")+")";this.userCode=`
|
|
void main() {
|
|
`+n+` rc = getOutputCoords();
|
|
vec4 packedInput = getA(`+o+`);
|
|
|
|
setOutput(getChannel(packedInput, `+a+`));
|
|
}
|
|
`},Ni={};function Oi(r,t){if(t===void 0&&(t=!1),r==="linear")return t?Rp:mp;if(r==="relu")return t?Zc:Uc;if(r==="elu")return t?Yc:jc;if(r==="relu6")return t?qc:Hc;if(r==="prelu")return t?pc:dc;throw new Error("Activation "+r+" has not been implemented for the WebGL backend.")}var kp=600,$c=function(r){function t(e){var n,o=r.call(this)||this;if(o.pendingRead=new WeakMap,o.pendingDisposal=new WeakSet,o.dataRefCount=new WeakMap,o.numBytesInGPU=0,o.uploadWaitMs=0,o.downloadWaitMs=0,o.warnedAboutMemory=!1,o.pendingDeletes=0,o.disposed=!1,!J().getBool("HAS_WEBGL"))throw new Error("WebGL is not supported on this device");if(e==null){var i=cr(J().getNumber("WEBGL_VERSION"));o.binaryCache=((n=J().getNumber("WEBGL_VERSION"))in Ni||(Ni[n]={}),Ni[n]),o.gpgpu=new Mc(i),o.canvas=i.canvas,o.gpgpuCreatedLocally=!0}else o.gpgpu=e,o.binaryCache={},o.gpgpuCreatedLocally=!1,o.canvas=e.gl.canvas;return o.textureManager=new dp(o.gpgpu),o.numMBBeforeWarning=J().global.screen==null?1024:J().global.screen.height*J().global.screen.width*window.devicePixelRatio*kp/1024/1024,o.texData=new ec(o,L),o}return De(t,r),t.prototype.numDataIds=function(){return this.texData.numDataIds()+(this.cpuBackend?this.cpuBackend.numDataIds():0)-this.pendingDeletes},t.prototype.write=function(e,n,o){if(J().getBool("DEBUG")&&this.checkNumericalProblems(e),o==="complex64"&&e!=null)throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");var i={};return this.texData.set(i,{shape:n,dtype:o,values:e,usage:bn.UPLOAD}),i},t.prototype.move=function(e,n,o,i){if(J().getBool("DEBUG")&&this.checkNumericalProblems(n),i==="complex64")throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.texData.set(e,{shape:o,dtype:i,values:n,usage:bn.UPLOAD})},t.prototype.readSync=function(e){var n=this.texData.get(e),o=n.values,i=n.dtype,a=n.complexTensors,s=n.slice,u=n.shape,c=n.isPacked;if(s!=null){var l=void 0;l=c?new Ko(u,Pi):new lt(u,Pi);var f=this.runWebGLProgram(l,[{dataId:e,shape:u,dtype:i}],i),h=this.readSync(f.dataId);return this.disposeData(f.dataId),h}if(o!=null)return this.convertAndCacheOnCPU(e);if(i==="string")return o;var d,p,v=this.activeTimers!=null;return v&&(d=$()),i==="complex64"?p=Ta(a.real.dataSync(),a.imag.dataSync()):p=this.getValuesFromTexture(e),v&&(this.downloadWaitMs+=$()-d),this.convertAndCacheOnCPU(e,p)},t.prototype.read=function(e){return xe(this,void 0,void 0,function(){var n,o,i,a,s,u,c,l,f,h,d,p,v,g,A,w,E,x,C,S,N,O;return Ie(this,function(F){switch(F.label){case 0:if(this.pendingRead.has(e))return n=this.pendingRead.get(e),[2,new Promise(function(P){return n.push(P)})];if(o=this.texData.get(e),i=o.values,a=o.shape,s=o.slice,u=o.dtype,c=o.complexTensors,l=o.isPacked,s!=null)return f=void 0,f=l?new Ko(a,Pi):new lt(a,Pi),h=this.runWebGLProgram(f,[{dataId:e,shape:a,dtype:u}],u),d=this.read(h.dataId),this.disposeData(h.dataId),[2,d];if(i!=null)return[2,this.convertAndCacheOnCPU(e)];if(!J().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")&&J().getNumber("WEBGL_VERSION")===2)throw new Error("tensor.data() with WEBGL_DOWNLOAD_FLOAT_ENABLED=false and WEBGL_VERSION=2 not yet supported.");return p=null,u!=="complex64"&&J().get("WEBGL_BUFFER_SUPPORTED")&&(v=this.decode(e),g=this.texData.get(v.dataId),p=(O=this.gpgpu).createBufferFromTexture.apply(O,[g.texture].concat(Mo(a)))),this.pendingRead.set(e,[]),u==="complex64"?[3,2]:[4,this.gpgpu.createAndWaitForFence()];case 1:F.sent(),F.label=2;case 2:return u!=="complex64"?[3,4]:[4,Promise.all([c.real.data(),c.imag.data()])];case 3:return w=F.sent(),E=w[0],x=w[1],A=Ta(E,x),[3,5];case 4:p==null?A=this.getValuesFromTexture(e):(C=Re(a),A=this.gpgpu.downloadFloat32MatrixFromBuffer(p,C)),F.label=5;case 5:return v!=null&&this.disposeData(v.dataId),S=this.convertAndCacheOnCPU(e,A),N=this.pendingRead.get(e),this.pendingRead.delete(e),N.forEach(function(P){return P(S)}),this.pendingDisposal.has(e)&&(this.pendingDisposal.delete(e),this.disposeData(e),this.pendingDeletes--),[2,S]}})})},t.prototype.checkNumericalProblems=function(e){if(e!=null)for(var n=0;n<e.length;n++){var o=e[n];if(!du(o))throw J().getBool("WEBGL_RENDER_FLOAT32_CAPABLE")?Error("The value "+o+" cannot be represented with your current settings. Consider enabling float32 rendering: 'tf.env().set('WEBGL_RENDER_FLOAT32_ENABLED', true);'"):Error("The value "+o+" cannot be represented on this device.")}},t.prototype.getValuesFromTexture=function(e){var n,o=this.texData.get(e),i=o.shape,a=o.dtype,s=o.isPacked,u=Re(i);if(J().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")){var c=this.decode(e),l=this.texData.get(c.dataId),f=(n=this.gpgpu).downloadMatrixFromPackedTexture.apply(n,[l.texture].concat(Mo(i))).subarray(0,u);return this.disposeData(c.dataId),f}var h=J().getBool("WEBGL_PACK")&&s===!0,d=h?gi(i):i,p=h?new Pd(d):new Fd(d),v=this.runWebGLProgram(p,[{shape:d,dtype:a,dataId:e}],"float32"),g=this.texData.get(v.dataId),A=this.gpgpu.downloadByteEncodedFloatMatrixFromOutputTexture(g.texture,g.texShape[0],g.texShape[1]).subarray(0,u);return this.disposeData(v.dataId),A},t.prototype.time=function(e){return xe(this,void 0,void 0,function(){var n,o,i,a,s,u,c;return Ie(this,function(l){switch(l.label){case 0:return n=this.activeTimers,o=[],i=!1,this.programTimersStack==null?(this.programTimersStack=o,i=!0):this.activeTimers.push(o),this.activeTimers=o,e(),a=kt(this.activeTimers.map(function(f){return f.query})).filter(function(f){return f!=null}),s=kt(this.activeTimers.map(function(f){return f.name})).filter(function(f){return f!=null}),this.activeTimers=n,i&&(this.programTimersStack=null),u={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null},J().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?[4,Promise.all(a)]:[3,2];case 1:return c=l.sent(),u.kernelMs=Ve(c),u.getExtraProfileInfo=function(){return c.map(function(f,h){return{name:s[h],ms:f}}).map(function(f){return f.name+": "+f.ms}).join(", ")},[3,3];case 2:u.kernelMs={error:"WebGL query timers are not supported in this environment."},l.label=3;case 3:return this.uploadWaitMs=0,this.downloadWaitMs=0,[2,u]}})})},t.prototype.memory=function(){return{unreliable:!1,numBytesInGPU:this.numBytesInGPU}},t.prototype.startTimer=function(){return J().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?this.gpgpu.beginQuery():{startMs:$(),endMs:null}},t.prototype.endTimer=function(e){return J().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?(this.gpgpu.endQuery(),e):(e.endMs=$(),e)},t.prototype.getQueryTime=function(e){return xe(this,void 0,void 0,function(){var n;return Ie(this,function(o){return J().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?[2,this.gpgpu.waitForQueryAndGetTime(e)]:[2,(n=e).endMs-n.startMs]})})},t.prototype.disposeData=function(e){if(!this.pendingDisposal.has(e)){if(this.pendingRead.has(e))return this.pendingDisposal.add(e),void this.pendingDeletes++;if(this.texData.has(e)){this.releaseGPUData(e);var n=this.texData.get(e).complexTensors;n!=null&&(n.real.dispose(),n.imag.dispose()),this.texData.delete(e)}}},t.prototype.releaseGPUData=function(e){var n=this.texData.get(e),o=n.texture,i=n.dtype,a=n.texShape,s=n.usage,u=n.isPacked,c=n.slice,l=c&&c.origDataId||e,f=this.dataRefCount.get(l);f>1?this.dataRefCount.set(l,f-1):(this.dataRefCount.delete(l),o!=null&&(this.numBytesInGPU-=this.computeBytes(a,i),this.textureManager.releaseTexture(o,a,s,u)));var h=this.texData.get(e);h.texture=null,h.texShape=null,h.isPacked=!1,h.slice=null},t.prototype.getTexture=function(e){return this.uploadToGPU(e),this.texData.get(e).texture},t.prototype.getDataInfo=function(e){return this.texData.get(e)},t.prototype.getCPUBackend=function(){return J().getBool("WEBGL_CPU_FORWARD")?(this.cpuBackend==null&&(this.cpuBackend=L.findBackend("cpu")),this.cpuBackend):null},t.prototype.shouldExecuteOnCPU=function(e,n){var o=this;return n===void 0&&(n=128),this.getCPUBackend()!=null&&e.every(function(i){return o.texData.get(i.dataId).texture==null&&i.size<n})},t.prototype.getGPGPUContext=function(){return this.gpgpu},t.prototype.complex=function(e,n){var o=this.makeOutput(e.shape,"complex64");return this.texData.get(o.dataId).complexTensors={real:L.keep(e.clone()),imag:L.keep(n.clone())},o},t.prototype.real=function(e){return this.texData.get(e.dataId).complexTensors.real.clone()},t.prototype.imag=function(e){return this.texData.get(e.dataId).complexTensors.imag.clone()},t.prototype.slice=function(e,n,o){if(this.shouldExecuteOnCPU([e]))return this.cpuBackend.slice(e,n,o);if(Re(o)===0)return Tn([],o,e.dtype);var i=this.texData.get(e.dataId).isPacked,a=Ca(e.shape,n,o);if(i||!a){var s=J().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new fp(o):new lp(o),u=s.getCustomSetupFunc(n);return this.compileAndRun(s,[e],null,u)}return this.uploadToGPU(e.dataId),this.shallowSlice(e,n,o)},t.prototype.shallowSlice=function(e,n,o){var i=this.texData.get(e.dataId),a=this.makeOutput(o,e.dtype),s=this.texData.get(a.dataId);Object.assign(s,i),s.shape=o,s.dtype=e.dtype;var u=Ia(n,e.strides);i.slice&&(u+=i.slice.flatOffset),s.slice={flatOffset:u,origDataId:i.slice&&i.slice.origDataId||e.dataId};var c=this.dataRefCount.get(s.slice.origDataId)||1;return this.dataRefCount.set(s.slice.origDataId,c+1),a},t.prototype.stridedSlice=function(e,n,o,i){if(this.shouldExecuteOnCPU([e]))return this.cpuBackend.stridedSlice(e,n,o,i);var a=Si(n,o,i);if(a.some(function(u){return u===0}))return Tn([],a);var s=new hp(n,i,a);return this.compileAndRun(s,[e])},t.prototype.reverse=function(e,n){var o=J().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new sp(e.shape,n):new ap(e.shape,n);return this.compileAndRun(o,[e])},t.prototype.concat=function(e,n){if(e[0].dtype==="complex64"){var o=e.map(function(d){return Zn(d)}),i=e.map(function(d){return fr(d)});return kn(this.concat(o,n),this.concat(i,n))}if(this.shouldExecuteOnCPU(e))return this.cpuBackend.concat(e,n);if(e.length===1)return e[0];if(e.length>J().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER")){var a=Math.floor(e.length/2),s=this.concat(e.slice(0,a),n),u=this.concat(e.slice(a),n);return this.concat([s,u],n)}if(J().getBool("WEBGL_PACK_ARRAY_OPERATIONS")&&e[0].rank>1){var c=new Ad(e.map(function(d){return d.shape}),n);return this.compileAndRun(c,e)}var l=Kr(e.map(function(d){return d.shape}),n),f=e.map(function(d){return d.as2D(-1,Re(d.shape.slice(n)))}),h=new md(f.map(function(d){return d.shape}));return this.compileAndRun(h,f).reshape(l)},t.prototype.neg=function(e){if(this.shouldExecuteOnCPU([e]))return this.cpuBackend.neg(e);if(J().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(e,Vc,e.dtype);var n=new lt(e.shape,Vc);return this.compileAndRun(n,[e])},t.prototype.batchMatMul=function(e,n,o,i){var a=o?e.shape[2]:e.shape[1],s=i?n.shape[1]:n.shape[2],u=o?e.shape[1]:e.shape[2],c=e.shape[0];if((a===1||s===1)&&u>1e3){o&&(e=e.transpose([0,2,1])),i&&(n=n.transpose([0,2,1]));var l=s===1?e:e.as3D(c,u,1),f=s===1?2:1,h=s===1?n.as3D(c,1,u):n;return this.multiply(l,h).sum(f,!0)}var d=Mt(e.dtype,n.dtype),p=new La(e.shape,[c,a,s],o,i);return this.compileAndRun(p,[e,n],d)},t.prototype.fusedBatchMatMul=function(e){var n=e.a,o=e.b,i=e.transposeA,a=e.transposeB,s=e.bias,u=e.activation,c=e.preluActivationWeights,l=i?n.shape[2]:n.shape[1],f=a?o.shape[1]:o.shape[2],h=n.shape[0],d=Mt(n.dtype,o.dtype),p=s!=null,v=c!=null,g=u?Oi(u,!0):null,A=new La(n.shape,[h,l,f],i,a,p,g,v),w=[n,o];return s&&w.push(s),c&&w.push(c),this.compileAndRun(A,w,d)},t.prototype.multiply=function(e,n){if(e.dtype==="complex64"){var o=this.texData.get(e.dataId),i=this.texData.get(n.dataId),a=new fc(hd,e.shape,n.shape),s=new fc(dd,e.shape,n.shape),u=[this.makeComplexComponentTensorInfo(e,o.complexTensors.real),this.makeComplexComponentTensorInfo(e,o.complexTensors.imag),this.makeComplexComponentTensorInfo(n,i.complexTensors.real),this.makeComplexComponentTensorInfo(n,i.complexTensors.imag)],c=this.compileAndRun(a,u),l=this.compileAndRun(s,u),f=this.complex(c,l);return c.dispose(),l.dispose(),f}if(this.shouldExecuteOnCPU([e,n]))return this.cpuBackend.multiply(e,n);if(J().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(e,n,hc,e.dtype);var h=new sn(hc,e.shape,n.shape);return this.compileAndRun(h,[e,n],e.dtype)},t.prototype.batchNormalization=function(e,n,o,i,a,s){var u=[e,n,o],c=null;s!=null&&(c=s.shape,u.push(s));var l=null;if(a!=null&&(l=a.shape,u.push(a)),J().getBool("WEBGL_PACK_NORMALIZATION")){var f=new fd(e.shape,n.shape,o.shape,c,l,i);return this.compileAndRun(f,u)}var h=new ld(e.shape,n.shape,o.shape,c,l,i);return this.compileAndRun(h,u)},t.prototype.localResponseNormalization4D=function(e,n,o,i,a){var s=J().getBool("WEBGL_PACK_NORMALIZATION")?new Vd(e.shape,n,o,i,a):new Hd(e.shape,n,o,i,a);return this.compileAndRun(s,[e])},t.prototype.LRNGrad=function(e,n,o,i,a,s,u){var c=new jd(n.shape,i,a,s,u);return this.compileAndRun(c,[n,o,e])},t.prototype.tile=function(e,n){if(e.dtype==="string"){var o=this.readSync(e.dataId).map(function(a){return Me(a)});return ac(it(e.shape,e.dtype,o),n)}var i=new pp(e.shape,n);return this.compileAndRun(i,[e])},t.prototype.pad=function(e,n,o){var i=J().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new Yd(e.shape,n,o):new qd(e.shape,n,o);return this.compileAndRun(i,[e])},t.prototype.transpose=function(e,n){if(this.shouldExecuteOnCPU([e]))return this.cpuBackend.transpose(e,n);var o=J().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new gp(e.shape,n):new vp(e.shape,n);return this.compileAndRun(o,[e])},t.prototype.gather=function(e,n,o){if(this.shouldExecuteOnCPU([e,n]))return this.cpuBackend.gather(e,n,o);var i=new Qd(e.shape,n.size,o);return this.compileAndRun(i,[e,n])},t.prototype.batchToSpaceND=function(e,n,o){R(e.rank<=4,function(){return"batchToSpaceND for rank > 4 with a WebGL backend not implemented yet"});var i=n.reduce(function(f,h){return f*h}),a=wi(e.shape,n,i),s=Ei(a.length,n.length),u=Ci(e.shape,n,i),c=Xu(o,n.length),l=Ju(u,o,n.length);return e.reshape(a).transpose(s).reshape(u).slice(c,l)},t.prototype.spaceToBatchND=function(e,n,o){R(e.rank<=4,function(){return"spaceToBatchND for rank > 4 with a WebGL backend not implemented yet"});var i=n.reduce(function(h,d){return h*d}),a=[[0,0]];a.push.apply(a,o);for(var s=1+n.length;s<e.shape.length;++s)a.push([0,0]);var u=e.pad(a),c=wi(u.shape,n,i,!1),l=Ei(c.length,n.length,!1),f=Ci(u.shape,n,i,!1);return u.reshape(c).transpose(l).reshape(f)},t.prototype.reduce=function(e,n,o){var i=e.shape[0],a=e.shape[1],s=Ii(a),u=new $d({windowSize:s,inSize:a,batchSize:i},n),c=this.compileAndRun(u,[e],o);return c.shape[1]===1?c:this.reduce(c,n,o)},t.prototype.argReduce=function(e,n,o){o===void 0&&(o=null);var i=e.shape[0],a=e.shape[1];o!=null&&(i=o.shape[0],a=o.shape[1]);var s=Ii(a),u=new td({windowSize:s,inSize:a,batchSize:i},n,o==null),c=[e];o!=null&&c.push(o);var l=this.compileAndRun(u,c,"int32");return l.shape[1]===1?l:this.argReduce(e,n,l)},t.prototype.argReducePacked=function(e,n,o){o===void 0&&(o=null);var i=o!=null?o.shape:e.shape,a=Ii(i[i.length-1]),s=new sd(i,a,n,o==null),u=o==null?[e]:[e,o],c=this.compileAndRun(s,u,"int32");return c.rank===e.rank?this.argReducePacked(e,n,c):c},t.prototype.sum=function(e,n){Qn("sum",n,e.rank);var o=Bn(e.shape,n),i=o[0],a=Re(o[1]),s=e.as2D(-1,a),u=dn(e.dtype);return this.reduce(s,"sum",u).reshape(i)},t.prototype.prod=function(e,n){if(this.shouldExecuteOnCPU([e]))return this.cpuBackend.prod(e,n);var o=Bn(e.shape,n),i=o[0],a=Re(o[1]),s=e.as2D(-1,a),u=dn(e.dtype);return this.reduce(s,"prod",u).reshape(i)},t.prototype.unsortedSegmentSum=function(e,n,o){var i=0,a=tr([i],e.rank),s=e;a!=null&&(s=e.transpose(a),i=nr(1,e.rank)[0]);var u=function(d,p,v){for(var g=[],A=d.length,w=0;w<A;w++)w!==p?g.push(d[w]):g.push(v);return g}(s.shape,i,o),c=Re([s.shape[i]]),l=s.as2D(-1,c),f=dn(e.dtype),h=this.segOpCompute(l,"unsortedSegmentSum",n,f,o).reshape(u);return a!=null&&(h=h.transpose(yi(a))),h},t.prototype.segOpCompute=function(e,n,o,i,a){var s=e.shape[0],u=e.shape[1],c=function(h,d){var p,v=!1;for(h<=wa?(p=h,v=!0):p=Ot(h,Math.floor(Math.sqrt(h)));!v;)p>d||p===h?v=!0:p=Ot(h,p+1);return p}(u,a),l=new up({windowSize:c,inSize:u,batchSize:s,numSegments:a},n),f=this.compileAndRun(l,[e,o],i);return f.shape[1]===a?f:(o=xi(0,a).tile([u/c]),this.segOpCompute(f,n,o,i,a))},t.prototype.argMinMaxReduce=function(e,n,o){var i=[n];if(Qn("arg"+o.charAt(0).toUpperCase()+o.slice(1),i,e.rank),!J().getBool("WEBGL_PACK_REDUCE")||e.rank<=2){var a=Bn(e.shape,i),s=a[0],u=Re(a[1]),c=e.as2D(-1,u);return this.argReduce(c,o).reshape(s)}return this.argReducePacked(e,o)},t.prototype.argMin=function(e,n){return this.argMinMaxReduce(e,n,"min")},t.prototype.argMax=function(e,n){return this.argMinMaxReduce(e,n,"max")},t.prototype.cumsum=function(e,n,o,i){if(n!==e.rank-1)throw new Error("WebGL cumsum shader expects an inner-most axis="+(e.rank-1)+" but got axis="+n);var a=new Rd(e.shape,o,i);return this.compileAndRun(a,[e])},t.prototype.equal=function(e,n){if(J().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(e,n,`
|
|
return vec4(equal(a, b));
|
|
`,"bool");var o=new sn("return float(a == b);",e.shape,n.shape);return this.compileAndRun(o,[e,n],"bool")},t.prototype.notEqual=function(e,n){if(J().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(e,n,`
|
|
return vec4(notEqual(a, b));
|
|
`,"bool");var o=new sn("return float(a != b);",e.shape,n.shape);return this.compileAndRun(o,[e,n],"bool")},t.prototype.less=function(e,n){if(this.shouldExecuteOnCPU([e,n]))return this.cpuBackend.less(e,n);if(J().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(e,n,`
|
|
return vec4(lessThan(a, b));
|
|
`,"bool");var o=new sn("return float(a < b);",e.shape,n.shape);return this.compileAndRun(o,[e,n],"bool")},t.prototype.lessEqual=function(e,n){if(J().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(e,n,`
|
|
return vec4(lessThanEqual(a, b));
|
|
`,"bool");var o=new sn("return float(a <= b);",e.shape,n.shape);return this.compileAndRun(o,[e,n],"bool")},t.prototype.greater=function(e,n){if(this.shouldExecuteOnCPU([e,n]))return this.cpuBackend.greater(e,n);if(J().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(e,n,`
|
|
return vec4(greaterThan(a, b));
|
|
`,"bool");var o=new sn("return float(a > b);",e.shape,n.shape);return this.compileAndRun(o,[e,n],"bool")},t.prototype.greaterEqual=function(e,n){if(J().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(e,n,`
|
|
return vec4(greaterThanEqual(a, b));
|
|
`,"bool");var o=new sn("return float(a >= b);",e.shape,n.shape);return this.compileAndRun(o,[e,n],"bool")},t.prototype.logicalNot=function(e){var n=new lt(e.shape,"return float(!(x >= 1.0));");return this.compileAndRun(n,[e])},t.prototype.logicalAnd=function(e,n){if(J().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(e,n,`
|
|
return vec4(
|
|
vec4(greaterThanEqual(a, vec4(1.0))) *
|
|
vec4(greaterThanEqual(b, vec4(1.0))));
|
|
`,"bool");var o=new sn("return float(a >= 1.0 && b >= 1.0);",e.shape,n.shape);return this.compileAndRun(o,[e,n],"bool")},t.prototype.logicalOr=function(e,n){if(J().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(e,n,`
|
|
return min(
|
|
vec4(greaterThanEqual(a, vec4(1.0))) +
|
|
vec4(greaterThanEqual(b, vec4(1.0))),
|
|
vec4(1.0));
|
|
`,"bool");var o=new sn("return float(a >= 1.0 || b >= 1.0);",e.shape,n.shape);return this.compileAndRun(o,[e,n],"bool")},t.prototype.select=function(e,n,o){var i=new cp(e.rank,n.shape,n.rank);return this.compileAndRun(i,[e,n,o],Mt(n.dtype,o.dtype))},t.prototype.where=function(e){Ai("tf.where() in webgl locks the UI thread. Call tf.whereAsync() instead");var n=e.dataSync();return Pa(e.shape,n)},t.prototype.topk=function(e,n,o){return sc(e.dataSync(),e.shape,e.dtype,n)},t.prototype.min=function(e,n){Qn("min",n,e.rank);var o=Bn(e.shape,n),i=o[0],a=Re(o[1]),s=e.as2D(-1,a);return this.reduce(s,"min",s.dtype).reshape(i)},t.prototype.minimum=function(e,n){if(this.shouldExecuteOnCPU([e,n]))return this.cpuBackend.minimum(e,n);var o=J().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Sr(`
|
|
vec4 result = vec4(min(a, b));
|
|
vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));
|
|
|
|
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;
|
|
|
|
return result;
|
|
`,e.shape,n.shape):new sn(`
|
|
if (isnan(a)) return a;
|
|
if (isnan(b)) return b;
|
|
|
|
return min(a, b);
|
|
`,e.shape,n.shape);return this.compileAndRun(o,[e,n])},t.prototype.mod=function(e,n){var o=J().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Sr(`
|
|
vec4 result = mod(a, b);
|
|
vec4 isNaN = vec4(equal(b, vec4(0.0)));
|
|
|
|
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;
|
|
|
|
return result;
|
|
`,e.shape,n.shape):new sn(`if (b == 0.0) return NAN;
|
|
return mod(a, b);`,e.shape,n.shape);return this.compileAndRun(o,[e,n])},t.prototype.max=function(e,n){if(this.shouldExecuteOnCPU([e]))return this.cpuBackend.max(e,n);Qn("max",n,e.rank);var o=Bn(e.shape,n),i=o[0],a=Re(o[1]),s=e.as2D(-1,a);return this.reduce(s,"max",s.dtype).reshape(i)},t.prototype.maximum=function(e,n){if(this.shouldExecuteOnCPU([e,n]))return this.cpuBackend.maximum(e,n);var o=J().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Sr(`
|
|
vec4 result = vec4(max(a, b));
|
|
vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));
|
|
|
|
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;
|
|
|
|
return result;
|
|
`,e.shape,n.shape):new sn(`
|
|
if (isnan(a)) return a;
|
|
if (isnan(b)) return b;
|
|
|
|
return max(a, b);
|
|
`,e.shape,n.shape);return this.compileAndRun(o,[e,n])},t.prototype.all=function(e,n){Qn("all",n,e.rank);var o=Bn(e.shape,n),i=o[0],a=Re(o[1]),s=e.as2D(-1,a);return this.reduce(s,"all",s.dtype).reshape(i)},t.prototype.any=function(e,n){Qn("any",n,e.rank);var o=Bn(e.shape,n),i=o[0],a=Re(o[1]),s=e.as2D(-1,a);return this.reduce(s,"any",s.dtype).reshape(i)},t.prototype.realDivide=function(e,n){if(J().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(e,n,`
|
|
// 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;
|
|
`,"float32",!0);var o=new sn(`
|
|
if (a == b) {
|
|
return 1.0;
|
|
};
|
|
return a / b;`,e.shape,n.shape);return this.compileAndRun(o,[e,n],"float32")},t.prototype.floorDiv=function(e,n){if(J().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(e,n,`
|
|
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);
|
|
`,"int32");var o=new sn(`
|
|
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;
|
|
}
|
|
`,e.shape,n.shape);return this.compileAndRun(o,[e,n],"int32")},t.prototype.add=function(e,n){if(e.dtype==="complex64"&&n.dtype==="complex64")return this.complexSeparableBinaryOp(e,n,Oa);if(this.shouldExecuteOnCPU([e,n]))return this.cpuBackend.add(e,n);var o=Mt(e.dtype,n.dtype);if(J().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(e,n,Oa,o);var i=new sn(Oa,e.shape,n.shape);return this.compileAndRun(i,[e,n],o)},t.prototype.packedUnaryOp=function(e,n,o){var i=new Ko(e.shape,n);return this.compileAndRun(i,[e],o)},t.prototype.packedBinaryOp=function(e,n,o,i,a){a===void 0&&(a=!1);var s=new Sr(o,e.shape,n.shape,a);return this.compileAndRun(s,[e,n],i)},t.prototype.complexSeparableBinaryOp=function(e,n,o){var i=this,a=this.texData.get(e.dataId),s=this.texData.get(n.dataId),u=[[a.complexTensors.real,s.complexTensors.real],[a.complexTensors.imag,s.complexTensors.imag]].map(function(h){var d=h[0],p=h[1],v=i.makeComplexComponentTensorInfo(e,d),g=i.makeComplexComponentTensorInfo(n,p),A=new sn(o,e.shape,n.shape);return i.compileAndRun(A,[v,g],Mt(d.dtype,p.dtype))}),c=u[0],l=u[1],f=this.complex(c,l);return c.dispose(),l.dispose(),f},t.prototype.makeComplexComponentTensorInfo=function(e,n){return{dataId:n.dataId,dtype:n.dtype,shape:e.shape}},t.prototype.addN=function(e){if(e.length===1)return e[0];if(e.length>J().get("WEBGL_MAX_TEXTURES_IN_SHADER")){var n=Math.floor(e.length/2),o=this.addN(e.slice(0,n)),i=this.addN(e.slice(n));return this.addN([o,i])}var a=e.map(function(c){return c.dtype}).reduce(function(c,l){return Mt(c,l)}),s=e.map(function(c){return c.shape}),u=J().getBool("WEBGL_PACK")?new ed(e[0].shape,s):new $h(e[0].shape,s);return this.compileAndRun(u,e,a)},t.prototype.subtract=function(e,n){if(e.dtype==="complex64"&&n.dtype==="complex64")return this.complexSeparableBinaryOp(e,n,Ma);if(this.shouldExecuteOnCPU([e,n]))return this.cpuBackend.subtract(e,n);var o=Mt(e.dtype,n.dtype);if(J().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(e,n,Ma,e.dtype);var i=new sn(Ma,e.shape,n.shape);return this.compileAndRun(i,[e,n],o)},t.prototype.pow=function(e,n){var o=J().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Sr(`
|
|
// 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));
|
|
|
|
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;
|
|
|
|
return result;
|
|
`,e.shape,n.shape):new sn(`
|
|
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);
|
|
`,e.shape,n.shape),i=Mt(e.dtype,n.dtype);return this.compileAndRun(o,[e,n],i)},t.prototype.ceil=function(e){if(this.shouldExecuteOnCPU([e]))return this.cpuBackend.ceil(e);if(J().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(e,Gc,e.dtype);var n=new lt(e.shape,Gc);return this.compileAndRun(n,[e])},t.prototype.floor=function(e){if(this.shouldExecuteOnCPU([e]))return this.cpuBackend.floor(e);if(J().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(e,Xc,e.dtype);var n=new lt(e.shape,Xc);return this.compileAndRun(n,[e])},t.prototype.sign=function(e){var n=new lt(e.shape,`
|
|
if (isnan(x)) { return 0.0; }
|
|
return sign(x);
|
|
`);return this.compileAndRun(n,[e])},t.prototype.isNaN=function(e){var n=new lt(e.shape,"return float(isnan(x));");return this.compileAndRun(n,[e],"bool")},t.prototype.isInf=function(e){var n=new lt(e.shape,"return float(isinf(x));");return this.compileAndRun(n,[e],"bool")},t.prototype.isFinite=function(e){var n=new lt(e.shape,"return float(!isnan(x) && !isinf(x));");return this.compileAndRun(n,[e],"bool")},t.prototype.round=function(e){var n=new lt(e.shape,`
|
|
// 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;
|
|
}
|
|
}
|
|
`);return this.compileAndRun(n,[e])},t.prototype.exp=function(e){if(this.shouldExecuteOnCPU([e]))return this.cpuBackend.exp(e);if(J().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(e,Jc,e.dtype);var n=new lt(e.shape,Jc);return this.compileAndRun(n,[e])},t.prototype.expm1=function(e){if(this.shouldExecuteOnCPU([e]))return this.cpuBackend.expm1(e);if(J().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(e,Kc,e.dtype);var n=new lt(e.shape,Kc);return this.compileAndRun(n,[e])},t.prototype.softmax=function(e,n){var o=ht([n],e.shape),i=this.max(e,o),a=Mn(i.shape,o),s=this.subtract(e,i.reshape(a)),u=this.exp(s),c=this.sum(u,o).reshape(a);return this.realDivide(u,c)},t.prototype.log=function(e){if(this.shouldExecuteOnCPU([e]))return this.cpuBackend.log(e);if(J().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(e,`
|
|
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;
|
|
`,e.dtype);var n=new lt(e.shape,`if (x < 0.0) return NAN;
|
|
return log(x);`);return this.compileAndRun(n,[e])},t.prototype.log1p=function(e){var n=new lt(e.shape,"return log(1.0 + x);");return this.compileAndRun(n,[e])},t.prototype.sqrt=function(e){var n=new lt(e.shape,"return sqrt(x);");return this.compileAndRun(n,[e])},t.prototype.rsqrt=function(e){if(this.shouldExecuteOnCPU([e]))return this.cpuBackend.rsqrt(e);var n=new lt(e.shape,"return inversesqrt(x);");return this.compileAndRun(n,[e])},t.prototype.reciprocal=function(e){var n=new lt(e.shape,"return 1.0 / x;");return this.compileAndRun(n,[e])},t.prototype.relu=function(e){var n;return n=J().getBool("WEBGL_PACK")?new Ko(e.shape,Zc):new lt(e.shape,Uc),this.compileAndRun(n,[e])},t.prototype.relu6=function(e){var n;return n=J().getBool("WEBGL_PACK")?new Ko(e.shape,qc):new lt(e.shape,Hc),this.compileAndRun(n,[e])},t.prototype.prelu=function(e,n){var o=J().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Sr(pc,e.shape,n.shape):new sn(dc,e.shape,n.shape);return this.compileAndRun(o,[e,n])},t.prototype.elu=function(e){if(J().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(e,Yc,e.dtype);var n=new lt(e.shape,jc);return this.compileAndRun(n,[e])},t.prototype.eluDer=function(e,n){var o=J().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Sr(`
|
|
vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.)));
|
|
return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0))));
|
|
`,e.shape,n.shape):new sn("return (b >= 1.0) ? a : a * (b + 1.0);",e.shape,n.shape);return this.compileAndRun(o,[e,n])},t.prototype.selu=function(e){var n=new lt(e.shape,Ap);return this.compileAndRun(n,[e])},t.prototype.int=function(e){var n=new lt(e.shape,"return float(int(x));");return this.compileAndRun(n,[e],"int32")},t.prototype.clip=function(e,n,o){var i,a=(i=J().getBool("WEBGL_PACK_CLIP")?new vd(e.shape):new pd(e.shape)).getCustomSetupFunc(n,o);return this.compileAndRun(i,[e],null,a)},t.prototype.abs=function(e){if(this.shouldExecuteOnCPU([e]))return this.cpuBackend.abs(e);if(J().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(e,zc,e.dtype);var n=new lt(e.shape,zc);return this.compileAndRun(n,[e])},t.prototype.complexAbs=function(e){var n=this.texData.get(e.dataId),o=new gd(e.shape),i=[this.makeComplexComponentTensorInfo(e,n.complexTensors.real),this.makeComplexComponentTensorInfo(e,n.complexTensors.imag)];return this.compileAndRun(o,i)},t.prototype.sigmoid=function(e){var n=new lt(e.shape,"return 1.0 / (1.0 + exp(-1.0 * x));");return this.compileAndRun(n,[e])},t.prototype.softplus=function(e){var n=new lt(e.shape,`
|
|
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;
|
|
`);return this.compileAndRun(n,[e])},t.prototype.sin=function(e){var n=new lt(e.shape,yp);return this.compileAndRun(n,[e])},t.prototype.cos=function(e){var n=new lt(e.shape,xp);return this.compileAndRun(n,[e])},t.prototype.tan=function(e){var n=new lt(e.shape,"return tan(x);");return this.compileAndRun(n,[e])},t.prototype.asin=function(e){var n=new lt(e.shape,bp);return this.compileAndRun(n,[e])},t.prototype.acos=function(e){var n=new lt(e.shape,wp);return this.compileAndRun(n,[e])},t.prototype.atan=function(e){var n=new lt(e.shape,Ep);return this.compileAndRun(n,[e])},t.prototype.atan2=function(e,n){var o=J().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Sr(`
|
|
vec4 result = atan(a, b);
|
|
vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));
|
|
|
|
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;
|
|
|
|
return result;
|
|
`,e.shape,n.shape):new sn(`
|
|
if (isnan(a)) return a;
|
|
if (isnan(b)) return b;
|
|
|
|
return atan(a, b);
|
|
`,e.shape,n.shape);return this.compileAndRun(o,[e,n])},t.prototype.sinh=function(e){var n=new lt(e.shape,`
|
|
float e2x = exp(x);
|
|
return (e2x - 1.0 / e2x) / 2.0;
|
|
`);return this.compileAndRun(n,[e])},t.prototype.cosh=function(e){var n=new lt(e.shape,`
|
|
float e2x = exp(-x);
|
|
return (e2x + 1.0 / e2x) / 2.0;
|
|
`);return this.compileAndRun(n,[e])},t.prototype.tanh=function(e){var n=new lt(e.shape,`
|
|
float e2x = exp(-2.0 * abs(x));
|
|
return sign(x) * (1.0 - e2x) / (1.0 + e2x);
|
|
`);return this.compileAndRun(n,[e])},t.prototype.asinh=function(e){var n=new lt(e.shape,Cp);return this.compileAndRun(n,[e])},t.prototype.acosh=function(e){var n=new lt(e.shape,Ip);return this.compileAndRun(n,[e])},t.prototype.atanh=function(e){var n=new lt(e.shape,Sp);return this.compileAndRun(n,[e])},t.prototype.erf=function(e){var n=new lt(e.shape,`
|
|
// Error function is calculated approximately with elementary function.
|
|
// See "Handbook of Mathematical Functions with Formulas,
|
|
// Graphs, and Mathematical Tables", Abramowitz and Stegun.
|
|
float p = 0.3275911;
|
|
float a1 = 0.254829592;
|
|
float a2 = -0.284496736;
|
|
float a3 = 1.421413741;
|
|
float a4 = -1.453152027;
|
|
float a5 = 1.061405429;
|
|
|
|
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));
|
|
`);return this.compileAndRun(n,[e])},t.prototype.step=function(e,n){var o=new lt(e.shape,function(i){return i===void 0&&(i=0),or+`
|
|
return x > 0.0 ? 1.0 : float(`+i+`);
|
|
`}(n));return this.compileAndRun(o,[e])},t.prototype.conv2dByMatMul=function(e,n,o,i,a,s){var u=e.shape,c=this.texData.get(e.dataId),l=o.inChannels,f=u[0]*u[1]*u[2],h=o.outChannels,d=o.dataFormat==="channelsLast",p=(f===1||h===1)&&l>1e3,v=u[2]%2!=0&&!!c.isPacked;if(p||!J().getBool("WEBGL_LAZILY_UNPACK")||!J().getBool("WEBGL_PACK_BINARY_OPERATIONS")||!v){var g=d?u[0]*u[1]*u[2]:u[0]*u[2]*u[3],A=this.reshape(e,[1,g,o.inChannels]),w=this.reshape(n,[1,o.inChannels,o.outChannels]);return this.reshape(this.fusedBatchMatMul({a:A,b:w,transposeA:!1,transposeB:!1,bias:i,activation:a,preluActivationWeights:s}),o.outShape)}var E=d?u[0]*u[1]*(u[2]+1):u[0]*u[2]*(u[3]+1),x={dataId:e.dataId,shape:[1,E,o.inChannels],dtype:e.dtype},C=c.shape;c.shape=c.shape.slice(),c.shape[c.shape.length-2]++,R(Uo(c.shape,x.shape),function(){return"packed reshape "+c.shape+" to "+x.shape+" isn't free"});var S=this.reshape(n,[1,o.inChannels,o.outChannels]),N=this.fusedBatchMatMul({a:x,b:S,transposeA:!1,transposeB:!1,bias:i,activation:a,preluActivationWeights:s}),O=this.texData.get(N.dataId);return R(O.isPacked,function(){return"batchMatMul result is expected to be packed"}),c.shape=C,O.shape=o.outShape,L.makeTensorFromDataId(N.dataId,o.outShape,N.dtype)},t.prototype.conv2dWithIm2Row=function(e,n,o,i,a,s){var u=o.filterWidth,c=o.filterHeight,l=o.inChannels,f=o.outWidth,h=o.outHeight,d=o.dataFormat==="channelsLast",p=u*c*l,v=h*f,g=[p,v],A=e.squeeze([0]),w=n.reshape([1,p,-1]),E=new Ud(g,A.shape,o),x=this.compileAndRun(E,[A]).reshape([1,g[0],g[1]]),C=i!=null,S=s!=null,N=a?Oi(a,!0):null,O=new La(x.shape,[1,v,o.outChannels],!0,!1,C,N,S),F=[x,w];i&&F.push(i),S&&F.push(s);var P=this.compileAndRun(O,F);return d?P.reshape([1,h,f,o.outChannels]):P.reshape([1,o.outChannels,h,f])},t.prototype.fusedConv2d=function(e){var n=e.input,o=e.filter,i=e.convInfo,a=e.bias,s=e.activation,u=e.preluActivationWeights;if(i.filterHeight===1&&i.filterWidth===1&&i.dilationHeight===1&&i.dilationWidth===1&&i.strideHeight===1&&i.strideWidth===1&&(i.padInfo.type==="SAME"||i.padInfo.type==="VALID"))return this.conv2dByMatMul(n,o,i,a,s,u);if(J().getBool("WEBGL_CONV_IM2COL")&&n.shape[0]===1)return this.conv2dWithIm2Row(n,o,i,a,s,u);var c=a!=null,l=u!=null,f=s?Oi(s,!1):null,h=new vc(i,c,f,l),d=[n,o];return a&&d.push(a),u&&d.push(u),this.compileAndRun(h,d)},t.prototype.conv2d=function(e,n,o){if(o.filterHeight===1&&o.filterWidth===1&&o.dilationHeight===1&&o.dilationWidth===1&&o.strideHeight===1&&o.strideWidth===1&&(o.padInfo.type==="SAME"||o.padInfo.type==="VALID"))return this.conv2dByMatMul(e,n,o);if(J().getBool("WEBGL_CONV_IM2COL")&&e.shape[0]===1)return this.conv2dWithIm2Row(e,n,o);var i=new vc(o);return this.compileAndRun(i,[e,n])},t.prototype.conv2dDerInput=function(e,n,o){var i=new xd(o);return this.compileAndRun(i,[e,n])},t.prototype.conv2dDerFilter=function(e,n,o){var i=new yd(o);return this.compileAndRun(i,[e,n])},t.prototype.fusedDepthwiseConv2D=function(e){var n,o=e.input,i=e.filter,a=e.convInfo,s=e.bias,u=e.activation,c=e.preluActivationWeights,l=J().getBool("WEBGL_PACK_DEPTHWISECONV")&&a.strideWidth<=2&&a.outChannels/a.inChannels==1,f=u?Oi(u,l):null,h=[o,i],d=s!=null,p=c!=null;return d&&h.push(s),p&&h.push(c),l?(n=new mc(a,d,f,p),this.compileAndRun(n,h)):(n=new gc(a,d,f,p),this.compileAndRun(n,h))},t.prototype.depthwiseConv2D=function(e,n,o){var i;return J().getBool("WEBGL_PACK_DEPTHWISECONV")&&o.strideWidth<=2&&o.outChannels/o.inChannels==1?(i=new mc(o),this.compileAndRun(i,[e,n])):(i=new gc(o),this.compileAndRun(i,[e,n]))},t.prototype.depthwiseConv2DDerInput=function(e,n,o){var i=new Cd(o);return this.compileAndRun(i,[e,n])},t.prototype.depthwiseConv2DDerFilter=function(e,n,o){var i=new Ed(o);return this.compileAndRun(i,[e,n])},t.prototype.conv3d=function(e,n,o){var i=new Id(o);return this.compileAndRun(i,[e,n])},t.prototype.conv3dDerInput=function(e,n,o){var i=new wd(o);return this.compileAndRun(i,[e,n])},t.prototype.conv3dDerFilter=function(e,n,o){var i=new bd(o);return this.compileAndRun(i,[e,n])},t.prototype.maxPool=function(e,n){var o=new Wa(n,"max",!1);return this.compileAndRun(o,[e])},t.prototype.avgPool=function(e,n){var o=new Wa(n,"avg",!1);return this.compileAndRun(o,[e],"float32")},t.prototype.maxPoolBackprop=function(e,n,o,i){var a=new Wa(i,"max",!0),s=this.compileAndRun(a,[n]),u=new Gd(i),c=this.compileAndRun(u,[e,s],n.dtype);return s.dispose(),c},t.prototype.avgPoolBackprop=function(e,n,o){var i=new ud(o);return this.compileAndRun(i,[e],n.dtype)},t.prototype.cast=function(e,n){return Ba(e,n,this)},t.prototype.unstack=function(e,n){for(var o=e.shape[n],i=new Array(e.rank-1),a=0,s=0;s<e.rank;s++)s!==n&&(i[a++]=e.shape[s]);var u=new Array(e.rank).fill(0),c=e.shape.slice();c[n]=1;var l=new Array(o);for(s=0;s<l.length;s++)u[n]=s,l[s]=this.slice(e,u,c).reshape(i);return l},t.prototype.avgPool3d=function(e,n){var o=new Qa(n,"avg",!1);return this.compileAndRun(o,[e],"float32")},t.prototype.avgPool3dBackprop=function(e,n,o){var i=new cd(o);return this.compileAndRun(i,[e],n.dtype)},t.prototype.maxPool3d=function(e,n){var o=new Qa(n,"max",!1);return this.compileAndRun(o,[e],"float32")},t.prototype.maxPool3dBackprop=function(e,n,o,i){var a=new Qa(i,"max",!0),s=this.compileAndRun(a,[n]),u=new Xd(i),c=this.compileAndRun(u,[e,s],n.dtype);return s.dispose(),c},t.prototype.reshape=function(e,n){var o=this.texData.get(e.dataId);if(o.isPacked&&!Uo(e.shape,n)&&(o.texture===null||!Uo(o.shape,n))){var i=this.packedReshape(e,n);return L.makeTensorFromDataId(i.dataId,i.shape,i.dtype)}return Di(e,n)},t.prototype.resizeBilinear=function(e,n,o,i){var a=J().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new rp(e.shape,n,o,i):new np(e.shape,n,o,i);return this.compileAndRun(a,[e],"float32")},t.prototype.resizeBilinearBackprop=function(e,n,o){var i=new tp(e,n,o);return this.compileAndRun(i,[e])},t.prototype.resizeNearestNeighbor=function(e,n,o,i){var a=new ip(e.shape,n,o,i);return this.compileAndRun(a,[e])},t.prototype.resizeNearestNeighborBackprop=function(e,n,o){var i=new op(e,n,o);return this.compileAndRun(i,[e])},t.prototype.multinomial=function(e,n,o,i){var a=n?e:Cr(e),s=a.shape[0],u=a.shape[1],c=new Jd(s,u,o),l=c.getCustomSetupFunc(i);return this.compileAndRun(c,[a],"int32",l)},t.prototype.oneHot=function(e,n,o,i){var a=new Kd(e.size,n,o,i);return this.compileAndRun(a,[e])},t.prototype.diag=function(e){var n=new Dd(e.size);return this.compileAndRun(n,[e])},t.prototype.nonMaxSuppression=function(e,n,o,i,a){return Ai("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead"),Da(e.dataSync(),n.dataSync(),o,i,a)},t.prototype.cropAndResize=function(e,n,o,i,a,s){var u=new Sd(e.shape,n.shape,i,a,s);return this.compileAndRun(u,[e,n,o],"float32")},t.prototype.depthToSpace=function(e,n,o){R(n>1,function(){return"blockSize should be > 1 for depthToSpace, but was: "+n});var i=e.shape[0],a=o==="NHWC"?e.shape[1]:e.shape[2],s=o==="NHWC"?e.shape[2]:e.shape[3],u=o==="NHWC"?e.shape[3]:e.shape[1],c=a*n,l=s*n,f=u/(n*n),h=new Td(o==="NHWC"?[i,c,l,f]:[i,f,c,l],n,o);return this.compileAndRun(h,[e])},t.prototype.split=function(e,n,o){return ic(e,n,o)},t.prototype.scatterND=function(e,n,o){var i=jo(0,e,o),a=i.sliceRank,s=i.numUpdates,u=i.sliceSize,c=i.strides,l=i.outputSize,f=[l/u,u],h=e.reshape([s,a]),d=n.reshape([s,u]);if(l===0)return Di(Tn([]),o);var p=Te(0),v=new Wc(s,a,h.rank,d.rank,c,f);return this.compileAndRun(v,[d,h,p]).reshape(o)},t.prototype.sparseToDense=function(e,n,o,i){var a=jo(0,e,o),s=a.sliceRank,u=a.numUpdates,c=a.strides,l=a.outputSize,f=new Wc(u,s,e.rank,n.rank,c,[l,1],!1);return this.compileAndRun(f,[n,e,i]).reshape(o)},t.prototype.fft=function(e){return this.fftImpl(e,!1)},t.prototype.ifft=function(e){return this.fftImpl(e,!0)},t.prototype.fftImpl=function(e,n){var o=this.texData.get(e.dataId),i=new yc(Md,e.shape,n),a=new yc(Ld,e.shape,n),s=[this.makeComplexComponentTensorInfo(e,o.complexTensors.real),this.makeComplexComponentTensorInfo(e,o.complexTensors.imag)],u=this.compileAndRun(i,s),c=this.compileAndRun(a,s),l=this.complex(u,c).as2D(e.shape[0],e.shape[1]);return u.dispose(),c.dispose(),l},t.prototype.gatherND=function(e,n){var o=n.shape,i=o[o.length-1],a=ba(e,n),s=a[0],u=a[1],c=a[2],l=a[3],f=n.reshape([u,i]),h=e.reshape([e.size/c,c]),d=new _d(i,l,[u,c]);return this.compileAndRun(d,[h,f]).reshape(s)},t.prototype.fill=function(e,n,o){if((o=o||je(n))==="string"){var i=m(o,Re(e));return i.fill(n),L.makeTensor(i,e,o,this)}var a=new Wd(e,n),s=a.getCustomSetupFunc(n);return this.compileAndRun(a,[],o,s)},t.prototype.onesLike=function(e){if(e.dtype==="string")throw new Error("onesLike is not supported under string dtype");return this.fill(e.shape,1,e.dtype)},t.prototype.zerosLike=function(e){return this.fill(e.shape,e.dtype==="string"?"":0,e.dtype)},t.prototype.linspace=function(e,n,o){return ka(e,n,o)},t.prototype.makeTensorInfo=function(e,n){var o=this.write(null,e,n);return this.texData.get(o).usage=null,{dataId:o,shape:e,dtype:n}},t.prototype.makeOutput=function(e,n){var o=this.makeTensorInfo(e,n).dataId;return L.makeTensorFromDataId(o,e,n,this)},t.prototype.unpackTensor=function(e){var n=new Bp(e.shape);return this.runWebGLProgram(n,[e],e.dtype)},t.prototype.packTensor=function(e){var n=new Zd(e.shape);return this.runWebGLProgram(n,[e],e.dtype,null,!0)},t.prototype.packedReshape=function(e,n){var o=[_o(e.shape)].concat(zo(e.shape)),i={dtype:e.dtype,shape:o,dataId:e.dataId},a=[_o(n)].concat(zo(n)),s=new ep(a,o),u=this.runWebGLProgram(s,[i],e.dtype,null,!0);return{dataId:u.dataId,shape:n,dtype:u.dtype}},t.prototype.decode=function(e){var n,o=this.texData.get(e),i=o.isPacked,a=o.shape,s=o.dtype,u=gi(a);return n=i?new kd(u):new Bd(u),{dtype:s,shape:a,dataId:this.runWebGLProgram(n,[{shape:u,dtype:s,dataId:e}],s,null,!0).dataId}},t.prototype.runWebGLProgram=function(e,n,o,i,a){var s=this;a===void 0&&(a=!1);var u=this.makeTensorInfo(e.outputShape,o),c=this.texData.get(u.dataId);if(e.packedOutput&&(c.isPacked=!0),e.outPackingScheme===er.DENSE){var l=Mo(e.outputShape);c.texShape=l.map(function(E){return 2*E})}if(e.outTexUsage!=null&&(c.usage=e.outTexUsage),Re(u.shape)===0)return c.values=T(u.dtype,0),u;var f=[],h=n.map(function(E){if(E.dtype==="complex64")throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.");var x=s.texData.get(E.dataId);if(x.texture==null){if(!e.packedInputs&&Re(E.shape)<=J().getNumber("WEBGL_SIZE_UPLOAD_UNIFORM"))return{shape:E.shape,texData:null,isUniform:!0,uniformValues:x.values};e.packedInputs&&(x.isPacked=!0,x.shape=E.shape)}else if(!!x.isPacked!=!!e.packedInputs)E=x.isPacked?s.unpackTensor(E):s.packTensor(E),f.push(E),x=s.texData.get(E.dataId);else if(x.isPacked&&!Uo(x.shape,E.shape)){var C=E,S=E.shape;E.shape=x.shape,E=s.packedReshape(E,S),f.push(E),x=s.texData.get(E.dataId),C.shape=S}return s.uploadToGPU(E.dataId),{shape:E.shape,texData:x,isUniform:!1}});this.uploadToGPU(u.dataId);var d,p={shape:u.shape,texData:c,isUniform:!1},v=function(E,x,C){var S="";x.concat(C).forEach(function(F){var P=F.texData!=null&&F.texData.slice!=null&&F.texData.slice.flatOffset>0,z=F.isUniform?"uniform":F.texData.texShape;S+=F.shape+"_"+z+"_"+P});var N=E.userCode,O=E.constructor.name;return O+="_"+S+"_"+N}(e,h,p),g=this.getAndSaveBinary(v,function(){return function(E,x,C,S){var N=x.userCode,O=C.map(function(ie,de){var ve={logicalShape:ie.shape,texShape:ie.isUniform?null:ie.texData.texShape,isUniform:ie.isUniform,isPacked:!ie.isUniform&&ie.texData.isPacked,flatOffset:null};return ie.texData!=null&&ie.texData.slice!=null&&ie.texData.slice.flatOffset>0&&(ve.flatOffset=ie.texData.slice.flatOffset),{name:x.variableNames[de],shapeInfo:ve}}),F=O.map(function(ie){return ie.shapeInfo}),P={logicalShape:S.shape,texShape:S.texData.texShape,isUniform:!1,isPacked:S.texData.isPacked,flatOffset:null},z=nd(O,P,N,x.packedInputs),_=E.createProgram(z),V=null,G=E.getUniformLocation(_,"NAN",!1);J().getNumber("WEBGL_VERSION")===1&&(V=E.getUniformLocation(_,"INFINITY",!1));for(var te={},ce=0;ce<x.variableNames.length;ce++){var se=x.variableNames[ce];te[se]=E.getUniformLocation(_,se,!1),te["offset"+se]=E.getUniformLocation(_,"offset"+se,!1)}return{program:x,source:z,webGLProgram:_,uniformLocations:te,inShapeInfos:F,outShapeInfo:P,infLoc:V,nanLoc:G}}(s.gpgpu,e,h,p)}),A=this.activeTimers!=null;if(A&&(d=this.startTimer()),function(E,x,C,S,N){Lc(x.inShapeInfos,C),Lc([x.outShapeInfo],[S]);var O=S.texData.texture,F=S.texData.texShape;S.texData.isPacked?E.setOutputPackedMatrixTexture(O,F[0],F[1]):E.setOutputMatrixTexture(O,F[0],F[1]),E.setProgram(x.webGLProgram),J().getNumber("WEBGL_VERSION")===1&&x.infLoc!==null&&E.gl.uniform1f(x.infLoc,1/0),x.nanLoc!==null&&E.gl.uniform1f(x.nanLoc,NaN),C.forEach(function(P,z){var _=x.program.variableNames[z],V=x.uniformLocations[_],G=x.uniformLocations["offset"+_];if(V!=null)if(P.isUniform)if(Re(P.shape)<2)E.gl.uniform1f(V,P.uniformValues[0]);else{var te=P.uniformValues;te instanceof Float32Array||(te=new Float32Array(te)),E.gl.uniform1fv(V,te)}else P.texData.slice!=null&&G!=null&&E.gl.uniform1i(G,P.texData.slice.flatOffset),E.setInputMatrixTexture(P.texData.texture,V,z)}),N!=null&&N(E,x.webGLProgram),E.executeProgram()}(this.gpgpu,g,h,p,i),f.forEach(function(E){return s.disposeData(E.dataId)}),A&&(d=this.endTimer(d),this.activeTimers.push({name:e.constructor.name,query:this.getQueryTime(d)})),!J().getBool("WEBGL_LAZILY_UNPACK")&&c.isPacked&&a===!1){var w=this.unpackTensor(u);return this.disposeData(u.dataId),w}return u},t.prototype.compileAndRun=function(e,n,o,i,a){a===void 0&&(a=!1),o=o||n[0].dtype;var s=this.runWebGLProgram(e,n,o,i,a);return L.makeTensorFromDataId(s.dataId,s.shape,s.dtype)},t.prototype.getAndSaveBinary=function(e,n){return e in this.binaryCache||(this.binaryCache[e]=n()),this.binaryCache[e]},t.prototype.getTextureManager=function(){return this.textureManager},t.prototype.dispose=function(){var e=this;this.disposed||(J().getBool("IS_TEST")||Object.keys(this.binaryCache).forEach(function(n){e.gpgpu.deleteProgram(e.binaryCache[n].webGLProgram),delete e.binaryCache[n]}),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)},t.prototype.floatPrecision=function(){var e=this;return this.floatPrecisionValue==null&&(this.floatPrecisionValue=Le(function(){if(!J().get("WEBGL_RENDER_FLOAT32_ENABLED")){var n=J().getBool("DEBUG");J().set("DEBUG",!1);var o=e.abs(Te(1e-8)).dataSync()[0];if(J().set("DEBUG",n),o>0)return 32}return 16})),this.floatPrecisionValue},t.prototype.epsilon=function(){return this.floatPrecision()===32?1e-7:1e-4},t.prototype.uploadToGPU=function(e){var n,o=this.texData.get(e),i=o.shape,a=o.dtype,s=o.values,u=o.texture,c=o.usage,l=o.isPacked;if(u==null){var f,h=this.activeTimers!=null;h&&(f=$());var d=o.texShape;if(d==null&&(d=Tu(i,l),o.texShape=d),s!=null){var p=gi(i),v=void 0,g=d[1],A=d[0],w=s instanceof Uint8Array;l?(g=(n=Lo(d[0],d[1]))[0],A=n[1],v=new Od(p,[A,g],w)):v=new Nd(p,[A,g],w);var E=this.makeTensorInfo([A,g],a);this.texData.get(E.dataId).usage=w?bn.PIXELS:bn.UPLOAD,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(E.dataId),g,A,s);var x=this.runWebGLProgram(v,[E],a,null,!0),C=this.texData.get(x.dataId);o.texture=C.texture,o.texShape=C.texShape,o.isPacked=C.isPacked,o.usage=C.usage,this.disposeData(E.dataId),this.texData.delete(x.dataId),o.values=null,h&&(this.uploadWaitMs+=$()-f)}else{var S=this.acquireTexture(d,c,a,l);o.texture=S}}},t.prototype.convertAndCacheOnCPU=function(e,n){var o=this.texData.get(e),i=o.dtype;return this.releaseGPUData(e),n!=null&&(o.values=function(a,s){if(s==="float32"||s==="complex64")return a;if(s==="int32"||s==="bool"){for(var u=s==="int32"?new Int32Array(a.length):new Uint8Array(a.length),c=0;c<u.length;++c)u[c]=Math.round(a[c]);return u}throw new Error("Unknown dtype "+s)}(n,i)),o.values},t.prototype.acquireTexture=function(e,n,o,i){if(this.numBytesInGPU+=this.computeBytes(e,o),!this.warnedAboutMemory&&this.numBytesInGPU>1024*this.numMBBeforeWarning*1024){var a=(this.numBytesInGPU/1024/1024).toFixed(2);this.warnedAboutMemory=!0,console.warn("High memory usage in GPU: "+a+" MB, most likely due to a memory leak")}return this.textureManager.acquireTexture(e,n,i)},t.prototype.computeBytes=function(e,n){return e[0]*e[1]*W(n)},t}(tc);wr()&&L.registerBackend("webgl",function(){return new $c},2);var Tp=Q({square_:function(r){var t=B(r,"x","square"),e=[t];return L.runKernelFunc(function(n,o){return o([t]),n.square(t)},{x:t},null,"Square",{},e,[])}}),Zo="SquaredDifference",el=Q({squaredDifference_:function(r,t){var e,n=B(r,"a","squaredDifference"),o=B(t,"b","squaredDifference");e=pt(n,o),n=e[0],o=e[1],vt(n.shape,o.shape);var i={a:n,b:o},a=[n,o];return L.runKernelFunc(function(s,u){var c=s.squaredDifference(n,o);return u([n,o]),c},i,function(s,u){var c=u[0],l=u[1],f=Te(2);return{a:function(){return s.mul(c.sub(l).mul(f))},b:function(){return s.mul(l.sub(c).mul(f))}}},Zo,{},a,[])}}),Dp=Q({abs_:function(r){var t=B(r,"x","abs");return t.dtype==="complex64"?L.runKernelFunc(function(e){return e.complexAbs(t)},{$x:t}):L.runKernelFunc(function(e,n){var o=e.abs(t);return n([t]),o},{x:t},function(e,n){var o=n[0];return{x:function(){return e.mul(o.toFloat().step(-1))}}},"Abs")}}),Fp=Q({acos_:function(r){var t=B(r,"x","acos");return L.runKernelFunc(function(e,n){var o=e.acos(t);return n([t]),o},{$x:t},function(e,n){var o=n[0];return{$x:function(){return e.divStrict(Te(1).sub(o.toFloat().square()).sqrt()).neg()}}})}}),Pp=Q({acosh_:function(r){var t=B(r,"x","acosh");return L.runKernelFunc(function(e,n){var o=e.acosh(t);return n([t]),o},{$x:t},function(e,n){var o=n[0];return{$x:function(){return e.divStrict(o.toFloat().square().sub(1).sqrt())}}})}}),Np=Q({asin_:function(r){var t=B(r,"x","asin");return L.runKernelFunc(function(e,n){var o=e.asin(t);return n([t]),o},{$x:t},function(e,n){var o=n[0];return{$x:function(){return e.divStrict(Te(1).sub(o.toFloat().square()).sqrt())}}})}}),Op=Q({asinh_:function(r){var t=B(r,"x","asinh");return L.runKernelFunc(function(e,n){var o=e.asinh(t);return n([t]),o},{$x:t},function(e,n){var o=n[0];return{$x:function(){return e.divStrict(Te(1).add(o.toFloat().square()).sqrt())}}})}}),Mp=Q({atan_:function(r){var t=B(r,"x","atan");return L.runKernelFunc(function(e,n){var o=e.atan(t);return n([t]),o},{$x:t},function(e,n){var o=n[0];return{$x:function(){return e.div(o.toFloat().square().add(1))}}})}}),Lp=Q({atanh_:function(r){var t=B(r,"x","atanh");return L.runKernelFunc(function(e,n){var o=e.atanh(t);return n([t]),o},{$x:t},function(e,n){var o=n[0];return{$x:function(){return e.div(Te(1).sub(o.toFloat().square()))}}})}}),Wp=Q({ceil_:function(r){var t=B(r,"x","ceil");return L.runKernelFunc(function(e){return e.ceil(t)},{$x:t},function(e){return{$x:function(){return Tt(e)}}})}}),Ha=Q({clipByValue_:function(r,t,e){var n=B(r,"x","clipByValue");R(t<=e,function(){return"Error in clip: min ("+t+") must be less than or equal to max ("+e+")."});var o=[n],i={min:t,max:e};return L.runKernelFunc(function(a,s){var u=a.clip(n,t,e);return s([n]),u},{x:n},function(a,s){var u=s[0];return{x:function(){return a.where(u.greaterEqual(t).logicalAnd(u.lessEqual(e)),Tt(a))}}},"ClipByValue",i,o)}}),Qp=Q({cos_:function(r){var t=B(r,"x","cos"),e=[t];return L.runKernelFunc(function(n,o){var i=n.cos(t);return o([t]),i},{x:t},function(n,o){var i=o[0];return{x:function(){return i.toFloat().sin().neg().mul(n)}}},"Cos",{},e)}}),_p=Q({cosh_:function(r){var t=B(r,"x","cosh");return L.runKernelFunc(function(e,n){var o=e.cosh(t);return n([t]),o},{$x:t},function(e,n){var o=n[0];return{$x:function(){return o.toFloat().sinh().mulStrict(e)}}})}}),zp=Q({erf_:function(r){var t=B(r,"x","erf");return R(t.dtype==="int32"||t.dtype==="float32",function(){return"Input dtype must be `int32` or `float32`."}),t.dtype==="int32"&&(t=t.toFloat()),L.runKernelFunc(function(e,n){var o=e.erf(t);return n([t]),o},{$x:t},function(e,n){var o=n[0];return{$x:function(){return e.mul(o.square().neg().exp().mul(2/Math.sqrt(Math.PI)))}}})}}),ja=Q({exp_:function(r){var t=B(r,"x","exp");return L.runKernelFunc(function(e,n){var o=e.exp(t);return n([o]),o},{x:t},function(e,n){return{x:function(){return e.mulStrict(n[0])}}},"Exp",{},[],[!0])}}),Up=Q({expm1_:function(r){var t=B(r,"x","expm1");return L.runKernelFunc(function(e,n){var o=e.expm1(t);return n([t]),o},{$x:t},function(e,n){var o=n[0];return{$x:function(){return e.mul(o.exp())}}})}}),Hp=Q({floor_:function(r){var t=B(r,"x","floor");return L.runKernelFunc(function(e){return e.floor(t)},{$x:t},function(e){return{$x:function(){return Tt(e)}}})}}),jp=Q({log_:function(r){var t=B(r,"x","log"),e=[t];return L.runKernelFunc(function(n,o){var i=n.log(t);return o([t]),i},{x:t},function(n,o){var i=o[0];return{x:function(){return n.div(i.toFloat())}}},"Log",{},e)}}),Vp=Q({log1p_:function(r){var t=B(r,"x","log1p");return L.runKernelFunc(function(e,n){var o=e.log1p(t);return n([t]),o},{$x:t},function(e,n){var o=n[0];return{$x:function(){return e.div(o.add(1))}}})}}),Gp=Q({logSigmoid_:function(r){var t=B(r,"x","logSigmoid");return L.runKernelFunc(function(e,n){var o=e.softplus(t.neg()).neg();return n([t]),o},{$x:t},function(e,n){var o=n[0];return{$x:function(){return e.mul(o.neg().sigmoid())}}})}}),Mi=Q({neg_:function(r){var t=B(r,"x","neg"),e=[t];return L.runKernelFunc(function(n){return n.neg(t)},{x:t},function(n){return{x:function(){return n.neg()}}},"Neg",{},e)}}),Xp=Q({reciprocal_:function(r){var t=B(r,"x","reciprocal");return L.runKernelFunc(function(e,n){var o=e.reciprocal(t);return n([t]),o},{$x:t},function(e,n){var o=n[0];return{$x:function(){return e.div(o.square().neg())}}})}}),Jp=Q({round_:function(r){var t=B(r,"x","round");return L.runKernelFunc(function(e){return e.round(t)},{$x:t},function(e){return{$x:function(){return Tt(e)}}})}}),tl=Q({rsqrt_:function(r){var t=B(r,"x","rsqrt"),e=[t];return L.runKernelFunc(function(n,o){var i=n.rsqrt(t);return o([t]),i},{x:t},function(n,o){var i=o[0];return{x:function(){return n.div(i.pow(1.5).mul(2)).neg()}}},"Rsqrt",{},e)}}),nl=Q({sigmoid_:function(r){var t=B(r,"x","sigmoid");return L.runKernelFunc(function(e,n){var o=e.sigmoid(t);return n([o]),o},{x:t},function(e,n){var o=n[0];return{x:function(){return e.mul(o.mul(Te(1).sub(o)))}}},"Sigmoid")}}),Kp=Q({sign_:function(r){var t=B(r,"x","sign");return L.runKernelFunc(function(e){return e.sign(t)},{$x:t},function(e){return{$x:function(){return Tt(e)}}})}}),Zp=Q({isNaN_:function(r){var t=B(r,"x","isNaN");return L.runKernelFunc(function(e){return e.isNaN(t)},{$x:t},function(e){return{$x:function(){return Tt(e)}}})}}),qp=Q({isInf_:function(r){var t=B(r,"x","isInf");return L.runKernelFunc(function(e){return e.isInf(t)},{$x:t},function(e){return{$x:function(){return Tt(e)}}})}}),Yp=Q({isFinite_:function(r){var t=B(r,"x","isFinite");return L.runKernelFunc(function(e){return e.isFinite(t)},{$x:t},function(e){return{$x:function(){return Tt(e)}}})}}),$p=Q({sin_:function(r){var t=B(r,"x","sin"),e=[t];return L.runKernelFunc(function(n,o){var i=n.sin(t);return o([t]),i},{x:t},function(n,o){var i=o[0];return{x:function(){return i.toFloat().cos().mul(n)}}},"Sin",{},e)}}),ev=Q({sinh_:function(r){var t=B(r,"x","sinh");return L.runKernelFunc(function(e,n){var o=e.sinh(t);return n([t]),o},{$x:t},function(e,n){var o=n[0];return{$x:function(){return o.toFloat().cosh().mulStrict(e)}}})}}),tv=Q({softplus_:function(r){var t=B(r,"x","softplus");return L.runKernelFunc(function(e,n){var o=e.softplus(t);return n([t]),o},{$x:t},function(e,n){var o=n[0];return{$x:function(){return e.mul(o.sigmoid())}}})}}),nv=Q({sqrt_:function(r){var t=B(r,"x","sqrt");return L.runKernelFunc(function(e,n){var o=e.sqrt(t);return n([t]),o},{$x:t},function(e,n){var o=n[0];return{$x:function(){return e.div(o.toFloat().sqrt().mul(2))}}})}}),rv=Q({step_:function(r,t){t===void 0&&(t=0);var e=B(r,"x","step");return L.runKernelFunc(function(n){return n.step(e,t)},{$x:e},function(n){return{$x:function(){return Tt(n)}}})}}),ov=Q({tan_:function(r){var t=B(r,"x","tan");return L.runKernelFunc(function(e,n){var o=e.tan(t);return n([t]),o},{$x:t},function(e,n){var o=n[0];return{$x:function(){return e.div(o.cos().square())}}})}}),iv=Q({tanh_:function(r){var t=B(r,"x","tanh");return L.runKernelFunc(function(e,n){var o=e.tanh(t);return n([o]),o},{x:t},function(e,n){var o=n[0];return{x:function(){return Te(1).sub(o.square()).mulStrict(e)}}},"Tanh",{},null,[!0])}});function rl(r,t,e,n,o,i){var a,s,u=B(r,"x","batchNorm"),c=B(t,"mean","batchNorm"),l=B(e,"variance","batchNorm");return o!=null&&(a=B(o,"scale","batchNorm")),n!=null&&(s=B(n,"offset","batchNorm")),R(u.rank===2,function(){return"Error in batchNorm3D: x must be rank 3 but got rank "+u.rank+"."}),R(c.rank===2||c.rank===1,function(){return"Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank "+c.rank+"."}),R(l.rank===2||l.rank===1,function(){return"Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank "+l.rank+"."}),a!=null&&R(a.rank===2||a.rank===1,function(){return"Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank "+a.rank+"."}),s!=null&&R(s.rank===2||s.rank===1,function(){return"Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank "+s.rank+"."}),qo(u,c,l,s,a,i)}function ol(r,t,e,n,o,i){var a,s,u=B(r,"x","batchNorm"),c=B(t,"mean","batchNorm"),l=B(e,"variance","batchNorm");return o!=null&&(a=B(o,"scale","batchNorm")),n!=null&&(s=B(n,"offset","batchNorm")),R(u.rank===3,function(){return"Error in batchNorm3D: x must be rank 3 but got rank "+u.rank+"."}),R(c.rank===3||c.rank===1,function(){return"Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank "+c.rank+"."}),R(l.rank===3||l.rank===1,function(){return"Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank "+l.rank+"."}),a!=null&&R(a.rank===3||a.rank===1,function(){return"Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank "+a.rank+"."}),s!=null&&R(s.rank===3||s.rank===1,function(){return"Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank "+s.rank+"."}),qo(u,c,l,s,a,i)}function il(r,t,e,n,o,i){var a,s,u=B(r,"x","batchNorm"),c=B(t,"mean","batchNorm"),l=B(e,"variance","batchNorm");return o!=null&&(a=B(o,"scale","batchNorm")),n!=null&&(s=B(n,"offset","batchNorm")),R(u.rank===4,function(){return"Error in batchNorm4D: x must be rank 4 but got rank "+u.rank+"."}),R(c.rank===4||c.rank===1,function(){return"Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank "+c.rank+"."}),R(l.rank===4||l.rank===1,function(){return"Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank "+l.rank+"."}),a!=null&&R(a.rank===4||a.rank===1,function(){return"Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank "+a.rank+"."}),s!=null&&R(s.rank===4||s.rank===1,function(){return"Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank "+s.rank+"."}),qo(u,c,l,s,a,i)}function qo(r,t,e,n,o,i){i==null&&(i=.001);var a,s,u,c=B(r,"x","batchNorm"),l=B(t,"mean","batchNorm"),f=B(e,"variance","batchNorm");o!=null&&(a=B(o,"scale","batchNorm")),n!=null&&(s=B(n,"offset","batchNorm")),R(l.rank===f.rank,function(){return"Batch normalization gradient requires mean and variance to have equal ranks."}),R(s==null||l.rank===s.rank,function(){return"Batch normalization gradient requires mean and offset to have equal ranks."}),R(a==null||l.rank===a.rank,function(){return"Batch normalization gradient requires mean and scale to have equal ranks."}),u=c.rank===0||c.rank===1?c.as4D(1,1,1,c.size):c.rank===2?c.as4D(1,1,c.shape[0],c.shape[1]):c.rank===3?c.as4D(1,c.shape[0],c.shape[1],c.shape[2]):c;var h=[c,l,f,a];return L.runKernelFunc(function(d,p){var v=d.batchNormalization(u,Li(l),Li(f),i,Li(a),Li(s));return p([c,l,f,a]),v},{x:c,mean:l,variance:f,scale:a,offset:s},function(d,p){var v=p,g=v[0],A=v[1],w=v[2],E=v[3],x=E==null?Te(1):E,C=vn(A.shape,u.shape),S=[];if(A.rank===1){for(var N=0;N<u.shape.length-1;++N)S.push(u.shape[N]);S.push(1)}var O=g.sub(A),F=d.mul(x),P=tl(w.add(Te(i))),z=P.mul(P).mul(P).mul(Te(-.5));return{x:function(){return A.rank===1?d.mul(vo(P.as4D(1,1,1,A.shape[0]),S)).mul(x).reshape(g.shape):d.mul(P).mul(x).reshape(g.shape)},mean:function(){var _=P.mul(Te(-1)).mul(F);return A.rank===1&&(_=_.sum(C)),_.reshape(A.shape)},variance:function(){var _=z.mul(O).mul(F);return A.rank===1&&(_=_.sum(C)),_.reshape(A.shape)},scale:function(){var _=O.mul(P),V=d.mul(_);return A.rank===1&&(V=V.sum(C)),V.reshape(A.shape)},offset:function(){var _=d;return A.rank===1&&(_=_.sum(C)),_.reshape(A.shape)}}},"BatchNormalization",{varianceEpsilon:i},h).reshape(c.shape)}function Li(r){return r==null?null:r.rank===0?r.as1D():r.rank===1?r:r.rank===2?r.as4D(1,1,r.shape[0],r.shape[1]):r.rank===3?r.as4D(1,r.shape[0],r.shape[1],r.shape[2]):r}function Wi(){Lu("tf.batchNormalization() is going away. Use tf.batchNorm() instead, and note the positional argument change of scale, offset, and varianceEpsilon")}var av=Q({batchNormalization2d_:function(r,t,e,n,o,i){return n===void 0&&(n=.001),Wi(),rl(r,t,e,i,o,n)}}),sv=Q({batchNormalization3d_:function(r,t,e,n,o,i){return n===void 0&&(n=.001),Wi(),ol(r,t,e,i,o,n)}}),uv=Q({batchNormalization4d_:function(r,t,e,n,o,i){return n===void 0&&(n=.001),Wi(),il(r,t,e,i,o,n)}}),cv=Q({batchNormalization_:function(r,t,e,n,o,i){return n===void 0&&(n=.001),Wi(),qo(r,t,e,i,o,n)}}),al=Q({batchNorm_:qo}),lv=Q({batchNorm2d_:rl}),fv=Q({batchNorm3d_:ol}),hv=Q({batchNorm4d_:il}),Qi=Q({logicalAnd_:function(r,t){var e=B(r,"a","logicalAnd","bool"),n=B(t,"b","logicalAnd","bool");return vt(e.shape,n.shape),L.runKernelFunc(function(o){return o.logicalAnd(e,n)},{a:e,b:n},null,"LogicalAnd")}}),dv=Q({logicalNot_:function(r){var t=B(r,"x","logicalNot","bool");return L.runKernelFunc(function(e){return e.logicalNot(t)},{$x:t})}}),sl=Q({logicalOr_:function(r,t){var e=B(r,"a","logicalOr","bool"),n=B(t,"b","logicalOr","bool");return vt(e.shape,n.shape),L.runKernelFunc(function(o){return o.logicalOr(e,n)},{$a:e,$b:n})}}),pv=Q({logicalXor_:function(r,t){var e=B(r,"a","logicalXor","bool"),n=B(t,"b","logicalXor","bool");return vt(e.shape,n.shape),sl(r,t).logicalAnd(Qi(r,t).logicalNot())}}),no=Q({where_:function(r,t,e){var n=B(t,"a","where"),o=B(e,"b","where"),i=B(r,"condition","where","bool");return Je(n.shape,o.shape,"Error in where: "),i.rank===1?R(i.shape[0]===n.shape[0],function(){return"The first dimension of `a` must match the size of `condition`."}):Je(i.shape,o.shape,"Error in where: "),L.runKernelFunc(function(a,s){var u=a.select(i,n,o);return s([i]),u},{$condition:i,$a:n,$b:o},function(a,s){var u=s[0];return{$condition:function(){return Tt(u).toFloat()},$a:function(){return a.mul(u.cast(a.dtype))},$b:function(){return a.mul(u.logicalNot().cast(a.dtype))}}})}}),ul=function(r){return xe(this,void 0,void 0,function(){var t,e,n;return Ie(this,function(o){switch(o.label){case 0:return[4,(t=B(r,"condition","whereAsync","bool")).data()];case 1:return e=o.sent(),n=Pa(t.shape,e),r!==t&&t.dispose(),[2,n]}})})},gt=Q({add_:function(r,t){var e,n=B(r,"a","add"),o=B(t,"b","add");e=pt(n,o),n=e[0],o=e[1];var i=vt(n.shape,o.shape);return L.runKernelFunc(function(a){return a.add(n,o)},{a:n,b:o},function(a){return{a:function(){var s=a,u=vn(n.shape,i);return u.length>0&&(s=s.sum(u)),s.reshape(n.shape)},b:function(){var s=a,u=vn(o.shape,i);return u.length>0&&(s=s.sum(u)),s.reshape(o.shape)}}},"Add")}}),vv=Q({addN_:function(r){R(Array.isArray(r),function(){return"The argument passed to tf.addN() must be a list of tensors"}),R(r.length>=1,function(){return"Must pass at least one tensor to tf.addN(), but got "+r.length});var t=r.map(function(o,i){return B(o,"tensors"+i,"addN")}),e=t[0];t.forEach(function(o){if(o.dtype!==e.dtype)throw new Error("All tensors passed to tf.addN() must have the same dtype")}),t.forEach(function(o){if(!Ke(o.shape,e.shape))throw new Error("All tensors passed to tf.addN() must have the same shape")});var n=t;return L.runKernelFunc(function(o){return o.addN(t)},n,function(o){var i={};return t.forEach(function(a,s){i[s]=function(){return o.clone()}}),i},"AddN")}}),gv=Q({addStrict_:function(r,t){var e=B(r,"a","addStrict"),n=B(t,"b","addStrict");return Je(e.shape,n.shape,"Error in addStrict: "),e.add(n)}}),mv=Q({atan2_:function(r,t){var e,n=B(r,"a","atan2"),o=B(t,"b","atan2");e=pt(n,o),n=e[0],o=e[1];var i=vt(n.shape,o.shape);return L.runKernelFunc(function(a,s){var u=a.atan2(n,o);return s([n,o]),u},{$a:n,$b:o},function(a,s){var u=s[0],c=s[1];return{$a:function(){var l=gt(u.square(),c.square()),f=a.mul(c.div(l)),h=vn(u.shape,i);return h.length>0&&(f=f.sum(h)),f.reshape(u.shape)},$b:function(){var l=gt(u.square(),c.square()),f=Mi(a.mul(u.div(l))),h=vn(c.shape,i);return h.length>0&&(f=f.sum(h)),f.reshape(c.shape)}}})}}),ir=Q({div_:function(r,t){var e,n=B(r,"a","div"),o=B(t,"b","div");if(e=pt(n,o),n=e[0],o=e[1],n.dtype==="int32"&&o.dtype==="int32")return cl(n,o);var i=vt(n.shape,o.shape);return L.runKernelFunc(function(a,s){var u=a.realDivide(n,o);return s([n,o]),u},{a:n,b:o},function(a,s){var u=s[0],c=s[1];return{a:function(){var l=a.div(c.toFloat()),f=vn(u.shape,i);return f.length>0?l.sum(f).reshape(u.shape):l},b:function(){var l=a.mul(u.toFloat()),f=vn(c.shape,i);f.length>0&&(l=l.sum(f).reshape(c.shape));var h=c.square();return l.div(h.toFloat()).neg()}}},"Div")}}),Av=Q({divNoNan_:function(r,t){var e,n=B(r,"a","div"),o=B(t,"b","div");n=(e=pt(n,o))[0],o=e[1];var i=ir(n,o),a=Tt(i),s=o.equal(a);return no(s,a,i)}}),yv=Q({divStrict_:function(r,t){var e=B(r,"a","div"),n=B(t,"b","div");return Je(e.shape,n.shape,"Error in divideStrict: "),e.div(n)}}),cl=Q({floorDiv_:function(r,t){var e,n=B(r,"a","floorDiv"),o=B(t,"b","floorDiv");e=pt(n,o),n=e[0],o=e[1];var i=vt(n.shape,o.shape);return L.runKernelFunc(function(a,s){var u=a.floorDiv(n,o);return s([n,o]),u},{a:n,b:o},function(a,s){var u=s[0],c=s[1];return{a:function(){var l=a.div(c.toFloat()),f=vn(u.shape,i);return f.length>0?l.sum(f).reshape(u.shape):l},b:function(){var l=a.mul(u.toFloat()),f=vn(c.shape,i);f.length>0&&(l=l.sum(f).reshape(c.shape));var h=c.square();return l.div(h.toFloat()).neg()}}},"FloorDiv")}}),Va=Q({maximum_:function(r,t){var e,n=B(r,"a","maximum"),o=B(t,"b","maximum");return e=pt(n,o),n=e[0],o=e[1],n.dtype==="bool"&&(n=n.toInt(),o=o.toInt()),vt(n.shape,o.shape),L.runKernelFunc(function(i,a){var s=i.maximum(n,o);return a([n,o]),s},{a:n,b:o},function(i,a){var s=a[0],u=a[1];return{a:function(){return i.mul(s.greaterEqual(u).toFloat())},b:function(){return i.mul(s.less(u).toFloat())}}},"Maximum")}}),xv=Q({maximumStrict_:function(r,t){var e=B(r,"a","maximumStrict"),n=B(t,"b","maximumStrict");return Je(e.shape,n.shape,"Error in maximumStrict: "),e.maximum(n)}}),ll=Q({minimum_:function(r,t){var e,n=B(r,"a","minimum"),o=B(t,"b","minimum");return e=pt(n,o),n=e[0],o=e[1],n.dtype==="bool"&&(n=n.toInt(),o=o.toInt()),vt(n.shape,o.shape),L.runKernelFunc(function(i,a){var s=i.minimum(n,o);return a([n,o]),s},{a:n,b:o},function(i,a){var s=a[0],u=a[1];return{a:function(){return i.mul(s.lessEqual(u).toFloat())},b:function(){return i.mul(s.greater(u).toFloat())}}},"Minimum")}}),bv=Q({minimumStrict_:function(r,t){var e=B(r,"a","minimumStrict"),n=B(t,"b","minimumStrict");return Je(e.shape,n.shape,"Error in minimumStrict: "),e.minimum(n)}}),wv=Q({mod_:function(r,t){var e,n=B(r,"a","mod"),o=B(t,"b","mod");e=pt(n,o),n=e[0],o=e[1];var i=vt(n.shape,o.shape);return L.runKernelFunc(function(a,s){var u=a.mod(n,o);return s([n,o]),u},{$a:n,$b:o},function(a,s){var u=s[0],c=s[1];return{$a:function(){var l=vn(u.shape,i);return l.length>0?a.sum(l).reshape(u.shape):a},$b:function(){var l=a.mul(u.div(c).floor().neg()),f=vn(c.shape,i);return f.length>0?l.sum(f).reshape(c.shape):l}}})}}),Ev=Q({modStrict_:function(r,t){var e=B(r,"a","modStrict"),n=B(t,"b","modStrict");return Je(e.shape,n.shape,"Error in modStrict: "),e.mod(n)}}),Fn=Q({mul_:function(r,t){var e,n=B(r,"a","mul"),o=B(t,"b","mul");e=pt(n,o),n=e[0],o=e[1];var i=vt(n.shape,o.shape);return L.runKernelFunc(function(a,s){var u=a.multiply(n,o);return s([n,o]),u},{a:n,b:o},function(a,s){var u=s[0],c=s[1];return{a:function(){var l=a.mul(c.toFloat()),f=vn(u.shape,i);return f.length>0?l.sum(f).reshape(u.shape):l},b:function(){var l=a.mul(u.toFloat()),f=vn(c.shape,i);return f.length>0?l.sum(f).reshape(c.shape):l}}},"Mul")}}),Cv=Q({mulStrict_:function(r,t){var e=B(r,"a","mul"),n=B(t,"b","mul");return Je(e.shape,n.shape,"Error in multiplyStrict: "),e.mul(n)}}),_i=Q({pow_:function(r,t){var e,n=B(r,"base","pow"),o=B(t,"exp","pow");e=pt(n,o),n=e[0],o=e[1];var i=vt(n.shape,o.shape),a=[n,o];return L.runKernelFunc(function(s,u){var c=s.pow(n,o);return u([n,o,c]),c},{a:n,b:o},function(s,u){var c=u[0],l=u[1],f=u[2];return{a:function(){var h=l.toFloat(),d=s.mul(h.mul(c.pow(h.sub(Te(1))))),p=vn(c.shape,i);return p.length>0&&(d=d.sum(p)),d.reshape(c.shape)},b:function(){var h=c.greater(0),d=c.log().where(h,Tt(c)),p=s.mul(f.mul(d)),v=vn(l.shape,i);return v.length>0&&(p=p.sum(v)),p.reshape(l.shape)}}},"Pow",{},a,[!0])}}),Iv=Q({powStrict_:function(r,t){return Je(r.shape,t.shape,"Error in powStrict: "),r.pow(t)}}),Sv=Q({squaredDifferenceStrict_:function(r,t){var e=B(r,"a","squaredDifferenceStrict"),n=B(t,"b","squaredDifferenceStrict");return Je(e.shape,n.shape,"Error in squaredDifferenceStrict: "),e.squaredDifference(n)}}),yn=Q({sub_:function(r,t){var e,n=B(r,"a","sub"),o=B(t,"b","sub");e=pt(n,o),n=e[0],o=e[1];var i=vt(n.shape,o.shape);return L.runKernelFunc(function(a){return a.subtract(n,o)},{a:n,b:o},function(a){return{a:function(){var s=a,u=vn(n.shape,i);return u.length>0&&(s=s.sum(u)),s.reshape(n.shape)},b:function(){var s=a,u=vn(o.shape,i);return u.length>0&&(s=s.sum(u)),s.neg().reshape(o.shape)}}},"Sub")}}),Rv=Q({subStrict_:function(r,t){var e=B(r,"a","subStrict"),n=B(t,"b","subStrict");return Je(e.shape,n.shape,"Error in subStrict: "),e.sub(n)}}),fl=Q({equal_:function(r,t){var e,n=B(r,"a","equal"),o=B(t,"b","equal");return e=pt(n,o),n=e[0],o=e[1],vt(n.shape,o.shape),L.runKernelFunc(function(i){return i.equal(n,o)},{$a:n,$b:o})}}),Bv=Q({equalStrict_:function(r,t){var e=B(r,"a","equalStrict"),n=B(t,"b","equalStrict");return Je(e.shape,n.shape,"Error in equalStrict: "),e.equal(n)}}),kv=Q({greater_:function(r,t){var e,n=B(r,"a","greater"),o=B(t,"b","greater");return e=pt(n,o),n=e[0],o=e[1],vt(n.shape,o.shape),L.runKernelFunc(function(i){return i.greater(n,o)},{a:n,b:o},null,"Greater")}}),hl=Q({greaterEqual_:function(r,t){var e,n=B(r,"a","greaterEqual"),o=B(t,"b","greaterEqual");return e=pt(n,o),n=e[0],o=e[1],vt(n.shape,o.shape),L.runKernelFunc(function(i,a){var s=i.greaterEqual(n,o);return a([n,o]),s},{a:n,b:o},function(i,a){var s=a[0],u=a[1];return{a:function(){return Tt(s)},b:function(){return Tt(u)}}},"GreaterEqual")}}),Tv=Q({greaterEqualStrict_:function(r,t){var e=B(r,"a","greaterEqualStrict"),n=B(t,"b","greaterEqualStrict");return Je(e.shape,n.shape,"Error in greaterEqualStrict: "),e.greaterEqual(n)}}),Dv=Q({greaterStrict_:function(r,t){var e=B(r,"a","greaterStrict"),n=B(t,"b","greaterStrict");return Je(e.shape,n.shape,"Error in greaterStrict: "),e.greater(n)}}),Fv=Q({less_:function(r,t){var e,n=B(r,"a","less"),o=B(t,"b","less");return e=pt(n,o),n=e[0],o=e[1],vt(n.shape,o.shape),L.runKernelFunc(function(i){return i.less(n,o)},{a:n,b:o},null,"Less")}}),Pv=Q({lessEqual_:function(r,t){var e,n=B(r,"a","lessEqual"),o=B(t,"b","lessEqual");return e=pt(n,o),n=e[0],o=e[1],vt(n.shape,o.shape),L.runKernelFunc(function(i,a){var s=i.lessEqual(n,o);return a([n,o]),s},{a:n,b:o},null,"LessEqual")}}),Nv=Q({lessEqualStrict_:function(r,t){var e=B(r,"a","lessEqualStrict"),n=B(t,"b","lessEqualStrict");return Je(e.shape,n.shape,"Error in lessEqualStrict: "),e.lessEqual(n)}}),Ov=Q({lessStrict_:function(r,t){var e=B(r,"a","lessStrict"),n=B(t,"b","lessStrict");return Je(e.shape,n.shape,"Error in lessStrict: "),e.less(n)}}),Mv=Q({notEqual_:function(r,t){var e,n=B(r,"a","notEqual"),o=B(t,"b","notEqual");return e=pt(n,o),n=e[0],o=e[1],vt(n.shape,o.shape),L.runKernelFunc(function(i){return i.notEqual(n,o)},{a:n,b:o},null,"NotEqual")}}),Lv=Q({notEqualStrict_:function(r,t){var e=B(r,"a","notEqualStrict"),n=B(t,"b","notEqualStrict");return Je(e.shape,n.shape,"Error in notEqualStrict: "),e.notEqual(n)}});function dl(r,t){for(var e=[],n=r;n<t;++n)e.push(n);return e}function pl(r){for(var t=[],e=0;e<r.length;++e)for(var n=0;n<r[e].length;++n)t.push(r[e][n]);return t}var Ga=Q({gather_:function(r,t,e){e===void 0&&(e=0);var n=B(r,"x","gather"),o=B(t,"indices","gather","int32");e=ht(e,n.shape)[0];var i=function(a,s,u){for(var c=a.shape[u],l=[],f=1,h=1,d=0;d<u;d++)l.push(a.shape[d]),f*=a.shape[d];for(d=0;d<s.rank;d++)l.push(s.shape[d]);for(d=u+1;d<a.rank;d++)l.push(a.shape[d]),h*=a.shape[d];return{batchSize:f,sliceSize:h,dimSize:c,outputShape:l}}(n,o,e);return L.runKernelFunc(function(a,s){var u=a.gather(n,o.flatten(),e);return s([o]),u},{x:n,indices:o},function(a,s){var u=s[0];return{x:function(){var c=n.shape,l=u.size,f=c.slice(0,e),h=f.length,d=c.slice(e,c.length).slice(1),p=d.length,v=dl(0,h),g=dl(h+1,h+1+p),A=pl([f,[l],d]),w=a.reshape(A),E=u.reshape([l]),x=pl([[h],v,g]),C=w.transpose(x),S=vl(C,E,n.shape[e]),N=yi(x);return S=S.transpose(N)},indices:function(){return u}}},"Gather",{axis:e}).reshape(i.outputShape)}}),vl=Q({unsortedSegmentSum_:function(r,t,e){var n=B(r,"x","unsortedSegmentSum"),o=B(t,"segmentIds","unsortedSegmentSum","int32");return R(He(e),function(){return"numSegments must be of dtype int"}),L.runKernelFunc(function(i,a){var s=i.unsortedSegmentSum(n,o,e);return a([o]),s},{$x:n},function(i,a){var s=a[0];return{$x:function(){return function(u,c){for(var l=Va(c,Tt(c)),f=Ga(u,l),h=hl(c,Te(0,"int32")),d=f.rank-h.rank,p=0;p<d;++p)h=qn(h,p+1);h=Qi(h,po(f.shape,"bool"));var v=Tt(f);return no(h,f,v)}(i,s)}}})}}),Wv=function(r,t,e){return xe(this,void 0,void 0,function(){var n,o,i,a,s,u,c,l,f,h,d,p,v;return Ie(this,function(g){switch(g.label){case 0:for(n=B(r,"tensor","boolMask"),o=B(t,"mask","boolMask","bool"),i=e==null?0:e,a=o.rank,s=n.shape,R(a>0,function(){return"mask cannot be scalar"}),Je(s.slice(i,i+a),o.shape,"mask's shape must match the first K dimensions of tensor's shape,"),u=1,c=i;c<i+a;c++)u*=s[c];return l=s.slice(0,i).concat([u],s.slice(i+a)),f=n.reshape(l),h=o.reshape([-1]),[4,ul(h)];case 1:return d=g.sent(),p=d.squeeze([1]),v=Ga(f,p,i),r!==n&&n.dispose(),t!==o&&o.dispose(),p.dispose(),f.dispose(),h.dispose(),d.dispose(),[2,v]}})})};function gl(r,t,e,n,o,i,a){i===void 0&&(i="NHWC"),R(r.length===t.rank,function(){return"Length of inShape ("+r.length+") and rank of dy ("+t.rank+") must match"});var s=r,u=t,c=!1;t.rank===3&&(c=!0,u=t.as4D(1,t.shape[0],t.shape[1],t.shape[2]),s=[1,r[0],r[1],r[2]]),R(s.length===4,function(){return"Error in conv2dDerInput: inShape must be length 4, but got length "+s.length+"."}),R(u.rank===4,function(){return"Error in conv2dDerInput: dy must be rank 4, but got rank "+u.rank}),R(e.rank===4,function(){return"Error in conv2dDerInput: filter must be rank 4, but got rank "+e.rank});var l=i==="NHWC"?s[3]:s[1],f=i==="NHWC"?u.shape[3]:u.shape[1];R(l===e.shape[2],function(){return"Error in conv2dDerInput: depth of input ("+l+") must match input depth for filter "+e.shape[2]+"."}),R(f===e.shape[3],function(){return"Error in conv2dDerInput: depth of output ("+f+") must match output depth for filter "+e.shape[3]+"."}),a!=null&&R(He(o),function(){return"Error in conv2dDerInput: pad must be an integer when using, dimRoundingMode "+a+" but got pad "+o+"."});var h=Ti(i),d=Lr(s,e.shape,n,1,o,a,!1,h),p=L.runKernelFunc(function(v,g){var A=v.conv2dDerInput(u,e,d);return g([e,u]),A},{dy4D:u,filter:e},function(v,g){var A=g[0],w=g[1];return{dy4D:function(){return Yn(v,A,n,o,i,1,a)},filter:function(){return Ja(v,w,A.shape,n,o,i,a)}}});return c?p.as3D(p.shape[1],p.shape[2],p.shape[3]):p}function Xa(r){var t=function(i){return typeof i=="number"?[i,i,i]:i.length===2?[i[0],i[1],1]:i}(r),e=t[0],n=t[1],o=t[2];return e===1&&n===1&&o===1}function ml(r,t,e,n,o){R(r.length===t.rank,function(){return"Length of inShape ("+r.length+") and rank of dy ("+t.rank+") must match"});var i=r,a=t,s=!1;t.rank===4&&(s=!0,a=t.as5D(1,t.shape[0],t.shape[1],t.shape[2],t.shape[3]),i=[1,r[0],r[1],r[2],r[3]]);var u=i[4],c=a.shape[4];R(i.length===5,function(){return"Error in conv3dDerInput: inShape must be length 5, but got length "+i.length+"."}),R(a.rank===5,function(){return"Error in conv3dDerInput: dy must be rank 5, but got rank "+a.rank}),R(e.rank===5,function(){return"Error in conv3dDerInput: filter must be rank 5, but got rank "+e.rank}),R(u===e.shape[3],function(){return"Error in conv3dDerInput: depth of input ("+u+") must match input depth for filter "+e.shape[3]+"."}),R(c===e.shape[4],function(){return"Error in conv3dDerInput: depth of output ("+c+") must match output depth for filter "+e.shape[4]+"."});var l=Go(i,e.shape,n,1,o),f=L.runKernelFunc(function(h){return h.conv3dDerInput(a,e,l)},{dy5D:a});return s?f.as4D(f.shape[1],f.shape[2],f.shape[3],f.shape[4]):f}var Qv=Q({conv1d_:function(r,t,e,n,o,i,a){o===void 0&&(o="NWC"),i===void 0&&(i=1);var s=B(r,"x","conv1d"),u=B(t,"filter","conv1d"),c=s,l=!1;s.rank===2&&(l=!0,c=s.as3D(1,s.shape[0],s.shape[1])),R(c.rank===3,function(){return"Error in conv1d: input must be rank 3, but got rank "+c.rank+"."}),R(u.rank===3,function(){return"Error in conv1d: filter must be rank 3, but got rank "+u.rank+"."}),a!=null&&R(He(n),function(){return"Error in conv1d: pad must be an integer when using, dimRoundingMode "+a+" but got pad "+n+"."}),R(c.shape[2]===u.shape[1],function(){return"Error in conv1d: depth of input ("+c.shape[2]+") must match input depth for filter "+u.shape[1]+"."}),R(Ln(e,i),function(){return"Error in conv1D: Either stride or dilation must be 1. Got stride "+e+" and dilation '"+i+"'"}),R(o==="NWC",function(){return"Error in conv1d: got dataFormat of "+o+" but only NWC is currently supported."});var f=u.as4D(1,u.shape[0],u.shape[1],u.shape[2]),h=c.as4D(c.shape[0],1,c.shape[1],c.shape[2]),d=Yn(h,f,[1,e],n,"NHWC",[1,i],a);return l?d.as2D(d.shape[2],d.shape[3]):d.as3D(d.shape[0],d.shape[2],d.shape[3])}}),Yn=Q({conv2d_:function(r,t,e,n,o,i,a){o===void 0&&(o="NHWC"),i===void 0&&(i=[1,1]);var s=B(r,"x","conv2d"),u=B(t,"filter","conv2d"),c=s,l=!1;s.rank===3&&(l=!0,c=s.as4D(1,s.shape[0],s.shape[1],s.shape[2])),R(c.rank===4,function(){return"Error in conv2d: input must be rank 4, but got rank "+c.rank+"."}),R(u.rank===4,function(){return"Error in conv2d: filter must be rank 4, but got rank "+u.rank+"."}),a!=null&&R(He(n),function(){return"Error in conv2d: pad must be an integer when using, dimRoundingMode "+a+" but got pad "+n+"."});var f=o==="NHWC"?c.shape[3]:c.shape[1];R(f===u.shape[2],function(){return"Error in conv2d: depth of input ("+f+") must match input depth for filter "+u.shape[2]+"."}),R(Ln(e,i),function(){return"Error in conv2D: Either strides or dilations must be 1. Got strides "+e+" and dilations '"+i+"'"});var h=Ti(o),d=Lr(c.shape,u.shape,e,i,n,a,!1,h),p=[u,c],v=L.runKernelFunc(function(g,A){var w=g.conv2d(c,u,d);return A([u,c]),w},{x:c,filter:u},function(g,A){var w=A,E=w[0],x=w[1];return R($r(i),function(){return"Error in gradient of conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '"+i+"'"}),{x:function(){return Al(x.shape,g,E,e,n,o)},filter:function(){return Ja(x,g,E.shape,e,n,o)}}},"Conv2D",d,p);return l?v.as3D(v.shape[1],v.shape[2],v.shape[3]):v}}),_v=Q({conv3d_:function(r,t,e,n,o,i){o===void 0&&(o="NDHWC"),i===void 0&&(i=[1,1,1]);var a=B(r,"x","conv3d"),s=B(t,"filter","conv3d"),u=a,c=!1;a.rank===4&&(c=!0,u=a.as5D(1,a.shape[0],a.shape[1],a.shape[2],a.shape[3])),R(u.rank===5,function(){return"Error in conv3d: input must be rank 5, but got rank "+u.rank+"."}),R(s.rank===5,function(){return"Error in conv3d: filter must be rank 5, but got rank "+s.rank+"."}),R(u.shape[4]===s.shape[3],function(){return"Error in conv3d: depth of input ("+u.shape[4]+") must match input depth for filter "+s.shape[3]+"."}),R(function(h,d){return Xa(h)||Xa(d)}(e,i),function(){return"Error in conv3D: Either strides or dilations must be 1. Got strides "+e+" and dilations '"+i+"'"}),R(o==="NDHWC",function(){return"Error in conv3d: got dataFormat of "+o+" but only NDHWC is currently supported."});var l=Go(u.shape,s.shape,e,i,n),f=L.runKernelFunc(function(h,d){var p=h.conv3d(u,s,l);return d([u,s]),p},{x:u,$filter:s},function(h,d){R(Xa(i),function(){return"Error in gradient of conv3D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '"+i+"'"});var p=d[0],v=d[1];return{x:function(){return ml(p.shape,h,v,e,n)},$filter:function(){return function(g,A,w,E,x){var C=g;g.rank===4&&(C=g.as5D(1,g.shape[0],g.shape[1],g.shape[2],g.shape[3]));var S=A;S.rank===4&&(S=A.as5D(1,A.shape[0],A.shape[1],A.shape[2],A.shape[3])),R(C.rank===5,function(){return"Error in conv3dDerFilter: input must be rank 5, but got shape "+C.shape+"."}),R(S.rank===5,function(){return"Error in conv3dDerFilter: dy must be rank 5, but got shape "+S.shape+"."}),R(w.length===5,function(){return"Error in conv3dDerFilter: filterShape must be length 5, but got "+w+"."}),R(C.shape[4]===w[3],function(){return"Error in conv3dDerFilter: depth of input "+C.shape[4]+") must match input depth in filter ("+w[3]+"."}),R(S.shape[4]===w[4],function(){return"Error in conv3dDerFilter: depth of dy ("+S.shape[4]+") must match output depth for filter ("+w[4]+")."});var N=Go(C.shape,w,E,1,x);return L.runKernelFunc(function(O){return O.conv3dDerFilter(C,S,N)},{x5D:C,dy5D:S})}(p,h,v.shape,e,n)}}});return c?f.as4D(f.shape[1],f.shape[2],f.shape[3],f.shape[4]):f}}),Ja=Q({conv2dDerFilter_:function(r,t,e,n,o,i,a){i===void 0&&(i="NHWC");var s=r;r.rank===3&&(s=r.as4D(1,r.shape[0],r.shape[1],r.shape[2]));var u=t;u.rank===3&&(u=t.as4D(1,t.shape[0],t.shape[1],t.shape[2])),R(s.rank===4,function(){return"Error in conv2dDerFilter: input must be rank 4, but got shape "+s.shape+"."}),R(u.rank===4,function(){return"Error in conv2dDerFilter: dy must be rank 4, but got shape "+u.shape+"."}),R(e.length===4,function(){return"Error in conv2dDerFilter: filterShape must be length 4, but got "+e+"."});var c=i==="NHWC"?s.shape[3]:s.shape[1],l=i==="NHWC"?u.shape[3]:u.shape[1];R(c===e[2],function(){return"Error in conv2dDerFilter: depth of input "+c+") must match input depth in filter ("+e[2]+"."}),R(l===e[3],function(){return"Error in conv2dDerFilter: depth of dy ("+l+") must match output depth for filter ("+e[3]+")."}),a!=null&&R(He(o),function(){return"Error in conv2dDerFilter: pad must be an integer when using, dimRoundingMode "+a+" but got pad "+o+"."});var f=Ti(i),h=Lr(s.shape,e,n,1,o,a,!1,f);return L.runKernelFunc(function(d){return d.conv2dDerFilter(s,u,h)},{x4D:s,dy4D:u})}}),Al=Q({conv2dDerInput_:gl}),zi=Q({depthwiseConv2d_:function(r,t,e,n,o,i,a){o===void 0&&(o="NHWC"),i===void 0&&(i=[1,1]);var s=B(r,"x","depthwiseConv2d"),u=B(t,"filter","depthwiseConv2d"),c=s,l=!1;s.rank===3&&(l=!0,c=s.as4D(1,s.shape[0],s.shape[1],s.shape[2])),R(c.rank===4,function(){return"Error in depthwiseConv2d: input must be rank 4, but got rank "+c.rank+"."}),R(u.rank===4,function(){return"Error in depthwiseConv2d: filter must be rank 4, but got rank "+u.rank+"."}),R(c.shape[3]===u.shape[2],function(){return"Error in depthwiseConv2d: number of input channels ("+c.shape[3]+") must match the inChannels dimension in filter "+u.shape[2]+"."}),i==null&&(i=[1,1]),R(Ln(e,i),function(){return"Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides "+e+" and dilations '"+i+"'"}),a!=null&&R(He(n),function(){return"Error in depthwiseConv2d: pad must be an integer when using, dimRoundingMode "+a+" but got pad "+n+"."});var f=Lr(c.shape,u.shape,e,i,n,a,!0),h=[c,u],d=L.runKernelFunc(function(p,v){var g=p.depthwiseConv2D(c,u,f);return v([c,u]),g},{x:c,filter:u},function(p,v){R($r(i),function(){return"Error in gradient of depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '"+i+"'"});var g=v[0],A=v[1];return{x:function(){return yl(g.shape,p,A,f)},filter:function(){return xl(g,p,A.shape,f)}}},"DepthwiseConv2dNative",f,h);return l?d.as3D(d.shape[1],d.shape[2],d.shape[3]):d}}),yl=Q({depthwiseConv2dDerInput_:function(r,t,e,n){var o=t,i=!1;t.rank===3&&(i=!0,o=t.as4D(1,t.shape[0],t.shape[1],t.shape[2]));var a=L.runKernelFunc(function(s){return s.depthwiseConv2DDerInput(o,e,n)},{dy4D:o});return i?a.as3D(a.shape[1],a.shape[2],a.shape[3]):a}}),xl=Q({depthwiseConv2dDerFilter_:function(r,t,e,n){var o=r;r.rank===3&&(o=r.as4D(1,r.shape[0],r.shape[1],r.shape[2]));var i=t;return i.rank===3&&(i=t.as4D(1,t.shape[0],t.shape[1],t.shape[2])),L.runKernelFunc(function(a){return a.depthwiseConv2DDerFilter(o,i,n)},{x4D:o,dy4D:i})}}),Ka=Q({separableConv2d_:function(r,t,e,n,o,i,a){i===void 0&&(i=[1,1]),a===void 0&&(a="NHWC");var s=B(r,"x","separableConv2d"),u=B(t,"depthwiseFilter","separableConv2d"),c=B(e,"pointwiseFilter","separableConv2d"),l=s,f=!1;if(s.rank===3&&(f=!0,l=s.as4D(1,s.shape[0],s.shape[1],s.shape[2])),a==="NCHW")throw new Error("separableConv2d currently does not support dataFormat NCHW; only NHWC is supported");R(l.rank===4,function(){return"Error in separableConv2d: input must be rank 4, but got rank "+l.rank+"."}),R(u.rank===4,function(){return"Error in separableConv2d: depthwise filter must be rank 4, but got rank "+u.rank+"."}),R(c.rank===4,function(){return"Error in separableConv2d: pointwise filter must be rank 4, but got rank "+u.rank+"."}),R(c.shape[0]===1,function(){return"Error in separableConv2d: the first dimension of pointwise filter must be 1, but got "+c.shape[0]+"."}),R(c.shape[1]===1,function(){return"Error in separableConv2d: the second dimension of pointwise filter must be 1, but got "+c.shape[1]+"."});var h=u.shape[2],d=u.shape[3];R(c.shape[2]===h*d,function(){return"Error in separableConv2d: the third dimension of pointwise filter must be "+h*d+", but got "+c.shape[2]+"."});var p=zi(l,u,n,o,a,i),v=Yn(p,c,1,"valid",a);return f?v.as3D(v.shape[1],v.shape[2],v.shape[3]):v}}),zv=Q({conv2dTranspose_:function(r,t,e,n,o,i){return gl(e,B(r,"x","conv2dTranspose"),B(t,"filter","conv2dTranspose"),n,o,"NHWC",i)}}),Uv=Q({conv3dTranspose_:function(r,t,e,n,o){return ml(e,B(r,"x","conv3dTranspose"),B(t,"filter","conv3dTranspose"),n,o)}}),Ui=Q({matMul_:function(r,t,e,n){var o;e===void 0&&(e=!1),n===void 0&&(n=!1);var i=B(r,"a","matMul"),a=B(t,"b","matMul");o=pt(i,a),i=o[0],a=o[1];var s=e?i.shape[i.rank-2]:i.shape[i.rank-1],u=n?a.shape[a.rank-1]:a.shape[a.rank-2],c=e?i.shape[i.rank-1]:i.shape[i.rank-2],l=n?a.shape[a.rank-2]:a.shape[a.rank-1],f=i.shape.slice(0,-2),h=a.shape.slice(0,-2),d=Re(f),p=Re(h);R(i.rank>=2&&a.rank>=2&&i.rank===a.rank,function(){return"Error in matMul: inputs must have the same rank of at least 2, got ranks "+i.rank+" and "+a.rank+"."}),R(Ke(f,h),function(){return"Error in matMul: outer dimensions ("+f+") and ("+h+") of Tensors with shapes "+i.shape+" and "+a.shape+" must match."}),R(s===u,function(){return"Error in matMul: inner shapes ("+s+") and ("+u+") of Tensors with shapes "+i.shape+" and "+a.shape+" and transposeA="+e+" and transposeB="+n+" must match."});var v=i.shape.slice(0,-2).concat([c,l]),g=e?i.as3D(d,s,c):i.as3D(d,c,s),A=n?a.as3D(p,l,u):a.as3D(p,u,l),w={transposeA:e,transposeB:n};return L.runKernelFunc(function(E,x){var C=E.batchMatMul(g,A,e,n);return x([g,A]),C},{a:g,b:A},function(E,x){var C=x,S=C[0],N=C[1];return e||n?!e&&n?{a:function(){return E.matMul(N,!1,!1)},b:function(){return E.matMul(S,!0,!1)}}:e&&!n?{a:function(){return N.matMul(E,!1,!0)},b:function(){return S.matMul(E,!1,!1)}}:{a:function(){return N.matMul(E,!0,!0)},b:function(){return E.matMul(S,!0,!0)}}:{a:function(){return E.matMul(N,!1,!0)},b:function(){return S.matMul(E,!0,!1)}}},"BatchMatMul",w).reshape(v)}}),Hv=Q({dot_:function(r,t){var e=B(r,"t1","dot"),n=B(t,"t2","dot");R(!(e.rank!==1&&e.rank!==2||n.rank!==1&&n.rank!==2),function(){return"Error in dot: inputs must all be rank 1 or 2, but got ranks "+e.rank+" and "+n.rank+"."});var o=e.rank===1?e.size:e.shape[1],i=n.rank===1?n.size:n.shape[0];return R(o===i,function(){return"Error in dot: inner dimensions of inputs must match, but got "+o+" and "+i+"."}),e.rank===1&&n.rank===1?e.as2D(1,-1).matMul(n.as2D(-1,1)).asScalar():e.rank===1&&n.rank===2?e.as2D(1,-1).matMul(n.as2D(n.shape[0],n.shape[1])).as1D():e.rank===2&&n.rank===1?e.matMul(n.as2D(-1,1)).as1D():e.matMul(n.as2D(n.shape[0],n.shape[1]))}}),jv=Q({outerProduct_:function(r,t){var e=B(r,"v1","outerProduct"),n=B(t,"v2","outerProduct");return R(e.rank===1&&n.rank===1,function(){return"Error in outerProduct: inputs must be rank 1, but got ranks "+e.rank+" and "+n.rank+"."}),e.as2D(-1,1).matMul(n.as2D(1,-1))}}),Yo=Q({reverse_:function(r,t){var e=B(r,"x","reverse");if(e.rank===0)return e.clone();var n=ht(t,e.shape);return L.runKernelFunc(function(o){return o.reverse(e,n)},{$x:e},function(o){return{$x:function(){return o.reverse(n)}}}).reshapeAs(e)}}),Vv=Q({reverse1d_:function(r){var t=B(r,"x","reverse");return R(t.rank===1,function(){return"Error in reverse1D: x must be rank 1 but got rank "+t.rank+"."}),Yo(t,0)}}),Gv=Q({reverse2d_:function(r,t){var e=B(r,"x","reverse");return R(e.rank===2,function(){return"Error in reverse2D: x must be rank 2 but got rank "+e.rank+"."}),Yo(e,t)}}),Xv=Q({reverse3d_:function(r,t){var e=B(r,"x","reverse");return R(e.rank===3,function(){return"Error in reverse3D: x must be rank 3 but got rank "+e.rank+"."}),Yo(e,t)}}),Jv=Q({reverse4d_:function(r,t){var e=B(r,"x","reverse");return R(e.rank===4,function(){return"Error in reverse4D: x must be rank 4 but got rank "+e.rank+"."}),Yo(e,t)}});function bl(r,t,e,n,o,i){var a=B(r,"x","maxPool"),s=a,u=!1;a.rank===3&&(u=!0,s=a.as4D(1,a.shape[0],a.shape[1],a.shape[2])),n==null&&(n=[1,1]),R(s.rank===4,function(){return"Error in maxPool: input must be rank 4 but got rank "+s.rank+"."}),R(Ln(e,n),function(){return"Error in maxPool: Either strides or dilations must be 1. Got strides "+e+" and dilations '"+n+"'"}),i!=null&&R(He(o),function(){return"Error in maxPool: pad must be an integer when using, dimRoundingMode "+i+" but got pad "+o+"."});var c=go(s.shape,t,e,n,o,i);if(c.filterWidth===1&&c.filterHeight===1&&Ke(c.inShape,c.outShape))return a.clone();var l=[s],f=L.runKernelFunc(function(h,d){var p=h.maxPool(s,c);return d([s,p]),p},{x:s},function(h,d){var p=d[0],v=d[1];return{x:function(){return function(g,A,w,E,x,C,S,N){var O=B(g,"dy","maxPoolBackprop"),F=B(A,"input","maxPoolBackprop"),P=B(w,"output","maxPoolBackprop");R(F.rank===O.rank,function(){return"Rank of input ("+F.rank+") does not match rank of dy ("+O.rank+")"}),C==null&&(C=[1,1]),R(Ln(x,C),function(){return"Error in maxPoolBackProp: Either strides or dilations must be 1. Got strides "+x+" and dilations '"+C+"'"}),R(O.rank===4,function(){return"Error in maxPoolBackprop: dy must be rank 4 but got rank "+O.rank+"."}),R(F.rank===4,function(){return"Error in maxPoolBackprop: input must be rank 4 but got rank "+F.rank+"."}),N!=null&&R(He(S),function(){return"Error in maxPoolBackprop: pad must be an integer when using, dimRoundingMode "+N+" but got pad "+S+"."});var z=go(F.shape,E,x,C,S,N);return L.runKernelFunc(function(_){return _.maxPoolBackprop(O,F,P,z)},{$dy:O,$input:F})}(h,p,v,t,e,n,o)}}},"MaxPool",c,l);return u?f.as3D(f.shape[1],f.shape[2],f.shape[3]):f}function wl(r,t,e,n,o,i){var a=B(r,"x","avgPool","float32");n==null&&(n=[1,1]),R(Ln(e,n),function(){return"Error in avgPool: Either strides or dilations must be 1. Got strides "+e+" and dilations '"+n+"'"});var s=a,u=!1;a.rank===3&&(u=!0,s=a.as4D(1,a.shape[0],a.shape[1],a.shape[2])),R(s.rank===4,function(){return"Error in avgPool: x must be rank 4 but got rank "+s.rank+"."}),i!=null&&R(He(o),function(){return"Error in avgPool: pad must be an integer when using, dimRoundingMode "+i+" but got pad "+o+"."});var c=go(s.shape,t,e,n,o,i);if(c.filterWidth===1&&c.filterHeight===1&&Ke(c.inShape,c.outShape))return a.clone();var l=L.runKernelFunc(function(f){return f.avgPool(s,c)},{x:s},function(f){return{x:function(){return function(h,d,p,v,g,A){var w=B(h,"dy","avgPoolBackprop"),E=B(d,"input","avgPoolBackprop");R(E.rank===w.rank,function(){return"Rank of input ("+E.rank+") does not match rank of dy ("+w.rank+")"}),g==null&&(g=[1,1]),R(Ln(v,g),function(){return"Error in avgPoolBackprop: Either strides or dilations must be 1. Got strides "+v+" and dilations '"+g+"'"});var x=E,C=w,S=!1;E.rank===3&&(S=!0,x=E.as4D(1,E.shape[0],E.shape[1],E.shape[2]),C=w.as4D(1,w.shape[0],w.shape[1],w.shape[2])),R(C.rank===4,function(){return"Error in avgPoolBackprop: dy must be rank 4 but got rank "+C.rank+"."}),R(x.rank===4,function(){return"Error in avgPoolBackprop: input must be rank 4 but got rank "+x.rank+"."});var N=go(x.shape,p,v,g,A),O=L.runKernelFunc(function(F){return F.avgPoolBackprop(C,x,N)},{dy4D:C,input4D:x});return S?O.as3D(O.shape[1],O.shape[2],O.shape[3]):O}(f,s,t,e,n,o)}}},"AvgPool",c);return l=l.cast(a.dtype),u?l.as3D(l.shape[1],l.shape[2],l.shape[3]):l}var wn=Q({maxPool_:function(r,t,e,n,o){return bl(r,t,e,1,n,o)}}),$o=Q({avgPool_:function(r,t,e,n,o){return wl(r,t,e,1,n,o)}}),Kv=Q({pool_:function(r,t,e,n,o,i){o==null&&(o=[1,1]),i==null&&(i=1),n===0&&(n="valid");var a=B(r,"x","maxPool"),s=a,u=!1;a.rank===3&&(u=!0,s=a.as4D(1,a.shape[0],a.shape[1],a.shape[2])),R(Ln(i,o),function(){return"Error in pool: Either strides or dilations must be 1. Got strides "+i+" and dilations '"+o+"'"});var c,l=go(s.shape,t,i,o,n),f=[l.dilationHeight,l.dilationWidth];c=n==="same"?function(x,C){var S=x.map(function(F,P){return F+(F-1)*(C[P]-1)}).map(function(F){return F-1}),N=S.map(function(F){return Math.floor(F/2)}),O=S.map(function(F,P){return F-N[P]});return S.map(function(F,P){return[N[P],O[P]]})}([l.filterHeight,l.filterWidth],f):[[0,0],[0,0]];var h=f[0]===1&&f[1]===1,d=function(x,C,S){var N=S.map(function(G){return G[0]}),O=S.map(function(G){return G[1]}),F=x.concat(N,O),P=C.map(function(G,te){return(G-F[te]%G)%G}),z=O.map(function(G,te){return G+P[te]}),_=C.map(function(G,te){return[N[te],z[te]]}),V=C.map(function(G,te){return[0,P[te]]});return[_,V]}([l.inHeight,l.inWidth],f,c),p=d[0],v=d[1],g=h?n:"valid",A=h?s:Vu(s,f,p),w=(e==="avg"?function(){return wl(A,t,i,1,g)}:function(){return bl(A,t,i,1,g)})(),E=h?w:Uu(w,f,v);return u?E.as3D(E.shape[1],E.shape[2],E.shape[3]):E}}),Zv=Q({maxPool3d_:function(r,t,e,n,o,i,a){i===void 0&&(i="NDHWC");var s=B(r,"x","maxPool3d"),u=s,c=!1;s.rank===4&&(c=!0,u=s.as5D(1,s.shape[0],s.shape[1],s.shape[2],s.shape[3])),a==null&&(a=[1,1,1]),R(u.rank===5,function(){return"Error in maxPool3d: x must be rank 5 but got rank "+u.rank+"."}),R(i==="NDHWC",function(){return"Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of "+i}),R(Ln(e,a),function(){return"Error in maxPool3d: Either strides or dilations must be 1. Got strides "+e+" and dilations '"+a+"'"}),o!=null&&R(He(n),function(){return"Error in maxPool3d: pad must be an integer when using, dimRoundingMode "+o+" but got pad "+n+"."});var l=Vo(u.shape,t,e,a,n,o,i),f=L.runKernelFunc(function(h,d){var p=h.maxPool3d(u,l);return d([u,p]),p},{x:u},function(h,d){var p=d[0],v=d[1];return{x:function(){return function(g,A,w,E,x,C,S,N){var O=B(g,"dy","maxPool3dBackprop"),F=B(A,"input","maxPool3dBackprop"),P=B(w,"output","maxPool3dBackprop"),z=O,_=F,V=P,G=!1;F.rank===4&&(G=!0,z=O.as5D(1,O.shape[0],O.shape[1],O.shape[2],O.shape[3]),_=F.as5D(1,F.shape[0],F.shape[1],F.shape[2],F.shape[3]),V=P.as5D(1,P.shape[0],P.shape[1],P.shape[2],P.shape[3])),R(z.rank===5,function(){return"Error in maxPool3dBackprop: dy must be rank 5 but got rank "+z.rank+"."}),R(_.rank===5,function(){return"Error in maxPool3dBackprop: input must be rank 5 but got rank "+_.rank+"."}),R(V.rank===5,function(){return"Error in maxPool3dBackprop: output must be rank 5 but got rank "+V.rank+"."}),C==null&&(C=[1,1,1]),R(Ln(x,C),function(){return"Error in maxPool3dBackprop: Either strides or dilations must be 1. Got strides "+x+" and dilations '"+C+"'"}),N!=null&&R(He(S),function(){return"Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode "+N+" but got pad "+S+"."});var te=Vo(_.shape,E,x,C,S,N),ce=L.runKernelFunc(function(se){return se.maxPool3dBackprop(z,_,V,te)},{dy5D:z,input5D:_});return G?ce.as4D(ce.shape[1],ce.shape[2],ce.shape[3],ce.shape[4]):ce}(h,p,v,t,e,a,n,o)}}});return c?f.as4D(f.shape[1],f.shape[2],f.shape[3],f.shape[4]):f}}),qv=Q({avgPool3d_:function(r,t,e,n,o,i,a){i===void 0&&(i="NDHWC");var s=B(r,"x","avgPool3d","float32"),u=s,c=!1;s.rank===4&&(c=!0,u=s.as5D(1,s.shape[0],s.shape[1],s.shape[2],s.shape[3])),a==null&&(a=[1,1,1]),R(u.rank===5,function(){return"Error in avgPool3d: x must be rank 5 but got rank "+u.rank+"."}),R(i==="NDHWC",function(){return"Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of "+i}),R(Ln(e,a),function(){return"Error in avgPool3d: Either strides or dilations must be 1. Got strides "+e+" and dilations '"+a+"'"}),o!=null&&R(He(n),function(){return"Error in avgPool3d: pad must be an integer when using, dimRoundingMode "+o+" but got pad "+n+"."});var l=Vo(u.shape,t,e,a,n,o,i),f=L.runKernelFunc(function(h){return h.avgPool3d(u,l)},{x:u},function(h){return{x:function(){return function(d,p,v,g,A,w,E){var x=B(d,"dy","avgPool3dBackprop"),C=B(p,"input","avgPool3dBackprop"),S=x,N=C,O=!1;C.rank===4&&(O=!0,S=x.as5D(1,x.shape[0],x.shape[1],x.shape[2],x.shape[3]),N=C.as5D(1,C.shape[0],C.shape[1],C.shape[2],C.shape[3])),R(S.rank===5,function(){return"Error in avgPool3dBackprop: dy must be rank 5 but got rank "+S.rank+"."}),R(N.rank===5,function(){return"Error in avgPool3dBackprop: input must be rank 5 but got rank "+N.rank+"."}),A==null&&(A=[1,1,1]),R(Ln(g,A),function(){return"Error in avgPool3dBackprop: Either strides or dilations must be 1. Got strides "+g+" and dilations '"+A+"'"}),E!=null&&R(He(w),function(){return"Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode "+E+" but got pad "+w+"."});var F=Vo(N.shape,v,g,A,w,E),P=L.runKernelFunc(function(z){return z.avgPool3dBackprop(S,N,F)},{dy5D:S,input5D:N});return O?P.as4D(P.shape[1],P.shape[2],P.shape[3],P.shape[4]):P}(h,u,t,e,a,n,o)}}});return f=f.cast(u.dtype),c?f.as4D(f.shape[1],f.shape[2],f.shape[3],f.shape[4]):f}}),dr=Q({slice_:function(r,t,e){var n,o,i=B(r,"x","slice");if(i.rank===0)throw new Error("Slicing scalar is not possible");(n=typeof t=="number"?[t].concat(new Array(i.rank-1).fill(0)):t.length<i.rank?t.concat(new Array(i.rank-t.length).fill(0)):t.slice()).forEach(function(u){R(u!==-1,function(){return"slice() does not support negative begin indexing."})}),o=(o=e==null?new Array(i.rank).fill(-1):typeof e=="number"?[e].concat(new Array(i.rank-1).fill(-1)):e.length<i.rank?e.concat(new Array(i.rank-e.length).fill(-1)):e).map(function(u,c){return u>=0?u:(R(u===-1,function(){return"Negative size values should be exactly -1 but got "+u+" for the slice() size at index "+c+"."}),i.shape[c]-n[c])}),qu(i,n,o);var a=i.shape,s={begin:n,size:o};return L.runKernelFunc(function(u){return u.slice(i,n,o)},{x:i},function(u){for(var c=[],l=0;l<u.rank;l++)c.push([n[l],a[l]-n[l]-o[l]]);return{x:function(){return u.pad(c)}}},"Slice",s)}}),Yv=Q({slice1d_:function(r,t,e){var n=B(r,"x","slice1d");return R(n.rank===1,function(){return"slice1d expects a rank-1 tensor, but got a rank-"+n.rank+" tensor"}),dr(n,[t],[e])}}),$v=Q({slice2d_:function(r,t,e){var n=B(r,"x","slice2d");return R(n.rank===2,function(){return"slice2d expects a rank-2 tensor, but got a rank-"+n.rank+" tensor"}),dr(n,t,e)}}),El=Q({slice3d_:function(r,t,e){var n=B(r,"x","slice3d");return R(n.rank===3,function(){return"slice3d expects a rank-3 tensor, but got a rank-"+n.rank+" tensor"}),dr(n,t,e)}}),eg=Q({slice4d_:function(r,t,e){var n=B(r,"x","slice4d");return R(n.rank===4,function(){return"slice4d expects a rank-4 tensor, but got a rank-"+n.rank+" tensor"}),dr(n,t,e)}});function Cl(r,t,e,n,o){return t.rank<e.rank&&(t=t.reshape(Mn(t.shape,n))),r.rank<e.rank&&(r=r.reshape(Mn(r.shape,n))),{x:function(){var i=r.mul(e.equal(t).cast(r.dtype));return o==null?i:i.transpose(o)}}}var tg=Q({all_:function(r,t,e){t===void 0&&(t=null),e===void 0&&(e=!1);var n=B(r,"x","all","bool"),o=ht(t,n.shape),i=o,a=tr(i,n.rank);a!=null&&(n=n.transpose(a),i=nr(i.length,n.rank));var s=L.runKernelFunc(function(c){return c.all(n,i)},{$x:n});if(e){var u=Mn(s.shape,o);return s.reshape(u)}return s}}),ng=Q({any_:function(r,t,e){t===void 0&&(t=null),e===void 0&&(e=!1);var n=B(r,"x","any","bool"),o=ht(t,n.shape),i=o,a=tr(i,n.rank);a!=null&&(n=n.transpose(a),i=nr(i.length,n.rank));var s=L.runKernelFunc(function(c){return c.any(n,i)},{$x:n});if(e){var u=Mn(s.shape,o);return s.reshape(u)}return s}}),rg=Q({argMax_:function(r,t){t===void 0&&(t=0);var e=B(r,"x","argMax");t==null&&(t=0);var n=ht(t,e.shape),o=tr(n,e.rank);o!=null&&(e=e.transpose(o),n=nr(n.length,e.rank));var i={axis:n[0]},a=[e];return L.runKernelFunc(function(s,u){var c=s.argMax(e,n[0]);return u([e]),c},{x:e},function(s,u){var c=u[0];return{x:function(){return Tt(c)}}},"ArgMax",i,a)}}),og=Q({argMin_:function(r,t){t===void 0&&(t=0);var e=B(r,"x","argMin");t==null&&(t=0);var n=ht(t,e.shape),o=tr(n,e.rank);return o!=null&&(e=e.transpose(o),n=nr(n.length,e.rank)),L.runKernelFunc(function(i,a){var s=i.argMin(e,n[0]);return a([e]),s},{$x:e},function(i,a){var s=a[0];return{$x:function(){return Tt(s)}}})}}),ig=Q({logSumExp_:function(r,t,e){t===void 0&&(t=null),e===void 0&&(e=!1);var n=B(r,"x","logSumExp"),o=ht(t,n.shape),i=n.max(o,!0),a=n.sub(i).exp().sum(o).log(),s=i.reshape(a.shape).add(a);if(e){var u=Mn(s.shape,o);return s.reshape(u)}return s}}),Hi=Q({max_:function(r,t,e){t===void 0&&(t=null),e===void 0&&(e=!1);var n=B(r,"x","max"),o=n,i=ht(t,n.shape),a=i,s=tr(a,n.rank);s!=null&&(n=n.transpose(s),a=nr(a.length,n.rank));var u=[n],c=L.runKernelFunc(function(f,h){var d=f.max(n,a);return h([o,d]),d},{x:n},function(f,h){return Cl(f,h[1],h[0],i,s)},"Max",{axes:a},u,[!0]);if(e){var l=Mn(c.shape,i);c=c.reshape(l)}return c}}),ag=Q({mean_:function(r,t,e){t===void 0&&(t=null),e===void 0&&(e=!1);var n=B(r,"x","mean"),o=ht(t,n.shape),i=Re(Bn(n.shape,o)[1]);return Ri(function(a){var s=Te(i);return{value:(s.dtype===a.dtype?a:a.cast(s.dtype)).div(s).sum(t,e),gradFunc:function(u){var c=a.shape.slice();return o.forEach(function(l){c[l]=1}),u.reshape(c).mul(po(a.shape,"float32")).div(i)}}})(n)}}),sg=Q({min_:function(r,t,e){t===void 0&&(t=null),e===void 0&&(e=!1);var n=B(r,"x","min"),o=n,i=ht(t,n.shape),a=i,s=tr(a,n.rank);s!=null&&(n=n.transpose(s),a=nr(a.length,n.rank));var u=[n],c=L.runKernelFunc(function(f,h){var d=f.min(n,a);return h([o,d]),d},{x:n},function(f,h){return Cl(f,h[1],h[0],i,s)},"Min",{axes:a},u,[!0]);if(e){var l=Mn(c.shape,i);c=c.reshape(l)}return c}}),ug=Q({moments_:function(r,t,e){t===void 0&&(t=null),e===void 0&&(e=!1);var n=ht(t,(r=B(r,"x","moments")).shape),o=r.mean(n,e),i=o.shape;e||(i=Mn(o.shape,n));var a=r.toFloat().sub(o.reshape(i)).square();return{mean:o,variance:a.mean(n,e)}}}),Il=Q({sum_:function(r,t,e){t===void 0&&(t=null),e===void 0&&(e=!1);var n=B(r,"x","sum");n.dtype==="bool"&&(n=n.toInt());var o=ht(t,n.shape);return Ri(function(i){var a=tr(o,i.rank),s=o,u=i;a!=null&&(u=i.transpose(a),s=nr(s.length,i.rank));var c=function(d){var p=i.shape.slice();return o.forEach(function(v){p[v]=1}),d.reshape(p).mul(po(i.shape,"float32"))},l={axes:s},f=L.runKernelFunc(function(d){return d.sum(u,s)},{x:u},function(d){return{x:function(){return c(d)}}},"Sum",l);if(e){var h=Mn(f.shape,o);f=f.reshape(h)}return{value:f,gradFunc:c}})(n)}}),cg=Q({prod_:function(r,t,e){t===void 0&&(t=null),e===void 0&&(e=!1);var n=B(r,"x","prod");n.dtype==="bool"&&(n=n.toInt());var o=ht(t,n.shape),i=tr(o,n.rank),a=o,s=n;i!=null&&(s=n.transpose(i),a=nr(a.length,n.rank));var u=L.runKernelFunc(function(l){return l.prod(s,a)},{permutedX:s});if(e){var c=Mn(u.shape,o);u=u.reshape(c)}return u}}),Sl=Q({elu_:function(r){var t=B(r,"x","elu");return L.runKernelFunc(function(e,n){var o=e.elu(t);return n([o]),o},{$x:t},function(e,n){var o=n[0];return{$x:function(){return L.runKernelFunc(function(i){return i.eluDer(e,o)},{dy:e,y:o})}}})}}),lg=Q({leakyRelu_:function(r,t){t===void 0&&(t=.2);var e=B(r,"x","leakyRelu");return Va(Te(t).mul(e),e)}}),Rl=Q({prelu_:function(r,t){var e=B(r,"x","prelu"),n=B(t,"alpha","prelu");return L.runKernelFunc(function(o,i){var a=o.prelu(e,n);return i([e,n]),a},{x:e,alpha:n},function(o,i){var a=i[0],s=i[1],u=a.greater(0);return{x:function(){return no(u,o,o.mul(s))},alpha:function(){var c=no(u,Tt(o),o.mul(a)),l=vn(s.shape,o.shape);return l.length>0&&(c=c.sum(l)),c.reshape(s.shape)}}},"Prelu")}}),rn=Q({relu_:function(r){var t=B(r,"x","relu");return t.dtype==="bool"?t.toInt():L.runKernelFunc(function(e,n){var o=e.relu(t);return n([t]),o},{x:t},function(e,n){var o=n[0];return{x:function(){return e.mulStrict(o.step().toFloat())}}},"Relu")}}),Bl=Q({relu6_:function(r){var t=B(r,"x","relu6");return t.dtype==="bool"?t.toInt():L.runKernelFunc(function(e,n){var o=e.relu6(t);return n([t]),o},{x:t},function(e,n){var o=n[0],i=o.lessEqual(6).mul(o.step());return{x:function(){return e.mulStrict(i.toFloat())}}},"Relu6")}}),fg=Q({selu_:function(r){var t=B(r,"x","selu");return L.runKernelFunc(function(e,n){var o=e.selu(t);return n([t]),o},{$x:t},function(e,n){var o=n[0];return{$x:function(){var i=o.greater(Te(0)),a=Te(za),s=Te(Ua),u=e.mul(s),c=e.mul(a).mul(o.toFloat().exp());return no(i,u,c)}}})}}),Wr=Q({transpose_:function(r,t){var e=B(r,"x","transpose");if(t==null&&(t=e.shape.map(function(o,i){return i}).reverse()),R(e.rank===t.length,function(){return"Error in transpose: rank of input "+e.rank+" must match length of perm "+t+"."}),t.forEach(function(o){R(o>=0&&o<e.rank,function(){return"All entries in 'perm' must be between 0 and "+(e.rank-1)+" but got "+t})}),e.rank<=1)return e.clone();var n={perm:t};return L.runKernelFunc(function(o){return o.transpose(e,t)},{x:e},function(o){var i=yi(t);return{x:function(){return o.transpose(i)}}},"Transpose",n)}}),hg=Q({localResponseNormalization_:function(r,t,e,n,o){t===void 0&&(t=5),e===void 0&&(e=1),n===void 0&&(n=1),o===void 0&&(o=.5);var i=B(r,"x","localResponseNormalization");R(i.rank===4||i.rank===3,function(){return`Error in localResponseNormalization: x must be rank 3 or 4 but got
|
|
rank `+i.rank+"."}),R(He(t),function(){return"Error in localResponseNormalization: depthRadius must be an integer but got depthRadius "+t+"."});var a=i,s=!1;i.rank===3&&(s=!0,a=i.as4D(1,i.shape[0],i.shape[1],i.shape[2]));var u=L.runKernelFunc(function(c,l){var f=c.localResponseNormalization4D(a,t,e,n,o);return l([a,f]),f},{x4D:a},function(c,l){var f=l[0],h=l[1];return{x4D:function(){return L.runKernelFunc(function(d){return d.LRNGrad(c,f,h,t,e,n,o)},{})}}});return s?u.as3D(u.shape[1],u.shape[2],u.shape[3]):u}}),kl=Q({norm_:function(r,t,e,n){t===void 0&&(t="euclidean"),e===void 0&&(e=null),n===void 0&&(n=!1);var o=function s(u,c,l){if(l===void 0&&(l=null),u.rank===0)return u.abs();if(u.rank!==1&&l===null)return s(u.reshape([-1]),c,l);if(u.rank===1||typeof l=="number"||Array.isArray(l)&&l.length===1){if(c===1)return u.abs().sum(l);if(c===1/0)return u.abs().max(l);if(c===-1/0)return u.abs().min(l);if(c==="euclidean"||c===2)return u.abs().pow(Te(2,"int32")).sum(l).sqrt();throw new Error("Error in norm: invalid ord value: "+c)}if(Array.isArray(l)&&l.length===2){if(c===1)return u.abs().sum(l[0]).max(l[1]-1);if(c===1/0)return u.abs().sum(l[1]).max(l[0]);if(c===-1/0)return u.abs().sum(l[1]).min(l[0]);if(c==="fro"||c==="euclidean")return u.square().sum(l).sqrt();throw new Error("Error in norm: invalid ord value: "+c)}throw new Error("Error in norm: invalid axis: "+l)}(r=B(r,"x","norm"),t,e),i=o.shape;if(n){var a=ht(e,r.shape);i=Mn(o.shape,a)}return o.reshape(i)}}),dg=Q({basicLSTMCell_:function(r,t,e,n,o,i){var a=B(r,"forgetBias","basicLSTMCell"),s=B(t,"lstmKernel","basicLSTMCell"),u=B(e,"lstmBias","basicLSTMCell"),c=B(n,"data","basicLSTMCell"),l=B(o,"c","basicLSTMCell"),f=B(i,"h","basicLSTMCell"),h=c.concat(f,1).matMul(s).add(u),d=h.shape[0],p=h.shape[1]/4,v=[d,p],g=h.slice([0,0],v),A=h.slice([0,p],v),w=h.slice([0,2*p],v),E=h.slice([0,3*p],v),x=g.sigmoid().mulStrict(A.tanh()).addStrict(l.mulStrict(a.add(w).sigmoid())),C=x.tanh().mulStrict(E.sigmoid());return[x,C]}}),pg=Q({multiRNNCell_:function(r,t,e,n){for(var o=B(t,"data","multiRNNCell"),i=Ho(e,"c","multiRNNCell"),a=Ho(n,"h","multiRNNCell"),s=o,u=[],c=0;c<r.length;c++){var l=r[c](s,i[c],a[c]);u.push(l[0]),u.push(l[1]),s=l[1]}var f=[],h=[];for(c=0;c<u.length;c+=2)f.push(u[c]),h.push(u[c+1]);return[f,h]}}),vg=Q({movingAverage_:function(r,t,e,n,o){o===void 0&&(o=!0);var i=B(r,"v","movingAverage"),a=B(t,"x","movingAverage"),s=B(e,"decay","movingAverage");lo(i,a),R(Ke(i.shape,a.shape),function(){return"Shape mismatch in v and x"});var u=Te(1),c=u.sub(s),l=a.sub(i).mul(c);if(o){R(n!=null,function(){return"When using zeroDebias: true, step is required."});var f=B(n,"step","movingAverage");l=l.div(u.sub(_i(s,f)))}return i.add(l)}}),gg=Q({stridedSlice_:function(r,t,e,n,o,i,a,s,u){if(o===void 0&&(o=0),i===void 0&&(i=0),a===void 0&&(a=0),s===void 0&&(s=0),u===void 0&&(u=0),n==null&&(n=new Array(t.length)),a!==0)throw new Error("ellipsis mask is not yet supported");var c=B(r,"x","stridedSlice"),l=Ea(s),f=c.shape.slice();l.forEach(function(g){t[g]=0,e[g]=1,f.splice(g,0,1)}),c=c.reshape(f);for(var h=0;h<c.rank;h++)t[h]=Yu(o,t,n,c.shape,h),e[h]=$u(i,e,n,c.shape,h),n[h]=n[h]||1;var d=Ea(u);d.forEach(function(g){e[g]=t[g]+1,n[g]=1});var p=Si(t,e,n),v=p.filter(function(g,A){return d.indexOf(A)===-1});return n.every(function(g){return g===1})?dr(c,t,p).reshape(v):L.runKernelFunc(function(g){return g.stridedSlice(c,t,e,n)},{$x:c}).reshape(v)}}),mg=Q({topk_:function(r,t,e){t===void 0&&(t=1),e===void 0&&(e=!0);var n=B(r,"x","topk");if(n.rank===0)throw new Error("topk() expects the input to be of rank 1 or higher");var o=n.shape[n.shape.length-1];if(t>o)throw new Error("'k' passed to topk() must be <= the last dimension ("+o+") but got "+t);var i=L.runKernelFunc(function(a){return a.topk(n,t,e)},{$x:n});return{values:i[0],indices:i[1]}}}),Ag=Q({scatterND_:function(r,t,e){var n=B(r,"indices","scatterND","int32"),o=B(t,"updates","scatterND");return Zu(o,n,e),L.runKernelFunc(function(i){return i.scatterND(n,o,e)},{indices:n,updates:o},null,"ScatterNd",{shape:e})}}),Za=Q({fft_:function(r){R(r.dtype==="complex64",function(){return"The dtype for tf.spectral.fft() must be complex64 but got "+r.dtype+"."});var t=r.shape[r.shape.length-1],e=r.size/t,n=r.as2D(e,t);return L.runKernelFunc(function(o){return o.fft(n)},{input:r}).reshape(r.shape)}}),ji=Q({ifft_:function(r){R(r.dtype==="complex64",function(){return"The dtype for tf.spectral.ifft() must be complex64 but got "+r.dtype+"."});var t=r.shape[r.shape.length-1],e=r.size/t,n=r.as2D(e,t);return L.runKernelFunc(function(o){return o.ifft(n)},{input:r}).reshape(r.shape)}}),qa=Q({rfft_:function(r,t){R(r.dtype==="float32",function(){return"The dtype for rfft() must be real value but got "+r.dtype});var e,n=r.shape[r.shape.length-1],o=r.size/n;if(t!=null&&t<n){var i=r.shape.map(function(A){return 0}),a=r.shape.map(function(A){return A});a[r.shape.length-1]=t,e=r.slice(i,a),n=t}else if(t!=null&&t>n){var s=r.shape.map(function(A){return A});s[r.shape.length-1]=t-n,e=r.concat(tn(s),r.shape.length-1),n=t}else e=r;var u=e.zerosLike(),c=kn(e,u).as2D(o,n),l=Za(c),f=Math.floor(n/2)+1,h=Zn(l),d=fr(l),p=h.split([f,n-f],h.shape.length-1),v=d.split([f,n-f],d.shape.length-1),g=e.shape.slice();return g[e.shape.length-1]=f,kn(p[0],v[0]).reshape(g)}}),Tl=Q({irfft_:function(r){var t=r.shape[r.shape.length-1],e=r.size/t;if(t<=2){var n=r.as2D(e,t),o=ji(n);return Zn(o)}var i=[e,2*(t-1)],a=Zn(r).as2D(e,t),s=fr(r).as2D(e,t),u=a.slice([0,1],[e,t-2]).reverse(1),c=s.slice([0,1],[e,t-2]).reverse(1).mul(Te(-1)),l=a.concat(u,1),f=s.concat(c,1);return n=kn(l,f).as2D(i[0],i[1]),o=ji(n),Zn(o)}}),yg=Object.freeze({fft:Za,ifft:ji,rfft:qa,irfft:Tl}),xg=Q({sparseToDense_:function(r,t,e,n){n===void 0&&(n=0);var o=B(r,"sparseIndices","sparseToDense","int32"),i=B(t,"sparseValues","sparseToDense"),a=B(n,"defaultValue","sparseToDense",i.dtype);return function(s,u,c,l){if(s.dtype!=="int32")throw new Error("tf.sparseToDense() expects the indices to be int32 type, but the dtype was "+s.dtype+".");if(s.rank>2)throw new Error("sparseIndices should be a scalar, vector, or matrix, but got shape "+s.shape+".");var f=s.rank>0?s.shape[0]:1,h=s.rank>1?s.shape[1]:1;if(c.length!==h)throw new Error("outputShape has incorrect number of elements:, "+c.length+", should be: "+h+".");var d=u.size;if(u.rank!==0&&(u.rank!==1||d!==f))throw new Error("sparseValues has incorrect shape "+u.shape+", should be [] or ["+f+"]");if(u.dtype!==l.dtype)throw new Error("sparseValues.dtype must match defaultValues.dtype")}(o,i,e,a),L.runKernelFunc(function(s){return s.sparseToDense(o,i,e,a)},{$sparseIndices:o,$sparseValues:i,$defaultValue:a})}}),bg=Q({gatherND_:function(r,t){var e=B(t,"indices","gatherND","int32"),n=B(r,"x","gatherND");return L.runKernelFunc(function(o){return o.gatherND(n,e)},{x:n,indices:e},null,"GatherNd")}}),wg=Q({diag_:function(r){var t=B(r,"x","diag").flatten(),e=r.shape.concat(r.shape);return L.runKernelFunc(function(n){return n.diag(t)},{$x:t}).reshape(e)}}),Eg=Q({dropout_:function(r,t,e,n){var o=B(r,"x","dropout");if(R(o.dtype==="float32",function(){return"x has to be a floating point tensor since it's going to be scaled, but got a "+o.dtype+" tensor instead."}),R(t>=0&&t<1,function(){return"rate must be a float in the range [0, 1), but got "+t+"."}),t===0)return r instanceof at?o.clone():o;var i=function(u,c){if(c==null)return u.shape.slice();if(Ke(u.shape,c))return c;if(u.shape.length===c.length){for(var l=[],f=0;f<u.shape.length;f++)c[f]==null&&u.shape[f]!=null?l.push(u.shape[f]):l.push(c[f]);return l}return c}(o,e),a=1-t,s=ju(i,0,1,"float32",n).add(a).floor().div(a);return o.mul(s)}});function Dl(r,t,e){for(var n=1-r%2,o=new Float32Array(r),i=0;i<r;++i){var a=2*Math.PI*i/(r+n-1);o[i]=t-e*Math.cos(a)}return pn(o,"float32")}var Ya=Q({hannWindow_:function(r){return Dl(r,.5,.5)}}),Fl=Q({hammingWindow_:function(r){return Dl(r,.54,.46)}}),$a=Q({frame_:function(r,t,e,n,o){n===void 0&&(n=!1),o===void 0&&(o=0);for(var i=0,a=[];i+t<=r.size;)a.push(dr(r,i,t)),i+=e;if(n)for(;i<r.size;){var s=i+t-r.size,u=mn([dr(r,i,t-s),hr([s],o)]);a.push(u),i+=e}return a.length===0?Mr([],[0,t]):mn(a).as2D(a.length,t)}}),Pl=Q({stft_:function(r,t,e,n,o){var i;o===void 0&&(o=Ya),n==null&&(i=t,n=Math.floor(Math.pow(2,Math.ceil(Math.log(i)/Math.log(2)))));for(var a=$a(r,t,e),s=Fn(a,o(t)),u=[],c=0;c<a.shape[0];c++)u.push(qa(s.slice([c,0],[1,t]),n));return mn(u)}}),Cg=Object.freeze({hannWindow:Ya,hammingWindow:Fl,frame:$a,stft:Pl}),Pn,Ig=function(r,t,e){return e===void 0&&(e=1),xe(this,void 0,void 0,function(){var n,o,i,a,s,u,c,l,f,h,d,p,v,g;return Ie(this,function(A){switch(A.label){case 0:return n=B(r,"predictions","inTopK"),o=B(t,"targets","inTopK"),R(n.rank>1,function(){return"inTopK() expects the predictions to be of rank 2 or higher, but got "+n.rank}),R(n.rank-1===o.rank,function(){return"predictions rank should be 1 larger than targets rank, but got predictions rank "+n.rank+" and targets rank "+o.rank}),Je(n.shape.slice(0,n.shape.length-1),o.shape,"predictions's shape should be align with the targets' shape, except the last dimension."),i=n.shape[n.shape.length-1],R(e>0&&e<=i,function(){return"'k' passed to inTopK() must be > 0 && <= the predictions last dimension ("+i+"), but got "+e}),[4,n.data()];case 1:return a=A.sent(),[4,o.data()];case 2:for(s=A.sent(),u=[a.length/i,i],l=u[1],f=T("bool",c=u[0]),h=0;h<c;h++){for(d=h*l,p=a.subarray(d,d+l),v=[],g=0;g<p.length;g++)v.push({value:p[g],index:g});for(v.sort(function(w,E){return E.value-w.value}),f[h]=0,g=0;g<e;g++)if(v[g].index===s[h]){f[h]=1;break}}return r!==n&&n.dispose(),t!==o&&o.dispose(),[2,Tn(f,o.shape,"bool")]}})})};(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"})(Pn||(Pn={}));var Sg=Q({absoluteDifference_:function(r,t,e,n){n===void 0&&(n=Pn.SUM_BY_NONZERO_WEIGHTS);var o=B(r,"labels","absoluteDifference"),i=B(t,"predictions","absoluteDifference"),a=null;e!=null&&(a=B(e,"weights","absoluteDifference")),Je(o.shape,i.shape,"Error in absoluteDifference: ");var s=o.sub(i).abs();return Rr(s,a,n)}}),Rr=Q({computeWeightedLoss_:function(r,t,e){e===void 0&&(e=Pn.SUM_BY_NONZERO_WEIGHTS);var n=B(r,"losses","computeWeightedLoss"),o=null;t!=null&&(o=B(t,"weights","computeWeightedLoss"));var i=o==null?n:n.mul(o);if(e===Pn.NONE)return i;if(e===Pn.SUM)return i.sum();if(e===Pn.MEAN){if(o==null)return i.mean();var a=n.size/o.size,s=i.sum().div(o.sum());return a>1?s.div(Te(a)):s}if(e===Pn.SUM_BY_NONZERO_WEIGHTS){if(o==null)return i.sum().div(Te(n.size));var u=o.mul(po(n.shape)).notEqual(Te(0)).sum().toFloat();return i.sum().div(u)}throw Error("Unknown reduction: "+e)}}),Rg=Q({cosineDistance_:function(r,t,e,n,o){o===void 0&&(o=Pn.SUM_BY_NONZERO_WEIGHTS);var i=B(r,"labels","cosineDistance"),a=B(t,"predictions","cosineDistance"),s=null;n!=null&&(s=B(n,"weights","cosineDistance")),Je(i.shape,a.shape,"Error in cosineDistance: ");var u=Te(1).sub(i.mul(a).sum(e,!0));return Rr(u,s,o)}}),Bg=Q({hingeLoss_:function(r,t,e,n){n===void 0&&(n=Pn.SUM_BY_NONZERO_WEIGHTS);var o=B(r,"labels","hingeLoss"),i=B(t,"predictions","hingeLoss"),a=null;e!=null&&(a=B(e,"weights","hingeLoss")),Je(o.shape,i.shape,"Error in hingeLoss: ");var s=Te(1);o=Te(2).mul(o).sub(s);var u=s.sub(o.mul(i)).relu();return Rr(u,a,n)}}),kg=Q({huberLoss_:function(r,t,e,n,o){n===void 0&&(n=1),o===void 0&&(o=Pn.SUM_BY_NONZERO_WEIGHTS);var i=B(r,"labels","huberLoss"),a=B(t,"predictions","huberLoss"),s=null;e!=null&&(s=B(e,"weights","huberLoss")),Je(i.shape,a.shape,"Error in huberLoss: ");var u=Te(n),c=a.sub(i).abs(),l=ll(c,u),f=c.sub(l),h=Te(.5).mul(l.square()).add(u.mul(f));return Rr(h,s,o)}}),Tg=Q({logLoss_:function(r,t,e,n,o){n===void 0&&(n=1e-7),o===void 0&&(o=Pn.SUM_BY_NONZERO_WEIGHTS);var i=B(r,"labels","logLoss"),a=B(t,"predictions","logLoss"),s=null;e!=null&&(s=B(e,"weights","logLoss")),Je(i.shape,a.shape,"Error in logLoss: ");var u=Te(1),c=Te(n),l=i.mul(a.add(c).log()).neg().sub(u.sub(i).mul(u.sub(a).add(c).log()));return Rr(l,s,o)}}),Dg=Q({meanSquaredError_:function(r,t,e,n){n===void 0&&(n=Pn.SUM_BY_NONZERO_WEIGHTS);var o=B(r,"labels","meanSquaredError"),i=B(t,"predictions","meanSquaredError"),a=null;e!=null&&(a=B(e,"weights","meanSquaredError")),Je(o.shape,i.shape,"Error in meanSquaredError: ");var s=o.squaredDifference(i);return Rr(s,a,n)}}),Fg=Q({sigmoidCrossEntropy_:function(r,t,e,n,o){n===void 0&&(n=0),o===void 0&&(o=Pn.SUM_BY_NONZERO_WEIGHTS);var i=B(r,"multiClassLabels","sigmoidCrossEntropy"),a=B(t,"logits","sigmoidCrossEntropy"),s=null;if(e!=null&&(s=B(e,"weights","sigmoidCrossEntropy")),Je(i.shape,a.shape,"Error in sigmoidCrossEntropy: "),n>0){var u=Te(n),c=Te(1),l=Te(.5);i=i.mul(c.sub(u)).add(l.mul(u))}var f=function(h,d){var p=B(h,"labels","sigmoidCrossEntropyWithLogits"),v=B(d,"logits","sigmoidCrossEntropyWithLogits");Je(p.shape,v.shape,"Error in sigmoidCrossEntropyWithLogits: ");var g=v.relu(),A=v.mul(p),w=v.abs().neg().exp().log1p();return g.sub(A).add(w)}(i,a);return Rr(f,s,o)}}),Pg=Q({softmaxCrossEntropy_:function(r,t,e,n,o){n===void 0&&(n=0),o===void 0&&(o=Pn.SUM_BY_NONZERO_WEIGHTS);var i=B(r,"onehotLabels","softmaxCrossEntropy"),a=B(t,"logits","softmaxCrossEntropy"),s=null;if(e!=null&&(s=B(e,"weights","softmaxCrossEntropy")),Je(i.shape,a.shape,"Error in softmaxCrossEntropy: "),n>0){var u=Te(n),c=Te(1),l=Te(i.shape[1]);i=i.mul(c.sub(u)).add(u.div(l))}var f=function(h,d,p){if(p===void 0&&(p=-1),p===-1&&(p=d.rank-1),p!==d.rank-1)throw Error("Softmax cross entropy along a non-last dimension is not yet supported. Labels / logits was rank "+d.rank+" and dim was "+p);return Ri(function(v,g,A){var w=g.logSumExp([p],!0),E=g.toFloat().sub(w);return A([v,E]),{value:E.mul(v).neg().sum([p]),gradFunc:function(x,C){var S=C[0],N=C[1],O=Mn(x.shape,[p]);return[x.reshape(O).mul(S.toFloat().sub(N.exp())),x.reshape(O).mul(N.exp().sub(S.toFloat()))]}}})(h,d)}(i,a);return Rr(f,s,o)}}),Ng=Object.freeze({get Reduction(){return Pn},absoluteDifference:Sg,computeWeightedLoss:Rr,cosineDistance:Rg,hingeLoss:Bg,huberLoss:kg,logLoss:Tg,meanSquaredError:Dg,sigmoidCrossEntropy:Fg,softmaxCrossEntropy:Pg});function Nl(r,t){return t===void 0&&(t=!1),L.tidy(function(){if(r.shape.length!==2)throw new Error("qr2d() requires a 2D Tensor, but got a "+r.shape.length+"D Tensor.");for(var e=r.shape[0],n=r.shape[1],o=Hu(e),i=r.clone(),a=Mr([[1]],[1,1]),s=a.clone(),u=e>=n?n:e,c=function(f){var h,d=i,p=s,v=o;h=L.tidy(function(){var g=i.slice([f,f],[e-f,1]),A=g.norm(),w=i.slice([f,f],[1,1]),E=Mr([[-1]]).where(w.greater(0),Mr([[1]])),x=w.sub(E.mul(A)),C=g.div(x);s=C.shape[0]===1?a.clone():a.concat(C.slice([1,0],[C.shape[0]-1,C.shape[1]]),0);var S=E.matMul(x).div(A).neg(),N=i.slice([f,0],[e-f,n]),O=S.mul(s);if(f===0)i=N.sub(O.matMul(s.transpose().matMul(N)));else{var F=N.sub(O.matMul(s.transpose().matMul(N)));i=i.slice([0,0],[f,n]).concat(F,0)}var P=o.slice([0,f],[e,o.shape[1]-f]);if(f===0)o=P.sub(P.matMul(s).matMul(O.transpose()));else{var z=P.sub(P.matMul(s).matMul(O.transpose()));o=o.slice([0,0],[e,f]).concat(z,1)}return[s,i,o]}),s=h[0],i=h[1],o=h[2],Wn([d,p,v])},l=0;l<u;++l)c(l);return!t&&e>n&&(o=o.slice([0,0],[e,n]),i=i.slice([0,0],[n,n])),[o,i]})}var Og=Q({bandPart_:function(r,t,e){if(t%1!=0)throw new Error("bandPart(): numLower must be an integer, got "+t+".");if(e%1!=0)throw new Error("bandPart(): numUpper must be an integer, got "+e+".");var n=B(r,"a","bandPart");if(n.rank<2)throw new Error("bandPart(): Rank must be at least 2, got "+n.rank+".");var o=n.shape,i=n.shape.slice(-2),a=i[0],s=i[1];if(!(t<=a))throw new Error("bandPart(): numLower ("+t+") must not be greater than the number of rows ("+a+").");if(!(e<=s))throw new Error("bandPart(): numUpper ("+e+") must not be greater than the number of columns ("+s+").");t<0&&(t=a),e<0&&(e=s);var u=xi(0,a,1,"int32").reshape([-1,1]),c=xi(0,s,1,"int32"),l=yn(u,c),f=Qi(l.lessEqual(Te(+t,"int32")),l.greaterEqual(Te(-e,"int32"))),h=tn([a,s],n.dtype);return jn(An(n.reshape([-1,a,s])).map(function(d){return no(f,d,h)})).reshape(o)}}),Mg=Q({gramSchmidt_:function(r){var t;if(Array.isArray(r)){t=!1,R(r!=null&&r.length>0,function(){return"Gram-Schmidt process: input must not be null, undefined, or empty"});for(var e=r[0].shape[0],n=function(u){R(r[u].shape[0]===e,function(){return"Gram-Schmidt: Non-unique lengths found in the input vectors: ("+r[u].shape[0]+" vs. "+e+")"})},o=1;o<r.length;++o)n(o)}else t=!0,r=Aa(r,r.shape[0],0).map(function(u){return Gu(u,[0])});R(r.length<=r[0].shape[0],function(){return"Gram-Schmidt: Number of vectors ("+r.length+") exceeds number of dimensions ("+r[0].shape[0]+")."});var i=[],a=r,s=function(u){i.push(L.tidy(function(){var c=a[u];if(u>0)for(var l=0;l<u;++l){var f=Il(i[l].mulStrict(c)).mul(i[l]);c=c.sub(f)}return c.div(kl(c,"euclidean"))}))};for(o=0;o<r.length;++o)s(o);return t?jn(i,0):i}}),Lg=Q({qr_:function(r,t){if(t===void 0&&(t=!1),r.rank<2)throw new Error("qr() requires input tensor to have a rank >= 2, but got rank "+r.rank);if(r.rank===2)return Nl(r,t);var e=r.shape.slice(0,r.shape.length-2).reduce(function(a,s){return a*s}),n=An(r.reshape([e,r.shape[r.shape.length-2],r.shape[r.shape.length-1]]),0),o=[],i=[];return n.forEach(function(a){var s=Nl(a,t),u=s[0],c=s[1];o.push(u),i.push(c)}),[jn(o,0).reshape(r.shape),jn(i,0).reshape(r.shape)]}}),Wg=Object.freeze({bandPart:Og,gramSchmidt:Mg,qr:Lg});function Vi(r,t,e,n,o,i){n==null&&(n=.5),o==null&&(o=Number.NEGATIVE_INFINITY),i==null&&(i=0);var a=r.shape[0];return e=Math.min(e,a),R(0<=n&&n<=1,function(){return"iouThreshold must be in [0, 1], but was '"+n+"'"}),R(r.rank===2,function(){return"boxes must be a 2D tensor, but was of rank '"+r.rank+"'"}),R(r.shape[1]===4,function(){return"boxes must have 4 columns, but 2nd dimension was "+r.shape[1]}),R(t.rank===1,function(){return"scores must be a 1D tensor"}),R(t.shape[0]===a,function(){return"scores has incompatible shape with boxes. Expected "+a+", but was "+t.shape[0]}),R(0<=i&&i<=1,function(){return"softNmsSigma must be in [0, 1], but was '"+i+"'"}),{maxOutputSize:e,iouThreshold:n,scoreThreshold:o,softNmsSigma:i}}var Qg=Q({resizeBilinear_:function(r,t,e){e===void 0&&(e=!1);var n=B(r,"images","resizeBilinear");R(n.rank===3||n.rank===4,function(){return"Error in resizeBilinear: x must be rank 3 or 4, but got rank "+n.rank+"."}),R(t.length===2,function(){return"Error in resizeBilinear: new shape must 2D, but got shape "+t+"."});var o=n,i=!1;n.rank===3&&(i=!0,o=n.as4D(1,n.shape[0],n.shape[1],n.shape[2]));var a=t[0],s=t[1],u=L.runKernelFunc(function(c,l){return l([o]),c.resizeBilinear(o,a,s,e)},{x:o},function(c,l){return{x:function(){return L.runKernelFunc(function(f){return f.resizeBilinearBackprop(c,l[0],e)},{})}}},"ResizeBilinear",{alignCorners:e,newHeight:a,newWidth:s});return i?u.as3D(u.shape[1],u.shape[2],u.shape[3]):u}}),_g=Q({resizeNearestNeighbor_:function(r,t,e){e===void 0&&(e=!1);var n=B(r,"images","resizeNearestNeighbor");R(n.rank===3||n.rank===4,function(){return"Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank "+n.rank+"."}),R(t.length===2,function(){return"Error in resizeNearestNeighbor: new shape must 2D, but got shape "+t+"."}),R(n.dtype==="float32"||n.dtype==="int32",function(){return"`images` must have `int32` or `float32` as dtype"});var o=n,i=!1;n.rank===3&&(i=!0,o=n.as4D(1,n.shape[0],n.shape[1],n.shape[2]));var a=t[0],s=t[1],u=L.runKernelFunc(function(c,l){return l([o]),c.resizeNearestNeighbor(o,a,s,e)},{batchImages:o},function(c,l){return{batchImages:function(){return L.runKernelFunc(function(f){return f.resizeNearestNeighborBackprop(c,l[0],e)},{})}}});return i?u.as3D(u.shape[1],u.shape[2],u.shape[3]):u}}),zg=Q({nonMaxSuppression_:function(r,t,e,n,o){n===void 0&&(n=.5),o===void 0&&(o=Number.NEGATIVE_INFINITY);var i=B(r,"boxes","nonMaxSuppression"),a=B(t,"scores","nonMaxSuppression"),s=Vi(i,a,e,n,o);e=s.maxOutputSize,n=s.iouThreshold,o=s.scoreThreshold;var u={maxOutputSize:e,iouThreshold:n,scoreThreshold:o};return L.runKernelFunc(function(c){return c.nonMaxSuppression(i,a,e,n,o)},{boxes:i,scores:a},null,"NonMaxSuppressionV3",u)}}),Ug=function(r,t,e,n,o){return n===void 0&&(n=.5),o===void 0&&(o=Number.NEGATIVE_INFINITY),xe(this,void 0,void 0,function(){var i,a,s,u,c,l,f;return Ie(this,function(h){switch(h.label){case 0:return i=B(r,"boxes","nonMaxSuppressionAsync"),a=B(t,"scores","nonMaxSuppressionAsync"),s=Vi(i,a,e,n,o),e=s.maxOutputSize,n=s.iouThreshold,o=s.scoreThreshold,[4,Promise.all([i.data(),a.data()])];case 1:return u=h.sent(),c=u[0],l=u[1],f=Da(c,l,e,n,o),i!==r&&i.dispose(),a!==t&&a.dispose(),[2,f]}})})},Hg=Q({nonMaxSuppressionWithScore_:function(r,t,e,n,o,i){n===void 0&&(n=.5),o===void 0&&(o=Number.NEGATIVE_INFINITY),i===void 0&&(i=0);var a=B(r,"boxes","nonMaxSuppression"),s=B(t,"scores","nonMaxSuppression"),u=Vi(a,s,e,n,o,i),c={maxOutputSize:e=u.maxOutputSize,iouThreshold:n=u.iouThreshold,scoreThreshold:o=u.scoreThreshold,softNmsSigma:i=u.softNmsSigma},l=L.runKernel("NonMaxSuppressionV5",{boxes:a,scores:s},c);return{selectedIndices:l[0],selectedScores:l[1]}}}),jg=function(r,t,e,n,o,i){return n===void 0&&(n=.5),o===void 0&&(o=Number.NEGATIVE_INFINITY),i===void 0&&(i=0),xe(this,void 0,void 0,function(){var a,s,u,c,l,f,h;return Ie(this,function(d){switch(d.label){case 0:return a=B(r,"boxes","nonMaxSuppressionAsync"),s=B(t,"scores","nonMaxSuppressionAsync"),u=Vi(a,s,e,n,o,i),e=u.maxOutputSize,n=u.iouThreshold,o=u.scoreThreshold,i=u.softNmsSigma,[4,Promise.all([a.data(),s.data()])];case 1:return c=d.sent(),l=c[0],f=c[1],h=Fa(l,f,e,n,o,i),a!==r&&a.dispose(),s!==t&&s.dispose(),[2,h]}})})},Vg=Q({cropAndResize_:function(r,t,e,n,o,i){var a=B(r,"image","cropAndResize"),s=B(t,"boxes","cropAndResize","float32"),u=B(e,"boxInd","cropAndResize","int32");o=o||"bilinear",i=i||0;var c=s.shape[0];return R(a.rank===4,function(){return"Error in cropAndResize: image must be rank 4,but got rank "+a.rank+"."}),R(s.rank===2&&s.shape[1]===4,function(){return"Error in cropAndResize: boxes must be have size ["+c+",4] but had shape "+s.shape+"."}),R(u.rank===1&&u.shape[0]===c,function(){return"Error in cropAndResize: boxInd must be have size ["+c+"] but had shape "+s.shape+"."}),R(n.length===2,function(){return"Error in cropAndResize: cropSize must be of length 2, but got length "+n.length+"."}),R(n[0]>=1&&n[1]>=1,function(){return"cropSize must be atleast [1,1], but was "+n}),R(o==="bilinear"||o==="nearest",function(){return"method must be bilinear or nearest, but was "+o}),L.runKernelFunc(function(l,f){return l.cropAndResize(a,s,u,n,o,i)},{images:a,boxes:s,boxInd:u},null,"CropAndResize",{method:o,extrapolationValue:i,cropSize:n})}}),es=Object.freeze({resizeBilinear:Qg,resizeNearestNeighbor:_g,nonMaxSuppression:zg,nonMaxSuppressionAsync:Ug,nonMaxSuppressionWithScore:Hg,nonMaxSuppressionWithScoreAsync:jg,cropAndResize:Vg}),ts=function(r,t){return!(r>0)||t==="linear"},ns=function(r,t,e){if(e==null||e==="linear")return r;if(e==="relu")return r.mul(t.step());throw new Error("Gradient for activation "+e+" has not been implemented yet.")},rs=function(r,t){var e=t,n=vn(r.shape,t.shape);return n.length>0&&(e=e.sum(n)),e.reshape(r.shape)},os=function(r,t,e){if(t==="linear")return r;if(t==="relu")return rn(r);if(t==="elu")return Sl(r);if(t==="relu6")return Bl(r);if(t==="prelu")return Rl(r,e);throw new Error("Unknown fused activation "+t+".")},Gg=Q({fusedMatMul_:function(r){var t,e=r.a,n=r.b,o=r.transposeA,i=o!==void 0&&o,a=r.transposeB,s=a!==void 0&&a,u=r.bias,c=r.activation,l=c===void 0?"linear":c,f=r.preluActivationWeights;if(ts(L.state.gradientDepth,l)===!1){var h=Ui(e,n,i,s);return u!=null&&(h=gt(h,u)),os(h,l,f)}var d=B(e,"a","fused matMul"),p=B(n,"b","fused matMul");t=pt(d,p),d=t[0],p=t[1];var v=i?d.shape[d.rank-2]:d.shape[d.rank-1],g=s?p.shape[p.rank-1]:p.shape[p.rank-2],A=i?d.shape[d.rank-1]:d.shape[d.rank-2],w=s?p.shape[p.rank-2]:p.shape[p.rank-1],E=d.shape.slice(0,-2),x=p.shape.slice(0,-2),C=Re(E),S=Re(x);R(d.rank>=2&&p.rank>=2&&d.rank===p.rank,function(){return"Error in fused matMul: inputs must have the same rank of at least 2, got ranks "+d.rank+" and "+p.rank+"."}),R(Ke(E,x),function(){return"Error in fused matMul: outer dimensions ("+E+") and ("+x+") of Tensors with shapes "+d.shape+" and "+p.shape+" must match."}),R(v===g,function(){return"Error in fused matMul: inner shapes ("+v+") and ("+g+") of Tensors with shapes "+d.shape+" and "+p.shape+" and transposeA="+i+" and transposeB="+s+" must match."});var N,O,F=d.shape.slice(0,-2).concat([A,w]),P=i?d.as3D(C,v,A):d.as3D(C,A,v),z=s?p.as3D(S,w,g):p.as3D(S,g,w);u!=null&&vt(F,(N=pt(N=B(u,"bias","fused matMul"),d)[0]).shape),f!=null&&(O=B(f,"prelu weights","fused matMul"));var _={a:P,b:z};u!=null&&(_.bias=N),f!=null&&(_.preluActivationWeights=O);var V=[P,z];return L.runKernelFunc(function(G,te){var ce=G.fusedBatchMatMul({a:P,b:z,transposeA:i,transposeB:s,bias:N,activation:l,preluActivationWeights:O});return te([P,z,ce]),ce},_,function(G,te){var ce=te[0],se=te[1],ie=te[2],de=ns(G,ie,l),ve={};return u!=null&&(ve={bias:function(){return rs(N,de)}}),Object.assign(i||s?!i&&s?{a:function(){return de.matMul(se,!1,!1)},b:function(){return de.matMul(ce,!0,!1)}}:i&&!s?{a:function(){return se.matMul(de,!1,!0)},b:function(){return ce.matMul(de,!1,!1)}}:{a:function(){return se.matMul(de,!0,!0)},b:function(){return de.matMul(ce,!0,!0)}}:{a:function(){return de.matMul(se,!1,!0)},b:function(){return ce.matMul(de,!0,!1)}},ve)},"_FusedMatMul",{transposeA:i,transposeB:s,activation:l},V,[!0]).reshape(F)}}),Xg=Q({fusedConv2d_:function(r){var t=r.x,e=r.filter,n=r.strides,o=r.pad,i=r.dataFormat,a=i===void 0?"NHWC":i,s=r.dilations,u=s===void 0?[1,1]:s,c=r.dimRoundingMode,l=r.bias,f=r.activation,h=f===void 0?"linear":f,d=r.preluActivationWeights;if(h=h||"linear",ts(L.state.gradientDepth,h)===!1){var p=Yn(t,e,n,o,a,u,c);return l!=null&&(p=gt(p,l)),os(p,h,d)}var v=B(t,"x","conv2d"),g=B(e,"filter","conv2d"),A=v,w=!1;v.rank===3&&(w=!0,A=v.as4D(1,v.shape[0],v.shape[1],v.shape[2])),R(A.rank===4,function(){return"Error in fused conv2d: input must be rank 4, but got rank "+A.rank+"."}),R(g.rank===4,function(){return"Error in fused conv2d: filter must be rank 4, but got rank "+g.rank+"."}),c!=null&&R(He(o),function(){return"Error in fused conv2d: pad must be an integer when using, dimRoundingMode "+c+" but got pad "+o+"."}),R(A.shape[3]===g.shape[2],function(){return"Error in conv2d: depth of input ("+A.shape[3]+") must match input depth for filter "+g.shape[2]+"."}),R(Ln(n,u),function(){return"Error in conv2D: Either strides or dilations must be 1. Got strides "+n+" and dilations '"+u+"'"}),R(a==="NHWC",function(){return"Error in conv2d: got dataFormat of "+a+" but only NHWC is currently supported."});var E,x,C=Lr(A.shape,g.shape,n,u,o,c);l!=null&&(E=pt(E=B(l,"bias","fused conv2d"),v)[0],vt(C.outShape,E.shape)),d!=null&&(x=B(d,"prelu weights","fused conv2d"));var S={x:A,filter:g};l!=null&&(S.bias=E),d!=null&&(S.preluActivationWeights=x);var N=[g,A],O=L.runKernelFunc(function(F,P){var z=F.fusedConv2d({input:A,filter:g,convInfo:C,bias:E,activation:h,preluActivationWeights:x});return P([g,A,z]),z},S,function(F,P){var z=P,_=z[0],V=z[1],G=z[2],te=ns(F,G,h);R($r(u),function(){return"Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '"+u+"'"});var ce={};return l!=null&&(ce={bias:function(){return rs(E,te)}}),Object.assign({x:function(){return Al(V.shape,te,_,n,o)},filter:function(){return Ja(V,te,_.shape,n,o)}},ce)},"FusedConv2D",{convInfo:C,activation:h},N,[!0]);return w?O.as3D(O.shape[1],O.shape[2],O.shape[3]):O}}),Jg=Q({fusedDepthwiseConv2d_:function(r){var t=r.x,e=r.filter,n=r.strides,o=r.pad,i=r.dataFormat,a=i===void 0?"NHWC":i,s=r.dilations,u=s===void 0?[1,1]:s,c=r.dimRoundingMode,l=r.bias,f=r.activation,h=f===void 0?"linear":f,d=r.preluActivationWeights;if(ts(L.state.gradientDepth,h)===!1){var p=zi(t,e,n,o,a,u,c);return l!=null&&(p=gt(p,l)),os(p,h,d)}var v=B(t,"x","depthwiseConv2d"),g=B(e,"filter","depthwiseConv2d"),A=v,w=!1;v.rank===3&&(w=!0,A=v.as4D(1,v.shape[0],v.shape[1],v.shape[2])),R(A.rank===4,function(){return"Error in fused depthwiseConv2d: input must be rank 4, but got rank "+A.rank+"."}),R(g.rank===4,function(){return"Error in fused depthwiseConv2d: filter must be rank 4, but got rank "+g.rank+"."}),R(A.shape[3]===g.shape[2],function(){return"Error in fused depthwiseConv2d: number of input channels ("+A.shape[3]+") must match the inChannels dimension in filter "+g.shape[2]+"."}),u==null&&(u=[1,1]),R(Ln(n,u),function(){return"Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides "+n+" and dilations '"+u+"'"}),c!=null&&R(He(o),function(){return"Error in fused depthwiseConv2d: pad must be an integer when using dimRoundingMode "+c+" but got pad "+o+"."});var E,x,C=Lr(A.shape,g.shape,n,u,o,c,!0);l!=null&&(E=pt(E=B(l,"bias","fused conv2d"),v)[0],vt(C.outShape,E.shape)),d!=null&&(x=B(d,"prelu weights","fused depthwiseConv2d"));var S={x:A,filter:g};l!=null&&(S.bias=E),d!=null&&(S.preluActivationWeights=x);var N=[g,A],O=L.runKernelFunc(function(F,P){var z=F.fusedDepthwiseConv2D({input:A,filter:g,convInfo:C,bias:E,activation:h,preluActivationWeights:x});return P([g,A,z]),z},S,function(F,P){R($r(u),function(){return"Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '"+u+"'"});var z=P[0],_=P[1],V=P[2],G=ns(F,V,h),te={};return l!=null&&(te={bias:function(){return rs(E,G)}}),Object.assign({x:function(){return yl(_.shape,G,z,C)},filter:function(){return xl(_,G,z.shape,C)}},te)},"FusedDepthwiseConv2D",{convInfo:C,activation:h},N,[!0]);return w?O.as3D(O.shape[1],O.shape[2],O.shape[3]):O}}),Kg=Object.freeze({matMul:Gg,conv2d:Xg,depthwiseConv2d:Jg}),Zg=Object.freeze({image:es,linalg:Wg,losses:Ng,spectral:yg,fused:Kg,signal:Cg,square:Tp,squaredDifference:el,conv1d:Qv,conv2d:Yn,conv3d:_v,depthwiseConv2d:zi,separableConv2d:Ka,conv2dTranspose:zv,conv3dTranspose:Uv,op:Q,batchNormalization2d:av,batchNormalization3d:sv,batchNormalization4d:uv,batchNormalization:cv,batchNorm:al,batchNorm2d:lv,batchNorm3d:fv,batchNorm4d:hv,booleanMaskAsync:Wv,complex:kn,real:Zn,imag:fr,concat:mn,concat1d:mh,concat2d:Ah,concat3d:yh,concat4d:xh,split:Aa,matMul:Ui,dot:Hv,outerProduct:jv,reverse:Yo,reverse1d:Vv,reverse2d:Gv,reverse3d:Xv,reverse4d:Jv,maxPool:wn,avgPool:$o,pool:Kv,maxPool3d:Zv,avgPool3d:qv,slice:dr,slice1d:Yv,slice2d:$v,slice3d:El,slice4d:eg,abs:Dp,acos:Fp,acosh:Pp,asin:Np,asinh:Op,atan:Mp,atanh:Lp,ceil:Wp,clipByValue:Ha,cos:Qp,cosh:_p,erf:zp,exp:ja,expm1:Up,floor:Hp,log:jp,log1p:Vp,logSigmoid:Gp,neg:Mi,reciprocal:Xp,round:Jp,rsqrt:tl,sigmoid:nl,sign:Kp,isNaN:Zp,isInf:qp,isFinite:Yp,sin:$p,sinh:ev,softplus:tv,sqrt:nv,step:rv,tan:ov,tanh:iv,all:tg,any:ng,argMax:rg,argMin:og,logSumExp:ig,max:Hi,mean:ag,min:sg,moments:ug,sum:Il,prod:cg,equal:fl,equalStrict:Bv,greater:kv,greaterEqual:hl,greaterEqualStrict:Tv,greaterStrict:Dv,less:Fv,lessEqual:Pv,lessEqualStrict:Nv,lessStrict:Ov,notEqual:Mv,notEqualStrict:Lv,add:gt,addN:vv,addStrict:gv,atan2:mv,div:ir,divNoNan:Av,divStrict:yv,floorDiv:cl,maximum:Va,maximumStrict:xv,minimum:ll,minimumStrict:bv,mod:wv,modStrict:Ev,mul:Fn,mulStrict:Cv,pow:_i,powStrict:Iv,squaredDifferenceStrict:Sv,sub:yn,subStrict:Rv,elu:Sl,leakyRelu:lg,prelu:Rl,relu:rn,relu6:Bl,selu:fg,logicalAnd:Qi,logicalNot:dv,logicalOr:sl,logicalXor:pv,where:no,whereAsync:ul,buffer:it,print:kh,batchToSpaceND:Uu,broadcastTo:Th,cast:Dh,clone:Fh,cumsum:Ph,depthToSpace:Nh,expandDims:qn,eye:Hu,multinomial:Oh,oneHot:xa,pad:Yr,pad1d:Mh,pad2d:Lh,pad3d:Wh,pad4d:Qh,rand:_h,randomNormal:zh,randomGamma:Uh,randomUniform:ju,reshape:rr,spaceToBatchND:Vu,squeeze:Gu,stack:jn,tile:vo,truncatedNormal:Hh,unstack:An,setdiff1dAsync:jh,fill:hr,linspace:gh,ones:po,range:xi,scalar:Te,tensor:Tn,tensor1d:pn,tensor2d:Mr,tensor3d:ma,tensor4d:_n,tensor5d:dh,tensor6d:ph,variable:vh,zeros:tn,onesLike:zu,zerosLike:Tt,transpose:Wr,softmax:Cr,logSoftmax:Gh,localResponseNormalization:hg,norm:kl,gather:Ga,unsortedSegmentSum:vl,basicLSTMCell:dg,multiRNNCell:pg,movingAverage:vg,stridedSlice:gg,topk:mg,scatterND:Ag,fft:Za,ifft:ji,rfft:qa,irfft:Tl,sparseToDense:xg,gatherND:bg,diag:wg,dropout:Eg,hannWindow:Ya,hammingWindow:Fl,frame:$a,stft:Pl,inTopKAsync:Ig});function he(r,t){Array.isArray(r)||(r=[r]),r.forEach(function(e){e!=null&&R(e.dtype!=="complex64",function(){return t+" does not support complex64 tensors."})})}function is(r,t,e,n){if(e==="linear")return r.linear(t);if(e==="relu")return r.relu(t);if(e==="elu")return r.elu(t);if(e==="relu6")return r.relu6(t);if(e==="prelu")return r.prelu(t,n);throw new Error("Activation "+e+" has not been implemented for the CPU backend.")}var qg=function(r){function t(){var e=r.call(this)||this;return e.blockSize=48,e.firstUse=!0,e.data=new ec(e,L),e}return De(t,r),t.prototype.write=function(e,n,o){this.firstUse&&(this.firstUse=!1,J().get("IS_NODE")&&Ai(`
|
|
============================
|
|
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.
|
|
============================`));var i={};return this.data.set(i,{values:e,dtype:o}),i},t.prototype.move=function(e,n,o,i){this.data.set(e,{values:n,dtype:i})},t.prototype.numDataIds=function(){return this.data.numDataIds()},t.prototype.read=function(e){return xe(this,void 0,void 0,function(){return Ie(this,function(n){return[2,this.readSync(e)]})})},t.prototype.readSync=function(e){var n=this.data.get(e),o=n.dtype,i=n.complexTensors;return o==="complex64"?Ta(this.readSync(i.real.dataId),this.readSync(i.imag.dataId)):this.data.get(e).values},t.prototype.bufferSync=function(e){var n=this.readSync(e.dataId),o=n;if(e.dtype==="string")try{o=n.map(function(i){return Me(i)})}catch(i){throw new Error("Failed to decode encoded string bytes into utf-8")}return it(e.shape,e.dtype,o)},t.prototype.makeOutput=function(e,n,o){var i=this.write(e,n,o);return L.makeTensorFromDataId(i,n,o,this)},t.prototype.disposeData=function(e){if(this.data.has(e)){var n=this.data.get(e).complexTensors;n!=null&&(n.real.dispose(),n.imag.dispose()),this.data.delete(e)}},t.prototype.time=function(e){return xe(this,void 0,void 0,function(){var n;return Ie(this,function(o){return n=$(),e(),[2,{kernelMs:$()-n}]})})},t.prototype.memory=function(){return{unreliable:!0,reasons:["The reported memory is an upper bound. Due to automatic garbage collection, the true allocated memory may be less."]}},t.prototype.complex=function(e,n){var o=this.makeOutput(null,e.shape,"complex64");return this.data.get(o.dataId).complexTensors={real:L.keep(e.clone()),imag:L.keep(n.clone())},o},t.prototype.real=function(e){return this.data.get(e.dataId).complexTensors.real.clone()},t.prototype.imag=function(e){return this.data.get(e.dataId).complexTensors.imag.clone()},t.prototype.slice=function(e,n,o){if(he(e,"slice"),Ca(e.shape,n,o)){var i=Ia(n,e.strides),a=Re(o);return Tn(this.readSync(e.dataId).subarray(i,i+a),o,e.dtype)}for(var s=it(o,e.dtype),u=this.bufferSync(e),c=0;c<s.size;++c){var l=s.indexToLoc(c).map(function(f,h){return f+n[h]});s.values[c]=u.get.apply(u,l)}return s.toTensor()},t.prototype.stridedSlice=function(e,n,o,i){he(e,"stridedSlice");var a=Si(n,o,i);if(a.some(function(d){return d===0}))return Tn([],a);for(var s=it(a,e.dtype),u=this.bufferSync(e),c=0;c<s.size;c++){for(var l=s.indexToLoc(c),f=new Array(l.length),h=0;h<f.length;h++)f[h]=l[h]*i[h]+n[h];s.set.apply(s,[u.get.apply(u,f)].concat(l))}return s.toTensor()},t.prototype.diag=function(e){for(var n=this.readSync(e.dataId),o=it([e.size,e.size],e.dtype),i=o.values,a=0;a<n.length;a++)i[a*e.size+a]=n[a];return o.toTensor()},t.prototype.unstack=function(e,n){for(var o=e.shape[n],i=new Array(e.rank-1),a=0,s=0;s<e.rank;s++)s!==n&&(i[a++]=e.shape[s]);var u=new Array(e.rank).fill(0),c=e.shape.slice();c[n]=1;var l=new Array(o);for(s=0;s<l.length;s++)u[n]=s,l[s]=this.slice(e,u,c).reshape(i);return l},t.prototype.reverse=function(e,n){he(e,"reverse");for(var o=it(e.shape,e.dtype),i=this.bufferSync(e),a=function(u){var c=o.indexToLoc(u),l=c.slice();n.forEach(function(f){return l[f]=e.shape[f]-1-l[f]}),o.set.apply(o,[i.get.apply(i,l)].concat(c))},s=0;s<o.size;s++)a(s);return o.toTensor()},t.prototype.concat=function(e,n){var o=this;if(e[0].dtype==="complex64"){var i=e.map(function(d){return Zn(d)}),a=e.map(function(d){return fr(d)});return kn(this.concat(i,n),this.concat(a,n))}var s=e.map(function(d){var p=Re(d.shape.slice(n));return d.as2D(-1,p)}),u=Kr(s.map(function(d){return d.shape}),1),c=it(u,e[0].dtype).values;if(s[0].shape[0]===1){var l=0;s.forEach(function(d){c.set(o.readSync(d.dataId),l),l+=d.size})}else{var f=0;s.forEach(function(d){for(var p=o.readSync(d.dataId),v=0,g=0;g<d.shape[0];++g)for(var A=g*u[1]+f,w=0;w<d.shape[1];++w)c[A+w]=p[v++];f+=d.shape[1]})}var h=Kr(e.map(function(d){return d.shape}),n);return Tn(c,h,e[0].dtype)},t.prototype.neg=function(e){return he(e,"neg"),this.multiply(Te(-1),e)},t.prototype.add=function(e,n){return e.dtype==="complex64"||n.dtype==="complex64"?this.broadcastedBinaryComplexOp(e.cast("complex64"),n.cast("complex64"),function(o,i,a,s){return{real:o+a,imag:i+s}}):this.broadcastedBinaryOp(e,n,Mt(e.dtype,n.dtype),function(o,i){return o+i})},t.prototype.addN=function(e){var n=this;he(e,"addN");for(var o=e.map(function(l){return n.readSync(l.dataId)}),i=it(e[0].shape,e[0].dtype),a=i.values,s=0;s<e.length;s++)for(var u=o[s],c=0;c<a.length;c++)a[c]+=u[c];return i.toTensor()},t.prototype.softmax=function(e,n){var o=ht([n],e.shape),i=this.max(e,o),a=Mn(i.shape,o),s=this.subtract(e,i.reshape(a)),u=this.exp(s),c=this.sum(u,o).reshape(a);return this.realDivide(u,c)},t.prototype.subtract=function(e,n){return e.dtype==="complex64"||n.dtype==="complex64"?this.broadcastedBinaryComplexOp(e.cast("complex64"),n.cast("complex64"),function(o,i,a,s){return{real:o-a,imag:i-s}}):this.broadcastedBinaryOp(e,n,Mt(e.dtype,n.dtype),function(o,i){return o-i})},t.prototype.pow=function(e,n){return he([e,n],"pow"),this.broadcastedBinaryOp(e,n,e.dtype,function(o,i){return Math.pow(o,i)})},t.prototype.batchMatMul=function(e,n,o,i){he([e,n],"matMul");for(var a=o?e.shape[1]:e.shape[2],s=o?e.shape[2]:e.shape[1],u=i?n.shape[1]:n.shape[2],c=e.shape[0],l=this.readSync(e.dataId),f=this.readSync(n.dataId),h=o?[e.strides[0],1,e.strides[1]]:[e.strides[0],e.strides[1],1],d=h[0],p=h[1],v=h[2],g=i?[1,n.strides[1],n.strides[0]]:[n.strides[1],1,n.strides[0]],A=g[0],w=g[1],E=g[2],x=s*u,C=it([c,s,u],e.dtype),S=C.values,N=this.blockSize,O=0;O<c;O++)for(var F=0;F<s;F+=N)for(var P=0;P<u;P+=N)for(var z=0;z<a;z+=N)for(var _=Math.min(F+N,s),V=Math.min(P+N,u),G=Math.min(z+N,a),te=F;te<_;te++)for(var ce=P;ce<V;ce++){for(var se=0,ie=z;ie<G;ie++)se+=l[O*d+te*p+ie*v]*f[ie*A+ce*w+O*E];S[O*x+(te*u+ce)]+=se}return C.toTensor()},t.prototype.fusedBatchMatMul=function(e){var n=e.a,o=e.b,i=e.transposeA,a=e.transposeB,s=e.bias,u=e.activation,c=e.preluActivationWeights,l=this.batchMatMul(n,o,i,a);return s&&(l=this.add(l,s)),u&&(l=is(this,l,u,c)),l},t.prototype.multiply=function(e,n){return e.dtype==="complex64"||n.dtype==="complex64"?this.broadcastedBinaryComplexOp(e.cast("complex64"),n.cast("complex64"),function(o,i,a,s){return{real:o*a-i*s,imag:o*s+i*a}}):this.broadcastedBinaryOp(e,n,Mt(e.dtype,n.dtype),function(o,i){return o*i})},t.prototype.realDivide=function(e,n){return he([e,n],"realDivide"),this.broadcastedBinaryOp(e,n,"float32",function(o,i){return o/i})},t.prototype.floorDiv=function(e,n){return he([e,n],"floorDiv"),this.broadcastedBinaryOp(e,n,"int32",function(o,i){return Math.floor(o/i)})},t.prototype.sum=function(e,n){he(e,"sum"),Qn("sum",n,e.rank);for(var o=Bn(e.shape,n),i=o[0],a=o[1],s=tn(i,Mt(e.dtype,"int32")),u=Re(a),c=this.readSync(s.dataId),l=this.readSync(e.dataId),f=0;f<c.length;++f){for(var h=f*u,d=0,p=0;p<u;++p)d+=l[h+p];c[f]=d}return s},t.prototype.prod=function(e,n){he(e,"sum");for(var o=Bn(e.shape,n),i=o[0],a=o[1],s=tn(i,Mt(e.dtype,"int32")),u=Re(a),c=this.readSync(s.dataId),l=this.readSync(e.dataId),f=0;f<c.length;++f){for(var h=f*u,d=1,p=0;p<u;++p)d*=l[h+p];c[f]=d}return s},t.prototype.unsortedSegmentSum=function(e,n,o){he(e,"unsortedSegmentSum");for(var i=[],a=e.rank-n.rank,s=0;s<a;++s)n=n.expandDims(s+1);for(s=0;s<o;++s){var u=Te(s,"int32"),c=fl(u,n).asType("float32").mul(e).sum(0);i.push(c)}return jn(i)},t.prototype.argMin=function(e,n){he(e,"argMin");var o=[n];Qn("argMin",o,e.rank);for(var i=Bn(e.shape,o),a=i[0],s=i[1],u=tn(a,"int32"),c=Re(s),l=this.readSync(u.dataId),f=this.readSync(e.dataId),h=0;h<l.length;++h){for(var d=h*c,p=f[d],v=0,g=0;g<c;++g){var A=f[d+g];A<p&&(p=A,v=g)}l[h]=v}return u},t.prototype.argMax=function(e,n){he(e,"argMax");var o=[n];Qn("argMax",o,e.rank);for(var i=Bn(e.shape,o),a=i[0],s=i[1],u=tn(a,"int32"),c=Re(s),l=this.readSync(u.dataId),f=this.readSync(e.dataId),h=0;h<l.length;++h){for(var d=h*c,p=f[d],v=0,g=0;g<c;++g){var A=f[d+g];A>p&&(p=A,v=g)}l[h]=v}return u},t.prototype.cumsum=function(e,n,o,i){if(he(e,"cumsum"),n!==e.rank-1)throw new Error("backend.cumsum in CPU expects an inner-most axis="+(e.rank-1)+" but got axis="+n);for(var a=Mt(e.dtype,"int32"),s=tn(e.shape,a),u=this.readSync(s.dataId),c=this.readSync(e.dataId),l=e.shape[e.rank-1],f=i?function(g,A){return g+l-A-1}:function(g,A){return g+A},h=0;h<c.length;h+=l)for(var d=0;d<l;d++){var p=f(h,d);if(d===0)u[p]=o?0:c[p];else{var v=f(h,d-1);u[p]=o?c[v]+u[v]:c[p]+u[v]}}return s},t.prototype.equal=function(e,n){return he([e,n],"equal"),this.broadcastedBinaryOp(e,n,"bool",function(o,i){return o===i?1:0})},t.prototype.notEqual=function(e,n){return he([e,n],"notEqual"),this.broadcastedBinaryOp(e,n,"bool",function(o,i){return o!==i?1:0})},t.prototype.less=function(e,n){return he([e,n],"less"),this.broadcastedBinaryOp(e,n,"bool",function(o,i){return o<i?1:0})},t.prototype.lessEqual=function(e,n){return he([e,n],"lessEqual"),this.broadcastedBinaryOp(e,n,"bool",function(o,i){return o<=i?1:0})},t.prototype.greater=function(e,n){return he([e,n],"greater"),this.broadcastedBinaryOp(e,n,"bool",function(o,i){return o>i?1:0})},t.prototype.greaterEqual=function(e,n){return he([e,n],"greaterEqual"),this.broadcastedBinaryOp(e,n,"bool",function(o,i){return o>=i?1:0})},t.prototype.logicalNot=function(e){he(e,"logicalNot");for(var n=this.readSync(e.dataId),o=new Uint8Array(n.length),i=0;i<n.length;++i)o[i]=n[i]?0:1;return this.makeOutput(o,e.shape,"bool")},t.prototype.logicalAnd=function(e,n){return he([e,n],"logicalAnd"),this.broadcastedBinaryOp(e,n,"bool",function(o,i){return o&&i})},t.prototype.logicalOr=function(e,n){return he([e,n],"logicalOr"),this.broadcastedBinaryOp(e,n,"bool",function(o,i){return o||i})},t.prototype.select=function(e,n,o){he([e,n,o],"select");for(var i=this.readSync(e.dataId),a=this.readSync(n.dataId),s=this.readSync(o.dataId),u=tn(n.shape,Mt(n.dtype,o.dtype)),c=this.readSync(u.dataId),l=0,f=e.rank===0||e.rank>1||n.rank===1?1:Re(n.shape.slice(1)),h=0;h<i.length;h++)for(var d=0;d<f;d++)i[h]===1?c[l++]=a[h]:c[l++]=s[h];return u},t.prototype.where=function(e){he([e],"where");var n=this.readSync(e.dataId);return Pa(e.shape,n)},t.prototype.topk=function(e,n,o){return he(e,"topk"),sc(this.readSync(e.dataId),e.shape,e.dtype,n)},t.prototype.min=function(e,n){he(e,"min"),Qn("min",n,e.rank);for(var o=Bn(e.shape,n),i=o[0],a=o[1],s=tn(i,e.dtype),u=Re(a),c=this.readSync(s.dataId),l=this.readSync(e.dataId),f=0;f<c.length;++f){for(var h=f*u,d=l[h],p=0;p<u;++p){var v=l[h+p];v<d&&(d=v)}c[f]=d}return s},t.prototype.minimum=function(e,n){return he([e,n],"minimum"),this.broadcastedBinaryOp(e,n,e.dtype,function(o,i){return Math.min(o,i)})},t.prototype.mod=function(e,n){return he([e,n],"mod"),this.broadcastedBinaryOp(e,n,e.dtype,function(o,i){var a=o%i;return o<0&&i<0||o>=0&&i>=0?a:(a+i)%i})},t.prototype.max=function(e,n){he(e,"max"),Qn("max",n,e.rank);for(var o=Bn(e.shape,n),i=o[0],a=o[1],s=tn(i,e.dtype),u=Re(a),c=this.readSync(s.dataId),l=this.readSync(e.dataId),f=0;f<c.length;++f){for(var h=f*u,d=l[h],p=0;p<u;++p){var v=l[h+p];v>d&&(d=v)}c[f]=d}return s},t.prototype.maximum=function(e,n){return he([e,n],"maximum"),this.broadcastedBinaryOp(e,n,e.dtype,function(o,i){return Math.max(o,i)})},t.prototype.all=function(e,n){he(e,"all"),Qn("all",n,e.rank);for(var o=Bn(e.shape,n),i=o[0],a=o[1],s=tn(i,e.dtype),u=Re(a),c=this.readSync(s.dataId),l=this.readSync(e.dataId),f=0;f<c.length;++f){for(var h=f*u,d=l[h],p=0;p<u;++p){var v=l[h+p];d=d&&v}c[f]=d}return s},t.prototype.any=function(e,n){he(e,"any"),Qn("any",n,e.rank);for(var o=Bn(e.shape,n),i=o[0],a=o[1],s=tn(i,e.dtype),u=Re(a),c=this.readSync(s.dataId),l=this.readSync(e.dataId),f=0;f<c.length;++f){for(var h=f*u,d=l[h],p=0;p<u;++p){var v=l[h+p];d=d||v}c[f]=d}return s},t.prototype.squaredDifference=function(e,n){return he([e,n],"squaredDifference"),this.broadcastedBinaryOp(e,n,e.dtype,function(o,i){var a=o-i;return a*a})},t.prototype.ceil=function(e){he(e,"ceil");for(var n=this.readSync(e.dataId),o=new Float32Array(n.length),i=0;i<n.length;++i)o[i]=Math.ceil(n[i]);return this.makeOutput(o,e.shape,"float32")},t.prototype.floor=function(e){he(e,"floor");for(var n=this.readSync(e.dataId),o=new Float32Array(n.length),i=0;i<n.length;++i)o[i]=Math.floor(n[i]);return this.makeOutput(o,e.shape,"float32")},t.prototype.sign=function(e){he(e,"x");for(var n=this.readSync(e.dataId),o=new Float32Array(n.length),i=0;i<n.length;++i)n[i]<0?o[i]=-1:n[i]>0?o[i]=1:o[i]=0;return this.makeOutput(o,e.shape,"float32")},t.prototype.isNaN=function(e){he(e,"x");for(var n=this.readSync(e.dataId),o=new Uint8Array(n.length),i=0;i<n.length;++i)Number.isNaN(n[i])&&(o[i]=1);return this.makeOutput(o,e.shape,"bool")},t.prototype.isInf=function(e){he(e,"x");for(var n=this.readSync(e.dataId),o=new Uint8Array(n.length),i=0;i<n.length;++i)Math.abs(n[i])===1/0&&(o[i]=1);return this.makeOutput(o,e.shape,"bool")},t.prototype.isFinite=function(e){he(e,"x");for(var n=this.readSync(e.dataId),o=new Uint8Array(n.length),i=0;i<n.length;++i)Number.isFinite(n[i])&&(o[i]=1);return this.makeOutput(o,e.shape,"bool")},t.prototype.round=function(e){he(e,"round");for(var n=this.readSync(e.dataId),o=new Float32Array(n.length),i=0;i<n.length;++i){var a=Math.floor(n[i]);n[i]-a<.5?o[i]=Math.floor(n[i]):n[i]-a>.5?o[i]=Math.ceil(n[i]):o[i]=a%2==0?a:a+1}return this.makeOutput(o,e.shape,"float32")},t.prototype.exp=function(e){he(e,"exp");for(var n=this.readSync(e.dataId),o=new Float32Array(n.length),i=0;i<n.length;++i)o[i]=Math.exp(n[i]);return this.makeOutput(o,e.shape,"float32")},t.prototype.expm1=function(e){he(e,"expm1");for(var n=this.readSync(e.dataId),o=new Float32Array(n.length),i=0;i<n.length;++i)o[i]=Math.expm1(n[i]);return this.makeOutput(o,e.shape,"float32")},t.prototype.log=function(e){he(e,"log");for(var n=this.readSync(e.dataId),o=new Float32Array(n.length),i=0;i<n.length;++i){var a=n[i];o[i]=Math.log(a)}return this.makeOutput(o,e.shape,"float32")},t.prototype.log1p=function(e){he(e,"log1p");for(var n=this.readSync(e.dataId),o=new Float32Array(n.length),i=0;i<n.length;++i){var a=n[i];o[i]=Math.log1p(a)}return this.makeOutput(o,e.shape,"float32")},t.prototype.sqrt=function(e){he(e,"sqrt");for(var n=this.readSync(e.dataId),o=new Float32Array(n.length),i=0;i<n.length;++i){var a=n[i];o[i]=Math.sqrt(a)}return this.makeOutput(o,e.shape,"float32")},t.prototype.rsqrt=function(e){he(e,"rsqrt");for(var n=this.readSync(e.dataId),o=new Float32Array(n.length),i=0;i<n.length;++i){var a=n[i];o[i]=1/Math.sqrt(a)}return this.makeOutput(o,e.shape,"float32")},t.prototype.reciprocal=function(e){he(e,"reciprocal");for(var n=this.readSync(e.dataId),o=new Float32Array(n.length),i=0;i<n.length;++i)o[i]=1/n[i];return this.makeOutput(o,e.shape,"float32")},t.prototype.linear=function(e){return e},t.prototype.relu=function(e){he(e,"relu");for(var n=tn(e.shape,e.dtype),o=this.readSync(n.dataId),i=this.readSync(e.dataId),a=0;a<i.length;++a)o[a]=Math.max(0,i[a]);return n},t.prototype.relu6=function(e){he(e,"relu");for(var n=tn(e.shape,e.dtype),o=this.readSync(n.dataId),i=this.readSync(e.dataId),a=0;a<i.length;++a)o[a]=Math.min(Math.max(0,i[a]),6);return n},t.prototype.prelu=function(e,n){return he([e,n],"prelu"),this.broadcastedBinaryOp(e,n,e.dtype,function(o,i){return o<0?i*o:o})},t.prototype.elu=function(e){he(e,"elu");for(var n=new Float32Array(e.size),o=this.readSync(e.dataId),i=0;i<o.length;++i){var a=o[i];n[i]=a>=0?a:Math.exp(a)-1}return this.makeOutput(n,e.shape,"float32")},t.prototype.eluDer=function(e,n){he([e,n],"eluDer");for(var o=new Float32Array(n.size),i=this.readSync(n.dataId),a=this.readSync(e.dataId),s=0;s<i.length;++s){var u=i[s];o[s]=u>=1?a[s]:a[s]*(u+1)}return this.makeOutput(o,n.shape,"float32")},t.prototype.selu=function(e){he(e,"selu");for(var n=za,o=Ua,i=new Float32Array(e.size),a=this.readSync(e.dataId),s=0;s<a.length;++s){var u=a[s];i[s]=u>=0?o*u:n*(Math.exp(u)-1)}return this.makeOutput(i,e.shape,"float32")},t.prototype.clip=function(e,n,o){he(e,"clip");for(var i=new Float32Array(e.size),a=this.readSync(e.dataId),s=0;s<a.length;++s){var u=a[s];i[s]=u>o?o:u<n?n:u}return this.makeOutput(i,e.shape,"float32")},t.prototype.abs=function(e){for(var n=new Float32Array(e.size),o=this.readSync(e.dataId),i=0;i<o.length;++i)n[i]=Math.abs(o[i]);return this.makeOutput(n,e.shape,"float32")},t.prototype.complexAbs=function(e){for(var n=new Float32Array(e.size),o=this.readSync(e.dataId),i=0;i<e.size;++i){var a=o[2*i],s=o[2*i+1];n[i]=Math.hypot(a,s)}return this.makeOutput(n,e.shape,"float32")},t.prototype.int=function(e){he(e,"int");for(var n=new Int32Array(e.size),o=this.readSync(e.dataId),i=0;i<o.length;++i)n[i]=o[i];return this.makeOutput(n,e.shape,"int32")},t.prototype.sigmoid=function(e){he(e,"sigmoid");for(var n=new Float32Array(e.size),o=this.readSync(e.dataId),i=0;i<o.length;++i)n[i]=1/(1+Math.exp(-o[i]));return this.makeOutput(n,e.shape,"float32")},t.prototype.softplus=function(e){he(e,"softplus");for(var n=Math.log(11920928955078125e-23)+2,o=new Float32Array(e.size),i=this.readSync(e.dataId),a=0;a<i.length;++a){var s=i[a]>-n,u=i[a]<n,c=Math.exp(i[a]),l=void 0;l=u?c:s?i[a]:Math.log(1+c),o[a]=l}return this.makeOutput(o,e.shape,"float32")},t.prototype.sin=function(e){he(e,"sin");for(var n=new Float32Array(e.size),o=this.readSync(e.dataId),i=0;i<o.length;++i)n[i]=Math.sin(o[i]);return this.makeOutput(n,e.shape,"float32")},t.prototype.cos=function(e){he(e,"cos");for(var n=new Float32Array(e.size),o=this.readSync(e.dataId),i=0;i<o.length;++i)n[i]=Math.cos(o[i]);return this.makeOutput(n,e.shape,"float32")},t.prototype.tan=function(e){he(e,"tan");for(var n=new Float32Array(e.size),o=this.readSync(e.dataId),i=0;i<o.length;++i)n[i]=Math.tan(o[i]);return this.makeOutput(n,e.shape,"float32")},t.prototype.asin=function(e){he(e,"asin");for(var n=new Float32Array(e.size),o=this.readSync(e.dataId),i=0;i<o.length;++i)n[i]=Math.asin(o[i]);return this.makeOutput(n,e.shape,"float32")},t.prototype.acos=function(e){he(e,"acos");for(var n=new Float32Array(e.size),o=this.readSync(e.dataId),i=0;i<o.length;++i)n[i]=Math.acos(o[i]);return this.makeOutput(n,e.shape,"float32")},t.prototype.atan=function(e){he(e,"atan");for(var n=new Float32Array(e.size),o=this.readSync(e.dataId),i=0;i<o.length;++i)n[i]=Math.atan(o[i]);return this.makeOutput(n,e.shape,"float32")},t.prototype.atan2=function(e,n){return he([e,n],"atan2"),this.broadcastedBinaryOp(e,n,e.dtype,function(o,i){return Math.atan2(o,i)})},t.prototype.sinh=function(e){he(e,"sinh");for(var n=new Float32Array(e.size),o=this.readSync(e.dataId),i=0;i<o.length;++i)n[i]=Math.sinh(o[i]);return this.makeOutput(n,e.shape,"float32")},t.prototype.cosh=function(e){he(e,"cosh");for(var n=new Float32Array(e.size),o=this.readSync(e.dataId),i=0;i<o.length;++i)n[i]=Math.cosh(o[i]);return this.makeOutput(n,e.shape,"float32")},t.prototype.tanh=function(e){he(e,"tanh");for(var n=new Float32Array(e.size),o=this.readSync(e.dataId),i=0;i<o.length;++i)n[i]=Ft(o[i]);return this.makeOutput(n,e.shape,"float32")},t.prototype.asinh=function(e){he(e,"asinh");for(var n=new Float32Array(e.size),o=this.readSync(e.dataId),i=0;i<o.length;++i)n[i]=Math.asinh(o[i]);return this.makeOutput(n,e.shape,"float32")},t.prototype.acosh=function(e){he(e,"acosh");for(var n=new Float32Array(e.size),o=this.readSync(e.dataId),i=0;i<o.length;++i)n[i]=Math.acosh(o[i]);return this.makeOutput(n,e.shape,"float32")},t.prototype.atanh=function(e){he(e,"atanh");for(var n=new Float32Array(e.size),o=this.readSync(e.dataId),i=0;i<o.length;++i)n[i]=Math.atanh(o[i]);return this.makeOutput(n,e.shape,"float32")},t.prototype.erf=function(e){he(e,"erf");for(var n=new Float32Array(e.size),o=this.readSync(e.dataId),i=0;i<o.length;++i){var a=Math.sign(o[i]),s=Math.abs(o[i]),u=1/(1+.3275911*s);n[i]=a*(1-((((1.061405429*u-1.453152027)*u+1.421413741)*u-.284496736)*u+.254829592)*u*Math.exp(-s*s))}return this.makeOutput(n,e.shape,"float32")},t.prototype.step=function(e,n){n===void 0&&(n=0),he(e,"step");for(var o=new Float32Array(e.size),i=this.readSync(e.dataId),a=0;a<i.length;++a){var s=i[a];isNaN(s)?o[a]=NaN:o[a]=s>0?1:n}return this.makeOutput(o,e.shape,"float32")},t.prototype.fusedConv2d=function(e){var n=e.input,o=e.filter,i=e.convInfo,a=e.bias,s=e.activation,u=e.preluActivationWeights,c=this.conv2d(n,o,i);return a&&(c=this.add(c,a)),s&&(c=is(this,c,s,u)),c},t.prototype.conv2d=function(e,n,o){he([e,n],"conv2d");for(var i=o.filterHeight,a=o.filterWidth,s=o.dilationHeight,u=o.dilationWidth,c=o.padInfo.left,l=o.padInfo.top,f=o.dataFormat==="channelsLast",h=it(o.outShape,e.dtype),d=e.strides[0],p=f?e.strides[1]:e.strides[2],v=f?e.strides[2]:1,g=f?1:e.strides[1],A=h.strides[0],w=f?h.strides[1]:h.strides[2],E=f?h.strides[2]:1,x=f?1:h.strides[1],C=this.readSync(e.dataId),S=this.readSync(n.dataId),N=h.values,O=0;O<o.batchSize;++O)for(var F=O*d,P=O*A,z=0;z<o.outHeight;++z)for(var _=P+z*w,V=z*o.strideHeight-l,G=0;G<i;G++){var te=V+G*s;if(!(te<0||te>=o.inHeight))for(var ce=G*n.strides[0],se=F+te*p,ie=0;ie<o.outWidth;++ie)for(var de=_+ie*E,ve=ie*o.strideWidth-c,ye=0;ye<a;ye++){var Be=ve+ye*u;if(!(Be<0||Be>=o.inWidth))for(var Pe=se+Be*v,et=ce+ye*n.strides[1],Ye=0;Ye<o.inChannels;++Ye){for(var st=C[Pe+Ye*g],yt=0;yt<o.outChannels;++yt)N[de+yt*x]+=st*S[et+yt];et+=o.outChannels}}}return h.toTensor()},t.prototype.conv3d=function(e,n,o){for(var i=o.filterDepth,a=o.filterHeight,s=o.filterWidth,u=o.dilationDepth,c=o.dilationHeight,l=o.dilationWidth,f=o.padInfo.front,h=o.padInfo.left,d=o.padInfo.top,p=it(o.outShape,e.dtype),v=this.readSync(e.dataId),g=this.readSync(n.dataId),A=p.values,w=0;w<o.batchSize;++w)for(var E=w*e.strides[0],x=w*p.strides[0],C=0;C<o.outDepth;++C)for(var S=x+C*p.strides[1],N=C*o.strideDepth-f,O=0;O<i;O++){var F=N+O*u;if(!(F<0||F>=o.inDepth))for(var P=O*n.strides[0],z=E+F*e.strides[1],_=0;_<o.outHeight;++_)for(var V=S+_*p.strides[2],G=_*o.strideHeight-d,te=0;te<a;te++){var ce=G+te*c;if(!(ce<0||ce>=o.inHeight))for(var se=P+te*n.strides[1],ie=z+ce*e.strides[2],de=0;de<o.outWidth;++de)for(var ve=V+de*o.outChannels,ye=de*o.strideWidth-h,Be=0;Be<s;Be++){var Pe=ye+Be*l;if(!(Pe<0||Pe>=o.inWidth))for(var et=se+Be*n.strides[2],Ye=ie+Pe*o.inChannels,st=et,yt=0;yt<o.inChannels;++yt){for(var St=v[Ye+yt],Dt=0;Dt<o.outChannels;++Dt)A[ve+Dt]+=St*g[st+Dt];st+=o.outChannels}}}}return p.toTensor()},t.prototype.conv2dDerInput=function(e,n,o){he([e,n],"conv2dDerInput");for(var i=it(o.inShape,"float32"),a=i.values,s=this.readSync(e.dataId),u=this.readSync(n.dataId),c=n.strides,l=c[0],f=c[1],h=c[2],d=o.batchSize,p=o.filterHeight,v=o.filterWidth,g=o.inChannels,A=o.inHeight,w=o.inWidth,E=o.outChannels,x=o.outHeight,C=o.outWidth,S=o.strideHeight,N=o.strideWidth,O=o.dataFormat,F=p-1-o.padInfo.top,P=v-1-o.padInfo.left,z=O==="channelsLast",_=i.strides[0],V=z?i.strides[1]:i.strides[2],G=z?i.strides[2]:1,te=z?1:i.strides[1],ce=e.strides[0],se=z?e.strides[1]:e.strides[2],ie=z?e.strides[2]:1,de=z?1:e.strides[1],ve=0;ve<d;++ve)for(var ye=0;ye<g;++ye)for(var Be=0;Be<A;++Be)for(var Pe=Be-F,et=Math.max(0,Math.ceil(Pe/S)),Ye=Math.min(x,(p+Pe)/S),st=0;st<w;++st){for(var yt=st-P,St=Math.max(0,Math.ceil(yt/N)),Dt=Math.min(C,(v+yt)/N),fn=0,Rt=et;Rt<Ye;++Rt)for(var Jt=Rt*S-Pe,Wt=St;Wt<Dt;++Wt)for(var un=ce*ve+se*Rt+ie*Wt,on=l*(p-1-Jt)+f*(v-1-(Wt*N-yt))+h*ye,an=0;an<E;++an)fn+=s[un+de*an]*u[on+an];a[_*ve+V*Be+G*st+te*ye]=fn}return i.toTensor()},t.prototype.conv3dDerInput=function(e,n,o){for(var i=it(o.inShape,"float32"),a=i.values,s=i.strides,u=s[0],c=s[1],l=s[2],f=s[3],h=this.readSync(e.dataId),d=e.strides,p=d[0],v=d[1],g=d[2],A=d[3],w=this.readSync(n.dataId),E=n.strides,x=E[0],C=E[1],S=E[2],N=E[3],O=o.batchSize,F=o.filterDepth,P=o.filterHeight,z=o.filterWidth,_=o.inChannels,V=o.inDepth,G=o.inHeight,te=o.inWidth,ce=o.outChannels,se=o.outDepth,ie=o.outHeight,de=o.outWidth,ve=o.strideDepth,ye=o.strideHeight,Be=o.strideWidth,Pe=F-1-o.padInfo.front,et=P-1-o.padInfo.top,Ye=z-1-o.padInfo.left,st=0;st<O;++st)for(var yt=0;yt<_;++yt)for(var St=0;St<V;++St)for(var Dt=St-Pe,fn=Math.max(0,Math.ceil(Dt/ve)),Rt=Math.min(se,(F+Dt)/ve),Jt=0;Jt<G;++Jt)for(var Wt=Jt-et,un=Math.max(0,Math.ceil(Wt/ye)),on=Math.min(ie,(P+Wt)/ye),an=0;an<te;++an){for(var yr=an-Ye,xr=Math.max(0,Math.ceil(yr/Be)),Jn=Math.min(de,(z+yr)/Be),Fo=0,Fr=fn;Fr<Rt;++Fr)for(var Xr=Fr*ve-Dt,Pr=un;Pr<on;++Pr)for(var Po=Pr*ye-Wt,Nr=xr;Nr<Jn;++Nr)for(var su=p*st+v*Fr+g*Pr+A*Nr,No=x*(F-1-Xr)+C*(P-1-Po)+S*(z-1-(Nr*Be-yr))+N*yt,br=0;br<ce;++br)Fo+=h[su+br]*w[No+br];a[u*st+c*St+l*Jt+f*an+yt]=Fo}return i.toTensor()},t.prototype.conv2dDerFilter=function(e,n,o){he([e,n],"conv2dDerFilter");for(var i=o.strideHeight,a=o.strideWidth,s=o.filterHeight,u=o.filterWidth,c=o.dataFormat==="channelsLast",l=it(o.filterShape,"float32"),f=o.padInfo.left,h=o.padInfo.top,d=this.bufferSync(e),p=this.bufferSync(n),v=0;v<s;++v)for(var g=Math.max(0,Math.ceil((h-v)/i)),A=Math.min(o.outHeight,(o.inHeight+h-v)/i),w=0;w<u;++w)for(var E=Math.max(0,Math.ceil((f-w)/a)),x=Math.min(o.outWidth,(o.inWidth+f-w)/a),C=0;C<o.inChannels;++C)for(var S=0;S<o.outChannels;++S){for(var N=0,O=0;O<o.batchSize;++O)for(var F=g;F<A;++F)for(var P=v+F*i-h,z=E;z<x;++z){var _=w+z*a-f;N+=c?d.get(O,P,_,C)*p.get(O,F,z,S):d.get(O,C,P,_)*p.get(O,S,F,z)}l.set(N,v,w,C,S)}return l.toTensor()},t.prototype.conv3dDerFilter=function(e,n,o){for(var i=o.strideDepth,a=o.strideHeight,s=o.strideWidth,u=o.filterDepth,c=o.filterHeight,l=o.filterWidth,f=it(o.filterShape,"float32"),h=f.values,d=f.strides,p=d[0],v=d[1],g=d[2],A=d[3],w=this.readSync(n.dataId),E=n.strides,x=E[0],C=E[1],S=E[2],N=E[3],O=this.readSync(e.dataId),F=e.strides,P=F[0],z=F[1],_=F[2],V=F[3],G=o.padInfo.front,te=o.padInfo.left,ce=o.padInfo.top,se=0;se<u;++se)for(var ie=Math.max(0,Math.ceil((G-se)/i)),de=Math.min(o.outDepth,(o.inDepth+G-se)/i),ve=se*p,ye=0;ye<c;++ye)for(var Be=Math.max(0,Math.ceil((ce-ye)/a)),Pe=Math.min(o.outHeight,(o.inHeight+ce-ye)/a),et=ye*v+ve,Ye=0;Ye<l;++Ye)for(var st=Math.max(0,Math.ceil((te-Ye)/s)),yt=Math.min(o.outWidth,(o.inWidth+te-Ye)/s),St=Ye*g+et,Dt=0;Dt<o.inChannels;++Dt)for(var fn=Dt*A+St,Rt=0;Rt<o.outChannels;++Rt){for(var Jt=0,Wt=0;Wt<o.batchSize;++Wt)for(var un=Wt*P,on=Wt*x,an=ie;an<de;++an)for(var yr=(se+an*i-G)*z+un,xr=an*C+on,Jn=Be;Jn<Pe;++Jn)for(var Fo=(ye+Jn*a-ce)*_+yr,Fr=Jn*S+xr,Xr=st;Xr<yt;++Xr){var Pr=Xr*N+Fr;Jt+=O[(Ye+Xr*s-te)*V+Fo+Dt]*w[Pr+Rt]}h[fn+Rt]=Jt}return f.toTensor()},t.prototype.fusedDepthwiseConv2D=function(e){var n=e.input,o=e.filter,i=e.convInfo,a=e.bias,s=e.activation,u=e.preluActivationWeights,c=this.depthwiseConv2D(n,o,i);return a&&(c=this.add(c,a)),s&&(c=is(this,c,s,u)),c},t.prototype.depthwiseConv2D=function(e,n,o){he([e,n],"depthwiseConv2D");for(var i=o.filterHeight,a=o.filterWidth,s=o.dilationHeight,u=o.dilationWidth,c=o.padInfo.left,l=o.padInfo.top,f=o.outChannels/o.inChannels,h=it(o.outShape,e.dtype),d=this.readSync(e.dataId),p=this.readSync(n.dataId),v=h.values,g=0;g<o.batchSize;++g)for(var A=g*e.strides[0],w=g*h.strides[0],E=0;E<o.outHeight;++E)for(var x=w+E*h.strides[1],C=E*o.strideHeight-c,S=0;S<i;++S){var N=C+S*s;if(!(N<0||N>=o.inHeight))for(var O=S*n.strides[0],F=A+N*e.strides[1],P=0;P<o.outWidth;++P)for(var z=x+P*h.strides[2],_=P*o.strideWidth-l,V=0;V<a;++V){var G=_+V*u;if(!(G<0||G>=o.inWidth))for(var te=O+V*n.strides[1],ce=F+G*o.inChannels,se=z,ie=te,de=0;de<o.inChannels;++de){for(var ve=d[ce+de],ye=0;ye<f;++ye)v[se+ye]+=ve*p[ie+ye];se+=f,ie+=f}}}return h.toTensor()},t.prototype.depthwiseConv2DDerInput=function(e,n,o){he([e,n],"depthwiseConv2DDerInput");for(var i=it(o.inShape,"float32"),a=i.values,s=i.strides,u=s[0],c=s[1],l=s[2],f=this.readSync(e.dataId),h=e.strides,d=h[0],p=h[1],v=h[2],g=this.readSync(n.dataId),A=n.strides,w=A[0],E=A[1],x=A[2],C=o.batchSize,S=o.filterHeight,N=o.filterWidth,O=o.inChannels,F=o.inHeight,P=o.inWidth,z=o.outChannels,_=o.outHeight,V=o.outWidth,G=o.strideHeight,te=o.strideWidth,ce=S-1-o.padInfo.top,se=N-1-o.padInfo.left,ie=z/O,de=0;de<C;++de)for(var ve=0;ve<O;++ve)for(var ye=0;ye<F;++ye)for(var Be=ye-ce,Pe=Math.max(0,Math.ceil(Be/G)),et=Math.min(_,(S+Be)/G),Ye=0;Ye<P;++Ye){for(var st=Ye-se,yt=Math.max(0,Math.ceil(st/te)),St=Math.min(V,(N+st)/te),Dt=0,fn=Pe;fn<et;++fn)for(var Rt=fn*G-Be,Jt=yt;Jt<St;++Jt)for(var Wt=d*de+p*fn+v*Jt,un=w*(S-1-Rt)+E*(N-1-(Jt*te-st))+x*ve,on=0;on<ie;++on)Dt+=f[Wt+(ve*ie+on)]*g[un+on];a[u*de+c*ye+l*Ye+ve]=Dt}return i.toTensor()},t.prototype.depthwiseConv2DDerFilter=function(e,n,o){he([e,n],"depthwiseConv2DDerFilter");for(var i=o.strideHeight,a=o.strideWidth,s=o.filterHeight,u=o.filterWidth,c=it(o.filterShape,"float32"),l=o.padInfo.left,f=o.padInfo.top,h=o.outChannels/o.inChannels,d=this.bufferSync(e),p=this.bufferSync(n),v=0;v<s;++v)for(var g=Math.max(0,Math.ceil((f-v)/i)),A=Math.min(o.outHeight,(o.inHeight+f-v)/i),w=0;w<u;++w)for(var E=Math.max(0,Math.ceil((l-w)/a)),x=Math.min(o.outWidth,(o.inWidth+l-w)/a),C=0;C<o.outChannels;++C){for(var S=Math.trunc(C/h),N=C%h,O=0,F=0;F<o.batchSize;++F)for(var P=g;P<A;++P)for(var z=v+P*i-f,_=E;_<x;++_){var V=w+_*a-l;O+=d.get(F,z,V,S)*p.get(F,P,_,C)}c.set(O,v,w,S,N)}return c.toTensor()},t.prototype.tile=function(e,n){return he(e,"tile"),ac(this.bufferSync(e),n)},t.prototype.pad=function(e,n,o){he(e,"pad");var i=n.map(function(h,d){return h[0]+e.shape[d]+h[1]}),a=n.map(function(h){return h[0]}),s=this.bufferSync(e),u=it(i,e.dtype);o!==0&&u.values.fill(o);for(var c=0;c<e.size;c++){var l=s.indexToLoc(c),f=l.map(function(h,d){return h+a[d]});u.set.apply(u,[s.get.apply(s,l)].concat(f))}return u.toTensor()},t.prototype.transpose=function(e,n){he(e,"transpose");for(var o=new Array(e.rank),i=0;i<o.length;i++)o[i]=e.shape[n[i]];var a=this.readSync(e.dataId),s=it(o,e.dtype),u=this.bufferSync(e);for(i=0;i<e.size;++i){for(var c=u.indexToLoc(i),l=new Array(c.length),f=0;f<l.length;f++)l[f]=c[n[f]];var h=s.locToIndex(l);s.values[h]=a[i]}return s.toTensor()},t.prototype.gather=function(e,n,o){he([e,n],"gather");var i=e.shape.slice(),a=this.readSync(n.dataId);i[o]=a.length;for(var s=it(i,e.dtype),u=this.bufferSync(e),c=0;c<s.size;++c){var l=s.indexToLoc(c),f=l.slice();f[o]=a[l[o]];var h=u.locToIndex(f);s.values[c]=u.values[h]}return s.toTensor()},t.prototype.batchToSpaceND=function(e,n,o){he([e],"batchToSpaceND");var i=n.reduce(function(f,h){return f*h}),a=wi(e.shape,n,i),s=Ei(a.length,n.length),u=Ci(e.shape,n,i),c=Xu(o,n.length),l=Ju(u,o,n.length);return e.reshape(a).transpose(s).reshape(u).slice(c,l)},t.prototype.spaceToBatchND=function(e,n,o){he([e],"spaceToBatchND");var i=n.reduce(function(h,d){return h*d}),a=[[0,0]];a.push.apply(a,o);for(var s=1+n.length;s<e.shape.length;++s)a.push([0,0]);var u=e.pad(a),c=wi(u.shape,n,i,!1),l=Ei(c.length,n.length,!1),f=Ci(u.shape,n,i,!1);return u.reshape(c).transpose(l).reshape(f)},t.prototype.pool=function(e,n,o){he(e,"pool");for(var i=n.strideHeight,a=n.strideWidth,s=n.dilationHeight,u=n.dilationWidth,c=n.effectiveFilterHeight,l=n.effectiveFilterWidth,f=n.padInfo.top,h=n.padInfo.left,d=o==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,p=this.readSync(e.dataId),v=it(n.outShape,e.dtype),g=v.values,A=n.outShape[1]*n.outShape[2]*n.outShape[3],w=n.outShape[2]*n.outShape[3],E=n.outShape[3],x=0;x<n.batchSize;++x)for(var C=x*A,S=x*e.strides[0],N=0;N<n.inChannels;++N)for(var O=0;O<n.outHeight;++O)for(var F=O*i-f,P=Math.max(0,F),z=Math.min(n.inHeight,c+F),_=C+O*w,V=0;V<n.outWidth;++V){for(var G=V*a-h,te=Math.max(0,G),ce=Math.min(n.inWidth,l+G),se=d,ie=0,de=0,ve=P;ve<z;ve+=s){for(var ye=S+ve*e.strides[1],Be=te;Be<ce;Be+=u){var Pe=p[ye+Be*e.strides[2]+N];o==="max"&&Pe>se?se=Pe:o==="avg"&&(ie+=Pe,de++)}if(isNaN(se))break}g[_+V*E+N]=o==="avg"?ie/de:se}return v.toTensor()},t.prototype.maxPool=function(e,n){return this.pool(e,n,"max")},t.prototype.maxPoolPositions=function(e,n){for(var o=it(n.outShape,"int32"),i=n.strideHeight,a=n.strideWidth,s=n.dilationHeight,u=n.dilationWidth,c=n.effectiveFilterHeight,l=n.effectiveFilterWidth,f=n.padInfo.top,h=n.padInfo.left,d=this.bufferSync(e),p=0;p<n.batchSize;++p)for(var v=0;v<n.inChannels;++v)for(var g=0;g<n.outHeight;++g){for(var A=g*i-f,w=A;w<0;)w+=s;for(var E=Math.min(n.inHeight,c+A),x=0;x<n.outWidth;++x){for(var C=x*a-h,S=C;S<0;)S+=u;for(var N=Math.min(n.inWidth,l+C),O=Number.NEGATIVE_INFINITY,F=-1,P=w;P<E;P+=s)for(var z=P-A,_=S;_<N;_+=u){var V=_-C,G=d.get(p,P,_,v);G>O&&(O=G,F=z*l+V)}o.set(F,p,g,x,v)}}return o.toTensor()},t.prototype.maxPoolBackprop=function(e,n,o,i){he([n,o],"maxPoolBackprop");for(var a=this.maxPoolPositions(n,i),s=i.strideHeight,u=i.strideWidth,c=i.dilationHeight,l=i.dilationWidth,f=i.effectiveFilterHeight,h=i.effectiveFilterWidth,d=h-1-i.padInfo.left,p=f-1-i.padInfo.top,v=it(n.shape,"float32"),g=this.bufferSync(a),A=this.bufferSync(e),w=0;w<i.batchSize;++w)for(var E=0;E<i.inChannels;++E)for(var x=0;x<i.inHeight;++x)for(var C=0;C<i.inWidth;++C){for(var S=x-p,N=C-d,O=0,F=0;F<f;F+=c){var P=(S+F)/s;if(!(P<0||P>=i.outHeight||Math.floor(P)!==P))for(var z=0;z<h;z+=l){var _=(N+z)/u;if(!(_<0||_>=i.outWidth||Math.floor(_)!==_)){var V=f*h-1-g.get(w,P,_,E)===F*h+z?1:0;V!==0&&(O+=A.get(w,P,_,E)*V)}}}v.set(O,w,x,C,E)}return v.toTensor()},t.prototype.avgPoolBackprop=function(e,n,o){he([e,n],"avgPoolBackprop");for(var i=o.strideHeight,a=o.strideWidth,s=o.filterHeight,u=o.filterWidth,c=o.dilationHeight,l=o.dilationWidth,f=o.effectiveFilterHeight,h=o.effectiveFilterWidth,d=h-1-o.padInfo.left,p=f-1-o.padInfo.top,v=it(n.shape,"float32"),g=1/(s*u),A=this.bufferSync(e),w=0;w<o.batchSize;++w)for(var E=0;E<o.inChannels;++E)for(var x=0;x<o.inHeight;++x)for(var C=0;C<o.inWidth;++C){for(var S=x-p,N=C-d,O=0,F=0;F<f;F+=c){var P=(S+F)/i;if(!(P<0||P>=o.outHeight||Math.floor(P)!==P))for(var z=0;z<h;z+=l){var _=(N+z)/a;_<0||_>=o.outWidth||Math.floor(_)!==_||(O+=A.get(w,P,_,E))}}v.set(O*g,w,x,C,E)}return v.toTensor()},t.prototype.pool3d=function(e,n,o){he(e,"pool3d");for(var i=n.strideDepth,a=n.strideHeight,s=n.strideWidth,u=n.dilationDepth,c=n.dilationHeight,l=n.dilationWidth,f=n.effectiveFilterDepth,h=n.effectiveFilterHeight,d=n.effectiveFilterWidth,p=n.padInfo.front,v=n.padInfo.top,g=n.padInfo.left,A=o==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,w=this.readSync(e.dataId),E=it(n.outShape,e.dtype),x=E.values,C=n.outShape[1]*n.outShape[2]*n.outShape[3]*n.outShape[4],S=n.outShape[2]*n.outShape[3]*n.outShape[4],N=n.outShape[3]*n.outShape[4],O=n.outShape[4],F=0;F<n.batchSize;++F)for(var P=F*C,z=F*e.strides[0],_=0;_<n.inChannels;++_)for(var V=0;V<n.outDepth;++V){for(var G=V*i-p,te=G;te<0;)te+=u;for(var ce=Math.min(n.inDepth,f+G),se=P+V*S,ie=0;ie<n.outHeight;++ie){for(var de=ie*a-v,ve=de;ve<0;)ve+=c;for(var ye=Math.min(n.inHeight,h+de),Be=se+ie*N,Pe=0;Pe<n.outWidth;++Pe){for(var et=Pe*s-g,Ye=et;Ye<0;)Ye+=l;for(var st=Math.min(n.inWidth,d+et),yt=Be+Pe*O,St=A,Dt=0,fn=0,Rt=te;Rt<ce;Rt+=u){for(var Jt=z+Rt*e.strides[1],Wt=ve;Wt<ye;Wt+=c){for(var un=Jt+Wt*e.strides[2],on=Ye;on<st;on+=l){var an=w[un+on*e.strides[3]+_];if(o==="max"&&an>St?St=an:o==="avg"&&(Dt+=an,fn++),isNaN(St))break}if(isNaN(St))break}if(isNaN(St))break}x[yt+_]=o==="avg"?Dt/fn:St}}}return E.toTensor()},t.prototype.avgPool3d=function(e,n){return he(e,"avgPool3d"),this.pool3d(e,n,"avg").toFloat()},t.prototype.avgPool3dBackprop=function(e,n,o){he([e,n],"avgPool3dBackprop");for(var i=o.strideDepth,a=o.strideHeight,s=o.strideWidth,u=o.filterDepth,c=o.filterHeight,l=o.filterWidth,f=o.dilationDepth,h=o.dilationHeight,d=o.dilationWidth,p=o.effectiveFilterDepth,v=o.effectiveFilterHeight,g=o.effectiveFilterWidth,A=p-1-o.padInfo.front,w=g-1-o.padInfo.left,E=v-1-o.padInfo.top,x=it(n.shape,"float32"),C=1/(u*c*l),S=this.bufferSync(e),N=0;N<o.batchSize;++N)for(var O=0;O<o.inChannels;++O)for(var F=0;F<o.inDepth;++F)for(var P=0;P<o.inHeight;++P)for(var z=0;z<o.inWidth;++z){for(var _=F-A,V=P-E,G=z-w,te=0,ce=0;ce<p;ce+=f){var se=(_+ce)/i;if(!(se<0||se>=o.outDepth||Math.floor(se)!==se))for(var ie=0;ie<v;ie+=h){var de=(V+ie)/a;if(!(de<0||de>=o.outHeight||Math.floor(de)!==de))for(var ve=0;ve<g;ve+=d){var ye=(G+ve)/s;ye<0||ye>=o.outWidth||Math.floor(ye)!==ye||(te+=S.get(N,se,de,ye,O))}}}x.set(te*C,N,F,P,z,O)}return x.toTensor()},t.prototype.maxPool3d=function(e,n){return he(e,"maxPool3d"),this.pool3d(e,n,"max").toFloat()},t.prototype.maxPool3dPositions=function(e,n){for(var o=it(n.outShape,"int32"),i=n.strideDepth,a=n.strideHeight,s=n.strideWidth,u=n.dilationDepth,c=n.dilationHeight,l=n.dilationWidth,f=n.effectiveFilterDepth,h=n.effectiveFilterHeight,d=n.effectiveFilterWidth,p=n.padInfo.front,v=n.padInfo.top,g=n.padInfo.left,A=this.bufferSync(e),w=0;w<n.batchSize;++w)for(var E=0;E<n.inChannels;++E)for(var x=0;x<n.outDepth;++x){for(var C=x*i-p,S=C;S<0;)S+=u;for(var N=Math.min(n.inDepth,f+C),O=0;O<n.outHeight;++O){for(var F=O*a-v,P=F;P<0;)P+=c;for(var z=Math.min(n.inHeight,h+F),_=0;_<n.outWidth;++_){for(var V=_*s-g,G=V;G<0;)G+=l;for(var te=Math.min(n.inWidth,d+V),ce=Number.NEGATIVE_INFINITY,se=-1,ie=S;ie<N;ie+=u)for(var de=ie-C,ve=P;ve<z;ve+=c)for(var ye=ve-F,Be=G;Be<te;Be+=l){var Pe=Be-V,et=A.get(w,ie,ve,Be,E);et>=ce&&(ce=et,se=de*h*d+ye*h+Pe)}o.set(se,w,x,O,_,E)}}}return o.toTensor()},t.prototype.maxPool3dBackprop=function(e,n,o,i){he([n,o],"maxPool3dBackprop");for(var a=this.maxPool3dPositions(n,i),s=i.strideDepth,u=i.strideHeight,c=i.strideWidth,l=i.dilationDepth,f=i.dilationHeight,h=i.dilationWidth,d=i.effectiveFilterDepth,p=i.effectiveFilterHeight,v=i.effectiveFilterWidth,g=d-1-i.padInfo.front,A=v-1-i.padInfo.left,w=p-1-i.padInfo.top,E=it(n.shape,"float32"),x=this.bufferSync(a),C=this.bufferSync(e),S=0;S<i.batchSize;++S)for(var N=0;N<i.inChannels;++N)for(var O=0;O<i.inDepth;++O)for(var F=0;F<i.inHeight;++F)for(var P=0;P<i.inWidth;++P){for(var z=O-g,_=F-w,V=P-A,G=0,te=0;te<d;te+=l){var ce=(z+te)/s;if(!(ce<0||ce>=i.outDepth||Math.floor(ce)!==ce))for(var se=0;se<p;se+=f){var ie=(_+se)/u;if(!(ie<0||ie>=i.outHeight||Math.floor(ie)!==ie))for(var de=0;de<v;de+=h){var ve=(V+de)/c;if(!(ve<0||ve>=i.outWidth||Math.floor(ve)!==ve)){var ye=d*p*v-1-x.get(S,ce,ie,ve,N)===te*p*v+se*v+de?1:0;ye!==0&&(G+=C.get(S,ce,ie,ve,N)*ye)}}}}E.set(G,S,O,F,P,N)}return E.toTensor()},t.prototype.cast=function(e,n){return Ba(e,n,this)},t.prototype.reshape=function(e,n){return Di(e,n)},t.prototype.avgPool=function(e,n){return he(e,"avgPool"),this.pool(e,n,"avg").toFloat()},t.prototype.resizeBilinear=function(e,n,o,i){he(e,"resizeBilinear");for(var a=e.shape,s=a[0],u=a[1],c=a[2],l=a[3],f=this.readSync(e.dataId),h=new Float32Array(Re([s,n,o,l])),d=[i&&n>1?u-1:u,i&&o>1?c-1:c],p=[i&&n>1?n-1:n,i&&o>1?o-1:o],v=0,g=d[0]/p[0],A=d[1]/p[1],w=0;w<s;w++)for(var E=0;E<n;E++)for(var x=g*E,C=Math.floor(x),S=x-C,N=Math.min(u-1,Math.ceil(x)),O=w*e.strides[0]+C*e.strides[1],F=w*e.strides[0]+N*e.strides[1],P=0;P<o;P++)for(var z=A*P,_=Math.floor(z),V=z-_,G=Math.min(c-1,Math.ceil(z)),te=O+_*e.strides[2],ce=F+_*e.strides[2],se=O+G*e.strides[2],ie=F+G*e.strides[2],de=0;de<l;de++){var ve=f[te+de],ye=f[ce+de],Be=ve+(f[se+de]-ve)*V,Pe=Be+(ye+(f[ie+de]-ye)*V-Be)*S;h[v++]=Pe}return Tn(h,[s,n,o,l])},t.prototype.resizeBilinearBackprop=function(e,n,o){he([e,n],"resizeBilinearBackprop");for(var i=n.shape,a=i[0],s=i[1],u=i[2],c=i[3],l=e.shape,f=l[1],h=l[2],d=new Float32Array(a*s*u*c),p=[o&&f>1?s-1:s,o&&h>1?u-1:u],v=[o&&f>1?f-1:f,o&&h>1?h-1:h],g=p[0]/v[0],A=p[1]/v[1],w=this.readSync(e.dataId),E=0,x=0;x<a;x++)for(var C=x*n.strides[0],S=0;S<f;S++)for(var N=S*g,O=Math.floor(N),F=Math.min(Math.ceil(N),s-1),P=C+O*n.strides[1],z=C+F*n.strides[1],_=N-O,V=1-_,G=0;G<h;G++)for(var te=G*A,ce=Math.floor(te),se=Math.min(Math.ceil(te),u-1),ie=te-ce,de=1-ie,ve=P+ce*n.strides[2],ye=P+se*n.strides[2],Be=z+ce*n.strides[2],Pe=z+se*n.strides[2],et=V*de,Ye=V*ie,st=_*de,yt=_*ie,St=0;St<c;St++){var Dt=w[E++];d[ve+St]+=Dt*et,d[ye+St]+=Dt*Ye,d[Be+St]+=Dt*st,d[Pe+St]+=Dt*yt}return _n(d,[a,u,s,c],n.dtype)},t.prototype.resizeNearestNeighbor=function(e,n,o,i){he(e,"resizeNearestNeighbor");for(var a=e.shape,s=a[0],u=a[1],c=a[2],l=a[3],f=this.readSync(e.dataId),h=new Float32Array(s*n*o*l),d=[i&&n>1?u-1:u,i&&o>1?c-1:c],p=[i&&n>1?n-1:n,i&&o>1?o-1:o],v=d[0]/p[0],g=d[1]/p[1],A=0,w=0;w<s;w++)for(var E=w*e.strides[0],x=0;x<n;x++)for(var C=v*x,S=E+Math.min(u-1,i?Math.round(C):Math.floor(C))*e.strides[1],N=0;N<o;N++)for(var O=g*N,F=S+Math.min(c-1,i?Math.round(O):Math.floor(O))*e.strides[2],P=0;P<l;P++){var z=f[F+P];h[A++]=z}return Tn(h,[s,n,o,l],e.dtype)},t.prototype.resizeNearestNeighborBackprop=function(e,n,o){he([e,n],"resizeNearestNeighborBackprop");for(var i=n.shape,a=i[0],s=i[1],u=i[2],c=i[3],l=e.shape,f=l[1],h=l[2],d=new Float32Array(a*s*u*c),p=this.readSync(e.dataId),v=[o&&f>1?s-1:s,o&&h>1?u-1:u],g=[o&&f>1?f-1:f,o&&h>1?h-1:h],A=v[0]/g[0],w=v[1]/g[1],E=1/A,x=1/w,C=2*Math.ceil(E)+2,S=2*Math.ceil(x)+2,N=0;N<a;N++)for(var O=N*n.strides[0],F=0;F<s;F++)for(var P=O+F*n.strides[1],z=Math.floor(F*E),_=Math.floor(z-C/2),V=0;V<u;V++)for(var G=P+V*n.strides[2],te=Math.floor(V*x),ce=Math.floor(te-S/2),se=0;se<c;se++){for(var ie=0,de=0;de<C;de++){var ve=de+_;if(!(ve<0||ve>=f)){var ye=O+ve*e.strides[1],Be=ve*A;if(F===Math.min(s-1,o?Math.round(Be):Math.floor(Be)))for(var Pe=0;Pe<S;Pe++){var et=Pe+ce;if(!(et<0||et>=h)){var Ye=ye+et*e.strides[2],st=et*w;V===Math.min(u-1,o?Math.round(st):Math.floor(st))&&(ie+=p[Ye+se])}}}}d[G+se]=ie}return _n(d,n.shape,n.dtype)},t.prototype.batchNormalization=function(e,n,o,i,a,s){he([e,n,o,a,s],"batchNorm");for(var u=this.readSync(e.dataId),c=this.readSync(n.dataId),l=this.readSync(o.dataId),f=a?this.readSync(a.dataId):new Float32Array([1]),h=s?this.readSync(s.dataId):new Float32Array([0]),d=new Float32Array(u.length),p=h.length,v=f.length,g=l.length,A=c.length,w=0,E=0,x=0,C=0,S=0;S<u.length;++S)d[S]=h[w++]+(u[S]-c[E++])*f[x++]/Math.sqrt(l[C++]+i),w>=p&&(w=0),E>=A&&(E=0),x>=v&&(x=0),C>=g&&(C=0);return _n(d,e.shape)},t.prototype.localResponseNormalization4D=function(e,n,o,i,a){he(e,"localResponseNormalization4D");var s=e.shape[3],u=s-1,c=this.readSync(e.dataId),l=e.size,f=new Float32Array(l);function h(g){for(var A=g%s,w=g-A+Math.max(0,A-n),E=g-A+Math.min(A+n,u),x=0;w<=E;w++){var C=c[w];x+=C*C}return x}for(var d=0;d<l;d++){var p=h(d),v=c[d]*Math.pow(o+i*p,-a);f[d]=v}return _n(f,e.shape)},t.prototype.LRNGrad=function(e,n,o,i,a,s,u){he(e,"LRNGrad");for(var c=e.shape[3],l=this.readSync(e.dataId),f=this.readSync(n.dataId),h=this.readSync(o.dataId),d=new Float32Array(e.size),p=e.size,v=0;v<p;v++){for(var g=v%c,A=v-g+Math.max(0,g-i),w=v-g+Math.min(c,g+i+1),E=0,x=A;x<w;x++)E+=Math.pow(f[x],2);for(E=s*E+a,x=A;x<w;x++){var C=-2*s*u*f[x]*h[v]/E;v===x&&(C+=Math.pow(E,-u)),C*=l[v],d[x]+=C}}return _n(d,e.shape)},t.prototype.multinomial=function(e,n,o,i){he(e,"multinomial");for(var a=n?e:Cr(e),s=a.shape[0],u=a.shape[1],c=tn([s,o],"int32"),l=this.readSync(c.dataId),f=this.readSync(a.dataId),h=0;h<s;++h){var d=h*u,p=new Float32Array(u-1);p[0]=f[d];for(var v=1;v<p.length;++v)p[v]=p[v-1]+f[d+v];for(var g=bi(i.toString()),A=h*o,w=0;w<o;++w){var E=g();l[A+w]=p.length;for(var x=0;x<p.length;x++)if(E<p[x]){l[A+w]=x;break}}}return c},t.prototype.oneHot=function(e,n,o,i){he(e,"oneHot");var a=new Float32Array(e.size*n);a.fill(i);for(var s=this.readSync(e.dataId),u=0;u<e.size;++u)s[u]>=0&&s[u]<n&&(a[u*n+s[u]]=o);return Mr(a,[e.size,n],"int32")},t.prototype.nonMaxSuppression=function(e,n,o,i,a){return he(e,"nonMaxSuppression"),Da(this.readSync(e.dataId),this.readSync(n.dataId),o,i,a)},t.prototype.fft=function(e){return this.fftBatch(e,!1)},t.prototype.ifft=function(e){return this.fftBatch(e,!0)},t.prototype.fftBatch=function(e,n){for(var o=e.shape[0],i=e.shape[1],a=it(e.shape,"float32"),s=it(e.shape,"float32"),u=Zn(e).as2D(o,i),c=fr(e).as2D(o,i),l=0;l<o;l++)for(var f=u.slice([l,0],[1,i]),h=c.slice([l,0],[1,i]),d=kn(f,h),p=this.readSync(this.fftImpl(d,n).dataId),v=0;v<i;v++){var g=nc(p,v);a.values[l*i+v]=g.real,s.values[l*i+v]=g.imag}return kn(a.toTensor(),s.toTensor()).as2D(o,i)},t.prototype.fftImpl=function(e,n){var o=e.as1D(),i=o.size;if(this.isExponentOf2(i)){var a=this.fftRadix2(o,i,n).as2D(e.shape[0],e.shape[1]);return n&&(a=kn(Zn(a).div(Te(i)),fr(a).div(Te(i)))),a}var s=this.readSync(e.dataId),u=function(c){for(var l=new Float32Array(c.length/2),f=new Float32Array(c.length/2),h=0;h<c.length;h+=2)l[h/2]=c[h],f[h/2]=c[h+1];return{real:l,imag:f}}(this.fourierTransformByMatmul(s,i,n));return kn(u.real,u.imag).as2D(e.shape[0],e.shape[1])},t.prototype.isExponentOf2=function(e){return(e&e-1)==0},t.prototype.fftRadix2=function(e,n,o){if(n===1)return e;var i=this.readSync(e.dataId),a=n/2,s=function(A){for(var w=Math.ceil(A.length/4),E=new Float32Array(w),x=new Float32Array(w),C=0;C<A.length;C+=4)E[Math.floor(C/4)]=A[C],x[Math.floor(C/4)]=A[C+1];return{real:E,imag:x}}(i),u=kn(s.real,s.imag).as1D(),c=function(A){for(var w=Math.floor(A.length/4),E=new Float32Array(w),x=new Float32Array(w),C=2;C<A.length;C+=4)E[Math.floor(C/4)]=A[C],x[Math.floor(C/4)]=A[C+1];return{real:E,imag:x}}(i),l=kn(c.real,c.imag).as1D();u=this.fftRadix2(u,a,o),l=this.fftRadix2(l,a,o);var f=function(A,w){for(var E=new Float32Array(A/2),x=new Float32Array(A/2),C=0;C<Math.ceil(A/2);C++){var S=(w?2:-2)*Math.PI*(C/A);E[C]=Math.cos(S),x[C]=Math.sin(S)}return{real:E,imag:x}}(n,o),h=kn(f.real,f.imag).mul(l),d=u.add(h),p=u.sub(h),v=Zn(d).concat(Zn(p)),g=fr(d).concat(fr(p));return kn(v,g).as1D()},t.prototype.fourierTransformByMatmul=function(e,n,o){for(var i=new Float32Array(2*n),a=0;a<n;a++){for(var s=0,u=0,c=0;c<n;c++){var l=Jh(a*c,n,o),f=nc(e,c);s+=f.real*l.real-f.imag*l.imag,u+=f.real*l.imag+f.imag*l.real}o&&(s/=n,u/=n),Xh(i,s,u,a)}return i},t.prototype.depthToSpace=function(e,n,o){R(o==="NHWC",function(){return"Only NHWC dataFormat supported on CPU for depthToSpace. Got "+o}),R(n>1,function(){return"blockSize should be > 1 for depthToSpace, but was: "+n});for(var i=e.shape[0],a=e.shape[1],s=e.shape[2],u=e.shape[3],c=a*n,l=s*n,f=u/(n*n),h=this.readSync(e.dataId),d=new Float32Array(i*c*l*f),p=0,v=0;v<i;++v)for(var g=0;g<c;++g)for(var A=Math.floor(g/n),w=g%n,E=0;E<l;++E)for(var x=Math.floor(E/n),C=(w*n+E%n)*f,S=0;S<f;++S){var N=S+C+u*(x+s*(A+a*v));d[p++]=h[N]}return _n(d,[i,c,l,f])},t.prototype.broadcastedBinaryOp=function(e,n,o,i){var a=vt(e.shape,n.shape),s=it(a,o),u=this.readSync(e.dataId),c=this.readSync(n.dataId),l=Ir(e.shape,a),f=Ir(n.shape,a),h=s.values;if(l.length+f.length===0)for(var d=0;d<h.length;++d)h[d]=i(u[d%u.length],c[d%c.length]);else{var p=this.bufferSync(e),v=this.bufferSync(n),g=function(A){var w=s.indexToLoc(A),E=w.slice(-e.rank);l.forEach(function(N){return E[N]=0});var x=p.locToIndex(E),C=w.slice(-n.rank);f.forEach(function(N){return C[N]=0});var S=v.locToIndex(C);h[A]=i(u[x],c[S])};for(d=0;d<h.length;++d)g(d)}return s.toTensor()},t.prototype.broadcastedBinaryComplexOp=function(e,n,o){var i=vt(e.shape,n.shape),a=it(i,"float32"),s=it(i,"float32"),u=this.readSync(e.dataId),c=this.readSync(n.dataId),l=Ir(e.shape,i),f=Ir(n.shape,i),h=a.values,d=s.values;if(l.length+f.length===0)for(var p=0;p<h.length;p++){var v=p%u.length,g=p%c.length,A=o(u[2*v],u[2*v+1],c[2*g],c[2*g+1]);h[p]=A.real,d[p]=A.imag}else{var w=this.bufferSync(this.data.get(e.dataId).complexTensors.real),E=this.bufferSync(this.data.get(n.dataId).complexTensors.real),x=function(C){var S=a.indexToLoc(C),N=S.slice(-e.rank);l.forEach(function(_){return N[_]=0});var O=w.locToIndex(N),F=S.slice(-n.rank);f.forEach(function(_){return F[_]=0});var P=E.locToIndex(F),z=o(u[2*O],u[2*O+1],c[2*P],c[2*P+1]);h[C]=z.real,d[C]=z.imag};for(p=0;p<h.length;p++)x(p)}return this.complex(a.toTensor(),s.toTensor())},t.prototype.split=function(e,n,o){return ic(e,n,o)},t.prototype.dispose=function(){},t.prototype.floatPrecision=function(){return 32},t.prototype.epsilon=function(){return 1e-7},t.prototype.cropAndResize=function(e,n,o,i,a,s){for(var u=e.shape,c=u[0],l=u[1],f=u[2],h=u[3],d=n.shape[0],p=i[0],v=i[1],g=it([d,p,v,h],"float32"),A=this.readSync(n.dataId),w=this.readSync(o.dataId),E=this.readSync(e.dataId),x=e.strides,C=g.strides,S=0;S<d;S++){var N=4*S,O=A[N],F=A[N+1],P=A[N+2],z=A[N+3],_=w[S];if(!(_>=c))for(var V=p>1?(P-O)*(l-1)/(p-1):0,G=v>1?(z-F)*(f-1)/(v-1):0,te=0;te<p;te++){var ce=p>1?O*(l-1)+te*V:.5*(O+P)*(l-1);if(ce<0||ce>l-1)for(var se=0;se<v;se++)for(var ie=0;ie<h;ie++){var de=ie+se*C[2]+te*C[1]+S*C[0];g.values[de]=s}else if(a==="bilinear"){var ve=Math.floor(ce),ye=Math.ceil(ce),Be=ce-ve;for(se=0;se<v;se++)if((Rt=v>1?F*(f-1)+se*G:.5*(F+z)*(f-1))<0||Rt>f-1)for(ie=0;ie<h;ie++)de=ie+se*C[2]+te*C[1]+S*C[0],g.values[de]=s;else{var Pe=Math.floor(Rt),et=Math.ceil(Rt),Ye=Rt-Pe;for(ie=0;ie<h;ie++){var st=E[de=ie+Pe*x[2]+ve*x[1]+_*x[0]],yt=E[de=ie+et*x[2]+ve*x[1]+_*x[0]],St=E[de=ie+Pe*x[2]+ye*x[1]+_*x[0]],Dt=st+(yt-st)*Ye,fn=St+(E[de=ie+et*x[2]+ye*x[1]+_*x[0]]-St)*Ye;de=ie+se*C[2]+te*C[1]+S*C[0],g.values[de]=Dt+(fn-Dt)*Be}}}else for(se=0;se<v;++se){var Rt;if((Rt=v>1?F*(f-1)+se*G:.5*(F+z)*(f-1))<0||Rt>f-1)for(ie=0;ie<h;ie++)de=ie+se*C[2]+te*C[1]+S*C[0],g.values[de]=s;else{var Jt=Math.round(Rt),Wt=Math.round(ce);for(ie=0;ie<h;ie++){var un=ie+Jt*x[2]+Wt*x[1]+_*x[0],on=ie+se*C[2]+te*C[1]+S*C[0];g.values[on]=E[un]}}}}}return g.toTensor()},t.prototype.sparseToDense=function(e,n,o,i){var a=jo(0,e,o),s=a.sliceRank,u=a.numUpdates,c=a.sliceSize,l=a.strides,f=a.outputSize;return this.scatter(e,n,o,f,c,u,s,l,i,!1)},t.prototype.gatherND=function(e,n){var o=n.shape,i=o[o.length-1],a=ba(e,n),s=a[0],u=a[1],c=a[2],l=a[3];if(u===0)return Tn([],s,e.dtype);for(var f=new wt([u,c],e.dtype),h=this.readSync(n.dataId),d=this.readSync(e.dataId),p=0;p<u;p++){for(var v=[],g=0,A=0;A<i;A++){var w=h[p*i+A];g+=w*l[A],v.push(w)}if(g<0||g>=e.size/c)throw new Error("Invalid indices: "+v+" does not index into "+e.shape);for(var E=0;E<c;E++)f.values[p*c+E]=d[g*c+E]}return f.toTensor().reshape(s)},t.prototype.scatterND=function(e,n,o){var i=jo(0,e,o),a=i.sliceRank,s=i.numUpdates,u=i.sliceSize,c=i.strides,l=i.outputSize,f=Te(0);return this.scatter(e,n,o,l,u,s,a,c,f,!0)},t.prototype.fill=function(e,n,o){var i=m(o=o||je(n),Re(e));return i.fill(n),L.makeTensor(i,e,o,this)},t.prototype.onesLike=function(e){if(e.dtype==="string")throw new Error("onesLike is not supported for string tensors");return this.fill(e.shape,1,e.dtype)},t.prototype.zerosLike=function(e){var n=m(e.dtype,Re(e.shape));return this.makeOutput(n,e.shape,e.dtype)},t.prototype.linspace=function(e,n,o){return ka(e,n,o)},t.prototype.scatter=function(e,n,o,i,a,s,u,c,l,f){var h=[i/a,a],d=this.readSync(e.dataId),p=this.readSync(n.dataId);if(i===0)return Tn([],o,n.dtype);var v=new wt(h,n.dtype);v.values.fill(this.readSync(l.dataId)[0]);for(var g=0;g<s;g++){for(var A=[],w=0,E=0;E<u;E++){var x=d[g*u+E];A.push(x),w+=x*c[E]}if(w<0||w>=i/a)throw new Error("Invalid indices: "+A+" does not index into "+o);for(var C=0;C<a;C++)f?v.values[w*a+C]+=p[g*a+C]:v.values[w*a+C]=n.rank===0?p[0]:p[g*a+C]}return v.toTensor().reshape(o)},t}(tc);L.registerBackend("cpu",function(){return new qg},1);for(var as=0,Ol=[{kernelName:"NonMaxSuppressionV5",backendName:"cpu",kernelFunc:function(r){var t=r.inputs,e=r.backend,n=r.attrs,o=t,i=o.boxes,a=o.scores,s=n,u=s.maxOutputSize,c=s.iouThreshold,l=s.scoreThreshold,f=s.softNmsSigma,h=e;he(i,"NonMaxSuppressionWithScore");var d=Fa(h.data.get(i.dataId).values,h.data.get(a.dataId).values,u,c,l,f);return[d.selectedIndices,d.selectedScores]}},{kernelName:"Square",backendName:"cpu",kernelFunc:function(r){var t=r.inputs,e=r.backend,n=t.x,o=e;he(n,"square");for(var i=o.data.get(n.dataId).values,a=new Float32Array(i.length),s=0;s<i.length;++s){var u=i[s];a[s]=u*u}return{dataId:o.write(a,n.shape,n.dtype),shape:n.shape,dtype:n.dtype}}},{kernelName:Zo,backendName:"cpu",kernelFunc:function(r){var t=r.inputs,e=r.backend,n=t,o=n.a,i=n.b,a=e;he([o,i],Zo);var s=a.data.get(o.dataId).values,u=a.data.get(i.dataId).values,c=function(h,d,p,v,g,A){var w=vt(h,d),E=w.length,x=jt(w),C=T(g,Re(w)),S=h.length,N=d.length,O=jt(h),F=jt(d),P=Ir(h,w),z=Ir(d,w);if(P.length+z.length===0)for(var _=0;_<C.length;++_)C[_]=A(p[_%p.length],v[_%v.length]);else{var V=function(G){var te=Ge(G,E,x),ce=te.slice(-S);P.forEach(function(ve){return ce[ve]=0});var se=Xe(ce,S,O),ie=te.slice(-N);z.forEach(function(ve){return ie[ve]=0});var de=Xe(ie,N,F);C[G]=A(p[se],v[de])};for(_=0;_<C.length;++_)V(_)}return[C,w]}(o.shape,i.shape,s,u,o.dtype,function(h,d){var p=h-d;return p*p}),l=c[0],f=c[1];return{dataId:a.write(l,f,o.dtype),shape:f,dtype:o.dtype}}}];as<Ol.length;as++)qt(Ol[as]);for(var wo,Yg=function(r){this.variableNames=["A"];var t=Dn(),e=r[0],n=r[1];this.outputShape=r,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(`+n+".0, "+e+`.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));
|
|
}
|
|
`},$g=function(r){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;var t=Dn(),e=r[0],n=r[1];this.outputShape=r,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(`+n+".0, "+e+`.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;
|
|
}
|
|
`},ss=0,Ml=[{kernelName:"FromPixels",backendName:"webgl",kernelFunc:function(r){var t=r.inputs,e=r.backend,n=r.attrs,o=t.pixels,i=n.numChannels,a=typeof HTMLVideoElement!="undefined"&&o instanceof HTMLVideoElement,s=typeof HTMLImageElement!="undefined"&&o instanceof HTMLImageElement,u=a?[o.videoWidth,o.videoHeight]:[o.width,o.height],c=u[0],l=u[1],f=[l,c],h=[l,c,i];(s||a)&&(wo==null&&(wo=document.createElement("canvas").getContext("2d")),wo.canvas.width=c,wo.canvas.height=l,wo.drawImage(o,0,0,c,l),o=wo.canvas);var d=e.makeTensorInfo(f,"int32");e.texData.get(d.dataId).usage=bn.PIXELS,e.gpgpu.uploadPixelDataToTexture(e.getTexture(d.dataId),o);var p=J().getBool("WEBGL_PACK")?new $g(h):new Yg(h),v=e.runWebGLProgram(p,[d],"int32");return e.disposeData(d.dataId),v}},{kernelName:"NonMaxSuppressionV5",backendName:"webgl",kernelFunc:function(r){var t=r.inputs,e=r.backend,n=r.attrs;Ai("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");var o=t,i=o.boxes,a=o.scores,s=n,u=s.maxOutputSize,c=s.iouThreshold,l=s.scoreThreshold,f=s.softNmsSigma,h=e,d=Fa(h.readSync(i.dataId),h.readSync(a.dataId),u,c,l,f);return[d.selectedIndices,d.selectedScores]}},{kernelName:"Square",backendName:"webgl",kernelFunc:function(r){var t=r.inputs,e=r.backend,n=t.x,o=e,i=new lt(n.shape,"return x * x;");return o.runWebGLProgram(i,[n],n.dtype)}},{kernelName:Zo,backendName:"webgl",kernelFunc:function(r){var t=r.inputs,e=r.backend,n=t,o=n.a,i=n.b,a=e,s=J().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Sr("return (a - b) * (a - b);",o.shape,i.shape):new sn("return (a - b) * (a - b);",o.shape,i.shape);return a.compileAndRun(s,[o,i])}}];ss<Ml.length;ss++)qt(Ml[ss]);for(var us=0,Ll=[{kernelName:"Square",gradFunc:function(r,t){var e=t[0];return{x:function(){return r.mul(e.toFloat().mul(2))}}}},{kernelName:Zo,gradFunc:function(r,t){var e=t[0],n=t[1],o=Te(2);return{a:function(){return Fn(r,Fn(o,yn(e,n)))},b:function(){return Fn(r,Fn(o,yn(n,e)))}}}}];us<Ll.length;us++)Ut(Ll[us]);var em=function(){function r(){}return r.prototype.fetch=function(t,e){return fetch(t,e)},r.prototype.now=function(){return performance.now()},r.prototype.encode=function(t,e){if(e!=="utf-8"&&e!=="utf8")throw new Error("Browser's encoder only supports utf-8, but got "+e);return this.textEncoder==null&&(this.textEncoder=new TextEncoder),this.textEncoder.encode(t)},r.prototype.decode=function(t,e){return new TextDecoder(e).decode(t)},r}();J().get("IS_BROWSER")&&J().setPlatform("browser",new em);var cs,tm=function(){return U(40522)},nm=function(){function r(){this.util=U(90753),this.textEncoder=new this.util.TextEncoder}return r.prototype.fetch=function(t,e){return J().global.fetch!=null?J().global.fetch(t,e):(cs==null&&(cs=tm()),cs(t,e))},r.prototype.now=function(){var t=me.hrtime();return 1e3*t[0]+t[1]/1e6},r.prototype.encode=function(t,e){if(e!=="utf-8"&&e!=="utf8")throw new Error("Node built-in encoder only supports utf-8, but got "+e);return this.textEncoder.encode(t)},r.prototype.decode=function(t,e){return t.length===0?"":new this.util.TextDecoder(e).decode(t)},r}();J().get("IS_NODE")&&J().setPlatform("node",new nm);var ls={float32:4,int32:4,uint16:2,uint8:1,bool:1},Gi=4;function Wl(r,t){for(var e={},n=0,o=function(s){var u=s.name,c=s.dtype,l=s.shape,f=Re(l),h=void 0;if("quantization"in s){var d=s.quantization;if(d.dtype!=="uint8"&&d.dtype!=="uint16")throw new Error("Weight "+s.name+" has unknown quantization dtype "+d.dtype+". Supported quantization dtypes are: 'uint8' and 'uint16'.");var p=ls[d.dtype],v=r.slice(n,n+f*p),g=d.dtype==="uint8"?new Uint8Array(v):new Uint16Array(v);if(c==="float32")h=Float32Array.from(g,function(S){return S*d.scale+d.min});else{if(c!=="int32")throw new Error("Unsupported dtype in weight '"+u+"': "+c);h=Int32Array.from(g,function(S){return Math.round(S*d.scale+d.min)})}n+=f*p}else if(c==="string"){var A=Re(s.shape);h=[];for(var w=0;w<A;w++){var E=new Uint32Array(r.slice(n,n+Gi))[0];n+=Gi;var x=new Uint8Array(r.slice(n,n+E));h.push(x),n+=E}}else{var C=ls[c];if(v=r.slice(n,n+f*C),c==="float32")h=new Float32Array(v);else if(c==="int32")h=new Int32Array(v);else{if(c!=="bool")throw new Error("Unsupported dtype in weight '"+u+"': "+c);h=new Uint8Array(v)}n+=f*C}e[u]=Tn(h,l,c)},i=0,a=t;i<a.length;i++)o(a[i]);return e}function rm(r){if(r===null)throw new Error("Invalid input value: "+JSON.stringify(r));var t=0,e=[];r.forEach(function(i){if(t+=i.byteLength,e.push(i.byteLength===i.buffer.byteLength?i:new i.constructor(i)),!(i instanceof Float32Array||i instanceof Int32Array||i instanceof Uint8Array))throw new Error("Unsupported TypedArray subtype: "+i.constructor.name)});var n=new Uint8Array(t),o=0;return e.forEach(function(i){n.set(new Uint8Array(i.buffer),o),o+=i.byteLength}),n.buffer}var fs=typeof Qe!="undefined"&&(typeof Blob=="undefined"||typeof atob=="undefined"||typeof btoa=="undefined");function Ql(r){return fs?Qe.byteLength(r):new Blob([r]).size}function hs(r){var t=0;r.forEach(function(o){t+=o.byteLength});var e=new Uint8Array(t),n=0;return r.forEach(function(o){e.set(new Uint8Array(o),n),n+=o.byteLength}),e.buffer}function _l(r){for(r=r.trim();r.endsWith("/");)r=r.slice(0,r.length-1);var t=r.split("/");return t[t.length-1]}function ei(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:Ql(JSON.stringify(r.modelTopology)),weightSpecsBytes:r.weightSpecs==null?0:Ql(JSON.stringify(r.weightSpecs)),weightDataBytes:r.weightData==null?0:r.weightData.byteLength}}var Vn=function(){function r(){this.saveRouters=[],this.loadRouters=[]}return r.getInstance=function(){return r.instance==null&&(r.instance=new r),r.instance},r.registerSaveRouter=function(t){r.getInstance().saveRouters.push(t)},r.registerLoadRouter=function(t){r.getInstance().loadRouters.push(t)},r.getSaveHandlers=function(t){return r.getHandlers(t,"save")},r.getLoadHandlers=function(t,e){return r.getHandlers(t,"load",e)},r.getHandlers=function(t,e,n){var o=[];return(e==="load"?r.getInstance().loadRouters:r.getInstance().saveRouters).forEach(function(i){var a=i(t,n);a!==null&&o.push(a)}),o},r}(),Eo="://",Qr=function(){function r(){this.managers={}}return r.getInstance=function(){return r.instance==null&&(r.instance=new r),r.instance},r.registerManager=function(t,e){R(t!=null,function(){return"scheme must not be undefined or null."}),t.endsWith(Eo)&&(t=t.slice(0,t.indexOf(Eo))),R(t.length>0,function(){return"scheme must not be an empty string."});var n=r.getInstance();R(n.managers[t]==null,function(){return"A model store manager is already registered for scheme '"+t+"'."}),n.managers[t]=e},r.getManager=function(t){var e=this.getInstance().managers[t];if(e==null)throw new Error("Cannot find model manager for scheme '"+t+"'");return e},r.getSchemes=function(){return Object.keys(this.getInstance().managers)},r}();function Xi(r){if(r.indexOf(Eo)===-1)throw new Error("The url string provided does not contain a scheme. Supported schemes are: "+Qr.getSchemes().join(","));return{scheme:r.split(Eo)[0],path:r.split(Eo)[1]}}function zl(r,t,e){return e===void 0&&(e=!1),xe(this,void 0,void 0,function(){var n,o,i,a,s,u,c,l,f;return Ie(this,function(h){switch(h.label){case 0:return R(r!==t,function(){return"Old path and new path are the same: '"+r+"'"}),R((n=Vn.getLoadHandlers(r)).length>0,function(){return"Copying failed because no load handler is found for source URL "+r+"."}),R(n.length<2,function(){return"Copying failed because more than one ("+n.length+") load handlers for source URL "+r+"."}),o=n[0],R((i=Vn.getSaveHandlers(t)).length>0,function(){return"Copying failed because no save handler is found for destination URL "+t+"."}),R(i.length<2,function(){return"Copying failed because more than one ("+n.length+") save handlers for destination URL "+t+"."}),a=i[0],s=Xi(r).scheme,u=Xi(r).path,c=s===Xi(r).scheme,[4,o.load()];case 1:return l=h.sent(),e&&c?[4,Qr.getManager(s).removeModel(u)]:[3,3];case 2:h.sent(),h.label=3;case 3:return[4,a.save(l)];case 4:return f=h.sent(),!e||c?[3,6]:[4,Qr.getManager(s).removeModel(u)];case 5:h.sent(),h.label=6;case 6:return[2,f.modelArtifactsInfo]}})})}var ro="models_store",_r="model_info_store";function Ul(){if(!J().getBool("IS_BROWSER"))throw new Error("Failed to obtain IndexedDB factory because the current environmentis not a web browser.");var r=window||self,t=r.indexedDB||r.mozIndexedDB||r.webkitIndexedDB||r.msIndexedDB||r.shimIndexedDB;if(t==null)throw new Error("The current browser does not appear to support IndexedDB.");return t}function ds(r){var t=r.result;t.createObjectStore(ro,{keyPath:"modelPath"}),t.createObjectStore(_r,{keyPath:"modelPath"})}var Co=function(){function r(t){if(this.indexedDB=Ul(),t==null||!t)throw new Error("For IndexedDB, modelPath must not be null, undefined or empty.");this.modelPath=t}return r.prototype.save=function(t){return xe(this,void 0,void 0,function(){return Ie(this,function(e){if(t.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");return[2,this.databaseAction(this.modelPath,t)]})})},r.prototype.load=function(){return xe(this,void 0,void 0,function(){return Ie(this,function(t){return[2,this.databaseAction(this.modelPath)]})})},r.prototype.databaseAction=function(t,e){var n=this;return new Promise(function(o,i){var a=n.indexedDB.open("tensorflowjs",1);a.onupgradeneeded=function(){return ds(a)},a.onsuccess=function(){var s=a.result;if(e==null){var u=s.transaction(ro,"readonly"),c=u.objectStore(ro).get(n.modelPath);c.onsuccess=function(){if(c.result==null)return s.close(),i(new Error("Cannot find model with path '"+n.modelPath+"' in IndexedDB."));o(c.result.modelArtifacts)},c.onerror=function(v){return s.close(),i(c.error)},u.oncomplete=function(){return s.close()}}else{var l,f=ei(e),h=s.transaction(_r,"readwrite"),d=h.objectStore(_r),p=d.put({modelPath:n.modelPath,modelArtifactsInfo:f});p.onsuccess=function(){var v=(l=s.transaction(ro,"readwrite")).objectStore(ro).put({modelPath:n.modelPath,modelArtifacts:e,modelArtifactsInfo:f});v.onsuccess=function(){return o({modelArtifactsInfo:f})},v.onerror=function(g){var A=(d=h.objectStore(_r)).delete(n.modelPath);A.onsuccess=function(){return s.close(),i(v.error)},A.onerror=function(w){return s.close(),i(v.error)}}},p.onerror=function(v){return s.close(),i(p.error)},h.oncomplete=function(){l==null?s.close():l.oncomplete=function(){return s.close()}}}},a.onerror=function(s){return i(a.error)}})},r.URL_SCHEME="indexeddb://",r}(),Hl=function(r){return J().getBool("IS_BROWSER")&&!Array.isArray(r)&&r.startsWith(Co.URL_SCHEME)?(t=r.slice(Co.URL_SCHEME.length),new Co(t)):null;var t};Vn.registerSaveRouter(Hl),Vn.registerLoadRouter(Hl);var om=function(){function r(){this.indexedDB=Ul()}return r.prototype.listModels=function(){return xe(this,void 0,void 0,function(){var t=this;return Ie(this,function(e){return[2,new Promise(function(n,o){var i=t.indexedDB.open("tensorflowjs",1);i.onupgradeneeded=function(){return ds(i)},i.onsuccess=function(){var a=i.result,s=a.transaction(_r,"readonly"),u=s.objectStore(_r).getAll();u.onsuccess=function(){for(var c={},l=0,f=u.result;l<f.length;l++){var h=f[l];c[h.modelPath]=h.modelArtifactsInfo}n(c)},u.onerror=function(c){return a.close(),o(u.error)},s.oncomplete=function(){return a.close()}},i.onerror=function(a){return o(i.error)}})]})})},r.prototype.removeModel=function(t){return xe(this,void 0,void 0,function(){var e=this;return Ie(this,function(n){var o;return t=(o=t).startsWith(Co.URL_SCHEME)?o.slice(Co.URL_SCHEME.length):o,[2,new Promise(function(i,a){var s=e.indexedDB.open("tensorflowjs",1);s.onupgradeneeded=function(){return ds(s)},s.onsuccess=function(){var u,c=s.result,l=c.transaction(_r,"readwrite"),f=l.objectStore(_r),h=f.get(t);h.onsuccess=function(){if(h.result==null)return c.close(),a(new Error("Cannot find model with path '"+t+"' in IndexedDB."));var d=f.delete(t),p=function(){var v=(u=c.transaction(ro,"readwrite")).objectStore(ro).delete(t);v.onsuccess=function(){return i(h.result.modelArtifactsInfo)},v.onerror=function(g){return a(h.error)}};d.onsuccess=p,d.onerror=function(v){return p(),c.close(),a(h.error)}},h.onerror=function(d){return c.close(),a(h.error)},l.oncomplete=function(){u==null?c.close():u.oncomplete=function(){return c.close()}}},s.onerror=function(u){return a(s.error)}})]})})},r}();if(J().getBool("IS_BROWSER"))try{Qr.registerManager(Co.URL_SCHEME,new om)}catch(r){}var Br="/",Io="tensorflowjs_models",jl="info",im="model_topology",am="weight_specs",sm="weight_data",um="model_metadata";function Vl(r){return{info:[Io,r,jl].join(Br),topology:[Io,r,im].join(Br),weightSpecs:[Io,r,am].join(Br),weightData:[Io,r,sm].join(Br),modelMetadata:[Io,r,um].join(Br)}}function cm(r){var t=r.split(Br);if(t.length<3)throw new Error("Invalid key format: "+r);return t.slice(1,t.length-1).join(Br)}var So=function(){function r(t){if(!J().getBool("IS_BROWSER")||typeof window=="undefined"||window.localStorage===void 0)throw new Error("The current environment does not support local storage.");if(this.LS=window.localStorage,t==null||!t)throw new Error("For local storage, modelPath must not be null, undefined or empty.");this.modelPath=t,this.keys=Vl(this.modelPath)}return r.prototype.save=function(t){return xe(this,void 0,void 0,function(){var e,n,o;return Ie(this,function(i){if(t.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");e=JSON.stringify(t.modelTopology),n=JSON.stringify(t.weightSpecs),o=ei(t);try{return this.LS.setItem(this.keys.info,JSON.stringify(o)),this.LS.setItem(this.keys.topology,e),this.LS.setItem(this.keys.weightSpecs,n),this.LS.setItem(this.keys.weightData,function(a){if(fs)return Qe.from(a).toString("base64");for(var s=new Uint8Array(a),u="",c=0,l=s.length;c<l;c++)u+=String.fromCharCode(s[c]);return btoa(u)}(t.weightData)),this.LS.setItem(this.keys.modelMetadata,JSON.stringify({format:t.format,generatedBy:t.generatedBy,convertedBy:t.convertedBy,userDefinedMetadata:t.userDefinedMetadata})),[2,{modelArtifactsInfo:o}]}catch(a){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+".")}return[2]})})},r.prototype.load=function(){return xe(this,void 0,void 0,function(){var t,e,n,o,i,a,s;return Ie(this,function(u){if((t=JSON.parse(this.LS.getItem(this.keys.info)))==null)throw new Error("In local storage, there is no model with name '"+this.modelPath+"'");if(t.modelTopologyType!=="JSON")throw new Error("BrowserLocalStorage does not support loading non-JSON model topology yet.");if(e={},(n=JSON.parse(this.LS.getItem(this.keys.topology)))==null)throw new Error("In local storage, the topology of model '"+this.modelPath+"' is missing.");if(e.modelTopology=n,(o=JSON.parse(this.LS.getItem(this.keys.weightSpecs)))==null)throw new Error("In local storage, the weight specs of model '"+this.modelPath+"' are missing.");if(e.weightSpecs=o,(i=this.LS.getItem(this.keys.modelMetadata))!=null&&(a=JSON.parse(i),e.format=a.format,e.generatedBy=a.generatedBy,e.convertedBy=a.convertedBy,e.userDefinedMetadata=a.userDefinedMetadata),(s=this.LS.getItem(this.keys.weightData))==null)throw new Error("In local storage, the binary weight values of model '"+this.modelPath+"' are missing.");return e.weightData=function(c){if(fs){var l=Qe.from(c,"base64");return l.buffer.slice(l.byteOffset,l.byteOffset+l.byteLength)}for(var f=atob(c),h=new Uint8Array(f.length),d=0;d<f.length;++d)h.set([f.charCodeAt(d)],d);return h.buffer}(s),[2,e]})})},r.URL_SCHEME="localstorage://",r}(),Gl=function(r){return J().getBool("IS_BROWSER")&&!Array.isArray(r)&&r.startsWith(So.URL_SCHEME)?(t=r.slice(So.URL_SCHEME.length),new So(t)):null;var t};Vn.registerSaveRouter(Gl),Vn.registerLoadRouter(Gl);var lm=function(){function r(){R(J().getBool("IS_BROWSER"),function(){return"Current environment is not a web browser"}),R(typeof window=="undefined"||window.localStorage!==void 0,function(){return"Current browser does not appear to support localStorage"}),this.LS=window.localStorage}return r.prototype.listModels=function(){return xe(this,void 0,void 0,function(){var t,e,n,o,i,a;return Ie(this,function(s){for(t={},e=Io+Br,n=Br+jl,o=0;o<this.LS.length;++o)(i=this.LS.key(o)).startsWith(e)&&i.endsWith(n)&&(a=cm(i),t[a]=JSON.parse(this.LS.getItem(i)));return[2,t]})})},r.prototype.removeModel=function(t){return xe(this,void 0,void 0,function(){var e,n;return Ie(this,function(o){var i;if(t=(i=t).startsWith(So.URL_SCHEME)?i.slice(So.URL_SCHEME.length):i,e=Vl(t),this.LS.getItem(e.info)==null)throw new Error("Cannot find model at path '"+t+"'");return n=JSON.parse(this.LS.getItem(e.info)),this.LS.removeItem(e.info),this.LS.removeItem(e.topology),this.LS.removeItem(e.weightSpecs),this.LS.removeItem(e.weightData),[2,n]})})},r}();if(J().getBool("IS_BROWSER"))try{Qr.registerManager(So.URL_SCHEME,new lm)}catch(r){}var fm="model",hm=".json",dm=".weights.bin";function Xl(r){return new Promise(function(t){return setTimeout(t)}).then(r)}var ps=function(){function r(t){if(!J().getBool("IS_BROWSER"))throw new Error("browserDownloads() cannot proceed because the current environment is not a browser.");t.startsWith(r.URL_SCHEME)&&(t=t.slice(r.URL_SCHEME.length)),t!=null&&t.length!==0||(t=fm),this.modelTopologyFileName=t+hm,this.weightDataFileName=t+dm}return r.prototype.save=function(t){return xe(this,void 0,void 0,function(){var e,n,o,i,a,s;return Ie(this,function(u){switch(u.label){case 0:if(typeof document=="undefined")throw new Error("Browser downloads are not supported in this environment since `document` is not present");if(e=window.URL.createObjectURL(new Blob([t.weightData],{type:"application/octet-stream"})),!(t.modelTopology instanceof ArrayBuffer))return[3,1];throw new Error("BrowserDownloads.save() does not support saving model topology in binary formats yet.");case 1:return n=[{paths:["./"+this.weightDataFileName],weights:t.weightSpecs}],o={modelTopology:t.modelTopology,format:t.format,generatedBy:t.generatedBy,convertedBy:t.convertedBy,weightsManifest:n},i=window.URL.createObjectURL(new Blob([JSON.stringify(o)],{type:"application/json"})),(a=this.jsonAnchor==null?document.createElement("a"):this.jsonAnchor).download=this.modelTopologyFileName,a.href=i,[4,Xl(function(){return a.dispatchEvent(new MouseEvent("click"))})];case 2:return u.sent(),t.weightData==null?[3,4]:((s=this.weightDataAnchor==null?document.createElement("a"):this.weightDataAnchor).download=this.weightDataFileName,s.href=e,[4,Xl(function(){return s.dispatchEvent(new MouseEvent("click"))})]);case 3:u.sent(),u.label=4;case 4:return[2,{modelArtifactsInfo:ei(t)}]}})})},r.URL_SCHEME="downloads://",r}(),pm=function(){function r(t){if(t==null||t.length<1)throw new Error("When calling browserFiles, at least 1 file is required, but received "+t);this.files=t}return r.prototype.load=function(){return xe(this,void 0,void 0,function(){var t,e,n=this;return Ie(this,function(o){return t=this.files[0],e=this.files.slice(1),[2,new Promise(function(i,a){var s=new FileReader;s.onload=function(u){var c=JSON.parse(u.target.result),l=c.modelTopology;if(l!=null){e.length===0&&i({modelTopology:l});var f=c.weightsManifest;if(f!=null){var h;try{h=n.checkManifestAndWeightFiles(f,e)}catch(g){return void a(g)}var d=[],p=[],v=[];f.forEach(function(g){g.paths.forEach(function(A){p.push(A),v.push(null)}),d.push.apply(d,g.weights)}),f.forEach(function(g){g.paths.forEach(function(A){var w=new FileReader;w.onload=function(E){var x=E.target.result,C=p.indexOf(A);v[C]=x,v.indexOf(null)===-1&&i({modelTopology:l,weightSpecs:d,weightData:hs(v),format:c.format,generatedBy:c.generatedBy,convertedBy:c.convertedBy,userDefinedMetadata:c.userDefinedMetadata})},w.onerror=function(E){return a("Failed to weights data from file of path '"+A+"'.")},w.readAsArrayBuffer(h[A])})})}else a(new Error("weightManifest field is missing from file "+t.name))}else a(new Error("modelTopology field is missing from file "+t.name))},s.onerror=function(u){return a("Failed to read model topology and weights manifest JSON from file '"+t.name+"'. BrowserFiles supports loading Keras-style tf.Model artifacts only.")},s.readAsText(t)})]})})},r.prototype.checkManifestAndWeightFiles=function(t,e){for(var n=[],o=e.map(function(u){return _l(u.name)}),i={},a=0,s=t;a<s.length;a++)s[a].paths.forEach(function(u){var c=_l(u);if(n.indexOf(c)!==-1)throw new Error("Duplicate file basename found in weights manifest: '"+c+"'");if(n.push(c),o.indexOf(c)===-1)throw new Error("Weight file with basename '"+c+"' is not provided.");i[u]=e[o.indexOf(c)]});if(n.length!==e.length)throw new Error("Mismatch in the number of files in weights manifest ("+n.length+") and the number of weight files provided ("+e.length+").");return i},r}();function Jl(r,t,e,n){(function(i){R(i!=null&&Array.isArray(i)&&i.length>0,function(){return"promises must be a none empty array"})})(r),function(i,a){R(i>=0&&i<=1,function(){return"Progress fraction must be in range [0, 1], but got startFraction "+i}),R(a>=0&&a<=1,function(){return"Progress fraction must be in range [0, 1], but got endFraction "+a}),R(a>=i,function(){return"startFraction must be no more than endFraction, but got startFraction "+i+" and endFraction "+a})}(e=e==null?0:e,n=n==null?1:n);var o=0;return Promise.all(r.map(function(i){return i.then(function(a){var s=e+ ++o/r.length*(n-e);return t(s),a}),i}))}function Kl(r,t){return xe(this,void 0,void 0,function(){var e,n,o,i,a,s,u,c,l;return Ie(this,function(f){switch(f.label){case 0:return t==null&&(t={}),e=t.fetchFunc==null?J().platform.fetch:t.fetchFunc,n=r.map(function(h){return e(h,t.requestInit,{isBinary:!0})}),o=0,i=.5,t.onProgress!=null?[3,2]:[4,Promise.all(n)];case 1:return a=f.sent(),[3,4];case 2:return[4,Jl(n,t.onProgress,o,i)];case 3:a=f.sent(),f.label=4;case 4:return s=a.map(function(h){return h.arrayBuffer()}),u=.5,c=1,t.onProgress!=null?[3,6]:[4,Promise.all(s)];case 5:return l=f.sent(),[3,8];case 6:return[4,Jl(s,t.onProgress,u,c)];case 7:l=f.sent(),f.label=8;case 8:return[2,l]}})})}function Zl(r){var t=this;return function(e,n,o){return n===void 0&&(n=""),xe(t,void 0,void 0,function(){var i,a,s,u,c,l,f,h,d,p;return Ie(this,function(v){switch(v.label){case 0:if(i=e.map(function(){return!1}),a={},s=o!=null?o.map(function(){return!1}):[],u=[],e.forEach(function(g,A){var w=0;g.weights.forEach(function(E){var x="quantization"in E?E.quantization.dtype:E.dtype,C=ls[x]*Re(E.shape),S=function(){i[A]=!0,a[A]==null&&(a[A]=[]),a[A].push({manifestEntry:E,groupOffset:w,sizeBytes:C})};o!=null?o.forEach(function(N,O){N===E.name&&(S(),s[O]=!0)}):S(),u.push(E.name),w+=C})}),!s.every(function(g){return g}))throw c=o.filter(function(g,A){return!s[A]}),new Error("Could not find weights in manifest with names: "+c.join(", ")+`.
|
|
Manifest JSON has weights with names: `+u.join(", ")+".");return l=i.reduce(function(g,A,w){return A&&g.push(w),g},[]),f=[],l.forEach(function(g){e[g].paths.forEach(function(A){var w=n+(n.endsWith("/")?"":"/")+A;f.push(w)})}),[4,r(f)];case 1:return h=v.sent(),d={},p=0,l.forEach(function(g){for(var A=e[g].paths.length,w=0,E=0;E<A;E++)w+=h[p+E].byteLength;for(var x=new ArrayBuffer(w),C=new Uint8Array(x),S=0,N=0;N<A;N++){var O=new Uint8Array(h[p+N]);C.set(O,S),S+=O.byteLength}a[g].forEach(function(F){var P=Wl(x.slice(F.groupOffset,F.groupOffset+F.sizeBytes),[F.manifestEntry]);for(var z in P)d[z]=P[z]}),p+=A}),[2,d]}})})}}Vn.registerSaveRouter(function(r){return J().getBool("IS_BROWSER")&&!Array.isArray(r)&&r.startsWith(ps.URL_SCHEME)?function(t){return t===void 0&&(t="model"),new ps(t)}(r.slice(ps.URL_SCHEME.length)):null});var ql=function(){function r(t,e){if(this.DEFAULT_METHOD="POST",e==null&&(e={}),this.weightPathPrefix=e.weightPathPrefix,this.onProgress=e.onProgress,e.fetchFunc!=null?(R(typeof e.fetchFunc=="function",function(){return"Must pass a function that matches the signature of `fetch` (see https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)"}),this.fetch=e.fetchFunc):this.fetch=J().platform.fetch,R(t!=null&&t.length>0,function(){return"URL path for http must not be null, undefined or empty."}),Array.isArray(t)&&R(t.length===2,function(){return"URL paths for http must have a length of 2, (actual length is "+t.length+")."}),this.path=t,e.requestInit!=null&&e.requestInit.body!=null)throw new Error("requestInit is expected to have no pre-existing body, but has one.");this.requestInit=e.requestInit||{}}return r.prototype.save=function(t){return xe(this,void 0,void 0,function(){var e,n,o,i;return Ie(this,function(a){switch(a.label){case 0:if(t.modelTopology instanceof ArrayBuffer)throw new Error("BrowserHTTPRequest.save() does not support saving model topology in binary formats yet.");return(e=Object.assign({method:this.DEFAULT_METHOD},this.requestInit)).body=new FormData,n=[{paths:["./model.weights.bin"],weights:t.weightSpecs}],o={modelTopology:t.modelTopology,format:t.format,generatedBy:t.generatedBy,convertedBy:t.convertedBy,userDefinedMetadata:t.userDefinedMetadata,weightsManifest:n},e.body.append("model.json",new Blob([JSON.stringify(o)],{type:"application/json"}),"model.json"),t.weightData!=null&&e.body.append("model.weights.bin",new Blob([t.weightData],{type:"application/octet-stream"}),"model.weights.bin"),[4,this.fetch(this.path,e)];case 1:if((i=a.sent()).ok)return[2,{modelArtifactsInfo:ei(t),responses:[i]}];throw new Error("BrowserHTTPRequest.save() failed due to HTTP response status "+i.status+".")}})})},r.prototype.load=function(){return xe(this,void 0,void 0,function(){var t,e,n,o,i,a,s,u,c,l,f,h;return Ie(this,function(d){switch(d.label){case 0:return[4,this.fetch(this.path,this.requestInit)];case 1:if(!(t=d.sent()).ok)throw new Error("Request to "+this.path+" failed with status code "+t.status+". Please verify this URL points to the model JSON of the model to load.");d.label=2;case 2:return d.trys.push([2,4,,5]),[4,t.json()];case 3:return e=d.sent(),[3,5];case 4:throw d.sent(),n="Failed to parse model JSON of response from "+this.path+".",this.path.endsWith(".pb")?n+=" 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.":n+=" Please make sure the server is serving valid JSON for this request.",new Error(n);case 5:if(o=e.modelTopology,i=e.weightsManifest,a=e.generatedBy,s=e.convertedBy,u=e.format,c=e.userDefinedMetadata,o==null&&i==null)throw new Error("The JSON from HTTP path "+this.path+" contains neither model topology or manifest for weights.");return i==null?[3,7]:[4,this.loadWeights(i)];case 6:h=d.sent(),l=h[0],f=h[1],d.label=7;case 7:return[2,{modelTopology:o,weightSpecs:l,weightData:f,userDefinedMetadata:c,generatedBy:a,convertedBy:s,format:u}]}})})},r.prototype.loadWeights=function(t){return xe(this,void 0,void 0,function(){var e,n,o,i,a,s,u,c,l,f,h;return Ie(this,function(d){switch(d.label){case 0:for(e=Array.isArray(this.path)?this.path[1]:this.path,n=function(p){var v=p.lastIndexOf("/"),g=p.lastIndexOf("?"),A=p.substring(0,v),w=g>v?p.substring(g):"";return[A+"/",w]}(e),o=n[0],i=n[1],a=this.weightPathPrefix||o,s=[],u=0,c=t;u<c.length;u++)l=c[u],s.push.apply(s,l.weights);return f=[],t.forEach(function(p){p.paths.forEach(function(v){f.push(a+v+i)})}),[4,Kl(f,{requestInit:this.requestInit,fetchFunc:this.fetch,onProgress:this.onProgress})];case 1:return h=d.sent(),[2,[s,hs(h)]]}})})},r.URL_SCHEME_REGEX=/^https?:\/\//,r}();function vs(r){return r.match(ql.URL_SCHEME_REGEX)!=null}var Yl=function(r,t){return typeof fetch=="undefined"?null:(Array.isArray(r)?r.every(function(e){return vs(e)}):vs(r))?gs(r,{onProgress:t}):null};function gs(r,t){return new ql(r,t)}Vn.registerSaveRouter(Yl),Vn.registerLoadRouter(Yl);var ms=function(){function r(t){this.modelArtifacts=t}return r.prototype.load=function(){return xe(this,void 0,void 0,function(){return Ie(this,function(t){return[2,this.modelArtifacts]})})},r}(),vm=function(){function r(t){this.saveHandler=t}return r.prototype.save=function(t){return xe(this,void 0,void 0,function(){return Ie(this,function(e){return[2,this.saveHandler(t)]})})},r}(),$l=Object.freeze({browserFiles:function(r){return new pm(r)},browserHTTPRequest:function(r,t){return gs(r,t)},concatenateArrayBuffers:hs,decodeWeights:Wl,encodeWeights:function(r,t){return xe(this,void 0,void 0,function(){var e,n,o,i,a,s=this;return Ie(this,function(u){switch(u.label){case 0:for(e=[],n=[],o=Array.isArray(r)?r.map(function(c){return c.name}):Object.keys(r),i=function(c){var l=o[c],f=Array.isArray(r)?r[c].tensor:r[l];if(f.dtype!=="float32"&&f.dtype!=="int32"&&f.dtype!=="bool"&&f.dtype!=="string")throw new Error("Unsupported dtype in weight '"+l+"': "+f.dtype);var h={name:l,shape:f.shape,dtype:f.dtype};if(f.dtype==="string"){var d=new Promise(function(p){return xe(s,void 0,void 0,function(){var v,g,A,w,E,x,C;return Ie(this,function(S){switch(S.label){case 0:return[4,f.bytes()];case 1:for(v=S.sent(),g=v.reduce(function(N,O){return N+O.length},0)+Gi*v.length,A=new Uint8Array(g),w=0,E=0;E<v.length;E++)x=v[E],C=new Uint8Array(new Uint32Array([x.length]).buffer),A.set(C,w),w+=Gi,A.set(x,w),w+=x.length;return p(A),[2]}})})});n.push(d)}else n.push(f.data());t!=null&&(h.group=t),e.push(h)},a=0;a<o.length;++a)i(a);return[4,Promise.all(n)];case 1:return[2,{data:rm(u.sent()),specs:e}]}})})},fromMemory:function(r,t,e,n){return arguments.length===1?r.modelTopology!=null||r.weightSpecs!=null?new ms(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 ms({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 ms({modelTopology:r,weightSpecs:t,weightData:e,trainingConfig:n}))},getLoadHandlers:function(r,t){return Vn.getLoadHandlers(r,t)},getModelArtifactsInfoForJSON:ei,getSaveHandlers:function(r){return Vn.getSaveHandlers(r)},http:gs,isHTTPScheme:vs,loadWeights:function(r,t,e,n){return t===void 0&&(t=""),xe(this,void 0,void 0,function(){return Ie(this,function(o){return[2,Zl(function(i){return Kl(i,{requestInit:n})})(r,t,e)]})})},registerLoadRouter:function(r){return Vn.registerLoadRouter(r)},registerSaveRouter:function(r){return Vn.registerSaveRouter(r)},weightsLoaderFactory:Zl,withSaveHandler:function(r){return new vm(r)},copyModel:function(r,t){return xe(this,void 0,void 0,function(){return Ie(this,function(e){return[2,zl(r,t,!1)]})})},listModels:function(){return xe(this,void 0,void 0,function(){var r,t,e,n,o,i,a;return Ie(this,function(s){switch(s.label){case 0:r=Qr.getSchemes(),t={},e=0,n=r,s.label=1;case 1:return e<n.length?(o=n[e],[4,Qr.getManager(o).listModels()]):[3,4];case 2:for(a in i=s.sent())t[o+Eo+a]=i[a];s.label=3;case 3:return e++,[3,1];case 4:return[2,t]}})})},moveModel:function(r,t){return xe(this,void 0,void 0,function(){return Ie(this,function(e){return[2,zl(r,t,!0)]})})},removeModel:function(r){return xe(this,void 0,void 0,function(){var t;return Ie(this,function(e){return t=Xi(r),[2,Qr.getManager(t.scheme).removeModel(t.path)]})})}}),Ro,gm=Q({confusionMatrix_:function(r,t,e){var n=B(r,"labels","confusionMatrix"),o=B(t,"predictions","confusionMatrix");R(e==null||e>0&&Number.isInteger(e),function(){return"If provided, numClasses must be a positive integer, but got "+e}),R(n.rank===1,function(){return"Expected the rank of labels to be 1, but got "+n.rank}),R(o.rank===1,function(){return"Expected the rank of predictions to be 1, but got "+o.rank}),R(n.shape[0]===o.shape[0],function(){return"Mismatch in the number of examples: "+n.shape[0]+" vs. "+o.shape[0]+". Labels and predictions should have the same number of elements."}),R(e>0&&Number.isInteger(e),function(){return"numClasses is required to be a positive integer, but got "+e});var i=xa(n.asType("int32"),e),a=xa(o.asType("int32"),e);return i.transpose().matMul(a).asType("int32")}}),i1=Object.freeze({confusionMatrix:gm}),mm=Q({fromPixels_:function(r,t){if(t===void 0&&(t=3),t>4)throw new Error("Cannot construct Tensor with more than 4 channels from pixels.");if(r==null)throw new Error("pixels passed to tf.browser.fromPixels() can not be null");var e=!1,n=!1,o=!1,i=!1,a=!1;if(r.data instanceof Uint8Array)e=!0;else if(typeof ImageData!="undefined"&&r instanceof ImageData)n=!0;else if(typeof HTMLVideoElement!="undefined"&&r instanceof HTMLVideoElement)o=!0;else if(typeof HTMLImageElement!="undefined"&&r instanceof HTMLImageElement)i=!0;else{if(r.getContext==null)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);a=!0}if(o&&o&&r.readyState<2)throw new Error("The video element has not loaded data yet. Please wait for `loadeddata` event on the <video> element.");if(Vt("FromPixels",L.backendName)!=null)return L.runKernel("FromPixels",{pixels:r},{numChannels:t});var s,u,c=o?[r.videoWidth,r.videoHeight]:[r.width,r.height],l=c[0],f=c[1];if(a?s=r.getContext("2d").getImageData(0,0,l,f).data:n||e?s=r.data:(i||o)&&(Ro==null&&(Ro=document.createElement("canvas").getContext("2d")),Ro.canvas.width=l,Ro.canvas.height=f,Ro.drawImage(r,0,0,l,f),s=Ro.getImageData(0,0,l,f).data),t===4)u=new Int32Array(s);else{var h=l*f;u=new Int32Array(h*t);for(var d=0;d<h;d++)for(var p=0;p<t;++p)u[d*t+p]=s[4*d+p]}return ma(u,[f,l,t],"int32")}}),As=Object.freeze({toPixels:function(r,t){return xe(this,void 0,void 0,function(){var e,n,o,i,a,s,u,c,l,f,h,d,p,v,g,A,w,E,x,C,S,N,O;return Ie(this,function(F){switch(F.label){case 0:if(e=B(r,"img","toPixels"),r instanceof at||(e=e.toInt()),e.rank!==2&&e.rank!==3)throw new Error("toPixels only supports rank 2 or 3 tensors, got rank "+e.rank+".");if(n=e.shape.slice(0,2),o=n[0],i=n[1],(a=e.rank===2?1:e.shape[2])>4||a===2)throw new Error("toPixels only supports depth of size 1, 3 or 4 but got "+a);return[4,e.data()];case 1:return s=F.sent(),u=e.min(),c=e.max(),[4,Promise.all([u.data(),c.data()])];case 2:if(l=F.sent(),f=l[0],h=l[1],d=f[0],p=h[0],u.dispose(),c.dispose(),e.dtype==="float32"){if(d<0||p>1)throw new Error("Tensor values for a float32 Tensor must be in the range [0 - 1] but got range ["+d+" - "+p+"].")}else{if(e.dtype!=="int32")throw new Error("Unsupported type for toPixels: "+e.dtype+". Please use float32 or int32 tensors.");if(d<0||p>255)throw new Error("Tensor values for a int32 Tensor must be in the range [0 - 255] but got range ["+d+" - "+p+"].")}for(v=e.dtype==="float32"?255:1,g=new Uint8ClampedArray(i*o*4),A=0;A<o*i;++A)w=void 0,E=void 0,x=void 0,C=void 0,a===1?(w=s[A]*v,E=s[A]*v,x=s[A]*v,C=255):a===3?(w=s[3*A]*v,E=s[3*A+1]*v,x=s[3*A+2]*v,C=255):a===4&&(w=s[4*A]*v,E=s[4*A+1]*v,x=s[4*A+2]*v,C=s[4*A+3]*v),g[(S=4*A)+0]=Math.round(w),g[S+1]=Math.round(E),g[S+2]=Math.round(x),g[S+3]=Math.round(C);return t!=null&&(t.width=i,t.height=o,N=t.getContext("2d"),O=new ImageData(g,i,o),N.putImageData(O,0,0)),e!==r&&e.dispose(),[2,g]}})})},fromPixels:mm}),ef=function(){function r(){}return r.prototype.getClassName=function(){return this.constructor.className},r.fromConfig=function(t,e){return new t(e)},r}(),tf=function(){function r(){this.classNameMap={}}return r.getMap=function(){return r.instance==null&&(r.instance=new r),r.instance},r.register=function(t){r.getMap().classNameMap[t.className]=[t,t.fromConfig]},r}();function zr(r){R(r.className!=null,function(){return"Class being registered does not have the static className property defined."}),R(typeof r.className=="string",function(){return"className is required to be a string, but got type "+typeof r.className}),R(r.className.length>0,function(){return"Class being registered has an empty-string as its className, which is disallowed."}),tf.register(r)}var a1=Object.freeze({Serializable:ef,SerializationMap:tf,registerClass:zr}),Am=.001,nf=.1;function ys(){return L.backend.floatPrecision()===32?Am:nf}function xs(r,t,e){var n=!0;if((I(r)||I(t))&&(n=!1),I(r)&&I(t)&&(n=!0),n){var o=r.constructor.name,i=t.constructor.name;if(o!==i)throw new Error("Arrays are of different type. Actual: "+o+". Expected: "+i)}if(Array.isArray(r)&&Array.isArray(t)){var a=lr(r),s=lr(t);if(!Ke(a,s))throw new Error("Arrays have different shapes. Actual: ["+a+"]. Expected: ["+s+"]")}var u=I(r)?r:kt(r),c=I(t)?t:kt(t);if(u.length!==c.length)throw new Error("Arrays have different lengths actual: "+u.length+" vs expected: "+c.length+`.
|
|
Actual: `+u+`.
|
|
Expected: `+c+".");for(var l=0;l<c.length;++l){var f=u[l],h=c[l];if(!e(f,h))throw new Error("Arrays differ: actual["+l+"] = "+f+", expected["+l+"] = "+h+`.
|
|
Actual: `+u+`.
|
|
Expected: `+c+".")}}function bs(r,t,e){return!isFinite(r)&&!isFinite(t)||!(isNaN(r)||isNaN(t)||Math.abs(r-t)>e)}var s1=Object.freeze({TEST_EPSILON_FLOAT16:nf,expectArraysClose:function(r,t,e){return e==null&&(e=ys()),xs(r,t,function(n,o){return bs(n,o,e)})},testEpsilon:ys,expectPromiseToFail:function(r,t){r().then(function(){return t.fail()},function(){return t()})},expectArraysEqual:function(r,t){var e=typeof t=="string"||typeof t=="number"||typeof t=="boolean"?[t]:t;return oe(r)||oe(r[0])||oe(t)||oe(t[0])?xs(r,e,function(n,o){return n==o}):xs(r,t,function(n,o){return bs(n,o,0)})},expectNumbersClose:function(r,t,e){if(e==null&&(e=ys()),!bs(r,t,e))throw new Error("Numbers differ: actual === "+r+", expected === "+t)},expectValuesInRange:function(r,t,e){for(var n=0;n<r.length;n++)if(r[n]<t||r[n]>e)throw new Error("Value out of range:"+r[n]+" low: "+t+", high: "+e)},expectArrayBuffersEqual:function(r,t){expect(new Float32Array(r)).toEqual(new Float32Array(t))}}),u1="1.7.0",c1=Object.freeze({gpgpu_util:zd,webgl_util:fh,forceHalfFloat:function(){J().set("WEBGL_FORCE_F16_TEXTURES",!0)},MathBackendWebGL:$c,setWebGLContext:li,GPGPUContext:Mc}),oo=function(r){function t(){return r!==null&&r.apply(this,arguments)||this}return De(t,r),t.prototype.minimize=function(e,n,o){n===void 0&&(n=!1);var i=this.computeGradients(e,o),a=i.value,s=i.grads;if(o!=null){var u=o.map(function(c){return{name:c.name,tensor:s[c.name]}});this.applyGradients(u)}else this.applyGradients(s);return Wn(s),n?a:(a.dispose(),null)},Object.defineProperty(t.prototype,"iterations",{get:function(){return this.iterations_==null&&(this.iterations_=0),this.iterations_},enumerable:!0,configurable:!0}),t.prototype.incrementIterations=function(){this.iterations_=this.iterations+1},t.prototype.computeGradients=function(e,n){return Vh(e,n)},t.prototype.dispose=function(){this.iterations_!=null&&Wn(this.iterations_)},t.prototype.saveIterations=function(){return xe(this,void 0,void 0,function(){return Ie(this,function(e){return this.iterations_==null&&(this.iterations_=0),[2,{name:"iter",tensor:Te(this.iterations_,"int32")}]})})},t.prototype.getWeights=function(){return xe(this,void 0,void 0,function(){return Ie(this,function(e){throw new Error("getWeights() is not implemented for this optimizer yet.")})})},t.prototype.setWeights=function(e){return xe(this,void 0,void 0,function(){return Ie(this,function(n){throw new Error("setWeights() is not implemented for this optimizer class "+this.getClassName())})})},t.prototype.extractIterations=function(e){return xe(this,void 0,void 0,function(){var n;return Ie(this,function(o){switch(o.label){case 0:return n=this,[4,e[0].tensor.data()];case 1:return n.iterations_=o.sent()[0],[2,e.slice(1)]}})})},t}(ef);Object.defineProperty(oo,Symbol.hasInstance,{value:function(r){return r.minimize!=null&&r.computeGradients!=null&&r.applyGradients!=null}});var rf=function(r){function t(e,n,o){o===void 0&&(o=null);var i=r.call(this)||this;return i.learningRate=e,i.rho=n,i.epsilon=o,i.accumulatedGrads=[],i.accumulatedUpdates=[],o==null&&(i.epsilon=L.backend.epsilon()),i}return De(t,r),t.prototype.applyGradients=function(e){var n=this;(Array.isArray(e)?e.map(function(o){return o.name}):Object.keys(e)).forEach(function(o,i){var a=L.registeredVariables[o];n.accumulatedGrads[i]==null&&(n.accumulatedGrads[i]={originalName:o+"/accum_grad",variable:Le(function(){return Tt(a).variable(!1)})}),n.accumulatedUpdates[i]==null&&(n.accumulatedUpdates[i]={originalName:o+"/accum_var",variable:Le(function(){return Tt(a).variable(!1)})});var s=Array.isArray(e)?e[i].tensor:e[o];if(s!=null){var u=n.accumulatedGrads[i].variable,c=n.accumulatedUpdates[i].variable;Le(function(){var l=u.mul(n.rho).add(s.square().mul(1-n.rho)),f=c.add(n.epsilon).sqrt().div(u.add(n.epsilon).sqrt()).mul(s),h=c.mul(n.rho).add(f.square().mul(1-n.rho));u.assign(l),c.assign(h);var d=f.mul(-n.learningRate).add(a);a.assign(d)})}}),this.incrementIterations()},t.prototype.dispose=function(){this.accumulatedUpdates!=null&&(Wn(this.accumulatedGrads.map(function(e){return e.variable})),Wn(this.accumulatedUpdates.map(function(e){return e.variable})))},t.prototype.getWeights=function(){return xe(this,void 0,void 0,function(){var e;return Ie(this,function(n){switch(n.label){case 0:return e=this.accumulatedGrads.concat(this.accumulatedUpdates),[4,this.saveIterations()];case 1:return[2,[n.sent()].concat(e.map(function(o){return{name:o.originalName,tensor:o.variable}}))]}})})},t.prototype.setWeights=function(e){return xe(this,void 0,void 0,function(){var n;return Ie(this,function(o){switch(o.label){case 0:return[4,this.extractIterations(e)];case 1:return e=o.sent(),n=e.length/2,this.accumulatedGrads=e.slice(0,n).map(function(i){return{originalName:i.name,variable:i.tensor.variable(!1)}}),this.accumulatedUpdates=e.slice(n,2*n).map(function(i){return{originalName:i.name,variable:i.tensor.variable(!1)}}),[2]}})})},t.prototype.getConfig=function(){return{learningRate:this.learningRate,rho:this.rho,epsilon:this.epsilon}},t.fromConfig=function(e,n){return new e(n.learningRate,n.rho,n.epsilon)},t.className="Adadelta",t}(oo);zr(rf);var of=function(r){function t(e,n){n===void 0&&(n=.1);var o=r.call(this)||this;return o.learningRate=e,o.initialAccumulatorValue=n,o.accumulatedGrads=[],o}return De(t,r),t.prototype.applyGradients=function(e){var n=this;(Array.isArray(e)?e.map(function(o){return o.name}):Object.keys(e)).forEach(function(o,i){var a=L.registeredVariables[o];n.accumulatedGrads[i]==null&&(n.accumulatedGrads[i]={originalName:o+"/accumulator",variable:Le(function(){return hr(a.shape,n.initialAccumulatorValue).variable(!1)})});var s=Array.isArray(e)?e[i].tensor:e[o];if(s!=null){var u=n.accumulatedGrads[i].variable;Le(function(){var c=u.add(s.square());u.assign(c);var l=s.div(c.add(L.backend.epsilon()).sqrt()).mul(-n.learningRate).add(a);a.assign(l)})}}),this.incrementIterations()},t.prototype.dispose=function(){this.accumulatedGrads!=null&&Wn(this.accumulatedGrads.map(function(e){return e.variable}))},t.prototype.getWeights=function(){return xe(this,void 0,void 0,function(){return Ie(this,function(e){switch(e.label){case 0:return[4,this.saveIterations()];case 1:return[2,[e.sent()].concat(this.accumulatedGrads.map(function(n){return{name:n.originalName,tensor:n.variable}}))]}})})},t.prototype.setWeights=function(e){return xe(this,void 0,void 0,function(){return Ie(this,function(n){switch(n.label){case 0:return[4,this.extractIterations(e)];case 1:return e=n.sent(),this.accumulatedGrads=e.map(function(o){return{originalName:o.name,variable:o.tensor.variable(!1)}}),[2]}})})},t.prototype.getConfig=function(){return{learningRate:this.learningRate,initialAccumulatorValue:this.initialAccumulatorValue}},t.fromConfig=function(e,n){return new e(n.learningRate,n.initialAccumulatorValue)},t.className="Adagrad",t}(oo);zr(of);var af=function(r){function t(e,n,o,i){i===void 0&&(i=null);var a=r.call(this)||this;return a.learningRate=e,a.beta1=n,a.beta2=o,a.epsilon=i,a.accumulatedFirstMoment=[],a.accumulatedSecondMoment=[],Le(function(){a.accBeta1=Te(n).variable(),a.accBeta2=Te(o).variable()}),i==null&&(a.epsilon=L.backend.epsilon()),a}return De(t,r),t.prototype.applyGradients=function(e){var n=this,o=Array.isArray(e)?e.map(function(i){return i.name}):Object.keys(e);Le(function(){var i=yn(1,n.accBeta1),a=yn(1,n.accBeta2);o.forEach(function(s,u){var c=L.registeredVariables[s];n.accumulatedFirstMoment[u]==null&&(n.accumulatedFirstMoment[u]={originalName:s+"/m",variable:Le(function(){return Tt(c).variable(!1)})}),n.accumulatedSecondMoment[u]==null&&(n.accumulatedSecondMoment[u]={originalName:s+"/v",variable:Le(function(){return Tt(c).variable(!1)})});var l=Array.isArray(e)?e[u].tensor:e[s];if(l!=null){var f=n.accumulatedFirstMoment[u].variable,h=n.accumulatedSecondMoment[u].variable,d=f.mul(n.beta1).add(l.mul(1-n.beta1)),p=h.mul(n.beta2).add(l.square().mul(1-n.beta2)),v=d.div(i),g=p.div(a);f.assign(d),h.assign(p);var A=v.div(g.sqrt().add(n.epsilon)).mul(-n.learningRate).add(c);c.assign(A)}}),n.accBeta1.assign(n.accBeta1.mul(n.beta1)),n.accBeta2.assign(n.accBeta2.mul(n.beta2))}),this.incrementIterations()},t.prototype.dispose=function(){this.accBeta1.dispose(),this.accBeta2.dispose(),this.accumulatedFirstMoment!=null&&Wn(this.accumulatedFirstMoment.map(function(e){return e.variable})),this.accumulatedSecondMoment!=null&&Wn(this.accumulatedSecondMoment.map(function(e){return e.variable}))},t.prototype.getWeights=function(){return xe(this,void 0,void 0,function(){var e;return Ie(this,function(n){switch(n.label){case 0:return e=this.accumulatedFirstMoment.concat(this.accumulatedSecondMoment),[4,this.saveIterations()];case 1:return[2,[n.sent()].concat(e.map(function(o){return{name:o.originalName,tensor:o.variable}}))]}})})},t.prototype.setWeights=function(e){return xe(this,void 0,void 0,function(){var n,o=this;return Ie(this,function(i){switch(i.label){case 0:return[4,this.extractIterations(e)];case 1:return e=i.sent(),Le(function(){o.accBeta1.assign(_i(o.beta1,o.iterations_+1)),o.accBeta2.assign(_i(o.beta2,o.iterations_+1))}),n=e.length/2,this.accumulatedFirstMoment=e.slice(0,n).map(function(a){return{originalName:a.name,variable:a.tensor.variable(!1)}}),this.accumulatedSecondMoment=e.slice(n,2*n).map(function(a){return{originalName:a.name,variable:a.tensor.variable(!1)}}),[2]}})})},t.prototype.getConfig=function(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon}},t.fromConfig=function(e,n){return new e(n.learningRate,n.beta1,n.beta2,n.epsilon)},t.className="Adam",t}(oo);zr(af);var sf=function(r){function t(e,n,o,i,a){i===void 0&&(i=null),a===void 0&&(a=0);var s=r.call(this)||this;return s.learningRate=e,s.beta1=n,s.beta2=o,s.epsilon=i,s.decay=a,s.accumulatedFirstMoment=[],s.accumulatedWeightedInfNorm=[],Le(function(){s.iteration=Te(0).variable(),s.accBeta1=Te(n).variable()}),i==null&&(s.epsilon=L.backend.epsilon()),s}return De(t,r),t.prototype.applyGradients=function(e){var n=this,o=Array.isArray(e)?e.map(function(i){return i.name}):Object.keys(e);Le(function(){var i=yn(1,n.accBeta1),a=ir(-n.learningRate,n.iteration.mul(n.decay).add(1));o.forEach(function(s,u){var c=L.registeredVariables[s];n.accumulatedFirstMoment[u]==null&&(n.accumulatedFirstMoment[u]={originalName:s+"/m",variable:Tt(c).variable(!1)}),n.accumulatedWeightedInfNorm[u]==null&&(n.accumulatedWeightedInfNorm[u]={originalName:s+"/v",variable:Tt(c).variable(!1)});var l=Array.isArray(e)?e[u].tensor:e[s];if(l!=null){var f=n.accumulatedFirstMoment[u].variable,h=n.accumulatedWeightedInfNorm[u].variable,d=f.mul(n.beta1).add(l.mul(1-n.beta1)),p=h.mul(n.beta2),v=l.abs(),g=p.maximum(v);f.assign(d),h.assign(g);var A=a.div(i).mul(d.div(g.add(n.epsilon))).add(c);c.assign(A)}}),n.iteration.assign(n.iteration.add(1)),n.accBeta1.assign(n.accBeta1.mul(n.beta1))}),this.incrementIterations()},t.prototype.dispose=function(){this.accBeta1.dispose(),this.iteration.dispose(),this.accumulatedFirstMoment!=null&&Wn(this.accumulatedFirstMoment.map(function(e){return e.variable})),this.accumulatedWeightedInfNorm!=null&&Wn(this.accumulatedWeightedInfNorm.map(function(e){return e.variable}))},t.prototype.getWeights=function(){return xe(this,void 0,void 0,function(){return Ie(this,function(e){throw new Error("getWeights() is not implemented for Adamax yet.")})})},t.prototype.setWeights=function(e){return xe(this,void 0,void 0,function(){return Ie(this,function(n){throw new Error("setWeights() is not implemented for Adamax yet.")})})},t.prototype.getConfig=function(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon,decay:this.decay}},t.fromConfig=function(e,n){return new e(n.learningRate,n.beta1,n.beta2,n.epsilon,n.decay)},t.className="Adamax",t}(oo);zr(sf);var ws=function(r){function t(e){var n=r.call(this)||this;return n.learningRate=e,n.setLearningRate(e),n}return De(t,r),t.prototype.applyGradients=function(e){var n=this;(Array.isArray(e)?e.map(function(o){return o.name}):Object.keys(e)).forEach(function(o,i){var a=Array.isArray(e)?e[i].tensor:e[o];if(a!=null){var s=L.registeredVariables[o];Le(function(){var u=n.c.mul(a).add(s);s.assign(u)})}}),this.incrementIterations()},t.prototype.setLearningRate=function(e){this.learningRate=e,this.c!=null&&this.c.dispose(),this.c=hh(Te(-e))},t.prototype.dispose=function(){this.c.dispose()},t.prototype.getWeights=function(){return xe(this,void 0,void 0,function(){return Ie(this,function(e){switch(e.label){case 0:return[4,this.saveIterations()];case 1:return[2,[e.sent()]]}})})},t.prototype.setWeights=function(e){return xe(this,void 0,void 0,function(){return Ie(this,function(n){switch(n.label){case 0:return[4,this.extractIterations(e)];case 1:if((e=n.sent()).length!==0)throw new Error("SGD optimizer does not have settable weights.");return[2]}})})},t.prototype.getConfig=function(){return{learningRate:this.learningRate}},t.fromConfig=function(e,n){return new e(n.learningRate)},t.className="SGD",t}(oo);zr(ws);var uf=function(r){function t(e,n,o){o===void 0&&(o=!1);var i=r.call(this,e)||this;return i.learningRate=e,i.momentum=n,i.useNesterov=o,i.accumulations=[],i.m=Te(i.momentum),i}return De(t,r),t.prototype.applyGradients=function(e){var n=this;(Array.isArray(e)?e.map(function(o){return o.name}):Object.keys(e)).forEach(function(o,i){var a=L.registeredVariables[o];n.accumulations[i]==null&&(n.accumulations[i]={originalName:o+"/momentum",variable:Le(function(){return Tt(a).variable(!1)})});var s=n.accumulations[i].variable,u=Array.isArray(e)?e[i].tensor:e[o];u!=null&&Le(function(){var c,l=n.m.mul(s).add(u);c=n.useNesterov?n.c.mul(u.add(l.mul(n.m))).add(a):n.c.mul(l).add(a),s.assign(l),a.assign(c)})}),this.incrementIterations()},t.prototype.dispose=function(){this.m.dispose(),this.accumulations!=null&&Wn(this.accumulations.map(function(e){return e.variable}))},t.prototype.setMomentum=function(e){this.momentum=e},t.prototype.getWeights=function(){return xe(this,void 0,void 0,function(){return Ie(this,function(e){switch(e.label){case 0:return[4,this.saveIterations()];case 1:return[2,[e.sent()].concat(this.accumulations.map(function(n){return{name:n.originalName,tensor:n.variable}}))]}})})},t.prototype.setWeights=function(e){return xe(this,void 0,void 0,function(){return Ie(this,function(n){switch(n.label){case 0:return[4,this.extractIterations(e)];case 1:return e=n.sent(),this.accumulations=e.map(function(o){return{originalName:o.name,variable:o.tensor.variable(!1)}}),[2]}})})},t.prototype.getConfig=function(){return{learningRate:this.learningRate,momentum:this.momentum,useNesterov:this.useNesterov}},t.fromConfig=function(e,n){return new e(n.learningRate,n.momentum,n.useNesterov)},t.className="Momentum",t}(ws);zr(uf);var cf=function(r){function t(e,n,o,i,a){n===void 0&&(n=.9),o===void 0&&(o=0),i===void 0&&(i=null),a===void 0&&(a=!1);var s=r.call(this)||this;if(s.learningRate=e,s.decay=n,s.momentum=o,s.epsilon=i,s.accumulatedMeanSquares=[],s.accumulatedMoments=[],s.accumulatedMeanGrads=[],s.centered=a,i==null&&(s.epsilon=L.backend.epsilon()),e==null)throw new Error("learningRate for RMSPropOptimizer must be defined.");return s}return De(t,r),t.prototype.applyGradients=function(e){var n=this;(Array.isArray(e)?e.map(function(o){return o.name}):Object.keys(e)).forEach(function(o,i){var a=L.registeredVariables[o];n.accumulatedMeanSquares[i]==null&&(n.accumulatedMeanSquares[i]={originalName:o+"/rms",variable:Le(function(){return Tt(a).variable(!1)})}),n.accumulatedMoments[i]==null&&(n.accumulatedMoments[i]={originalName:o+"/momentum",variable:Le(function(){return Tt(a).variable(!1)})}),n.accumulatedMeanGrads[i]==null&&n.centered&&(n.accumulatedMeanGrads[i]={originalName:o+"/mg",variable:Le(function(){return Tt(a).variable(!1)})});var s=Array.isArray(e)?e[i].tensor:e[o];if(s!=null){var u=n.accumulatedMeanSquares[i].variable,c=n.accumulatedMoments[i].variable;Le(function(){var l=u.mul(n.decay).add(s.square().mul(1-n.decay));if(n.centered){var f=n.accumulatedMeanGrads[i].variable,h=f.mul(n.decay).add(s.mul(1-n.decay)),d=c.mul(n.momentum).add(s.mul(n.learningRate).div(l.sub(h.square().add(n.epsilon)).sqrt()));u.assign(l),f.assign(h),c.assign(d);var p=a.sub(d);a.assign(p)}else{var v=u.mul(n.decay).add(s.square().mul(1-n.decay));d=c.mul(n.momentum).add(s.mul(n.learningRate).div(v.add(n.epsilon).sqrt())),u.assign(v),c.assign(d),p=a.sub(d),a.assign(p)}})}}),this.incrementIterations()},t.prototype.dispose=function(){this.accumulatedMeanSquares!=null&&Wn(this.accumulatedMeanSquares.map(function(e){return e.variable})),this.accumulatedMeanGrads!=null&&this.centered&&Wn(this.accumulatedMeanGrads.map(function(e){return e.variable})),this.accumulatedMoments!=null&&Wn(this.accumulatedMoments.map(function(e){return e.variable}))},t.prototype.getWeights=function(){return xe(this,void 0,void 0,function(){var e;return Ie(this,function(n){switch(n.label){case 0:return e=this.accumulatedMeanSquares.concat(this.accumulatedMoments),this.centered&&e.push.apply(e,this.accumulatedMeanGrads),[4,this.saveIterations()];case 1:return[2,[n.sent()].concat(e.map(function(o){return{name:o.originalName,tensor:o.variable}}))]}})})},t.prototype.setWeights=function(e){return xe(this,void 0,void 0,function(){var n;return Ie(this,function(o){switch(o.label){case 0:return[4,this.extractIterations(e)];case 1:return e=o.sent(),n=this.centered?e.length/3:e.length/2,this.accumulatedMeanSquares=e.slice(0,n).map(function(i){return{originalName:i.name,variable:i.tensor.variable(!1)}}),this.accumulatedMoments=e.slice(n,2*n).map(function(i){return{originalName:i.name,variable:i.tensor.variable(!1)}}),this.centered&&(this.accumulatedMeanGrads=e.slice(2*n,3*n).map(function(i){return{originalName:i.name,variable:i.tensor.variable(!1)}})),[2]}})})},t.prototype.getConfig=function(){return{learningRate:this.learningRate,decay:this.decay,momentum:this.momentum,epsilon:this.epsilon,centered:this.centered}},t.fromConfig=function(e,n){return new e(n.learningRate,n.decay,n.momentum,n.epsilon,n.centered)},t.className="RMSProp",t}(oo);zr(cf);var io=function(){function r(){}return r.sgd=function(t){return new ws(t)},r.momentum=function(t,e,n){return n===void 0&&(n=!1),new uf(t,e,n)},r.rmsprop=function(t,e,n,o,i){return e===void 0&&(e=.9),n===void 0&&(n=0),o===void 0&&(o=null),i===void 0&&(i=!1),new cf(t,e,n,o,i)},r.adam=function(t,e,n,o){return t===void 0&&(t=.001),e===void 0&&(e=.9),n===void 0&&(n=.999),o===void 0&&(o=null),new af(t,e,n,o)},r.adadelta=function(t,e,n){return t===void 0&&(t=.001),e===void 0&&(e=.95),n===void 0&&(n=null),new rf(t,e,n)},r.adamax=function(t,e,n,o,i){return t===void 0&&(t=.002),e===void 0&&(e=.9),n===void 0&&(n=.999),o===void 0&&(o=null),i===void 0&&(i=0),new sf(t,e,n,o,i)},r.adagrad=function(t,e){return e===void 0&&(e=.1),new of(t,e)},r}(),l1={sgd:io.sgd,momentum:io.momentum,adadelta:io.adadelta,adagrad:io.adagrad,rmsprop:io.rmsprop,adamax:io.adamax,adam:io.adam},ym=typeof requestAnimationFrame!="undefined"?requestAnimationFrame:typeof setImmediate!="undefined"?setImmediate:function(r){return r()};function f1(){return new Promise(function(r){return ym(function(){return r()})})}at.prototype.squaredDifference=function(r){return el(this,r)},j=Zg;function ao(r,t,e){if(e===void 0&&(e=!1),r.beginPath(),t.slice(1).forEach(function(i,a){var s=i.x,u=i.y,c=t[a];r.moveTo(c.x,c.y),r.lineTo(s,u)}),e){var n=t[t.length-1],o=t[0];if(!n||!o)return;r.moveTo(n.x,n.y),r.lineTo(o.x,o.y)}r.stroke()}var Es=function(r,t){return Es=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,n){e.__proto__=n}||function(e,n){for(var o in n)n.hasOwnProperty(o)&&(e[o]=n[o])},Es(r,t)};function nt(r,t){Es(r,t);function e(){this.constructor=r}r.prototype=t===null?Object.create(t):(e.prototype=t.prototype,new e)}var Nn=function(){return Nn=Object.assign||function(t){for(var e,n=1,o=arguments.length;n<o;n++){e=arguments[n];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i])}return t},Nn.apply(this,arguments)};function h1(r,t){var e={};for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&t.indexOf(n)<0&&(e[n]=r[n]);if(r!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,n=Object.getOwnPropertySymbols(r);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(r,n[o])&&(e[n[o]]=r[n[o]]);return e}function d1(r,t,e,n){var o=arguments.length,i=o<3?t:n===null?n=Object.getOwnPropertyDescriptor(t,e):n,a;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(r,t,e,n);else for(var s=r.length-1;s>=0;s--)(a=r[s])&&(i=(o<3?a(i):o>3?a(t,e,i):a(t,e))||i);return o>3&&i&&Object.defineProperty(t,e,i),i}function p1(r,t){return function(e,n){t(e,n,r)}}function v1(r,t){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(r,t)}function ze(r,t,e,n){function o(i){return i instanceof e?i:new e(function(a){a(i)})}return new(e||(e=Promise))(function(i,a){function s(l){try{c(n.next(l))}catch(f){a(f)}}function u(l){try{c(n.throw(l))}catch(f){a(f)}}function c(l){l.done?i(l.value):o(l.value).then(s,u)}c((n=n.apply(r,t||[])).next())})}function Ue(r,t){var e={label:0,sent:function(){if(i[0]&1)throw i[1];return i[1]},trys:[],ops:[]},n,o,i,a;return a={next:s(0),throw:s(1),return:s(2)},typeof Symbol=="function"&&(a[Symbol.iterator]=function(){return this}),a;function s(c){return function(l){return u([c,l])}}function u(c){if(n)throw new TypeError("Generator is already executing.");for(;e;)try{if(n=1,o&&(i=c[0]&2?o.return:c[0]?o.throw||((i=o.return)&&i.call(o),0):o.next)&&!(i=i.call(o,c[1])).done)return i;switch(o=0,i&&(c=[c[0]&2,i.value]),c[0]){case 0:case 1:i=c;break;case 4:return e.label++,{value:c[1],done:!1};case 5:e.label++,o=c[1],c=[0];continue;case 7:c=e.ops.pop(),e.trys.pop();continue;default:if(i=e.trys,!(i=i.length>0&&i[i.length-1])&&(c[0]===6||c[0]===2)){e=0;continue}if(c[0]===3&&(!i||c[1]>i[0]&&c[1]<i[3])){e.label=c[1];break}if(c[0]===6&&e.label<i[1]){e.label=i[1],i=c;break}if(i&&e.label<i[2]){e.label=i[2],e.ops.push(c);break}i[2]&&e.ops.pop(),e.trys.pop();continue}c=t.call(r,e)}catch(l){c=[6,l],o=0}finally{n=i=0}if(c[0]&5)throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}function g1(r,t,e,n){n===void 0&&(n=e),r[n]=t[e]}function m1(r,t){for(var e in r)e!=="default"&&!t.hasOwnProperty(e)&&(t[e]=r[e])}function lf(r){var t=typeof Symbol=="function"&&Symbol.iterator,e=t&&r[t],n=0;if(e)return e.call(r);if(r&&typeof r.length=="number")return{next:function(){return r&&n>=r.length&&(r=void 0),{value:r&&r[n++],done:!r}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function xm(r,t){var e=typeof Symbol=="function"&&r[Symbol.iterator];if(!e)return r;var n=e.call(r),o,i=[],a;try{for(;(t===void 0||t-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(s){a={error:s}}finally{try{o&&!o.done&&(e=n.return)&&e.call(n)}finally{if(a)throw a.error}}return i}function A1(){for(var r=[],t=0;t<arguments.length;t++)r=r.concat(xm(arguments[t]));return r}function ti(){for(var r=0,t=0,e=arguments.length;t<e;t++)r+=arguments[t].length;for(var n=Array(r),o=0,t=0;t<e;t++)for(var i=arguments[t],a=0,s=i.length;a<s;a++,o++)n[o]=i[a];return n}function Ji(r){return this instanceof Ji?(this.v=r,this):new Ji(r)}function y1(r,t,e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n=e.apply(r,t||[]),o,i=[];return o={},a("next"),a("throw"),a("return"),o[Symbol.asyncIterator]=function(){return this},o;function a(h){n[h]&&(o[h]=function(d){return new Promise(function(p,v){i.push([h,d,p,v])>1||s(h,d)})})}function s(h,d){try{u(n[h](d))}catch(p){f(i[0][3],p)}}function u(h){h.value instanceof Ji?Promise.resolve(h.value.v).then(c,l):f(i[0][2],h)}function c(h){s("next",h)}function l(h){s("throw",h)}function f(h,d){h(d),i.shift(),i.length&&s(i[0][0],i[0][1])}}function x1(r){var t,e;return t={},n("next"),n("throw",function(o){throw o}),n("return"),t[Symbol.iterator]=function(){return this},t;function n(o,i){t[o]=r[o]?function(a){return(e=!e)?{value:Ji(r[o](a)),done:o==="return"}:i?i(a):a}:i}}function b1(r){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=r[Symbol.asyncIterator],e;return t?t.call(r):(r=typeof lf=="function"?lf(r):r[Symbol.iterator](),e={},n("next"),n("throw"),n("return"),e[Symbol.asyncIterator]=function(){return this},e);function n(i){e[i]=r[i]&&function(a){return new Promise(function(s,u){a=r[i](a),o(s,u,a.done,a.value)})}}function o(i,a,s,u){Promise.resolve(u).then(function(c){i({value:c,done:s})},a)}}function w1(r,t){return Object.defineProperty?Object.defineProperty(r,"raw",{value:t}):r.raw=t,r}function E1(r){if(r&&r.__esModule)return r;var t={};if(r!=null)for(var e in r)Object.hasOwnProperty.call(r,e)&&(t[e]=r[e]);return t.default=r,t}function C1(r){return r&&r.__esModule?r:{default:r}}function I1(r,t){if(!t.has(r))throw new TypeError("attempted to get private field on non-instance");return t.get(r)}function S1(r,t,e){if(!t.has(r))throw new TypeError("attempted to set private field on non-instance");return t.set(r,e),e}var so=function(){function r(t,e){if(!uo(t)||!uo(e))throw new Error("Dimensions.constructor - expected width and height to be valid numbers, instead have "+JSON.stringify({width:t,height:e}));this._width=t,this._height=e}return Object.defineProperty(r.prototype,"width",{get:function(){return this._width},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"height",{get:function(){return this._height},enumerable:!0,configurable:!0}),r.prototype.reverse=function(){return new r(1/this.width,1/this.height)},r}();function ni(r,t){return r instanceof at&&r.shape.length===t}function R1(r){return ni(r,1)}function bm(r){return ni(r,2)}function Ki(r){return ni(r,3)}function Ur(r){return ni(r,4)}function wm(r){return r%1!==0}function ff(r){return r%2===0}function Cs(r,t){t===void 0&&(t=2);var e=Math.pow(10,t);return Math.floor(r*e)/e}function hf(r){return r&&r.width&&r.height}function Em(r,t){var e=r.width,n=r.height,o=t/Math.max(n,e);return new so(Math.round(e*o),Math.round(n*o))}function Is(r){return r.reduce(function(t,e){return t.add(e)},new Nt(0,0)).div(new Nt(r.length,r.length))}function ri(r,t,e){return Array(r).fill(0).map(function(n,o){return t+o*e})}function uo(r){return!!r&&r!==1/0&&r!==-1/0&&!isNaN(r)||r===0}function df(r){return uo(r)&&0<=r&&r<=1}var Nt=function(){function r(t,e){this._x=t,this._y=e}return Object.defineProperty(r.prototype,"x",{get:function(){return this._x},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"y",{get:function(){return this._y},enumerable:!0,configurable:!0}),r.prototype.add=function(t){return new r(this.x+t.x,this.y+t.y)},r.prototype.sub=function(t){return new r(this.x-t.x,this.y-t.y)},r.prototype.mul=function(t){return new r(this.x*t.x,this.y*t.y)},r.prototype.div=function(t){return new r(this.x/t.x,this.y/t.y)},r.prototype.abs=function(){return new r(Math.abs(this.x),Math.abs(this.y))},r.prototype.magnitude=function(){return Math.sqrt(Math.pow(this.x,2)+Math.pow(this.y,2))},r.prototype.floor=function(){return new r(Math.floor(this.x),Math.floor(this.y))},r}(),pr=function(){function r(t,e){e===void 0&&(e=!0);var n=t||{},o=[n.left,n.top,n.right,n.bottom].every(uo),i=[n.x,n.y,n.width,n.height].every(uo);if(!i&&!o)throw new Error("Box.constructor - expected box to be IBoundingBox | IRect, instead have "+JSON.stringify(n));var a=i?[n.x,n.y,n.width,n.height]:[n.left,n.top,n.right-n.left,n.bottom-n.top],s=a[0],u=a[1],c=a[2],l=a[3];r.assertIsValidBox({x:s,y:u,width:c,height:l},"Box.constructor",e),this._x=s,this._y=u,this._width=c,this._height=l}return r.isRect=function(t){return!!t&&[t.x,t.y,t.width,t.height].every(uo)},r.assertIsValidBox=function(t,e,n){if(n===void 0&&(n=!1),!r.isRect(t))throw new Error(e+" - invalid box: "+JSON.stringify(t)+", expected object with properties x, y, width, height");if(!n&&(t.width<0||t.height<0))throw new Error(e+" - width ("+t.width+") and height ("+t.height+") must be positive numbers")},Object.defineProperty(r.prototype,"x",{get:function(){return this._x},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"y",{get:function(){return this._y},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"width",{get:function(){return this._width},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"height",{get:function(){return this._height},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"left",{get:function(){return this.x},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"top",{get:function(){return this.y},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"right",{get:function(){return this.x+this.width},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"bottom",{get:function(){return this.y+this.height},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"area",{get:function(){return this.width*this.height},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"topLeft",{get:function(){return new Nt(this.left,this.top)},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"topRight",{get:function(){return new Nt(this.right,this.top)},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"bottomLeft",{get:function(){return new Nt(this.left,this.bottom)},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"bottomRight",{get:function(){return new Nt(this.right,this.bottom)},enumerable:!0,configurable:!0}),r.prototype.round=function(){var t=[this.x,this.y,this.width,this.height].map(function(a){return Math.round(a)}),e=t[0],n=t[1],o=t[2],i=t[3];return new r({x:e,y:n,width:o,height:i})},r.prototype.floor=function(){var t=[this.x,this.y,this.width,this.height].map(function(a){return Math.floor(a)}),e=t[0],n=t[1],o=t[2],i=t[3];return new r({x:e,y:n,width:o,height:i})},r.prototype.toSquare=function(){var t=this,e=t.x,n=t.y,o=t.width,i=t.height,a=Math.abs(o-i);return o<i&&(e-=a/2,o+=a),i<o&&(n-=a/2,i+=a),new r({x:e,y:n,width:o,height:i})},r.prototype.rescale=function(t){var e=hf(t)?t.width:t,n=hf(t)?t.height:t;return new r({x:this.x*e,y:this.y*n,width:this.width*e,height:this.height*n})},r.prototype.pad=function(t,e){var n=[this.x-t/2,this.y-e/2,this.width+t,this.height+e],o=n[0],i=n[1],a=n[2],s=n[3];return new r({x:o,y:i,width:a,height:s})},r.prototype.clipAtImageBorders=function(t,e){var n=this,o=n.x,i=n.y,a=n.right,s=n.bottom,u=Math.max(o,0),c=Math.max(i,0),l=a-u,f=s-c,h=Math.min(l,t-u),d=Math.min(f,e-c);return new r({x:u,y:c,width:h,height:d}).floor()},r.prototype.shift=function(t,e){var n=this,o=n.width,i=n.height,a=this.x+t,s=this.y+e;return new r({x:a,y:s,width:o,height:i})},r.prototype.padAtBorders=function(t,e){var n=this.width+1,o=this.height+1,i=1,a=1,s=n,u=o,c=this.left,l=this.top,f=this.right,h=this.bottom;return f>e&&(s=-f+e+n,f=e),h>t&&(u=-h+t+o,h=t),c<1&&(u=2-c,c=1),l<1&&(u=2-l,l=1),{dy:a,edy:u,dx:i,edx:s,y:l,ey:h,x:c,ex:f,w:n,h:o}},r.prototype.calibrate=function(t){return new r({left:this.left+t.left*this.width,top:this.top+t.top*this.height,right:this.right+t.right*this.width,bottom:this.bottom+t.bottom*this.height}).toSquare().round()},r}(),Zi=function(r){nt(t,r);function t(e,n,o,i,a){return a===void 0&&(a=!1),r.call(this,{left:e,top:n,right:o,bottom:i},a)||this}return t}(pr),pf=function(){function r(t,e,n,o,i){this._imageDims=new so(i.width,i.height),this._score=t,this._classScore=e,this._className=n,this._box=new pr(o).rescale(this._imageDims)}return Object.defineProperty(r.prototype,"score",{get:function(){return this._score},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"classScore",{get:function(){return this._classScore},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"className",{get:function(){return this._className},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"box",{get:function(){return this._box},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"imageDims",{get:function(){return this._imageDims},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"imageWidth",{get:function(){return this.imageDims.width},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"imageHeight",{get:function(){return this.imageDims.height},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"relativeBox",{get:function(){return new pr(this._box).rescale(this.imageDims.reverse())},enumerable:!0,configurable:!0}),r.prototype.forSize=function(t,e){return new r(this.score,this.classScore,this.className,this.relativeBox,{width:t,height:e})},r}(),Gn=function(r){nt(t,r);function t(e,n,o){return r.call(this,e,e,"",n,o)||this}return t.prototype.forSize=function(e,n){var o=r.prototype.forSize.call(this,e,n),i=o.score,a=o.relativeBox,s=o.imageDims;return new t(i,a,s)},t}(pf);function Cm(r){var t=r.map(function(s){return s.x}),e=r.map(function(s){return s.y}),n=t.reduce(function(s,u){return u<s?u:s},1/0),o=e.reduce(function(s,u){return u<s?u:s},1/0),i=t.reduce(function(s,u){return s<u?u:s},0),a=e.reduce(function(s,u){return s<u?u:s},0);return new Zi(n,o,i,a)}function Im(r,t,e){e===void 0&&(e=!0);var n=Math.max(0,Math.min(r.right,t.right)-Math.max(r.left,t.left)),o=Math.max(0,Math.min(r.bottom,t.bottom)-Math.max(r.top,t.top)),i=n*o;return e?i/(r.area+t.area-i):i/Math.min(r.area,t.area)}function oi(r,t,e,n){n===void 0&&(n=!0);for(var o=t.map(function(s,u){return{score:s,boxIndex:u}}).sort(function(s,u){return s.score-u.score}).map(function(s){return s.boxIndex}),i=[],a=function(){var s=o.pop();i.push(s);for(var u=o,c=[],l=0;l<u.length;l++){var f=u[l],h=r[s],d=r[f];c.push(Im(h,d,n))}o=o.filter(function(p,v){return c[v]<=e})};o.length>0;)a();return i}function ii(r,t){return Le(function(){var e=t[0],n=t[1],o=t[2],i=hr(ti(r.shape.slice(0,3),[1]),e),a=hr(ti(r.shape.slice(0,3),[1]),n),s=hr(ti(r.shape.slice(0,3),[1]),o),u=mn([i,a,s],3);return yn(r,u)})}function Sm(r,t){return t===void 0&&(t=!1),Le(function(){var e=r.shape.slice(1),n=e[0],o=e[1];if(n===o)return r;var i=Math.abs(n-o),a=Math.round(i*(t?.5:1)),s=n>o?2:1,u=function(d){var p=r.shape.slice();return p[s]=d,hr(p,0)},c=u(a),l=i-c.shape[s],f=t&&l?u(l):null,h=[f,r,c].filter(function(d){return!!d}).map(function(d){return d.toFloat()});return mn(h,s)})}function Ss(r){return 1/(1+Math.exp(-r))}function B1(r){return Math.log(r/(1-r))}var Rs=function(r){nt(t,r);function t(e,n,o,i,a){return a===void 0&&(a=!1),r.call(this,{x:e,y:n,width:o,height:i},a)||this}return t}(pr),Rm=.5,Bm=.43,km=.45,Bo=function(){function r(t,e,n){n===void 0&&(n=new Nt(0,0));var o=e.width,i=e.height;this._imgDims=new so(o,i),this._shift=n,this._positions=t.map(function(a){return a.mul(new Nt(o,i)).add(n)})}return Object.defineProperty(r.prototype,"shift",{get:function(){return new Nt(this._shift.x,this._shift.y)},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"imageWidth",{get:function(){return this._imgDims.width},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"imageHeight",{get:function(){return this._imgDims.height},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"positions",{get:function(){return this._positions},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"relativePositions",{get:function(){var t=this;return this._positions.map(function(e){return e.sub(t._shift).div(new Nt(t.imageWidth,t.imageHeight))})},enumerable:!0,configurable:!0}),r.prototype.forSize=function(t,e){return new this.constructor(this.relativePositions,{width:t,height:e})},r.prototype.shiftBy=function(t,e){return new this.constructor(this.relativePositions,this._imgDims,new Nt(t,e))},r.prototype.shiftByPoint=function(t){return this.shiftBy(t.x,t.y)},r.prototype.align=function(t,e){if(e===void 0&&(e={}),t){var n=t instanceof Gn?t.box.floor():new pr(t);return this.shiftBy(n.x,n.y).align(null,e)}var o=Object.assign({},{useDlibAlignment:!1,minBoxPadding:.2},e),i=o.useDlibAlignment,a=o.minBoxPadding;return i?this.alignDlib():this.alignMinBbox(a)},r.prototype.alignDlib=function(){var t=this.getRefPointsForAlignment(),e=t[0],n=t[1],o=t[2],i=function(f){return o.sub(f).magnitude()},a=(i(e)+i(n))/2,s=Math.floor(a/km),u=Is(t),c=Math.floor(Math.max(0,u.x-Rm*s)),l=Math.floor(Math.max(0,u.y-Bm*s));return new Rs(c,l,Math.min(s,this.imageWidth+c),Math.min(s,this.imageHeight+l))},r.prototype.alignMinBbox=function(t){var e=Cm(this.positions);return e.pad(e.width*t,e.height*t)},r.prototype.getRefPointsForAlignment=function(){throw new Error("getRefPointsForAlignment not implemented by base class")},r}(),Tm=function(r){nt(t,r);function t(){return r!==null&&r.apply(this,arguments)||this}return t.prototype.getRefPointsForAlignment=function(){var e=this.positions;return[e[0],e[1],Is([e[3],e[4]])]},t}(Bo),vf=function(r){nt(t,r);function t(){return r!==null&&r.apply(this,arguments)||this}return t.prototype.getJawOutline=function(){return this.positions.slice(0,17)},t.prototype.getLeftEyeBrow=function(){return this.positions.slice(17,22)},t.prototype.getRightEyeBrow=function(){return this.positions.slice(22,27)},t.prototype.getNose=function(){return this.positions.slice(27,36)},t.prototype.getLeftEye=function(){return this.positions.slice(36,42)},t.prototype.getRightEye=function(){return this.positions.slice(42,48)},t.prototype.getMouth=function(){return this.positions.slice(48,68)},t.prototype.getRefPointsForAlignment=function(){return[this.getLeftEye(),this.getRightEye(),this.getMouth()].map(Is)},t}(Bo),gf=function(){function r(t,e){this._label=t,this._distance=e}return Object.defineProperty(r.prototype,"label",{get:function(){return this._label},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"distance",{get:function(){return this._distance},enumerable:!0,configurable:!0}),r.prototype.toString=function(t){return t===void 0&&(t=!0),""+this.label+(t?" ("+Cs(this.distance)+")":"")},r}(),mf=function(r){nt(t,r);function t(e,n){var o=r.call(this,e)||this;return o._label=n,o}return t.assertIsValidLabeledBox=function(e,n){if(pr.assertIsValidBox(e,n),!uo(e.label))throw new Error(n+" - expected property label ("+e.label+") to be a number")},Object.defineProperty(t.prototype,"label",{get:function(){return this._label},enumerable:!0,configurable:!0}),t}(pr),qi=function(){function r(t,e){if(typeof t!="string")throw new Error("LabeledFaceDescriptors - constructor expected label to be a string");if(!Array.isArray(e)||e.some(function(n){return!(n instanceof Float32Array)}))throw new Error("LabeledFaceDescriptors - constructor expected descriptors to be an array of Float32Array");this._label=t,this._descriptors=e}return Object.defineProperty(r.prototype,"label",{get:function(){return this._label},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"descriptors",{get:function(){return this._descriptors},enumerable:!0,configurable:!0}),r.prototype.toJSON=function(){return{label:this.label,descriptors:this.descriptors.map(function(t){return Array.from(t)})}},r.fromJSON=function(t){var e=t.descriptors.map(function(n){return new Float32Array(n)});return new r(t.label,e)},r}(),k1=function(r){nt(t,r);function t(e,n,o,i){var a=r.call(this,e,n)||this;return a._score=o,a._classScore=i,a}return t.assertIsValidPredictedBox=function(e,n){if(mf.assertIsValidLabeledBox(e,n),!df(e.score)||!df(e.classScore))throw new Error(n+" - expected properties score ("+e.score+") and ("+e.classScore+") to be a number between [0, 1]")},Object.defineProperty(t.prototype,"score",{get:function(){return this._score},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"classScore",{get:function(){return this._classScore},enumerable:!0,configurable:!0}),t}(mf);function ai(r){return r.detection instanceof Gn}function si(r,t){var e={detection:t};return Object.assign({},r,e)}function Af(){var r=window.fetch||function(){throw new Error("fetch - missing fetch implementation for browser environment")},t=function(){throw new Error("readFile - filesystem not available for browser environment")};return{Canvas:HTMLCanvasElement,CanvasRenderingContext2D,Image:HTMLImageElement,ImageData,Video:HTMLVideoElement,createCanvasElement:function(){return document.createElement("canvas")},createImageElement:function(){return document.createElement("img")},fetch:r,readFile:t}}function yf(r){var t="";if(!r)try{r=U(12155)}catch(n){t=n.toString()}var e=r?function(n){return new Promise(function(o,i){r.readFile(n,function(a,s){return a?i(a):o(s)})})}:function(){throw new Error("readFile - failed to require fs in nodejs environment with error: "+t)};return{readFile:e}}function xf(){var r=U.g.Canvas||U.g.HTMLCanvasElement,t=U.g.Image||U.g.HTMLImageElement,e=function(){if(r)return new r;throw new Error("createCanvasElement - missing Canvas implementation for nodejs environment")},n=function(){if(t)return new t;throw new Error("createImageElement - missing Image implementation for nodejs environment")},o=U.g.fetch||function(){throw new Error("fetch - missing fetch implementation for nodejs environment")},i=yf();return Nn({Canvas:r||function(){function a(){}return a}(),CanvasRenderingContext2D:U.g.CanvasRenderingContext2D||function(){function a(){}return a}(),Image:t||function(){function a(){}return a}(),ImageData:U.g.ImageData||function(){function a(){}return a}(),Video:U.g.HTMLVideoElement||function(){function a(){}return a}(),createCanvasElement:e,createImageElement:n,fetch:o},i)}function bf(){return typeof window=="object"&&typeof document!="undefined"&&typeof HTMLImageElement!="undefined"&&typeof HTMLCanvasElement!="undefined"&&typeof HTMLVideoElement!="undefined"&&typeof ImageData!="undefined"&&typeof CanvasRenderingContext2D!="undefined"}var wf=U(34155);function Ef(){return typeof U.g=="object"&&!0&&!0&&typeof wf!="undefined"&&!!wf.version}var xn;function Dm(){if(!xn)throw new Error("getEnv - environment is not defined, check isNodejs() and isBrowser()");return xn}function Bs(r){xn=r}function ks(){bf()&&Bs(Af()),Ef()&&Bs(xf())}function Fm(r){if(xn||ks(),!xn)throw new Error("monkeyPatch - environment is not defined, check isNodejs() and isBrowser()");var t=r.Canvas,e=t===void 0?xn.Canvas:t,n=r.Image,o=n===void 0?xn.Image:n;xn.Canvas=e,xn.Image=o,xn.createCanvasElement=r.createCanvasElement||function(){return new e},xn.createImageElement=r.createImageElement||function(){return new o},xn.ImageData=r.ImageData||xn.ImageData,xn.Video=r.Video||xn.Video,xn.fetch=r.fetch||xn.fetch,xn.readFile=r.readFile||xn.readFile}var On={getEnv:Dm,setEnv:Bs,initialize:ks,createBrowserEnv:Af,createFileSystem:yf,createNodejsEnv:xf,monkeyPatch:Fm,isBrowser:bf,isNodejs:Ef};ks();function Ts(r){return!On.isNodejs()&&typeof r=="string"?document.getElementById(r):r}function vr(r){var t=On.getEnv(),e=t.Canvas,n=t.CanvasRenderingContext2D;if(r instanceof n)return r;var o=Ts(r);if(!(o instanceof e))throw new Error("resolveContext2d - expected canvas to be of instance of Canvas");var i=o.getContext("2d");if(!i)throw new Error("resolveContext2d - canvas 2d context is null");return i}var Hr;(function(r){r.TOP_LEFT="TOP_LEFT",r.TOP_RIGHT="TOP_RIGHT",r.BOTTOM_LEFT="BOTTOM_LEFT",r.BOTTOM_RIGHT="BOTTOM_RIGHT"})(Hr||(Hr={}));var Cf=function(){function r(t){t===void 0&&(t={});var e=t.anchorPosition,n=t.backgroundColor,o=t.fontColor,i=t.fontSize,a=t.fontStyle,s=t.padding;this.anchorPosition=e||Hr.TOP_LEFT,this.backgroundColor=n||"rgba(0, 0, 0, 0.5)",this.fontColor=o||"rgba(255, 255, 255, 1)",this.fontSize=i||14,this.fontStyle=a||"Georgia",this.padding=s||4}return r}(),If=function(){function r(t,e,n){n===void 0&&(n={}),this.text=typeof t=="string"?[t]:t instanceof r?t.text:t,this.anchor=e,this.options=new Cf(n)}return r.prototype.measureWidth=function(t){var e=this.options.padding;return this.text.map(function(n){return t.measureText(n).width}).reduce(function(n,o){return n<o?o:n},0)+2*e},r.prototype.measureHeight=function(){var t=this.options,e=t.fontSize,n=t.padding;return this.text.length*e+2*n},r.prototype.getUpperLeft=function(t,e){var n=this.options.anchorPosition,o=n===Hr.BOTTOM_RIGHT||n===Hr.TOP_RIGHT,i=n===Hr.BOTTOM_LEFT||n===Hr.BOTTOM_RIGHT,a=this.measureWidth(t),s=this.measureHeight(),u=o?this.anchor.x-a:this.anchor.x,c=i?this.anchor.y-s:this.anchor.y;if(e){var l=e.width,f=e.height,h=Math.max(Math.min(u,l-a),0),d=Math.max(Math.min(c,f-s),0);return{x:h,y:d}}return{x:u,y:c}},r.prototype.draw=function(t){var e=Ts(t),n=vr(e),o=this.options,i=o.backgroundColor,a=o.fontColor,s=o.fontSize,u=o.fontStyle,c=o.padding;n.font=s+"px "+u;var l=this.measureWidth(n),f=this.measureHeight();n.fillStyle=i;var h=this.getUpperLeft(n,e);n.fillRect(h.x,h.y,l,f),n.fillStyle=a,this.text.forEach(function(d,p){var v=c+h.x,g=c+h.y+(p+1)*s;n.fillText(d,v,g)})},r}(),Pm=function(){function r(t){t===void 0&&(t={});var e=t.boxColor,n=t.lineWidth,o=t.label,i=t.drawLabelOptions;this.boxColor=e||"rgba(0, 0, 255, 1)",this.lineWidth=n||2,this.label=o;var a={anchorPosition:Hr.BOTTOM_LEFT,backgroundColor:this.boxColor};this.drawLabelOptions=new Cf(Object.assign({},a,i))}return r}(),Nm=function(){function r(t,e){e===void 0&&(e={}),this.box=new pr(t),this.options=new Pm(e)}return r.prototype.draw=function(t){var e=vr(t),n=this.options,o=n.boxColor,i=n.lineWidth,a=this.box,s=a.x,u=a.y,c=a.width,l=a.height;e.strokeStyle=o,e.lineWidth=i,e.strokeRect(s,u,c,l);var f=this.options.label;f&&new If([f],{x:s-i/2,y:u},this.options.drawLabelOptions).draw(t)},r}();function Om(r,t){var e=Array.isArray(t)?t:[t];e.forEach(function(n){var o=n instanceof Gn?n.score:ai(n)?n.detection.score:void 0,i=n instanceof Gn?n.box:ai(n)?n.detection.box:new pr(n),a=o?""+Cs(o):void 0;new Nm(i,{label:a}).draw(r)})}function Sf(r){var t=On.getEnv(),e=t.Image,n=t.Video;return r instanceof e&&r.complete||r instanceof n&&r.readyState>=3}function Mm(r){return new Promise(function(t,e){if(r instanceof On.getEnv().Canvas||Sf(r))return t();function n(i){i.currentTarget&&(i.currentTarget.removeEventListener("load",n),i.currentTarget.removeEventListener("error",o),t(i))}function o(i){i.currentTarget&&(i.currentTarget.removeEventListener("load",n),i.currentTarget.removeEventListener("error",o),e(i))}r.addEventListener("load",n),r.addEventListener("error",o)})}function T1(r){return new Promise(function(t,e){if(!(r instanceof Blob))return e("bufferToImage - expected buf to be of type: Blob");var n=new FileReader;n.onload=function(){if(typeof n.result!="string")return e("bufferToImage - expected reader.result to be a string, in onload");var o=env.getEnv().createImageElement();o.onload=function(){return t(o)},o.onerror=e,o.src=n.result},n.onerror=e,n.readAsDataURL(r)})}function Ds(r){var t=On.getEnv(),e=t.Image,n=t.Video;return r instanceof e?new so(r.naturalWidth,r.naturalHeight):r instanceof n?new so(r.videoWidth,r.videoHeight):new so(r.width,r.height)}function Yi(r){var t=r.width,e=r.height,n=On.getEnv().createCanvasElement,o=n();return o.width=t,o.height=e,o}function Fs(r,t){var e=On.getEnv().ImageData;if(!(r instanceof e)&&!Sf(r))throw new Error("createCanvasFromMedia - media has not finished loading yet");var n=t||Ds(r),o=n.width,i=n.height,a=Yi({width:o,height:i});return r instanceof e?vr(a).putImageData(r,0,0):vr(a).drawImage(r,0,0,o,i),a}function Lm(r,t){return ze(this,void 0,void 0,function(){var e,n,o,i,a,s;return Ue(this,function(u){switch(u.label){case 0:return e=t||On.getEnv().createCanvasElement(),n=r.shape.slice(Ur(r)?1:0),o=n[0],i=n[1],a=n[2],s=Le(function(){return r.as3D(o,i,a).toInt()}),[4,As.toPixels(s,e)];case 1:return u.sent(),s.dispose(),[2,e]}})})}function Rf(r){var t=On.getEnv(),e=t.Image,n=t.Canvas,o=t.Video;return r instanceof e||r instanceof n||r instanceof o}function Wm(r,t,e){e===void 0&&(e=!1);var n=On.getEnv(),o=n.Image,i=n.Canvas;if(!(r instanceof o||r instanceof i))throw new Error("imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement");var a=Ds(r),s=t/Math.max(a.height,a.width),u=s*a.width,c=s*a.height,l=Yi({width:t,height:t}),f=r instanceof i?r:Fs(r),h=Math.abs(u-c)/2,d=e&&u<c?h:0,p=e&&c<u?h:0;return vr(l).drawImage(f,d,p,u,c),l}var $i=function(){function r(t,e){var n=this;if(e===void 0&&(e=!1),this._imageTensors=[],this._canvases=[],this._treatAsBatchInput=!1,this._inputDimensions=[],!Array.isArray(t))throw new Error("NetInput.constructor - expected inputs to be an Array of TResolvedNetInput or to be instanceof tf.Tensor4D, instead have "+t);this._treatAsBatchInput=e,this._batchSize=t.length,t.forEach(function(o,i){if(Ki(o)){n._imageTensors[i]=o,n._inputDimensions[i]=o.shape;return}if(Ur(o)){var a=o.shape[0];if(a!==1)throw new Error("NetInput - tf.Tensor4D with batchSize "+a+" passed, but not supported in input array");n._imageTensors[i]=o,n._inputDimensions[i]=o.shape.slice(1);return}var s=o instanceof On.getEnv().Canvas?o:Fs(o);n._canvases[i]=s,n._inputDimensions[i]=[s.height,s.width,3]})}return Object.defineProperty(r.prototype,"imageTensors",{get:function(){return this._imageTensors},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"canvases",{get:function(){return this._canvases},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"isBatchInput",{get:function(){return this.batchSize>1||this._treatAsBatchInput},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"batchSize",{get:function(){return this._batchSize},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"inputDimensions",{get:function(){return this._inputDimensions},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"inputSize",{get:function(){return this._inputSize},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"reshapedInputDimensions",{get:function(){var t=this;return ri(this.batchSize,0,1).map(function(e,n){return t.getReshapedInputDimensions(n)})},enumerable:!0,configurable:!0}),r.prototype.getInput=function(t){return this.canvases[t]||this.imageTensors[t]},r.prototype.getInputDimensions=function(t){return this._inputDimensions[t]},r.prototype.getInputHeight=function(t){return this._inputDimensions[t][0]},r.prototype.getInputWidth=function(t){return this._inputDimensions[t][1]},r.prototype.getReshapedInputDimensions=function(t){if(typeof this.inputSize!="number")throw new Error("getReshapedInputDimensions - inputSize not set, toBatchTensor has not been called yet");var e=this.getInputWidth(t),n=this.getInputHeight(t);return Em({width:e,height:n},this.inputSize)},r.prototype.toBatchTensor=function(t,e){var n=this;return e===void 0&&(e=!0),this._inputSize=t,Le(function(){var o=ri(n.batchSize,0,1).map(function(a){var s=n.getInput(a);if(s instanceof at){var u=Ur(s)?s:s.expandDims();return u=Sm(u,e),(u.shape[1]!==t||u.shape[2]!==t)&&(u=es.resizeBilinear(u,[t,t])),u.as3D(t,t,3)}if(s instanceof On.getEnv().Canvas)return As.fromPixels(Wm(s,t,e));throw new Error("toBatchTensor - at batchIdx "+a+", expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have "+s)}),i=jn(o.map(function(a){return a.toFloat()})).as4D(n.batchSize,t,t,3);return i})},r}();function En(r){return ze(this,void 0,void 0,function(){var t,e,n;return Ue(this,function(o){switch(o.label){case 0:if(r instanceof $i)return[2,r];if(t=Array.isArray(r)?r:[r],!t.length)throw new Error("toNetInput - empty array passed as input");return e=function(i){return Array.isArray(r)?" at input index "+i+":":""},n=t.map(Ts),n.forEach(function(i,a){if(!Rf(i)&&!Ki(i)&&!Ur(i))throw typeof t[a]=="string"?new Error("toNetInput -"+e(a)+" string passed, but could not resolve HTMLElement for element id "+t[a]):new Error("toNetInput -"+e(a)+" expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id");if(Ur(i)){var s=i.shape[0];if(s!==1)throw new Error("toNetInput -"+e(a)+" tf.Tensor4D with batchSize "+s+" passed, but not supported in input array")}}),[4,Promise.all(n.map(function(i){return Rf(i)&&Mm(i)}))];case 1:return o.sent(),[2,new $i(n,Array.isArray(r))]}})})}function Ps(r,t){return ze(this,void 0,void 0,function(){var e,n,o,i,a,s,u;return Ue(this,function(c){switch(c.label){case 0:return e=On.getEnv().Canvas,n=r,r instanceof e?[3,5]:[4,En(r)];case 1:if(o=c.sent(),o.batchSize>1)throw new Error("extractFaces - batchSize > 1 not supported");return i=o.getInput(0),i instanceof e?(a=i,[3,4]):[3,2];case 2:return[4,Lm(i)];case 3:a=c.sent(),c.label=4;case 4:n=a,c.label=5;case 5:return s=vr(n),u=t.map(function(l){return l instanceof Gn?l.forSize(n.width,n.height).box.floor():l}).map(function(l){return l.clipAtImageBorders(n.width,n.height)}),[2,u.map(function(l){var f=l.x,h=l.y,d=l.width,p=l.height,v=Yi({width:d,height:p});return vr(v).putImageData(s.getImageData(f,h,d,p),0,0),v})]}})})}function Ns(r,t){return ze(this,void 0,void 0,function(){return Ue(this,function(e){if(!Ki(r)&&!Ur(r))throw new Error("extractFaceTensors - expected image tensor to be 3D or 4D");if(Ur(r)&&r.shape[0]>1)throw new Error("extractFaceTensors - batchSize > 1 not supported");return[2,Le(function(){var n=r.shape.slice(Ur(r)?1:0),o=n[0],i=n[1],a=n[2],s=t.map(function(c){return c instanceof Gn?c.forSize(i,o).box:c}).map(function(c){return c.clipAtImageBorders(i,o)}),u=s.map(function(c){var l=c.x,f=c.y,h=c.width,d=c.height;return El(r.as3D(o,i,a),[f,l,0],[d,h,a])});return u})]})})}function Qm(r,t){return ze(this,void 0,void 0,function(){var e,n;return Ue(this,function(o){switch(o.label){case 0:return e=On.getEnv().fetch,[4,e(r,t)];case 1:if(n=o.sent(),!(n.status<400))throw new Error("failed to fetch: ("+n.status+") "+n.statusText+", from url: "+n.url);return[2,n]}})})}function D1(r){return __awaiter(this,void 0,void 0,function(){var t,e;return __generator(this,function(n){switch(n.label){case 0:return[4,fetchOrThrow(r)];case 1:return t=n.sent(),[4,t.blob()];case 2:if(e=n.sent(),!e.type.startsWith("image/"))throw new Error("fetchImage - expected blob type to be of type image/*, instead have: "+e.type+", for url: "+t.url);return[2,bufferToImage(e)]}})})}function _m(r){return ze(this,void 0,void 0,function(){return Ue(this,function(t){switch(t.label){case 0:return[4,Qm(r)];case 1:return[2,t.sent().json()]}})})}function F1(r){return __awaiter(this,void 0,void 0,function(){var t;return __generator(this,function(e){switch(e.label){case 0:return t=Float32Array.bind,[4,fetchOrThrow(r)];case 1:return[4,e.sent().arrayBuffer()];case 2:return[2,new(t.apply(Float32Array,[void 0,e.sent()]))]}})})}function Bf(r,t){var e=t+"-weights_manifest.json";if(!r)return{modelBaseUri:"",manifestUri:e};if(r==="/")return{modelBaseUri:"/",manifestUri:"/"+e};var n=r.startsWith("http://")?"http://":r.startsWith("https://")?"https://":"";r=r.replace(n,"");var o=r.split("/").filter(function(s){return s}),i=r.endsWith(".json")?o[o.length-1]:e,a=n+(r.endsWith(".json")?o.slice(0,o.length-1):o).join("/");return a=r.startsWith("/")?"/"+a:a,{modelBaseUri:a,manifestUri:a==="/"?"/"+i:a+"/"+i}}function zm(r,t){return ze(this,void 0,void 0,function(){var e,n,o,i;return Ue(this,function(a){switch(a.label){case 0:return e=Bf(r,t),n=e.manifestUri,o=e.modelBaseUri,[4,_m(n)];case 1:return i=a.sent(),[2,$l.loadWeights(i,o)]}})})}function P1(r,t,e){e===void 0&&(e=!1);var n=e?getMediaDimensions(t):t,o=n.width,i=n.height;return r.width=o,r.height=i,{width:o,height:i}}var kr=function(){function r(t){this._name=t,this._params=void 0,this._paramMappings=[]}return Object.defineProperty(r.prototype,"params",{get:function(){return this._params},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"paramMappings",{get:function(){return this._paramMappings},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"isLoaded",{get:function(){return!!this.params},enumerable:!0,configurable:!0}),r.prototype.getParamFromPath=function(t){var e=this.traversePropertyPath(t),n=e.obj,o=e.objProp;return n[o]},r.prototype.reassignParamFromPath=function(t,e){var n=this.traversePropertyPath(t),o=n.obj,i=n.objProp;o[i].dispose(),o[i]=e},r.prototype.getParamList=function(){var t=this;return this._paramMappings.map(function(e){var n=e.paramPath;return{path:n,tensor:t.getParamFromPath(n)}})},r.prototype.getTrainableParams=function(){return this.getParamList().filter(function(t){return t.tensor instanceof ln})},r.prototype.getFrozenParams=function(){return this.getParamList().filter(function(t){return!(t.tensor instanceof ln)})},r.prototype.variable=function(){var t=this;this.getFrozenParams().forEach(function(e){var n=e.path,o=e.tensor;t.reassignParamFromPath(n,o.variable())})},r.prototype.freeze=function(){var t=this;this.getTrainableParams().forEach(function(e){var n=e.path,o=e.tensor,i=Tn(o.dataSync());o.dispose(),t.reassignParamFromPath(n,i)})},r.prototype.dispose=function(t){t===void 0&&(t=!0),this.getParamList().forEach(function(e){if(t&&e.tensor.isDisposed)throw new Error("param tensor has already been disposed for path "+e.path);e.tensor.dispose()}),this._params=void 0},r.prototype.serializeParams=function(){return new Float32Array(this.getParamList().map(function(t){var e=t.tensor;return Array.from(e.dataSync())}).reduce(function(t,e){return t.concat(e)}))},r.prototype.load=function(t){return ze(this,void 0,void 0,function(){return Ue(this,function(e){switch(e.label){case 0:return t instanceof Float32Array?(this.extractWeights(t),[2]):[4,this.loadFromUri(t)];case 1:return e.sent(),[2]}})})},r.prototype.loadFromUri=function(t){return ze(this,void 0,void 0,function(){var e;return Ue(this,function(n){switch(n.label){case 0:if(t&&typeof t!="string")throw new Error(this._name+".loadFromUri - expected model uri");return[4,zm(t,this.getDefaultModelName())];case 1:return e=n.sent(),this.loadFromWeightMap(e),[2]}})})},r.prototype.loadFromDisk=function(t){return ze(this,void 0,void 0,function(){var e,n,o,i,a,s,u,c,l,f;return Ue(this,function(h){switch(h.label){case 0:if(t&&typeof t!="string")throw new Error(this._name+".loadFromDisk - expected model file path");return e=On.getEnv().readFile,n=Bf(t,this.getDefaultModelName()),o=n.manifestUri,i=n.modelBaseUri,a=function(d){return Promise.all(d.map(function(p){return e(p).then(function(v){return v.buffer})}))},s=$l.weightsLoaderFactory(a),l=(c=JSON).parse,[4,e(o)];case 1:return u=l.apply(c,[h.sent().toString()]),[4,s(u,i)];case 2:return f=h.sent(),this.loadFromWeightMap(f),[2]}})})},r.prototype.loadFromWeightMap=function(t){var e=this.extractParamsFromWeigthMap(t),n=e.paramMappings,o=e.params;this._paramMappings=n,this._params=o},r.prototype.extractWeights=function(t){var e=this.extractParams(t),n=e.paramMappings,o=e.params;this._paramMappings=n,this._params=o},r.prototype.traversePropertyPath=function(t){if(!this.params)throw new Error("traversePropertyPath - model has no loaded params");var e=t.split("/").reduce(function(i,a){if(!i.nextObj.hasOwnProperty(a))throw new Error("traversePropertyPath - object does not have property "+a+", for path "+t);return{obj:i.nextObj,objProp:a,nextObj:i.nextObj[a]}},{nextObj:this.params}),n=e.obj,o=e.objProp;if(!n||!o||!(n[o]instanceof at))throw new Error("traversePropertyPath - parameter is not a tensor, for path "+t);return{obj:n,objProp:o}},r}();function Xn(r,t,e){return Le(function(){var n=Ka(r,t.depthwise_filter,t.pointwise_filter,e,"same");return n=gt(n,t.bias),n})}function Os(r,t,e){return e===void 0&&(e=!1),Le(function(){var n=rn(e?gt(Yn(r,t.conv0.filters,[2,2],"same"),t.conv0.bias):Xn(r,t.conv0,[2,2])),o=Xn(n,t.conv1,[1,1]),i=rn(gt(n,o)),a=Xn(i,t.conv2,[1,1]);return rn(gt(n,gt(o,a)))})}function ea(r,t,e,n){return e===void 0&&(e=!1),n===void 0&&(n=!0),Le(function(){var o=rn(e?gt(Yn(r,t.conv0.filters,n?[2,2]:[1,1],"same"),t.conv0.bias):Xn(r,t.conv0,n?[2,2]:[1,1])),i=Xn(o,t.conv1,[1,1]),a=rn(gt(o,i)),s=Xn(a,t.conv2,[1,1]),u=rn(gt(o,gt(i,s))),c=Xn(u,t.conv3,[1,1]);return rn(gt(o,gt(i,gt(s,c))))})}function ar(r,t,e,n){return e===void 0&&(e="same"),n===void 0&&(n=!1),Le(function(){var o=gt(Yn(r,t.filters,[1,1],e),t.bias);return n?rn(o):o})}function Tr(r,t){Object.keys(r).forEach(function(e){t.some(function(n){return n.originalPath===e})||r[e].dispose()})}function ta(r,t){return function(e,n,o,i){var a=_n(r(e*n*o*o),[o,o,e,n]),s=pn(r(n));return t.push({paramPath:i+"/filters"},{paramPath:i+"/bias"}),{filters:a,bias:s}}}function Ms(r,t){return function(e,n,o){var i=Mr(r(e*n),[e,n]),a=pn(r(n));return t.push({paramPath:o+"/weights"},{paramPath:o+"/bias"}),{weights:i,bias:a}}}var kf=function(){function r(t,e,n){this.depthwise_filter=t,this.pointwise_filter=e,this.bias=n}return r}();function Ls(r,t){return function(e,n,o){var i=_n(r(9*e),[3,3,e,1]),a=_n(r(e*n),[1,1,e,n]),s=pn(r(n));return t.push({paramPath:o+"/depthwise_filter"},{paramPath:o+"/pointwise_filter"},{paramPath:o+"/bias"}),new kf(i,a,s)}}function Ws(r){return function(t){var e=r(t+"/depthwise_filter",4),n=r(t+"/pointwise_filter",4),o=r(t+"/bias",1);return new kf(e,n,o)}}function jr(r,t){return function(e,n,o){var i=r[e];if(!ni(i,n))throw new Error("expected weightMap["+e+"] to be a Tensor"+n+"D, instead have "+i);return t.push({originalPath:e,paramPath:o||e}),i}}function Dr(r){var t=r;function e(o){var i=t.slice(0,o);return t=t.slice(o),i}function n(){return t}return{extractWeights:e,getRemainingWeights:n}}function Tf(r,t){var e=ta(r,t),n=Ls(r,t);function o(a,s,u,c){c===void 0&&(c=!1);var l=c?e(a,s,3,u+"/conv0"):n(a,s,u+"/conv0"),f=n(s,s,u+"/conv1"),h=n(s,s,u+"/conv2");return{conv0:l,conv1:f,conv2:h}}function i(a,s,u,c){c===void 0&&(c=!1);var l=o(a,s,u,c),f=l.conv0,h=l.conv1,d=l.conv2,p=n(s,s,u+"/conv3");return{conv0:f,conv1:h,conv2:d,conv3:p}}return{extractDenseBlock3Params:o,extractDenseBlock4Params:i}}function Um(r){var t=[],e=Dr(r),n=e.extractWeights,o=e.getRemainingWeights,i=Tf(n,t).extractDenseBlock4Params,a=i(3,32,"dense0",!0),s=i(32,64,"dense1"),u=i(64,128,"dense2"),c=i(128,256,"dense3");if(o().length!==0)throw new Error("weights remaing after extract: "+o().length);return{paramMappings:t,params:{dense0:a,dense1:s,dense2:u,dense3:c}}}function Df(r){return function(t){var e=r(t+"/filters",4),n=r(t+"/bias",1);return{filters:e,bias:n}}}function Ff(r,t){var e=jr(r,t),n=Df(e),o=Ws(e);function i(s,u){u===void 0&&(u=!1);var c=u?n(s+"/conv0"):o(s+"/conv0"),l=o(s+"/conv1"),f=o(s+"/conv2");return{conv0:c,conv1:l,conv2:f}}function a(s,u){u===void 0&&(u=!1);var c=u?n(s+"/conv0"):o(s+"/conv0"),l=o(s+"/conv1"),f=o(s+"/conv2"),h=o(s+"/conv3");return{conv0:c,conv1:l,conv2:f,conv3:h}}return{extractDenseBlock3Params:i,extractDenseBlock4Params:a}}function Hm(r){var t=[],e=Ff(r,t).extractDenseBlock4Params,n={dense0:e("dense0",!0),dense1:e("dense1"),dense2:e("dense2"),dense3:e("dense3")};return Tr(r,t),{params:n,paramMappings:t}}var Pf=function(r){nt(t,r);function t(){return r.call(this,"FaceFeatureExtractor")||this}return t.prototype.forwardInput=function(e){var n=this.params;if(!n)throw new Error("FaceFeatureExtractor - load model before inference");return Le(function(){var o=e.toBatchTensor(112,!0),i=[122.782,117.001,104.298],a=ii(o,i).div(Te(255)),s=ea(a,n.dense0,!0);return s=ea(s,n.dense1),s=ea(s,n.dense2),s=ea(s,n.dense3),s=$o(s,[7,7],[2,2],"valid"),s})},t.prototype.forward=function(e){return ze(this,void 0,void 0,function(){var n;return Ue(this,function(o){switch(o.label){case 0:return n=this.forwardInput,[4,En(e)];case 1:return[2,n.apply(this,[o.sent()])]}})})},t.prototype.getDefaultModelName=function(){return"face_feature_extractor_model"},t.prototype.extractParamsFromWeigthMap=function(e){return Hm(e)},t.prototype.extractParams=function(e){return Um(e)},t}(kr);function gr(r,t){return Le(function(){return gt(Ui(r,t.weights),t.bias)})}function jm(r,t,e){var n=[],o=Dr(r),i=o.extractWeights,a=o.getRemainingWeights,s=Ms(i,n),u=s(t,e,"fc");if(a().length!==0)throw new Error("weights remaing after extract: "+a().length);return{paramMappings:n,params:{fc:u}}}function Vm(r){var t=[],e=jr(r,t);function n(i){var a=e(i+"/weights",2),s=e(i+"/bias",1);return{weights:a,bias:s}}var o={fc:n("fc")};return Tr(r,t),{params:o,paramMappings:t}}function Nf(r){var t={},e={};return Object.keys(r).forEach(function(n){var o=n.startsWith("fc")?e:t;o[n]=r[n]}),{featureExtractorMap:t,classifierMap:e}}var Of=function(r){nt(t,r);function t(e,n){var o=r.call(this,e)||this;return o._faceFeatureExtractor=n,o}return Object.defineProperty(t.prototype,"faceFeatureExtractor",{get:function(){return this._faceFeatureExtractor},enumerable:!0,configurable:!0}),t.prototype.runNet=function(e){var n=this,o=this.params;if(!o)throw new Error(this._name+" - load model before inference");return Le(function(){var i=e instanceof $i?n.faceFeatureExtractor.forwardInput(e):e;return gr(i.as2D(i.shape[0],-1),o.fc)})},t.prototype.dispose=function(e){e===void 0&&(e=!0),this.faceFeatureExtractor.dispose(e),r.prototype.dispose.call(this,e)},t.prototype.loadClassifierParams=function(e){var n=this.extractClassifierParams(e),o=n.params,i=n.paramMappings;this._params=o,this._paramMappings=i},t.prototype.extractClassifierParams=function(e){return jm(e,this.getClassifierChannelsIn(),this.getClassifierChannelsOut())},t.prototype.extractParamsFromWeigthMap=function(e){var n=Nf(e),o=n.featureExtractorMap,i=n.classifierMap;return this.faceFeatureExtractor.loadFromWeightMap(o),Vm(i)},t.prototype.extractParams=function(e){var n=this.getClassifierChannelsIn(),o=this.getClassifierChannelsOut(),i=o*n+o,a=e.slice(0,e.length-i),s=e.slice(e.length-i);return this.faceFeatureExtractor.extractWeights(a),this.extractClassifierParams(s)},t}(kr),Mf=["neutral","happy","sad","angry","fearful","disgusted","surprised"],Qs=function(){function r(t){var e=this;if(t.length!==7)throw new Error("FaceExpressions.constructor - expected probabilities.length to be 7, have: "+t.length);Mf.forEach(function(n,o){e[n]=t[o]})}return r.prototype.asSortedArray=function(){var t=this;return Mf.map(function(e){return{expression:e,probability:t[e]}}).sort(function(e,n){return n.probability-e.probability})},r}(),Gm=function(r){nt(t,r);function t(e){return e===void 0&&(e=new Pf),r.call(this,"FaceExpressionNet",e)||this}return t.prototype.forwardInput=function(e){var n=this;return Le(function(){return Cr(n.runNet(e))})},t.prototype.forward=function(e){return ze(this,void 0,void 0,function(){var n;return Ue(this,function(o){switch(o.label){case 0:return n=this.forwardInput,[4,En(e)];case 1:return[2,n.apply(this,[o.sent()])]}})})},t.prototype.predictExpressions=function(e){return ze(this,void 0,void 0,function(){var n,o,i,a,s=this;return Ue(this,function(u){switch(u.label){case 0:return[4,En(e)];case 1:return n=u.sent(),[4,this.forwardInput(n)];case 2:return o=u.sent(),[4,Promise.all(An(o).map(function(c){return ze(s,void 0,void 0,function(){var l;return Ue(this,function(f){switch(f.label){case 0:return[4,c.data()];case 1:return l=f.sent(),c.dispose(),[2,l]}})})}))];case 3:return i=u.sent(),o.dispose(),a=i.map(function(c){return new Qs(c)}),[2,n.isBatchInput?a:a[0]]}})})},t.prototype.getDefaultModelName=function(){return"face_expression_model"},t.prototype.getClassifierChannelsIn=function(){return 256},t.prototype.getClassifierChannelsOut=function(){return 7},t}(Of);function Xm(r){return r.expressions instanceof Qs}function Lf(r,t){var e={expressions:t};return Object.assign({},r,e)}function N1(r,t,e,n){e===void 0&&(e=.1);var o=Array.isArray(t)?t:[t];o.forEach(function(i){var a=i instanceof Qs?i:Xm(i)?i.expressions:void 0;if(!a)throw new Error("drawFaceExpressions - expected faceExpressions to be FaceExpressions | WithFaceExpressions<{}> or array thereof");var s=a.asSortedArray(),u=s.filter(function(f){return f.probability>e}),c=ai(i)?i.detection.box.bottomLeft:n||new Nt(0,0),l=new If(u.map(function(f){return f.expression+" ("+Cs(f.probability)+")"}),c);l.draw(r)})}function _s(r){return ai(r)&&r.landmarks instanceof Bo&&r.unshiftedLandmarks instanceof Bo&&r.alignedRect instanceof Gn}function na(r,t){var e=r.detection.box,n=t.shiftBy(e.x,e.y),o=n.align(),i=r.detection.imageDims,a=new Gn(r.detection.score,o.rescale(i.reverse()),i),s={landmarks:n,unshiftedLandmarks:t,alignedRect:a};return Object.assign({},r,s)}var Jm=function(){function r(t){t===void 0&&(t={});var e=t.drawLines,n=e===void 0?!0:e,o=t.drawPoints,i=o===void 0?!0:o,a=t.lineWidth,s=t.lineColor,u=t.pointSize,c=t.pointColor;this.drawLines=n,this.drawPoints=i,this.lineWidth=a||1,this.pointSize=u||2,this.lineColor=s||"rgba(0, 255, 255, 1)",this.pointColor=c||"rgba(255, 0, 255, 1)"}return r}(),Km=function(){function r(t,e){e===void 0&&(e={}),this.faceLandmarks=t,this.options=new Jm(e)}return r.prototype.draw=function(t){var e=vr(t),n=this.options,o=n.drawLines,i=n.drawPoints,a=n.lineWidth,s=n.lineColor,u=n.pointSize,c=n.pointColor;if(o&&this.faceLandmarks instanceof vf&&(e.strokeStyle=s,e.lineWidth=a,ao(e,this.faceLandmarks.getJawOutline()),ao(e,this.faceLandmarks.getLeftEyeBrow()),ao(e,this.faceLandmarks.getRightEyeBrow()),ao(e,this.faceLandmarks.getNose()),ao(e,this.faceLandmarks.getLeftEye(),!0),ao(e,this.faceLandmarks.getRightEye(),!0),ao(e,this.faceLandmarks.getMouth(),!0)),i){e.strokeStyle=c,e.fillStyle=c;var l=function(f){e.beginPath(),e.arc(f.x,f.y,u,0,2*Math.PI),e.fill()};this.faceLandmarks.positions.forEach(l)}},r}();function O1(r,t){var e=Array.isArray(t)?t:[t];e.forEach(function(n){var o=n instanceof Bo?n:_s(n)?n.landmarks:void 0;if(!o)throw new Error("drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks<WithFaceDetection<{}>> or array thereof");new Km(o).draw(r)})}function Zm(r,t){var e=ta(r,t),n=Ls(r,t);function o(a,s,u){var c=n(a,s,u+"/separable_conv0"),l=n(s,s,u+"/separable_conv1"),f=e(a,s,1,u+"/expansion_conv");return{separable_conv0:c,separable_conv1:l,expansion_conv:f}}function i(a,s){var u=n(a,a,s+"/separable_conv0"),c=n(a,a,s+"/separable_conv1"),l=n(a,a,s+"/separable_conv2");return{separable_conv0:u,separable_conv1:c,separable_conv2:l}}return{extractConvParams:e,extractSeparableConvParams:n,extractReductionBlockParams:o,extractMainBlockParams:i}}function qm(r,t){var e=[],n=Dr(r),o=n.extractWeights,i=n.getRemainingWeights,a=Zm(o,e),s=a.extractConvParams,u=a.extractSeparableConvParams,c=a.extractReductionBlockParams,l=a.extractMainBlockParams,f=s(3,32,3,"entry_flow/conv_in"),h=c(32,64,"entry_flow/reduction_block_0"),d=c(64,128,"entry_flow/reduction_block_1"),p={conv_in:f,reduction_block_0:h,reduction_block_1:d},v={};ri(t,0,1).forEach(function(E){v["main_block_"+E]=l(128,"middle_flow/main_block_"+E)});var g=c(128,256,"exit_flow/reduction_block"),A=u(256,512,"exit_flow/separable_conv"),w={reduction_block:g,separable_conv:A};if(i().length!==0)throw new Error("weights remaing after extract: "+i().length);return{paramMappings:e,params:{entry_flow:p,middle_flow:v,exit_flow:w}}}function Ym(r,t){var e=jr(r,t),n=Df(e),o=Ws(e);function i(s){var u=o(s+"/separable_conv0"),c=o(s+"/separable_conv1"),l=n(s+"/expansion_conv");return{separable_conv0:u,separable_conv1:c,expansion_conv:l}}function a(s){var u=o(s+"/separable_conv0"),c=o(s+"/separable_conv1"),l=o(s+"/separable_conv2");return{separable_conv0:u,separable_conv1:c,separable_conv2:l}}return{extractConvParams:n,extractSeparableConvParams:o,extractReductionBlockParams:i,extractMainBlockParams:a}}function $m(r,t){var e=[],n=Ym(r,e),o=n.extractConvParams,i=n.extractSeparableConvParams,a=n.extractReductionBlockParams,s=n.extractMainBlockParams,u=o("entry_flow/conv_in"),c=a("entry_flow/reduction_block_0"),l=a("entry_flow/reduction_block_1"),f={conv_in:u,reduction_block_0:c,reduction_block_1:l},h={};ri(t,0,1).forEach(function(g){h["main_block_"+g]=s("middle_flow/main_block_"+g)});var d=a("exit_flow/reduction_block"),p=i("exit_flow/separable_conv"),v={reduction_block:d,separable_conv:p};return Tr(r,e),{params:{entry_flow:f,middle_flow:h,exit_flow:v},paramMappings:e}}function Wf(r,t,e){return gt(Yn(r,t.filters,e,"same"),t.bias)}function zs(r,t,e){e===void 0&&(e=!0);var n=e?rn(r):r;return n=Xn(n,t.separable_conv0,[1,1]),n=Xn(rn(n),t.separable_conv1,[1,1]),n=wn(n,[3,3],[2,2],"same"),n=gt(n,Wf(r,t.expansion_conv,[2,2])),n}function e0(r,t){var e=Xn(rn(r),t.separable_conv0,[1,1]);return e=Xn(rn(e),t.separable_conv1,[1,1]),e=Xn(rn(e),t.separable_conv2,[1,1]),e=gt(e,r),e}var t0=function(r){nt(t,r);function t(e){var n=r.call(this,"TinyXception")||this;return n._numMainBlocks=e,n}return t.prototype.forwardInput=function(e){var n=this,o=this.params;if(!o)throw new Error("TinyXception - load model before inference");return Le(function(){var i=e.toBatchTensor(112,!0),a=[122.782,117.001,104.298],s=ii(i,a).div(Te(256)),u=rn(Wf(s,o.entry_flow.conv_in,[2,2]));return u=zs(u,o.entry_flow.reduction_block_0,!1),u=zs(u,o.entry_flow.reduction_block_1),ri(n._numMainBlocks,0,1).forEach(function(c){u=e0(u,o.middle_flow["main_block_"+c])}),u=zs(u,o.exit_flow.reduction_block),u=rn(Xn(u,o.exit_flow.separable_conv,[1,1])),u})},t.prototype.forward=function(e){return ze(this,void 0,void 0,function(){var n;return Ue(this,function(o){switch(o.label){case 0:return n=this.forwardInput,[4,En(e)];case 1:return[2,n.apply(this,[o.sent()])]}})})},t.prototype.getDefaultModelName=function(){return"tiny_xception_model"},t.prototype.extractParamsFromWeigthMap=function(e){return $m(e,this._numMainBlocks)},t.prototype.extractParams=function(e){return qm(e,this._numMainBlocks)},t}(kr);function n0(r){var t=[],e=Dr(r),n=e.extractWeights,o=e.getRemainingWeights,i=Ms(n,t),a=i(512,1,"fc/age"),s=i(512,2,"fc/gender");if(o().length!==0)throw new Error("weights remaing after extract: "+o().length);return{paramMappings:t,params:{fc:{age:a,gender:s}}}}function r0(r){var t=[],e=jr(r,t);function n(i){var a=e(i+"/weights",2),s=e(i+"/bias",1);return{weights:a,bias:s}}var o={fc:{age:n("fc/age"),gender:n("fc/gender")}};return Tr(r,t),{params:o,paramMappings:t}}var ra;(function(r){r.FEMALE="female",r.MALE="male"})(ra||(ra={}));var o0=function(r){nt(t,r);function t(e){e===void 0&&(e=new t0(2));var n=r.call(this,"AgeGenderNet")||this;return n._faceFeatureExtractor=e,n}return Object.defineProperty(t.prototype,"faceFeatureExtractor",{get:function(){return this._faceFeatureExtractor},enumerable:!0,configurable:!0}),t.prototype.runNet=function(e){var n=this,o=this.params;if(!o)throw new Error(this._name+" - load model before inference");return Le(function(){var i=e instanceof $i?n.faceFeatureExtractor.forwardInput(e):e,a=$o(i,[7,7],[2,2],"valid").as2D(i.shape[0],-1),s=gr(a,o.fc.age).as1D(),u=gr(a,o.fc.gender);return{age:s,gender:u}})},t.prototype.forwardInput=function(e){var n=this;return Le(function(){var o=n.runNet(e),i=o.age,a=o.gender;return{age:i,gender:Cr(a)}})},t.prototype.forward=function(e){return ze(this,void 0,void 0,function(){var n;return Ue(this,function(o){switch(o.label){case 0:return n=this.forwardInput,[4,En(e)];case 1:return[2,n.apply(this,[o.sent()])]}})})},t.prototype.predictAgeAndGender=function(e){return ze(this,void 0,void 0,function(){var n,o,i,a,s,u,c=this;return Ue(this,function(l){switch(l.label){case 0:return[4,En(e)];case 1:return n=l.sent(),[4,this.forwardInput(n)];case 2:return o=l.sent(),i=An(o.age),a=An(o.gender),s=i.map(function(f,h){return{ageTensor:f,genderTensor:a[h]}}),[4,Promise.all(s.map(function(f){var h=f.ageTensor,d=f.genderTensor;return ze(c,void 0,void 0,function(){var p,v,g,A,w;return Ue(this,function(E){switch(E.label){case 0:return[4,h.data()];case 1:return p=E.sent()[0],[4,d.data()];case 2:return v=E.sent()[0],g=v>.5,A=g?ra.MALE:ra.FEMALE,w=g?v:1-v,h.dispose(),d.dispose(),[2,{age:p,gender:A,genderProbability:w}]}})})}))];case 3:return u=l.sent(),o.age.dispose(),o.gender.dispose(),[2,n.isBatchInput?u:u[0]]}})})},t.prototype.getDefaultModelName=function(){return"age_gender_model"},t.prototype.dispose=function(e){e===void 0&&(e=!0),this.faceFeatureExtractor.dispose(e),r.prototype.dispose.call(this,e)},t.prototype.loadClassifierParams=function(e){var n=this.extractClassifierParams(e),o=n.params,i=n.paramMappings;this._params=o,this._paramMappings=i},t.prototype.extractClassifierParams=function(e){return n0(e)},t.prototype.extractParamsFromWeigthMap=function(e){var n=Nf(e),o=n.featureExtractorMap,i=n.classifierMap;return this.faceFeatureExtractor.loadFromWeightMap(o),r0(i)},t.prototype.extractParams=function(e){var n=1539,o=e.slice(0,e.length-n),i=e.slice(e.length-n);return this.faceFeatureExtractor.extractWeights(o),this.extractClassifierParams(i)},t}(kr),Qf=function(r){nt(t,r);function t(){return r!==null&&r.apply(this,arguments)||this}return t.prototype.postProcess=function(e,n,o){var i=o.map(function(s){var u=s.width,c=s.height,l=n/Math.max(c,u);return{width:u*l,height:c*l}}),a=i.length;return Le(function(){var s=function(h,d){return jn([hr([68],h),hr([68],d)],1).as2D(1,136).as1D()},u=function(h,d){var p=i[h],v=p.width,g=p.height;return d(v,g)?Math.abs(v-g)/2:0},c=function(h){return u(h,function(d,p){return d<p})},l=function(h){return u(h,function(d,p){return p<d})},f=e.mul(hr([a,136],n)).sub(jn(Array.from(Array(a),function(h,d){return s(c(d),l(d))}))).div(jn(Array.from(Array(a),function(h,d){return s(i[d].width,i[d].height)})));return f})},t.prototype.forwardInput=function(e){var n=this;return Le(function(){var o=n.runNet(e);return n.postProcess(o,e.inputSize,e.inputDimensions.map(function(i){var a=i[0],s=i[1];return{height:a,width:s}}))})},t.prototype.forward=function(e){return ze(this,void 0,void 0,function(){var n;return Ue(this,function(o){switch(o.label){case 0:return n=this.forwardInput,[4,En(e)];case 1:return[2,n.apply(this,[o.sent()])]}})})},t.prototype.detectLandmarks=function(e){return ze(this,void 0,void 0,function(){var n,o,i,a=this;return Ue(this,function(s){switch(s.label){case 0:return[4,En(e)];case 1:return n=s.sent(),o=Le(function(){return An(a.forwardInput(n))}),[4,Promise.all(o.map(function(u,c){return ze(a,void 0,void 0,function(){var l,f,h,d,p;return Ue(this,function(v){switch(v.label){case 0:return h=(f=Array).from,[4,u.data()];case 1:return l=h.apply(f,[v.sent()]),d=l.filter(function(g,A){return ff(A)}),p=l.filter(function(g,A){return!ff(A)}),[2,new vf(Array(68).fill(0).map(function(g,A){return new Nt(d[A],p[A])}),{height:n.getInputHeight(c),width:n.getInputWidth(c)})]}})})}))];case 2:return i=s.sent(),o.forEach(function(u){return u.dispose()}),[2,n.isBatchInput?i:i[0]]}})})},t.prototype.getClassifierChannelsOut=function(){return 136},t}(Of),_f=function(r){nt(t,r);function t(e){return e===void 0&&(e=new Pf),r.call(this,"FaceLandmark68Net",e)||this}return t.prototype.getDefaultModelName=function(){return"face_landmark_68_model"},t.prototype.getClassifierChannelsIn=function(){return 256},t}(Qf);function i0(r){var t=[],e=Ff(r,t).extractDenseBlock3Params,n={dense0:e("dense0",!0),dense1:e("dense1"),dense2:e("dense2")};return Tr(r,t),{params:n,paramMappings:t}}function a0(r){var t=[],e=Dr(r),n=e.extractWeights,o=e.getRemainingWeights,i=Tf(n,t).extractDenseBlock3Params,a=i(3,32,"dense0",!0),s=i(32,64,"dense1"),u=i(64,128,"dense2");if(o().length!==0)throw new Error("weights remaing after extract: "+o().length);return{paramMappings:t,params:{dense0:a,dense1:s,dense2:u}}}var s0=function(r){nt(t,r);function t(){return r.call(this,"TinyFaceFeatureExtractor")||this}return t.prototype.forwardInput=function(e){var n=this.params;if(!n)throw new Error("TinyFaceFeatureExtractor - load model before inference");return Le(function(){var o=e.toBatchTensor(112,!0),i=[122.782,117.001,104.298],a=ii(o,i).div(Te(255)),s=Os(a,n.dense0,!0);return s=Os(s,n.dense1),s=Os(s,n.dense2),s=$o(s,[14,14],[2,2],"valid"),s})},t.prototype.forward=function(e){return ze(this,void 0,void 0,function(){var n;return Ue(this,function(o){switch(o.label){case 0:return n=this.forwardInput,[4,En(e)];case 1:return[2,n.apply(this,[o.sent()])]}})})},t.prototype.getDefaultModelName=function(){return"face_feature_extractor_tiny_model"},t.prototype.extractParamsFromWeigthMap=function(e){return i0(e)},t.prototype.extractParams=function(e){return a0(e)},t}(kr),u0=function(r){nt(t,r);function t(e){return e===void 0&&(e=new s0),r.call(this,"FaceLandmark68TinyNet",e)||this}return t.prototype.getDefaultModelName=function(){return"face_landmark_68_tiny_model"},t.prototype.getClassifierChannelsIn=function(){return 128},t}(Qf),M1=function(r){nt(t,r);function t(){return r!==null&&r.apply(this,arguments)||this}return t}(_f);function c0(r,t){return gt(Fn(r,t.weights),t.biases)}function Us(r,t,e,n,o){o===void 0&&(o="same");var i=t.conv,a=i.filters,s=i.bias,u=Yn(r,a,e,o);return u=gt(u,s),u=c0(u,t.scale),n?rn(u):u}function l0(r,t){return Us(r,t,[1,1],!0)}function zf(r,t){return Us(r,t,[1,1],!1)}function Uf(r,t){return Us(r,t,[2,2],!0,"valid")}function f0(r,t){function e(s,u,c){var l=r(s),f=l.length/(u*c*c);if(wm(f))throw new Error("depth has to be an integer: "+f+", weights.length: "+l.length+", numFilters: "+u+", filterSize: "+c);return Le(function(){return Wr(_n(l,[u,f,c,c]),[2,3,1,0])})}function n(s,u,c,l){var f=e(s,u,c),h=pn(r(u));return t.push({paramPath:l+"/filters"},{paramPath:l+"/bias"}),{filters:f,bias:h}}function o(s,u){var c=pn(r(s)),l=pn(r(s));return t.push({paramPath:u+"/weights"},{paramPath:u+"/biases"}),{weights:c,biases:l}}function i(s,u,c,l){var f=n(s,u,c,l+"/conv"),h=o(u,l+"/scale");return{conv:f,scale:h}}function a(s,u,c,l,f){f===void 0&&(f=!1);var h=i((f?.5:1)*s,u,c,l+"/conv1"),d=i(s,u,c,l+"/conv2");return{conv1:h,conv2:d}}return{extractConvLayerParams:i,extractResidualLayerParams:a}}function h0(r){var t=Dr(r),e=t.extractWeights,n=t.getRemainingWeights,o=[],i=f0(e,o),a=i.extractConvLayerParams,s=i.extractResidualLayerParams,u=a(4704,32,7,"conv32_down"),c=s(9216,32,3,"conv32_1"),l=s(9216,32,3,"conv32_2"),f=s(9216,32,3,"conv32_3"),h=s(36864,64,3,"conv64_down",!0),d=s(36864,64,3,"conv64_1"),p=s(36864,64,3,"conv64_2"),v=s(36864,64,3,"conv64_3"),g=s(147456,128,3,"conv128_down",!0),A=s(147456,128,3,"conv128_1"),w=s(147456,128,3,"conv128_2"),E=s(589824,256,3,"conv256_down",!0),x=s(589824,256,3,"conv256_1"),C=s(589824,256,3,"conv256_2"),S=s(589824,256,3,"conv256_down_out"),N=Le(function(){return Wr(Mr(e(256*128),[128,256]),[1,0])});if(o.push({paramPath:"fc"}),n().length!==0)throw new Error("weights remaing after extract: "+n().length);var O={conv32_down:u,conv32_1:c,conv32_2:l,conv32_3:f,conv64_down:h,conv64_1:d,conv64_2:p,conv64_3:v,conv128_down:g,conv128_1:A,conv128_2:w,conv256_down:E,conv256_1:x,conv256_2:C,conv256_down_out:S,fc:N};return{params:O,paramMappings:o}}function d0(r,t){var e=jr(r,t);function n(a){var s=e(a+"/scale/weights",1),u=e(a+"/scale/biases",1);return{weights:s,biases:u}}function o(a){var s=e(a+"/conv/filters",4),u=e(a+"/conv/bias",1),c=n(a);return{conv:{filters:s,bias:u},scale:c}}function i(a){return{conv1:o(a+"/conv1"),conv2:o(a+"/conv2")}}return{extractConvLayerParams:o,extractResidualLayerParams:i}}function p0(r){var t=[],e=d0(r,t),n=e.extractConvLayerParams,o=e.extractResidualLayerParams,i=n("conv32_down"),a=o("conv32_1"),s=o("conv32_2"),u=o("conv32_3"),c=o("conv64_down"),l=o("conv64_1"),f=o("conv64_2"),h=o("conv64_3"),d=o("conv128_down"),p=o("conv128_1"),v=o("conv128_2"),g=o("conv256_down"),A=o("conv256_1"),w=o("conv256_2"),E=o("conv256_down_out"),x=r.fc;if(t.push({originalPath:"fc",paramPath:"fc"}),!bm(x))throw new Error("expected weightMap[fc] to be a Tensor2D, instead have "+x);var C={conv32_down:i,conv32_1:a,conv32_2:s,conv32_3:u,conv64_down:c,conv64_1:l,conv64_2:f,conv64_3:h,conv128_down:d,conv128_1:p,conv128_2:v,conv256_down:g,conv256_1:A,conv256_2:w,conv256_down_out:E,fc:x};return Tr(r,t),{params:C,paramMappings:t}}function mr(r,t){var e=l0(r,t.conv1);return e=zf(e,t.conv2),e=gt(e,r),e=rn(e),e}function oa(r,t){var e=Uf(r,t.conv1);e=zf(e,t.conv2);var n=$o(r,2,2,"valid"),o=tn(n.shape),i=n.shape[3]!==e.shape[3],a=n.shape[1]!==e.shape[1]||n.shape[2]!==e.shape[2];if(a){var s=ti(e.shape);s[1]=1;var u=tn(s);e=mn([e,u],1);var c=ti(e.shape);c[2]=1;var l=tn(c);e=mn([e,l],2)}return n=i?mn([n,o],3):n,e=gt(n,e),e=rn(e),e}var v0=function(r){nt(t,r);function t(){return r.call(this,"FaceRecognitionNet")||this}return t.prototype.forwardInput=function(e){var n=this.params;if(!n)throw new Error("FaceRecognitionNet - load model before inference");return Le(function(){var o=e.toBatchTensor(150,!0).toFloat(),i=[122.782,117.001,104.298],a=ii(o,i).div(Te(256)),s=Uf(a,n.conv32_down);s=wn(s,3,2,"valid"),s=mr(s,n.conv32_1),s=mr(s,n.conv32_2),s=mr(s,n.conv32_3),s=oa(s,n.conv64_down),s=mr(s,n.conv64_1),s=mr(s,n.conv64_2),s=mr(s,n.conv64_3),s=oa(s,n.conv128_down),s=mr(s,n.conv128_1),s=mr(s,n.conv128_2),s=oa(s,n.conv256_down),s=mr(s,n.conv256_1),s=mr(s,n.conv256_2),s=oa(s,n.conv256_down_out);var u=s.mean([1,2]),c=Ui(u,n.fc);return c})},t.prototype.forward=function(e){return ze(this,void 0,void 0,function(){var n;return Ue(this,function(o){switch(o.label){case 0:return n=this.forwardInput,[4,En(e)];case 1:return[2,n.apply(this,[o.sent()])]}})})},t.prototype.computeFaceDescriptor=function(e){return ze(this,void 0,void 0,function(){var n,o,i,a=this;return Ue(this,function(s){switch(s.label){case 0:return[4,En(e)];case 1:return n=s.sent(),o=Le(function(){return An(a.forwardInput(n))}),[4,Promise.all(o.map(function(u){return u.data()}))];case 2:return i=s.sent(),o.forEach(function(u){return u.dispose()}),[2,n.isBatchInput?i:i[0]]}})})},t.prototype.getDefaultModelName=function(){return"face_recognition_model"},t.prototype.extractParamsFromWeigthMap=function(e){return p0(e)},t.prototype.extractParams=function(e){return h0(e)},t}(kr);function L1(r){var t=new FaceRecognitionNet;return t.extractWeights(r),t}function W1(r){return(r.gender===Gender.MALE||r.gender===Gender.FEMALE)&&isValidProbablitiy(r.genderProbability)}function Hf(r,t,e){var n={gender:t,genderProbability:e};return Object.assign({},r,n)}var jf=function(){function r(t){var e=t===void 0?{}:t,n=e.minFaceSize,o=e.scaleFactor,i=e.maxNumScales,a=e.scoreThresholds,s=e.scaleSteps;if(this._name="MtcnnOptions",this._minFaceSize=n||20,this._scaleFactor=o||.709,this._maxNumScales=i||10,this._scoreThresholds=a||[.6,.7,.7],this._scaleSteps=s,typeof this._minFaceSize!="number"||this._minFaceSize<0)throw new Error(this._name+" - expected minFaceSize to be a number > 0");if(typeof this._scaleFactor!="number"||this._scaleFactor<=0||this._scaleFactor>=1)throw new Error(this._name+" - expected scaleFactor to be a number between 0 and 1");if(typeof this._maxNumScales!="number"||this._maxNumScales<0)throw new Error(this._name+" - expected maxNumScales to be a number > 0");if(!Array.isArray(this._scoreThresholds)||this._scoreThresholds.length!==3||this._scoreThresholds.some(function(u){return typeof u!="number"}))throw new Error(this._name+" - expected scoreThresholds to be an array of numbers of length 3");if(this._scaleSteps&&(!Array.isArray(this._scaleSteps)||this._scaleSteps.some(function(u){return typeof u!="number"})))throw new Error(this._name+" - expected scaleSteps to be an array of numbers")}return Object.defineProperty(r.prototype,"minFaceSize",{get:function(){return this._minFaceSize},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"scaleFactor",{get:function(){return this._scaleFactor},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"maxNumScales",{get:function(){return this._maxNumScales},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"scoreThresholds",{get:function(){return this._scoreThresholds},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"scaleSteps",{get:function(){return this._scaleSteps},enumerable:!0,configurable:!0}),r}();function g0(r,t){function e(u,c){var l=_n(r(9*u),[3,3,u,1]),f=pn(r(u)),h=pn(r(u)),d=pn(r(u)),p=pn(r(u));return t.push({paramPath:c+"/filters"},{paramPath:c+"/batch_norm_scale"},{paramPath:c+"/batch_norm_offset"},{paramPath:c+"/batch_norm_mean"},{paramPath:c+"/batch_norm_variance"}),{filters:l,batch_norm_scale:f,batch_norm_offset:h,batch_norm_mean:d,batch_norm_variance:p}}function n(u,c,l,f,h){var d=_n(r(u*c*l*l),[l,l,u,c]),p=pn(r(c));return t.push({paramPath:f+"/filters"},{paramPath:f+"/"+(h?"batch_norm_offset":"bias")}),{filters:d,bias:p}}function o(u,c,l,f){var h=n(u,c,l,f,!0),d=h.filters,p=h.bias;return{filters:d,batch_norm_offset:p}}function i(u,c,l){var f=e(u,l+"/depthwise_conv"),h=o(u,c,1,l+"/pointwise_conv");return{depthwise_conv:f,pointwise_conv:h}}function a(){var u=o(3,32,3,"mobilenetv1/conv_0"),c=i(32,64,"mobilenetv1/conv_1"),l=i(64,128,"mobilenetv1/conv_2"),f=i(128,128,"mobilenetv1/conv_3"),h=i(128,256,"mobilenetv1/conv_4"),d=i(256,256,"mobilenetv1/conv_5"),p=i(256,512,"mobilenetv1/conv_6"),v=i(512,512,"mobilenetv1/conv_7"),g=i(512,512,"mobilenetv1/conv_8"),A=i(512,512,"mobilenetv1/conv_9"),w=i(512,512,"mobilenetv1/conv_10"),E=i(512,512,"mobilenetv1/conv_11"),x=i(512,1024,"mobilenetv1/conv_12"),C=i(1024,1024,"mobilenetv1/conv_13");return{conv_0:u,conv_1:c,conv_2:l,conv_3:f,conv_4:h,conv_5:d,conv_6:p,conv_7:v,conv_8:g,conv_9:A,conv_10:w,conv_11:E,conv_12:x,conv_13:C}}function s(){var u=o(1024,256,1,"prediction_layer/conv_0"),c=o(256,512,3,"prediction_layer/conv_1"),l=o(512,128,1,"prediction_layer/conv_2"),f=o(128,256,3,"prediction_layer/conv_3"),h=o(256,128,1,"prediction_layer/conv_4"),d=o(128,256,3,"prediction_layer/conv_5"),p=o(256,64,1,"prediction_layer/conv_6"),v=o(64,128,3,"prediction_layer/conv_7"),g=n(512,12,1,"prediction_layer/box_predictor_0/box_encoding_predictor"),A=n(512,9,1,"prediction_layer/box_predictor_0/class_predictor"),w=n(1024,24,1,"prediction_layer/box_predictor_1/box_encoding_predictor"),E=n(1024,18,1,"prediction_layer/box_predictor_1/class_predictor"),x=n(512,24,1,"prediction_layer/box_predictor_2/box_encoding_predictor"),C=n(512,18,1,"prediction_layer/box_predictor_2/class_predictor"),S=n(256,24,1,"prediction_layer/box_predictor_3/box_encoding_predictor"),N=n(256,18,1,"prediction_layer/box_predictor_3/class_predictor"),O=n(256,24,1,"prediction_layer/box_predictor_4/box_encoding_predictor"),F=n(256,18,1,"prediction_layer/box_predictor_4/class_predictor"),P=n(128,24,1,"prediction_layer/box_predictor_5/box_encoding_predictor"),z=n(128,18,1,"prediction_layer/box_predictor_5/class_predictor"),_={box_encoding_predictor:g,class_predictor:A},V={box_encoding_predictor:w,class_predictor:E},G={box_encoding_predictor:x,class_predictor:C},te={box_encoding_predictor:S,class_predictor:N},ce={box_encoding_predictor:O,class_predictor:F},se={box_encoding_predictor:P,class_predictor:z};return{conv_0:u,conv_1:c,conv_2:l,conv_3:f,conv_4:h,conv_5:d,conv_6:p,conv_7:v,box_predictor_0:_,box_predictor_1:V,box_predictor_2:G,box_predictor_3:te,box_predictor_4:ce,box_predictor_5:se}}return{extractMobilenetV1Params:a,extractPredictionLayerParams:s}}function m0(r){var t=[],e=Dr(r),n=e.extractWeights,o=e.getRemainingWeights,i=g0(n,t),a=i.extractMobilenetV1Params,s=i.extractPredictionLayerParams,u=a(),c=s(),l=ma(n(5118*4),[1,5118,4]),f={extra_dim:l};if(t.push({paramPath:"output_layer/extra_dim"}),o().length!==0)throw new Error("weights remaing after extract: "+o().length);return{params:{mobilenetv1:u,prediction_layer:c,output_layer:f},paramMappings:t}}function A0(r,t){var e=jr(r,t);function n(c,l,f){var h=e(c+"/Conv2d_"+l+"_pointwise/weights",4,f+"/filters"),d=e(c+"/Conv2d_"+l+"_pointwise/convolution_bn_offset",1,f+"/batch_norm_offset");return{filters:h,batch_norm_offset:d}}function o(c){var l="mobilenetv1/conv_"+c,f="MobilenetV1/Conv2d_"+c+"_depthwise",h=l+"/depthwise_conv",d=l+"/pointwise_conv",p=e(f+"/depthwise_weights",4,h+"/filters"),v=e(f+"/BatchNorm/gamma",1,h+"/batch_norm_scale"),g=e(f+"/BatchNorm/beta",1,h+"/batch_norm_offset"),A=e(f+"/BatchNorm/moving_mean",1,h+"/batch_norm_mean"),w=e(f+"/BatchNorm/moving_variance",1,h+"/batch_norm_variance");return{depthwise_conv:{filters:p,batch_norm_scale:v,batch_norm_offset:g,batch_norm_mean:A,batch_norm_variance:w},pointwise_conv:n("MobilenetV1",c,d)}}function i(){return{conv_0:n("MobilenetV1",0,"mobilenetv1/conv_0"),conv_1:o(1),conv_2:o(2),conv_3:o(3),conv_4:o(4),conv_5:o(5),conv_6:o(6),conv_7:o(7),conv_8:o(8),conv_9:o(9),conv_10:o(10),conv_11:o(11),conv_12:o(12),conv_13:o(13)}}function a(c,l){var f=e(c+"/weights",4,l+"/filters"),h=e(c+"/biases",1,l+"/bias");return{filters:f,bias:h}}function s(c){var l=a("Prediction/BoxPredictor_"+c+"/BoxEncodingPredictor","prediction_layer/box_predictor_"+c+"/box_encoding_predictor"),f=a("Prediction/BoxPredictor_"+c+"/ClassPredictor","prediction_layer/box_predictor_"+c+"/class_predictor");return{box_encoding_predictor:l,class_predictor:f}}function u(){return{conv_0:n("Prediction",0,"prediction_layer/conv_0"),conv_1:n("Prediction",1,"prediction_layer/conv_1"),conv_2:n("Prediction",2,"prediction_layer/conv_2"),conv_3:n("Prediction",3,"prediction_layer/conv_3"),conv_4:n("Prediction",4,"prediction_layer/conv_4"),conv_5:n("Prediction",5,"prediction_layer/conv_5"),conv_6:n("Prediction",6,"prediction_layer/conv_6"),conv_7:n("Prediction",7,"prediction_layer/conv_7"),box_predictor_0:s(0),box_predictor_1:s(1),box_predictor_2:s(2),box_predictor_3:s(3),box_predictor_4:s(4),box_predictor_5:s(5)}}return{extractMobilenetV1Params:i,extractPredictionLayerParams:u}}function y0(r){var t=[],e=A0(r,t),n=e.extractMobilenetV1Params,o=e.extractPredictionLayerParams,i=r["Output/extra_dim"];if(t.push({originalPath:"Output/extra_dim",paramPath:"output_layer/extra_dim"}),!Ki(i))throw new Error("expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have "+i);var a={mobilenetv1:n(),prediction_layer:o(),output_layer:{extra_dim:i}};return Tr(r,t),{params:a,paramMappings:t}}function Ar(r,t,e){return Le(function(){var n=Yn(r,t.filters,e,"same");return n=gt(n,t.batch_norm_offset),Ha(n,0,6)})}var x0=.0010000000474974513;function b0(r,t,e){return Le(function(){var n=zi(r,t.filters,e,"same");return n=al(n,t.batch_norm_mean,t.batch_norm_variance,t.batch_norm_offset,t.batch_norm_scale,x0),Ha(n,0,6)})}function w0(r){return[2,4,6,12].some(function(t){return t===r})?[2,2]:[1,1]}function E0(r,t){return Le(function(){var e=null,n=Ar(r,t.conv_0,[2,2]),o=[t.conv_1,t.conv_2,t.conv_3,t.conv_4,t.conv_5,t.conv_6,t.conv_7,t.conv_8,t.conv_9,t.conv_10,t.conv_11,t.conv_12,t.conv_13];if(o.forEach(function(i,a){var s=a+1,u=w0(s);n=b0(n,i.depthwise_conv,u),n=Ar(n,i.pointwise_conv,[1,1]),s===11&&(e=n)}),e===null)throw new Error("mobileNetV1 - output of conv layer 11 is null");return{out:n,conv11:e}})}function C0(r,t,e,n,o){var i=r.shape[0],a=Math.min(e,i),s=t.map(function(l,f){return{score:l,boxIndex:f}}).filter(function(l){return l.score>o}).sort(function(l,f){return f.score-l.score}),u=function(l){return l<=n?1:0},c=[];return s.forEach(function(l){if(!(c.length>=a)){for(var f=l.score,h=c.length-1;h>=0;--h){var d=I0(r,l.boxIndex,c[h]);if(d!==0&&(l.score*=u(d),l.score<=o))break}f===l.score&&c.push(l.boxIndex)}}),c}function I0(r,t,e){var n=r.arraySync(),o=Math.min(n[t][0],n[t][2]),i=Math.min(n[t][1],n[t][3]),a=Math.max(n[t][0],n[t][2]),s=Math.max(n[t][1],n[t][3]),u=Math.min(n[e][0],n[e][2]),c=Math.min(n[e][1],n[e][3]),l=Math.max(n[e][0],n[e][2]),f=Math.max(n[e][1],n[e][3]),h=(a-o)*(s-i),d=(l-u)*(f-c);if(h<=0||d<=0)return 0;var p=Math.max(o,u),v=Math.max(i,c),g=Math.min(a,l),A=Math.min(s,f),w=Math.max(g-p,0)*Math.max(A-v,0);return w/(h+d-w)}function S0(r){var t=An(Wr(r,[1,0])),e=[yn(t[2],t[0]),yn(t[3],t[1])],n=[gt(t[0],ir(e[0],Te(2))),gt(t[1],ir(e[1],Te(2)))];return{sizes:e,centers:n}}function R0(r,t){var e=S0(r),n=e.sizes,o=e.centers,i=An(Wr(t,[1,0])),a=ir(Fn(ja(ir(i[2],Te(5))),n[0]),Te(2)),s=gt(Fn(ir(i[0],Te(10)),n[0]),o[0]),u=ir(Fn(ja(ir(i[3],Te(5))),n[1]),Te(2)),c=gt(Fn(ir(i[1],Te(10)),n[1]),o[1]);return Wr(jn([yn(s,a),yn(c,u),gt(s,a),gt(c,u)]),[1,0])}function B0(r,t,e){return Le(function(){var n=r.shape[0],o=R0(rr(vo(e.extra_dim,[n,1,1]),[-1,4]),rr(r,[-1,4]));o=rr(o,[n,o.shape[0]/n,4]);var i=nl(dr(t,[0,0,1],[-1,-1,-1])),a=dr(i,[0,0,0],[-1,-1,1]);a=rr(a,[n,a.shape[1]]);var s=An(o),u=An(a);return{boxes:s,scores:u}})}function ko(r,t){return Le(function(){var e=r.shape[0],n=rr(ar(r,t.box_encoding_predictor),[e,-1,1,4]),o=rr(ar(r,t.class_predictor),[e,-1,3]);return{boxPredictionEncoding:n,classPrediction:o}})}function k0(r,t,e){return Le(function(){var n=Ar(r,e.conv_0,[1,1]),o=Ar(n,e.conv_1,[2,2]),i=Ar(o,e.conv_2,[1,1]),a=Ar(i,e.conv_3,[2,2]),s=Ar(a,e.conv_4,[1,1]),u=Ar(s,e.conv_5,[2,2]),c=Ar(u,e.conv_6,[1,1]),l=Ar(c,e.conv_7,[2,2]),f=ko(t,e.box_predictor_0),h=ko(r,e.box_predictor_1),d=ko(o,e.box_predictor_2),p=ko(a,e.box_predictor_3),v=ko(u,e.box_predictor_4),g=ko(l,e.box_predictor_5),A=mn([f.boxPredictionEncoding,h.boxPredictionEncoding,d.boxPredictionEncoding,p.boxPredictionEncoding,v.boxPredictionEncoding,g.boxPredictionEncoding],1),w=mn([f.classPrediction,h.classPrediction,d.classPrediction,p.classPrediction,v.classPrediction,g.classPrediction],1);return{boxPredictions:A,classPredictions:w}})}var ia=function(){function r(t){var e=t===void 0?{}:t,n=e.minConfidence,o=e.maxResults;if(this._name="SsdMobilenetv1Options",this._minConfidence=n||.5,this._maxResults=o||100,typeof this._minConfidence!="number"||this._minConfidence<=0||this._minConfidence>=1)throw new Error(this._name+" - expected minConfidence to be a number between 0 and 1");if(typeof this._maxResults!="number")throw new Error(this._name+" - expected maxResults to be a number")}return Object.defineProperty(r.prototype,"minConfidence",{get:function(){return this._minConfidence},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"maxResults",{get:function(){return this._maxResults},enumerable:!0,configurable:!0}),r}(),Vf=function(r){nt(t,r);function t(){return r.call(this,"SsdMobilenetv1")||this}return t.prototype.forwardInput=function(e){var n=this.params;if(!n)throw new Error("SsdMobilenetv1 - load model before inference");return Le(function(){var o=e.toBatchTensor(512,!1).toFloat(),i=yn(Fn(o,Te(.007843137718737125)),Te(1)),a=E0(i,n.mobilenetv1),s=k0(a.out,a.conv11,n.prediction_layer),u=s.boxPredictions,c=s.classPredictions;return B0(u,c,n.output_layer)})},t.prototype.forward=function(e){return ze(this,void 0,void 0,function(){var n;return Ue(this,function(o){switch(o.label){case 0:return n=this.forwardInput,[4,En(e)];case 1:return[2,n.apply(this,[o.sent()])]}})})},t.prototype.locateFaces=function(e,n){return n===void 0&&(n={}),ze(this,void 0,void 0,function(){var o,i,a,s,u,c,l,f,h,d,p,v,g,A,w,E,x,C,S,N,O;return Ue(this,function(F){switch(F.label){case 0:return o=new ia(n),i=o.maxResults,a=o.minConfidence,[4,En(e)];case 1:for(s=F.sent(),u=this.forwardInput(s),c=u.boxes,l=u.scores,f=c[0],h=l[0],d=1;d<c.length;d++)c[d].dispose(),l[d].dispose();return g=(v=Array).from,[4,h.data()];case 2:return p=g.apply(v,[F.sent()]),A=.5,w=C0(f,p,i,A,a),E=s.getReshapedInputDimensions(0),x=s.inputSize,C=x/E.width,S=x/E.height,N=f.arraySync(),O=w.map(function(P){var z=[Math.max(0,N[P][0]),Math.min(1,N[P][2])].map(function(se){return se*S}),_=z[0],V=z[1],G=[Math.max(0,N[P][1]),Math.min(1,N[P][3])].map(function(se){return se*C}),te=G[0],ce=G[1];return new Gn(p[P],new Rs(te,_,ce-te,V-_),{height:s.getInputHeight(0),width:s.getInputWidth(0)})}),f.dispose(),h.dispose(),[2,O]}})})},t.prototype.getDefaultModelName=function(){return"ssd_mobilenetv1_model"},t.prototype.extractParamsFromWeigthMap=function(e){return y0(e)},t.prototype.extractParams=function(e){return m0(e)},t}(kr);function T0(r){var t=new SsdMobilenetv1;return t.extractWeights(r),t}function Q1(r){return T0(r)}var _1=function(r){nt(t,r);function t(){return r!==null&&r.apply(this,arguments)||this}return t}(Vf),D0=.4,F0=[new Nt(.738768,.874946),new Nt(2.42204,2.65704),new Nt(4.30971,7.04493),new Nt(10.246,4.59428),new Nt(12.6868,11.8741)],P0=[new Nt(1.603231,2.094468),new Nt(6.041143,7.080126),new Nt(2.882459,3.518061),new Nt(4.266906,5.178857),new Nt(9.041765,10.66308)],N0=[117.001,114.697,97.404],O0="tiny_yolov2_model",M0="tiny_yolov2_separable_conv_model",aa=function(r){return typeof r=="number"};function L0(r){if(!r)throw new Error("invalid config: "+r);if(typeof r.withSeparableConvs!="boolean")throw new Error("config.withSeparableConvs has to be a boolean, have: "+r.withSeparableConvs);if(!aa(r.iouThreshold)||r.iouThreshold<0||r.iouThreshold>1)throw new Error("config.iouThreshold has to be a number between [0, 1], have: "+r.iouThreshold);if(!Array.isArray(r.classes)||!r.classes.length||!r.classes.every(function(t){return typeof t=="string"}))throw new Error("config.classes has to be an array class names: string[], have: "+JSON.stringify(r.classes));if(!Array.isArray(r.anchors)||!r.anchors.length||!r.anchors.map(function(t){return t||{}}).every(function(t){return aa(t.x)&&aa(t.y)}))throw new Error("config.anchors has to be an array of { x: number, y: number }, have: "+JSON.stringify(r.anchors));if(r.meanRgb&&(!Array.isArray(r.meanRgb)||r.meanRgb.length!==3||!r.meanRgb.every(aa)))throw new Error("config.meanRgb has to be an array of shape [number, number, number], have: "+JSON.stringify(r.meanRgb))}function Hs(r){return Le(function(){var t=Fn(r,Te(.10000000149011612));return gt(rn(yn(r,t)),t)})}function Vr(r,t){return Le(function(){var e=Yr(r,[[0,0],[1,1],[1,1],[0,0]]);return e=Yn(e,t.conv.filters,[1,1],"valid"),e=yn(e,t.bn.sub),e=Fn(e,t.bn.truediv),e=gt(e,t.conv.bias),Hs(e)})}function Gr(r,t){return Le(function(){var e=Yr(r,[[0,0],[1,1],[1,1],[0,0]]);return e=Ka(e,t.depthwise_filter,t.pointwise_filter,[1,1],"valid"),e=gt(e,t.bias),Hs(e)})}function W0(r,t){var e=ta(r,t);function n(a,s){var u=pn(r(a)),c=pn(r(a));return t.push({paramPath:s+"/sub"},{paramPath:s+"/truediv"}),{sub:u,truediv:c}}function o(a,s,u){var c=e(a,s,3,u+"/conv"),l=n(s,u+"/bn");return{conv:c,bn:l}}var i=Ls(r,t);return{extractConvParams:e,extractConvWithBatchNormParams:o,extractSeparableConvParams:i}}function Q0(r,t,e,n){var o=Dr(r),i=o.extractWeights,a=o.getRemainingWeights,s=[],u=W0(i,s),c=u.extractConvParams,l=u.extractConvWithBatchNormParams,f=u.extractSeparableConvParams,h;if(t.withSeparableConvs){var d=n[0],p=n[1],v=n[2],g=n[3],A=n[4],w=n[5],E=n[6],x=n[7],C=n[8],S=t.isFirstLayerConv2d?c(d,p,3,"conv0"):f(d,p,"conv0"),N=f(p,v,"conv1"),O=f(v,g,"conv2"),F=f(g,A,"conv3"),P=f(A,w,"conv4"),z=f(w,E,"conv5"),_=x?f(E,x,"conv6"):void 0,V=C?f(x,C,"conv7"):void 0,G=c(C||x||E,5*e,1,"conv8");h={conv0:S,conv1:N,conv2:O,conv3:F,conv4:P,conv5:z,conv6:_,conv7:V,conv8:G}}else{var d=n[0],p=n[1],v=n[2],g=n[3],A=n[4],w=n[5],E=n[6],x=n[7],C=n[8],S=l(d,p,"conv0"),N=l(p,v,"conv1"),O=l(v,g,"conv2"),F=l(g,A,"conv3"),P=l(A,w,"conv4"),z=l(w,E,"conv5"),_=l(E,x,"conv6"),V=l(x,C,"conv7"),G=c(C,5*e,1,"conv8");h={conv0:S,conv1:N,conv2:O,conv3:F,conv4:P,conv5:z,conv6:_,conv7:V,conv8:G}}if(a().length!==0)throw new Error("weights remaing after extract: "+a().length);return{params:h,paramMappings:s}}function _0(r,t){var e=jr(r,t);function n(s){var u=e(s+"/sub",1),c=e(s+"/truediv",1);return{sub:u,truediv:c}}function o(s){var u=e(s+"/filters",4),c=e(s+"/bias",1);return{filters:u,bias:c}}function i(s){var u=o(s+"/conv"),c=n(s+"/bn");return{conv:u,bn:c}}var a=Ws(e);return{extractConvParams:o,extractConvWithBatchNormParams:i,extractSeparableConvParams:a}}function z0(r,t){var e=[],n=_0(r,e),o=n.extractConvParams,i=n.extractConvWithBatchNormParams,a=n.extractSeparableConvParams,s;if(t.withSeparableConvs){var u=t.filterSizes&&t.filterSizes.length||9;s={conv0:t.isFirstLayerConv2d?o("conv0"):a("conv0"),conv1:a("conv1"),conv2:a("conv2"),conv3:a("conv3"),conv4:a("conv4"),conv5:a("conv5"),conv6:u>7?a("conv6"):void 0,conv7:u>8?a("conv7"):void 0,conv8:o("conv8")}}else s={conv0:i("conv0"),conv1:i("conv1"),conv2:i("conv2"),conv3:i("conv3"),conv4:i("conv4"),conv5:i("conv5"),conv6:i("conv6"),conv7:i("conv7"),conv8:o("conv8")};return Tr(r,e),{params:s,paramMappings:e}}var Gf;(function(r){r[r.XS=224]="XS",r[r.SM=320]="SM",r[r.MD=416]="MD",r[r.LG=608]="LG"})(Gf||(Gf={}));var js=function(){function r(t){var e=t===void 0?{}:t,n=e.inputSize,o=e.scoreThreshold;if(this._name="TinyYolov2Options",this._inputSize=n||416,this._scoreThreshold=o||.5,typeof this._inputSize!="number"||this._inputSize%32!==0)throw new Error(this._name+" - expected inputSize to be a number divisible by 32");if(typeof this._scoreThreshold!="number"||this._scoreThreshold<=0||this._scoreThreshold>=1)throw new Error(this._name+" - expected scoreThreshold to be a number between 0 and 1")}return Object.defineProperty(r.prototype,"inputSize",{get:function(){return this._inputSize},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"scoreThreshold",{get:function(){return this._scoreThreshold},enumerable:!0,configurable:!0}),r}(),Xf=function(r){nt(t,r);function t(e){var n=r.call(this,"TinyYolov2")||this;return L0(e),n._config=e,n}return Object.defineProperty(t.prototype,"config",{get:function(){return this._config},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"withClassScores",{get:function(){return this.config.withClassScores||this.config.classes.length>1},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"boxEncodingSize",{get:function(){return 5+(this.withClassScores?this.config.classes.length:0)},enumerable:!0,configurable:!0}),t.prototype.runTinyYolov2=function(e,n){var o=Vr(e,n.conv0);return o=wn(o,[2,2],[2,2],"same"),o=Vr(o,n.conv1),o=wn(o,[2,2],[2,2],"same"),o=Vr(o,n.conv2),o=wn(o,[2,2],[2,2],"same"),o=Vr(o,n.conv3),o=wn(o,[2,2],[2,2],"same"),o=Vr(o,n.conv4),o=wn(o,[2,2],[2,2],"same"),o=Vr(o,n.conv5),o=wn(o,[2,2],[1,1],"same"),o=Vr(o,n.conv6),o=Vr(o,n.conv7),ar(o,n.conv8,"valid",!1)},t.prototype.runMobilenet=function(e,n){var o=this.config.isFirstLayerConv2d?Hs(ar(e,n.conv0,"valid",!1)):Gr(e,n.conv0);return o=wn(o,[2,2],[2,2],"same"),o=Gr(o,n.conv1),o=wn(o,[2,2],[2,2],"same"),o=Gr(o,n.conv2),o=wn(o,[2,2],[2,2],"same"),o=Gr(o,n.conv3),o=wn(o,[2,2],[2,2],"same"),o=Gr(o,n.conv4),o=wn(o,[2,2],[2,2],"same"),o=Gr(o,n.conv5),o=wn(o,[2,2],[1,1],"same"),o=n.conv6?Gr(o,n.conv6):o,o=n.conv7?Gr(o,n.conv7):o,ar(o,n.conv8,"valid",!1)},t.prototype.forwardInput=function(e,n){var o=this,i=this.params;if(!i)throw new Error("TinyYolov2 - load model before inference");return Le(function(){var a=e.toBatchTensor(n,!1).toFloat();return a=o.config.meanRgb?ii(a,o.config.meanRgb):a,a=a.div(Te(256)),o.config.withSeparableConvs?o.runMobilenet(a,i):o.runTinyYolov2(a,i)})},t.prototype.forward=function(e,n){return ze(this,void 0,void 0,function(){var o;return Ue(this,function(i){switch(i.label){case 0:return o=this.forwardInput,[4,En(e)];case 1:return[4,o.apply(this,[i.sent(),n])];case 2:return[2,i.sent()]}})})},t.prototype.detect=function(e,n){return n===void 0&&(n={}),ze(this,void 0,void 0,function(){var o,i,a,s,u,c,l,f,h,d,p,v,g,A,w=this;return Ue(this,function(E){switch(E.label){case 0:return o=new js(n),i=o.inputSize,a=o.scoreThreshold,[4,En(e)];case 1:return s=E.sent(),[4,this.forwardInput(s,i)];case 2:return u=E.sent(),c=Le(function(){return An(u)[0].expandDims()}),l={width:s.getInputWidth(0),height:s.getInputHeight(0)},[4,this.extractBoxes(c,s.getReshapedInputDimensions(0),a)];case 3:return f=E.sent(),u.dispose(),c.dispose(),h=f.map(function(x){return x.box}),d=f.map(function(x){return x.score}),p=f.map(function(x){return x.classScore}),v=f.map(function(x){return w.config.classes[x.label]}),g=oi(h.map(function(x){return x.rescale(i)}),d,this.config.iouThreshold,!0),A=g.map(function(x){return new pf(d[x],p[x],v[x],h[x],l)}),[2,A]}})})},t.prototype.getDefaultModelName=function(){return""},t.prototype.extractParamsFromWeigthMap=function(e){return z0(e,this.config)},t.prototype.extractParams=function(e){var n=this.config.filterSizes||t.DEFAULT_FILTER_SIZES,o=n?n.length:void 0;if(o!==7&&o!==8&&o!==9)throw new Error("TinyYolov2 - expected 7 | 8 | 9 convolutional filters, but found "+o+" filterSizes in config");return Q0(e,this.config,this.boxEncodingSize,n)},t.prototype.extractBoxes=function(e,n,o){return ze(this,void 0,void 0,function(){var i,a,s,u,c,l,f,h,d,p,v,g,A,w,E,x,C,S,N,O,F,P,z,_,V,G,te,ce,se,ie=this;return Ue(this,function(de){switch(de.label){case 0:return i=n.width,a=n.height,s=Math.max(i,a),u=s/i,c=s/a,l=e.shape[1],f=this.config.anchors.length,h=Le(function(){var ve=e.reshape([l,l,f,ie.boxEncodingSize]),ye=ve.slice([0,0,0,0],[l,l,f,4]),Be=ve.slice([0,0,0,4],[l,l,f,1]),Pe=ie.withClassScores?Cr(ve.slice([0,0,0,5],[l,l,f,ie.config.classes.length]),3):Te(0);return[ye,Be,Pe]}),d=h[0],p=h[1],v=h[2],g=[],[4,p.array()];case 1:return A=de.sent(),[4,d.array()];case 2:w=de.sent(),E=0,de.label=3;case 3:if(!(E<l))return[3,12];x=0,de.label=4;case 4:if(!(x<l))return[3,11];C=0,de.label=5;case 5:return C<f?(S=Ss(A[E][x][C][0]),!o||S>o?(N=(x+Ss(w[E][x][C][0]))/l*u,O=(E+Ss(w[E][x][C][1]))/l*c,F=Math.exp(w[E][x][C][2])*this.config.anchors[C].x/l*u,P=Math.exp(w[E][x][C][3])*this.config.anchors[C].y/l*c,z=N-F/2,_=O-P/2,V={row:E,col:x,anchor:C},this.withClassScores?[4,this.extractPredictedClass(v,V)]:[3,7]):[3,9]):[3,10];case 6:return se=de.sent(),[3,8];case 7:se={classScore:1,label:0},de.label=8;case 8:G=se,te=G.classScore,ce=G.label,g.push(Nn({box:new Zi(z,_,z+F,_+P),score:S,classScore:S*te,label:ce},V)),de.label=9;case 9:return C++,[3,5];case 10:return x++,[3,4];case 11:return E++,[3,3];case 12:return d.dispose(),p.dispose(),v.dispose(),[2,g]}})})},t.prototype.extractPredictedClass=function(e,n){return ze(this,void 0,void 0,function(){var o,i,a,s;return Ue(this,function(u){switch(u.label){case 0:return o=n.row,i=n.col,a=n.anchor,[4,e.array()];case 1:return s=u.sent(),[2,Array(this.config.classes.length).fill(0).map(function(c,l){return s[o][i][a][l]}).map(function(c,l){return{classScore:c,label:l}}).reduce(function(c,l){return c.classScore>l.classScore?c:l})]}})})},t.DEFAULT_FILTER_SIZES=[3,16,32,64,128,256,512,1024,1024],t}(kr),U0=function(r){nt(t,r);function t(e){e===void 0&&(e=!0);var n=this,o=Object.assign({},{withSeparableConvs:e,iouThreshold:D0,classes:["face"]},e?{anchors:P0,meanRgb:N0}:{anchors:F0,withClassScores:!0});return n=r.call(this,o)||this,n}return Object.defineProperty(t.prototype,"withSeparableConvs",{get:function(){return this.config.withSeparableConvs},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"anchors",{get:function(){return this.config.anchors},enumerable:!0,configurable:!0}),t.prototype.locateFaces=function(e,n){return ze(this,void 0,void 0,function(){var o;return Ue(this,function(i){switch(i.label){case 0:return[4,this.detect(e,n)];case 1:return o=i.sent(),[2,o.map(function(a){return new Gn(a.score,a.relativeBox,{width:a.imageWidth,height:a.imageHeight})})]}})})},t.prototype.getDefaultModelName=function(){return this.withSeparableConvs?M0:O0},t.prototype.extractParamsFromWeigthMap=function(e){return r.prototype.extractParamsFromWeigthMap.call(this,e)},t}(Xf);function z1(r,t){t===void 0&&(t=!0);var e=new TinyYolov2(t);return e.extractWeights(r),e}var Jf=function(r){nt(t,r);function t(){var e=r!==null&&r.apply(this,arguments)||this;return e._name="TinyFaceDetectorOptions",e}return t}(js),ui=function(){function r(){}return r.prototype.then=function(t){return ze(this,void 0,void 0,function(){var e;return Ue(this,function(n){switch(n.label){case 0:return e=t,[4,this.run()];case 1:return[2,e.apply(void 0,[n.sent()])]}})})},r.prototype.run=function(){return ze(this,void 0,void 0,function(){return Ue(this,function(t){throw new Error("ComposableTask - run is not implemented")})})},r}();function Kf(r,t){var e={descriptor:t};return Object.assign({},r,e)}function sa(r,t,e,n,o){return o===void 0&&(o=function(i){var a=i.alignedRect;return a}),ze(this,void 0,void 0,function(){var i,a,s,u,c;return Ue(this,function(l){switch(l.label){case 0:return i=r.map(function(f){return _s(f)?o(f):f.detection}),s=n,s?[3,5]:t instanceof at?[4,Ns(t,i)]:[3,2];case 1:return u=l.sent(),[3,4];case 2:return[4,Ps(t,i)];case 3:u=l.sent(),l.label=4;case 4:s=u,l.label=5;case 5:return a=s,[4,e(a)];case 6:return c=l.sent(),a.forEach(function(f){return f instanceof at&&f.dispose()}),[2,c]}})})}function Vs(r,t,e,n,o){return ze(this,void 0,void 0,function(){var i=this;return Ue(this,function(a){return[2,sa([r],t,function(s){return ze(i,void 0,void 0,function(){return Ue(this,function(u){return[2,e(s[0])]})})},n,o)]})})}function H0(r){return Le(function(){return jn(An(r,3).reverse(),3)})}var ua=2,ca=12;function j0(r,t){var e=ta(r,t),n=Ms(r,t);function o(c,l){var f=pn(r(c));return t.push({paramPath:l}),f}function i(c,l,f){f===void 0&&(f=!1);var h=e(c[0],c[1],3,l+"/conv1"),d=o(c[1],l+"/prelu1_alpha"),p=e(c[1],c[2],3,l+"/conv2"),v=o(c[2],l+"/prelu2_alpha"),g=e(c[2],c[3],f?2:3,l+"/conv3"),A=o(c[3],l+"/prelu3_alpha");return{conv1:h,prelu1_alpha:d,conv2:p,prelu2_alpha:v,conv3:g,prelu3_alpha:A}}function a(){var c=i([3,10,16,32],"pnet"),l=e(32,2,1,"pnet/conv4_1"),f=e(32,4,1,"pnet/conv4_2");return Nn(Nn({},c),{conv4_1:l,conv4_2:f})}function s(){var c=i([3,28,48,64],"rnet",!0),l=n(576,128,"rnet/fc1"),f=o(128,"rnet/prelu4_alpha"),h=n(128,2,"rnet/fc2_1"),d=n(128,4,"rnet/fc2_2");return Nn(Nn({},c),{fc1:l,prelu4_alpha:f,fc2_1:h,fc2_2:d})}function u(){var c=i([3,32,64,64],"onet"),l=e(64,128,2,"onet/conv4"),f=o(128,"onet/prelu4_alpha"),h=n(1152,256,"onet/fc1"),d=o(256,"onet/prelu5_alpha"),p=n(256,2,"onet/fc2_1"),v=n(256,4,"onet/fc2_2"),g=n(256,10,"onet/fc2_3");return Nn(Nn({},c),{conv4:l,prelu4_alpha:f,fc1:h,prelu5_alpha:d,fc2_1:p,fc2_2:v,fc2_3:g})}return{extractPNetParams:a,extractRNetParams:s,extractONetParams:u}}function V0(r){var t=Dr(r),e=t.extractWeights,n=t.getRemainingWeights,o=[],i=j0(e,o),a=i.extractPNetParams,s=i.extractRNetParams,u=i.extractONetParams,c=a(),l=s(),f=u();if(n().length!==0)throw new Error("weights remaing after extract: "+n().length);return{params:{pnet:c,rnet:l,onet:f},paramMappings:o}}function G0(r,t){var e=jr(r,t);function n(l){var f=e(l+"/weights",4,l+"/filters"),h=e(l+"/bias",1);return{filters:f,bias:h}}function o(l){var f=e(l+"/weights",2),h=e(l+"/bias",1);return{weights:f,bias:h}}function i(l){return e(l,1)}function a(l){var f=n(l+"/conv1"),h=i(l+"/prelu1_alpha"),d=n(l+"/conv2"),p=i(l+"/prelu2_alpha"),v=n(l+"/conv3"),g=i(l+"/prelu3_alpha");return{conv1:f,prelu1_alpha:h,conv2:d,prelu2_alpha:p,conv3:v,prelu3_alpha:g}}function s(){var l=a("pnet"),f=n("pnet/conv4_1"),h=n("pnet/conv4_2");return Nn(Nn({},l),{conv4_1:f,conv4_2:h})}function u(){var l=a("rnet"),f=o("rnet/fc1"),h=i("rnet/prelu4_alpha"),d=o("rnet/fc2_1"),p=o("rnet/fc2_2");return Nn(Nn({},l),{fc1:f,prelu4_alpha:h,fc2_1:d,fc2_2:p})}function c(){var l=a("onet"),f=n("onet/conv4"),h=i("onet/prelu4_alpha"),d=o("onet/fc1"),p=i("onet/prelu5_alpha"),v=o("onet/fc2_1"),g=o("onet/fc2_2"),A=o("onet/fc2_3");return Nn(Nn({},l),{conv4:f,prelu4_alpha:h,fc1:d,prelu5_alpha:p,fc2_1:v,fc2_2:g,fc2_3:A})}return{extractPNetParams:s,extractRNetParams:u,extractONetParams:c}}function X0(r){var t=[],e=G0(r,t),n=e.extractPNetParams,o=e.extractRNetParams,i=e.extractONetParams,a=n(),s=o(),u=i();return Tr(r,t),{params:{pnet:a,rnet:s,onet:u},paramMappings:t}}function Gs(r,t){var e=t[0],n=t[1];return{height:Math.floor(e*r),width:Math.floor(n*r)}}function J0(r,t,e){for(var n=e[0],o=e[1],i=ca/r,a=[],s=Math.min(n,o)*i,u=0;s>=12;)a.push(i*Math.pow(t,u)),s=s*t,u+=1;return a}var Xs=function(r){nt(t,r);function t(e,n,o,i){return r.call(this,{left:e,top:n,right:o,bottom:i},!0)||this}return t}(pr);function Zf(r){return Le(function(){return Fn(yn(r,Te(127.5)),Te(.0078125))})}function To(r,t){return Le(function(){return gt(rn(r),Fn(t,Mi(rn(Mi(r)))))})}function Js(r,t,e){return e===void 0&&(e=!1),Le(function(){var n=ar(r,t.conv1,"valid");return n=To(n,t.prelu1_alpha),n=wn(n,e?[2,2]:[3,3],[2,2],"same"),n=ar(n,t.conv2,"valid"),n=To(n,t.prelu2_alpha),n=e?n:wn(n,[3,3],[2,2],"valid"),n=ar(n,t.conv3,"valid"),n=To(n,t.prelu3_alpha),n})}function K0(r,t){return Le(function(){var e=Js(r,t,!0),n=ar(e,t.conv4_1,"valid"),o=qn(Hi(n,3),3),i=Cr(yn(n,o),3),a=ar(e,t.conv4_2,"valid");return{prob:i,regions:a}})}function Z0(r,t){return Le(function(){var e=Gs(t,r.shape.slice(1)),n=e.height,o=e.width,i=es.resizeBilinear(r,[n,o]),a=Zf(i);return Wr(a,[0,2,1,3])})}function q0(r,t,e,n){for(var o=[],i=r.arraySync(),a=0;a<r.shape[0];a++)for(var s=0;s<r.shape[1];s++)i[a][s]>=n&&o.push(new Nt(s,a));var u=o.map(function(c){var l=new Zi(Math.round((c.y*ua+1)/e),Math.round((c.x*ua+1)/e),Math.round((c.y*ua+ca)/e),Math.round((c.x*ua+ca)/e)),f=i[c.y][c.x],h=t.arraySync(),d=new Xs(h[c.y][c.x][0],h[c.y][c.x][1],h[c.y][c.x][2],h[c.y][c.x][3]);return{cell:l,score:f,region:d}});return u}function Y0(r,t,e,n,o){o.stage1=[];var i=t.map(function(h){return Le(function(){var d={scale:h},p=Z0(r,h),v=Date.now(),g=K0(p,n),A=g.prob,w=g.regions;d.pnet=Date.now()-v;var E=An(An(A,3)[1])[0],x=An(w)[0];return{scoresTensor:E,regionsTensor:x,scale:h,statsForScale:d}})}),a=i.map(function(h){var d=h.scoresTensor,p=h.regionsTensor,v=h.scale,g=h.statsForScale,A=q0(d,p,v,e);if(d.dispose(),p.dispose(),!A.length)return o.stage1.push(g),[];var w=Date.now(),E=oi(A.map(function(x){return x.cell}),A.map(function(x){return x.score}),.5);return g.nms=Date.now()-w,g.numBoxes=E.length,o.stage1.push(g),E.map(function(x){return A[x]})}),s=a.reduce(function(h,d){return h.concat(d)},[]),u=[],c=[];if(s.length>0){var l=Date.now(),f=oi(s.map(function(h){return h.cell}),s.map(function(h){return h.score}),.7);o.stage1_nms=Date.now()-l,c=f.map(function(h){return s[h].score}),u=f.map(function(h){return s[h]}).map(function(h){var d=h.cell,p=h.region;return new Zi(d.left+p.left*d.width,d.top+p.top*d.height,d.right+p.right*d.width,d.bottom+p.bottom*d.height).toSquare().round()})}return{boxes:u,scores:c}}function qf(r,t,e){var n=e.width,o=e.height;return ze(this,void 0,void 0,function(){var i,a,s,u=this;return Ue(this,function(c){switch(c.label){case 0:return i=vr(r),[4,Promise.all(t.map(function(l){return ze(u,void 0,void 0,function(){var f,h,d,p,v,g,A,w;return Ue(this,function(E){return f=l.padAtBorders(r.height,r.width),h=f.y,d=f.ey,p=f.x,v=f.ex,g=p-1,A=h-1,w=i.getImageData(g,A,v-g,d-A),[2,On.isNodejs()?Fs(w):createImageBitmap(w)]})})}))];case 1:return a=c.sent(),s=[],a.forEach(function(l){var f=Yi({width:n,height:o}),h=vr(f);h.drawImage(l,0,0,n,o);for(var d=h.getImageData(0,0,n,o).data,p=[],v=0;v<d.length;v+=4)p.push(d[v+2]),p.push(d[v+1]),p.push(d[v]);s.push(p)}),[2,s.map(function(l){var f=Le(function(){var h=Wr(_n(l,[1,n,o,3]),[0,2,1,3]).toFloat();return Zf(h)});return f})]}})})}function $0(r,t){return Le(function(){var e=Js(r,t),n=rr(e,[e.shape[0],t.fc1.weights.shape[0]]),o=gr(n,t.fc1),i=To(o,t.prelu4_alpha),a=gr(i,t.fc2_1),s=qn(Hi(a,1),1),u=Cr(yn(a,s),1),c=gr(i,t.fc2_2),l=An(u,1)[1];return{scores:l,regions:c}})}function eA(r,t,e,n,o){return ze(this,void 0,void 0,function(){var i,a,s,u,c,l,f,h,d,p,v,g,A,w;return Ue(this,function(E){switch(E.label){case 0:return i=Date.now(),[4,qf(r,t,{width:24,height:24})];case 1:return a=E.sent(),o.stage2_extractImagePatches=Date.now()-i,i=Date.now(),s=a.map(function(x){var C=$0(x,n);return x.dispose(),C}),o.stage2_rnet=Date.now()-i,u=s.length>1?mn(s.map(function(x){return x.scores})):s[0].scores,f=(l=Array).from,[4,u.data()];case 2:return c=f.apply(l,[E.sent()]),u.dispose(),h=c.map(function(x,C){return{score:x,idx:C}}).filter(function(x){return x.score>e}).map(function(x){var C=x.idx;return C}),d=h.map(function(x){return t[x]}),p=h.map(function(x){return c[x]}),v=[],g=[],d.length>0&&(i=Date.now(),A=oi(d,p,.7),o.stage2_nms=Date.now()-i,w=A.map(function(x){var C=s[h[x]].regions.arraySync();return new Xs(C[0][0],C[0][1],C[0][2],C[0][3])}),g=A.map(function(x){return p[x]}),v=A.map(function(x,C){return d[x].calibrate(w[C])})),s.forEach(function(x){x.regions.dispose(),x.scores.dispose()}),[2,{boxes:v,scores:g}]}})})}function tA(r,t){return Le(function(){var e=Js(r,t);e=wn(e,[2,2],[2,2],"same"),e=ar(e,t.conv4,"valid"),e=To(e,t.prelu4_alpha);var n=rr(e,[e.shape[0],t.fc1.weights.shape[0]]),o=gr(n,t.fc1),i=To(o,t.prelu5_alpha),a=gr(i,t.fc2_1),s=qn(Hi(a,1),1),u=Cr(yn(a,s),1),c=gr(i,t.fc2_2),l=gr(i,t.fc2_3),f=An(u,1)[1];return{scores:f,regions:c,points:l}})}function nA(r,t,e,n,o){return ze(this,void 0,void 0,function(){var i,a,s,u,c,l,f,h,d,p,v,g,A,w,E;return Ue(this,function(x){switch(x.label){case 0:return i=Date.now(),[4,qf(r,t,{width:48,height:48})];case 1:return a=x.sent(),o.stage3_extractImagePatches=Date.now()-i,i=Date.now(),s=a.map(function(C){var S=tA(C,n);return C.dispose(),S}),o.stage3_onet=Date.now()-i,u=s.length>1?mn(s.map(function(C){return C.scores})):s[0].scores,f=(l=Array).from,[4,u.data()];case 2:return c=f.apply(l,[x.sent()]),u.dispose(),h=c.map(function(C,S){return{score:C,idx:S}}).filter(function(C){return C.score>e}).map(function(C){var S=C.idx;return S}),d=h.map(function(C){var S=s[C].regions.arraySync();return new Xs(S[0][0],S[0][1],S[0][2],S[0][3])}),p=h.map(function(C,S){return t[C].calibrate(d[S])}),v=h.map(function(C){return c[C]}),g=[],A=[],w=[],p.length>0&&(i=Date.now(),E=oi(p,v,.7,!1),o.stage3_nms=Date.now()-i,g=E.map(function(C){return p[C]}),A=E.map(function(C){return v[C]}),w=E.map(function(C,S){return Array(5).fill(0).map(function(N,O){var F=s[C].points.arraySync();return new Nt(F[0][O]*(g[S].width+1)+g[S].left,F[0][O+5]*(g[S].height+1)+g[S].top)})})),s.forEach(function(C){C.regions.dispose(),C.scores.dispose(),C.points.dispose()}),[2,{boxes:g,scores:A,points:w}]}})})}var rA=function(r){nt(t,r);function t(){return r.call(this,"Mtcnn")||this}return t.prototype.load=function(e){return ze(this,void 0,void 0,function(){return Ue(this,function(n){return console.warn("mtcnn is deprecated and will be removed soon"),[2,r.prototype.load.call(this,e)]})})},t.prototype.loadFromDisk=function(e){return ze(this,void 0,void 0,function(){return Ue(this,function(n){return console.warn("mtcnn is deprecated and will be removed soon"),[2,r.prototype.loadFromDisk.call(this,e)]})})},t.prototype.forwardInput=function(e,n){return n===void 0&&(n={}),ze(this,void 0,void 0,function(){var o,i,a,s,u,c,l,f,h,d,p,v,g,A,w,E,x,C,S,N,O;return Ue(this,function(F){switch(F.label){case 0:if(o=this.params,!o)throw new Error("Mtcnn - load model before inference");if(i=e.canvases[0],!i)throw new Error("Mtcnn - inputCanvas is not defined, note that passing tensors into Mtcnn.forwardInput is not supported yet.");return a={},s=Date.now(),u=Le(function(){return H0(qn(As.fromPixels(i)).toFloat())}),c=function(P){return u.dispose(),a.total=Date.now()-s,P},l=u.shape.slice(1),f=l[0],h=l[1],d=new jf(n),p=d.minFaceSize,v=d.scaleFactor,g=d.maxNumScales,A=d.scoreThresholds,w=d.scaleSteps,E=(w||J0(p,v,[f,h])).filter(function(P){var z=Gs(P,[f,h]);return Math.min(z.width,z.height)>ca}).slice(0,g),a.scales=E,a.pyramid=E.map(function(P){return Gs(P,[f,h])}),x=Date.now(),[4,Y0(u,E,A[0],o.pnet,a)];case 1:return C=F.sent(),a.total_stage1=Date.now()-x,C.boxes.length?(a.stage2_numInputBoxes=C.boxes.length,x=Date.now(),[4,eA(i,C.boxes,A[1],o.rnet,a)]):[2,c({results:[],stats:a})];case 2:return S=F.sent(),a.total_stage2=Date.now()-x,S.boxes.length?(a.stage3_numInputBoxes=S.boxes.length,x=Date.now(),[4,nA(i,S.boxes,A[2],o.onet,a)]):[2,c({results:[],stats:a})];case 3:return N=F.sent(),a.total_stage3=Date.now()-x,O=N.boxes.map(function(P,z){return na(si({},new Gn(N.scores[z],new Rs(P.left/h,P.top/f,P.width/h,P.height/f),{height:f,width:h})),new Tm(N.points[z].map(function(_){return _.sub(new Nt(P.left,P.top)).div(new Nt(P.width,P.height))}),{width:P.width,height:P.height}))}),[2,c({results:O,stats:a})]}})})},t.prototype.forward=function(e,n){return n===void 0&&(n={}),ze(this,void 0,void 0,function(){var o;return Ue(this,function(i){switch(i.label){case 0:return o=this.forwardInput,[4,En(e)];case 1:return[4,o.apply(this,[i.sent(),n])];case 2:return[2,i.sent().results]}})})},t.prototype.forwardWithStats=function(e,n){return n===void 0&&(n={}),ze(this,void 0,void 0,function(){var o;return Ue(this,function(i){switch(i.label){case 0:return o=this.forwardInput,[4,En(e)];case 1:return[2,o.apply(this,[i.sent(),n])]}})})},t.prototype.getDefaultModelName=function(){return"mtcnn_model"},t.prototype.extractParamsFromWeigthMap=function(e){return X0(e)},t.prototype.extractParams=function(e){return V0(e)},t}(kr),oA=.4,iA=[new Nt(1.603231,2.094468),new Nt(6.041143,7.080126),new Nt(2.882459,3.518061),new Nt(4.266906,5.178857),new Nt(9.041765,10.66308)],aA=[117.001,114.697,97.404],sA=function(r){nt(t,r);function t(){var e=this,n={withSeparableConvs:!0,iouThreshold:oA,classes:["face"],anchors:iA,meanRgb:aA,isFirstLayerConv2d:!0,filterSizes:[3,16,32,64,128,256,512]};return e=r.call(this,n)||this,e}return Object.defineProperty(t.prototype,"anchors",{get:function(){return this.config.anchors},enumerable:!0,configurable:!0}),t.prototype.locateFaces=function(e,n){return ze(this,void 0,void 0,function(){var o;return Ue(this,function(i){switch(i.label){case 0:return[4,this.detect(e,n)];case 1:return o=i.sent(),[2,o.map(function(a){return new Gn(a.score,a.relativeBox,{width:a.imageWidth,height:a.imageHeight})})]}})})},t.prototype.getDefaultModelName=function(){return"tiny_face_detector_model"},t.prototype.extractParamsFromWeigthMap=function(e){return r.prototype.extractParamsFromWeigthMap.call(this,e)},t}(Xf),Lt={ssdMobilenetv1:new Vf,tinyFaceDetector:new sA,tinyYolov2:new U0,mtcnn:new rA,faceLandmark68Net:new _f,faceLandmark68TinyNet:new u0,faceRecognitionNet:new v0,faceExpressionNet:new Gm,ageGenderNet:new o0},U1=function(r,t){return Lt.ssdMobilenetv1.locateFaces(r,t)},H1=function(r,t){return Lt.tinyFaceDetector.locateFaces(r,t)},j1=function(r,t){return Lt.tinyYolov2.locateFaces(r,t)},V1=function(r,t){return Lt.mtcnn.forward(r,t)},G1=function(r){return Lt.faceLandmark68Net.detectLandmarks(r)},X1=function(r){return Lt.faceLandmark68TinyNet.detectLandmarks(r)},J1=function(r){return Lt.faceRecognitionNet.computeFaceDescriptor(r)},K1=function(r){return Lt.faceExpressionNet.predictExpressions(r)},Z1=function(r){return Lt.ageGenderNet.predictAgeAndGender(r)},q1=function(r){return Lt.ssdMobilenetv1.load(r)},uA=function(r){return Lt.tinyFaceDetector.load(r)},Y1=function(r){return Lt.mtcnn.load(r)},$1=function(r){return Lt.tinyYolov2.load(r)},cA=function(r){return Lt.faceLandmark68Net.load(r)},ey=function(r){return Lt.faceLandmark68TinyNet.load(r)},lA=function(r){return Lt.faceRecognitionNet.load(r)},ty=function(r){return Lt.faceExpressionNet.load(r)},ny=function(r){return Lt.ageGenderNet.load(r)},ry=null,oy=null,iy=null;function ay(r){return typeof r.age=="number"}function Yf(r,t){var e={age:t};return Object.assign({},r,e)}var $f=function(r){nt(t,r);function t(e,n,o){var i=r.call(this)||this;return i.parentTask=e,i.input=n,i.extractedFaces=o,i}return t}(ui),Ks=function(r){nt(t,r);function t(){return r!==null&&r.apply(this,arguments)||this}return t.prototype.run=function(){return ze(this,void 0,void 0,function(){var e,n,o=this;return Ue(this,function(i){switch(i.label){case 0:return[4,this.parentTask];case 1:return e=i.sent(),[4,sa(e,this.input,function(a){return ze(o,void 0,void 0,function(){return Ue(this,function(s){switch(s.label){case 0:return[4,Promise.all(a.map(function(u){return Lt.faceExpressionNet.predictExpressions(u)}))];case 1:return[2,s.sent()]}})})},this.extractedFaces)];case 2:return n=i.sent(),[2,e.map(function(a,s){return Lf(a,n[s])})]}})})},t.prototype.withAgeAndGender=function(){return new $s(this,this.input)},t}($f),Zs=function(r){nt(t,r);function t(){return r!==null&&r.apply(this,arguments)||this}return t.prototype.run=function(){return ze(this,void 0,void 0,function(){var e,n;return Ue(this,function(o){switch(o.label){case 0:return[4,this.parentTask];case 1:return e=o.sent(),e?[4,Vs(e,this.input,function(i){return Lt.faceExpressionNet.predictExpressions(i)},this.extractedFaces)]:[2];case 2:return n=o.sent(),[2,Lf(e,n)]}})})},t.prototype.withAgeAndGender=function(){return new eu(this,this.input)},t}($f),qs=function(r){nt(t,r);function t(){return r!==null&&r.apply(this,arguments)||this}return t.prototype.withAgeAndGender=function(){return new tu(this,this.input)},t.prototype.withFaceDescriptors=function(){return new ru(this,this.input)},t}(Ks),Ys=function(r){nt(t,r);function t(){return r!==null&&r.apply(this,arguments)||this}return t.prototype.withAgeAndGender=function(){return new nu(this,this.input)},t.prototype.withFaceDescriptor=function(){return new ou(this,this.input)},t}(Zs),eh=function(r){nt(t,r);function t(e,n,o){var i=r.call(this)||this;return i.parentTask=e,i.input=n,i.extractedFaces=o,i}return t}(ui),$s=function(r){nt(t,r);function t(){return r!==null&&r.apply(this,arguments)||this}return t.prototype.run=function(){return ze(this,void 0,void 0,function(){var e,n,o=this;return Ue(this,function(i){switch(i.label){case 0:return[4,this.parentTask];case 1:return e=i.sent(),[4,sa(e,this.input,function(a){return ze(o,void 0,void 0,function(){return Ue(this,function(s){switch(s.label){case 0:return[4,Promise.all(a.map(function(u){return Lt.ageGenderNet.predictAgeAndGender(u)}))];case 1:return[2,s.sent()]}})})},this.extractedFaces)];case 2:return n=i.sent(),[2,e.map(function(a,s){var u=n[s],c=u.age,l=u.gender,f=u.genderProbability;return Yf(Hf(a,l,f),c)})]}})})},t.prototype.withFaceExpressions=function(){return new Ks(this,this.input)},t}(eh),eu=function(r){nt(t,r);function t(){return r!==null&&r.apply(this,arguments)||this}return t.prototype.run=function(){return ze(this,void 0,void 0,function(){var e,n,o,i,a;return Ue(this,function(s){switch(s.label){case 0:return[4,this.parentTask];case 1:return e=s.sent(),e?[4,Vs(e,this.input,function(u){return Lt.ageGenderNet.predictAgeAndGender(u)},this.extractedFaces)]:[2];case 2:return n=s.sent(),o=n.age,i=n.gender,a=n.genderProbability,[2,Yf(Hf(e,i,a),o)]}})})},t.prototype.withFaceExpressions=function(){return new Zs(this,this.input)},t}(eh),tu=function(r){nt(t,r);function t(){return r!==null&&r.apply(this,arguments)||this}return t.prototype.withFaceExpressions=function(){return new qs(this,this.input)},t.prototype.withFaceDescriptors=function(){return new ru(this,this.input)},t}($s),nu=function(r){nt(t,r);function t(){return r!==null&&r.apply(this,arguments)||this}return t.prototype.withFaceExpressions=function(){return new Ys(this,this.input)},t.prototype.withFaceDescriptor=function(){return new ou(this,this.input)},t}(eu),th=function(r){nt(t,r);function t(e,n){var o=r.call(this)||this;return o.parentTask=e,o.input=n,o}return t}(ui),ru=function(r){nt(t,r);function t(){return r!==null&&r.apply(this,arguments)||this}return t.prototype.run=function(){return ze(this,void 0,void 0,function(){var e,n;return Ue(this,function(o){switch(o.label){case 0:return[4,this.parentTask];case 1:return e=o.sent(),[4,sa(e,this.input,function(i){return Promise.all(i.map(function(a){return Lt.faceRecognitionNet.computeFaceDescriptor(a)}))},null,function(i){return i.landmarks.align(null,{useDlibAlignment:!0})})];case 2:return n=o.sent(),[2,n.map(function(i,a){return Kf(e[a],i)})]}})})},t.prototype.withFaceExpressions=function(){return new qs(this,this.input)},t.prototype.withAgeAndGender=function(){return new tu(this,this.input)},t}(th),ou=function(r){nt(t,r);function t(){return r!==null&&r.apply(this,arguments)||this}return t.prototype.run=function(){return ze(this,void 0,void 0,function(){var e,n;return Ue(this,function(o){switch(o.label){case 0:return[4,this.parentTask];case 1:return e=o.sent(),e?[4,Vs(e,this.input,function(i){return Lt.faceRecognitionNet.computeFaceDescriptor(i)},null,function(i){return i.landmarks.align(null,{useDlibAlignment:!0})})]:[2];case 2:return n=o.sent(),[2,Kf(e,n)]}})})},t.prototype.withFaceExpressions=function(){return new Ys(this,this.input)},t.prototype.withAgeAndGender=function(){return new nu(this,this.input)},t}(th),nh=function(r){nt(t,r);function t(e,n,o){var i=r.call(this)||this;return i.parentTask=e,i.input=n,i.useTinyLandmarkNet=o,i}return Object.defineProperty(t.prototype,"landmarkNet",{get:function(){return this.useTinyLandmarkNet?Lt.faceLandmark68TinyNet:Lt.faceLandmark68Net},enumerable:!0,configurable:!0}),t}(ui),fA=function(r){nt(t,r);function t(){return r!==null&&r.apply(this,arguments)||this}return t.prototype.run=function(){return ze(this,void 0,void 0,function(){var e,n,o,i,a,s=this;return Ue(this,function(u){switch(u.label){case 0:return[4,this.parentTask];case 1:return e=u.sent(),n=e.map(function(c){return c.detection}),this.input instanceof at?[4,Ns(this.input,n)]:[3,3];case 2:return i=u.sent(),[3,5];case 3:return[4,Ps(this.input,n)];case 4:i=u.sent(),u.label=5;case 5:return o=i,[4,Promise.all(o.map(function(c){return s.landmarkNet.detectLandmarks(c)}))];case 6:return a=u.sent(),o.forEach(function(c){return c instanceof at&&c.dispose()}),[2,e.map(function(c,l){return na(c,a[l])})]}})})},t.prototype.withFaceExpressions=function(){return new qs(this,this.input)},t.prototype.withAgeAndGender=function(){return new tu(this,this.input)},t.prototype.withFaceDescriptors=function(){return new ru(this,this.input)},t}(nh),hA=function(r){nt(t,r);function t(){return r!==null&&r.apply(this,arguments)||this}return t.prototype.run=function(){return ze(this,void 0,void 0,function(){var e,n,o,i,a;return Ue(this,function(s){switch(s.label){case 0:return[4,this.parentTask];case 1:return e=s.sent(),e?(n=e.detection,this.input instanceof at?[4,Ns(this.input,[n])]:[3,3]):[2];case 2:return i=s.sent(),[3,5];case 3:return[4,Ps(this.input,[n])];case 4:i=s.sent(),s.label=5;case 5:return o=i,[4,this.landmarkNet.detectLandmarks(o[0])];case 6:return a=s.sent(),o.forEach(function(u){return u instanceof at&&u.dispose()}),[2,na(e,a)]}})})},t.prototype.withFaceExpressions=function(){return new Ys(this,this.input)},t.prototype.withAgeAndGender=function(){return new nu(this,this.input)},t.prototype.withFaceDescriptor=function(){return new ou(this,this.input)},t}(nh),rh=function(r){nt(t,r);function t(e,n){n===void 0&&(n=new ia);var o=r.call(this)||this;return o.input=e,o.options=n,o}return t}(ui),dA=function(r){nt(t,r);function t(){return r!==null&&r.apply(this,arguments)||this}return t.prototype.run=function(){return ze(this,void 0,void 0,function(){var e,n,o,i;return Ue(this,function(a){switch(a.label){case 0:return e=this,n=e.input,o=e.options,o instanceof jf?[4,Lt.mtcnn.forward(n,o)]:[3,2];case 1:return[2,a.sent().map(function(s){return s.detection})];case 2:if(i=o instanceof Jf?function(s){return Lt.tinyFaceDetector.locateFaces(s,o)}:o instanceof ia?function(s){return Lt.ssdMobilenetv1.locateFaces(s,o)}:o instanceof js?function(s){return Lt.tinyYolov2.locateFaces(s,o)}:null,!i)throw new Error("detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | MtcnnOptions | TinyYolov2Options");return[2,i(n)]}})})},t.prototype.runAndExtendWithFaceDetections=function(){var e=this;return new Promise(function(n){return ze(e,void 0,void 0,function(){var o;return Ue(this,function(i){switch(i.label){case 0:return[4,this.run()];case 1:return o=i.sent(),[2,n(o.map(function(a){return si({},a)}))]}})})})},t.prototype.withFaceLandmarks=function(e){return e===void 0&&(e=!1),new fA(this.runAndExtendWithFaceDetections(),this.input,e)},t.prototype.withFaceExpressions=function(){return new Ks(this.runAndExtendWithFaceDetections(),this.input)},t.prototype.withAgeAndGender=function(){return new $s(this.runAndExtendWithFaceDetections(),this.input)},t}(rh),pA=function(r){nt(t,r);function t(){return r!==null&&r.apply(this,arguments)||this}return t.prototype.run=function(){return ze(this,void 0,void 0,function(){var e,n;return Ue(this,function(o){switch(o.label){case 0:return[4,new dA(this.input,this.options)];case 1:return e=o.sent(),n=e[0],e.forEach(function(i){i.score>n.score&&(n=i)}),[2,n]}})})},t.prototype.runAndExtendWithFaceDetection=function(){var e=this;return new Promise(function(n){return ze(e,void 0,void 0,function(){var o;return Ue(this,function(i){switch(i.label){case 0:return[4,this.run()];case 1:return o=i.sent(),[2,n(o?si({},o):void 0)]}})})})},t.prototype.withFaceLandmarks=function(e){return e===void 0&&(e=!1),new hA(this.runAndExtendWithFaceDetection(),this.input,e)},t.prototype.withFaceExpressions=function(){return new Zs(this.runAndExtendWithFaceDetection(),this.input)},t.prototype.withAgeAndGender=function(){return new eu(this.runAndExtendWithFaceDetection(),this.input)},t}(rh);function iu(r,t){return t===void 0&&(t=new ia),new pA(r,t)}function sy(r,t){return t===void 0&&(t=new SsdMobilenetv1Options),new DetectAllFacesTask(r,t)}function uy(r,t){return __awaiter(this,void 0,void 0,function(){return __generator(this,function(e){switch(e.label){case 0:return console.warn("allFacesSsdMobilenetv1 is deprecated and will be removed soon, use the high level api instead"),[4,detectAllFaces(r,new SsdMobilenetv1Options(t?{minConfidence:t}:{})).withFaceLandmarks().withFaceDescriptors()];case 1:return[2,e.sent()]}})})}function cy(r,t){return t===void 0&&(t={}),__awaiter(this,void 0,void 0,function(){return __generator(this,function(e){switch(e.label){case 0:return console.warn("allFacesTinyYolov2 is deprecated and will be removed soon, use the high level api instead"),[4,detectAllFaces(r,new TinyYolov2Options(t)).withFaceLandmarks().withFaceDescriptors()];case 1:return[2,e.sent()]}})})}function ly(r,t){return t===void 0&&(t={}),__awaiter(this,void 0,void 0,function(){return __generator(this,function(e){switch(e.label){case 0:return console.warn("allFacesMtcnn is deprecated and will be removed soon, use the high level api instead"),[4,detectAllFaces(r,new MtcnnOptions(t)).withFaceLandmarks().withFaceDescriptors()];case 1:return[2,e.sent()]}})})}var fy=null;function vA(r,t){if(r.length!==t.length)throw new Error("euclideanDistance: arr1.length !== arr2.length");var e=Array.from(r),n=Array.from(t);return Math.sqrt(e.map(function(o,i){return o-n[i]}).reduce(function(o,i){return o+Math.pow(i,2)},0))}var gA=function(){function r(t,e){e===void 0&&(e=.6),this._distanceThreshold=e;var n=Array.isArray(t)?t:[t];if(!n.length)throw new Error("FaceRecognizer.constructor - expected atleast one input");var o=1,i=function(){return"person "+o++};this._labeledDescriptors=n.map(function(a){if(a instanceof qi)return a;if(a instanceof Float32Array)return new qi(i(),[a]);if(a.descriptor&&a.descriptor instanceof Float32Array)return new qi(i(),[a.descriptor]);throw new Error("FaceRecognizer.constructor - expected inputs to be of type LabeledFaceDescriptors | WithFaceDescriptor<any> | Float32Array | Array<LabeledFaceDescriptors | WithFaceDescriptor<any> | Float32Array>")})}return Object.defineProperty(r.prototype,"labeledDescriptors",{get:function(){return this._labeledDescriptors},enumerable:!0,configurable:!0}),Object.defineProperty(r.prototype,"distanceThreshold",{get:function(){return this._distanceThreshold},enumerable:!0,configurable:!0}),r.prototype.computeMeanDistance=function(t,e){return e.map(function(n){return vA(n,t)}).reduce(function(n,o){return n+o},0)/(e.length||1)},r.prototype.matchDescriptor=function(t){var e=this;return this.labeledDescriptors.map(function(n){var o=n.descriptors,i=n.label;return new gf(i,e.computeMeanDistance(t,o))}).reduce(function(n,o){return n.distance<o.distance?n:o})},r.prototype.findBestMatch=function(t){var e=this.matchDescriptor(t);return e.distance<this.distanceThreshold?e:new gf("unknown",e.distance)},r.prototype.toJSON=function(){return{distanceThreshold:this.distanceThreshold,labeledDescriptors:this.labeledDescriptors.map(function(t){return t.toJSON()})}},r.fromJSON=function(t){var e=t.labeledDescriptors.map(function(n){return qi.fromJSON(n)});return new r(e,t.distanceThreshold)},r}();function hy(r){var t=new Mtcnn;return t.extractWeights(r),t}function dy(r){var t=new TinyFaceDetector;return t.extractWeights(r),t}function oh(r,t){var e=new so(t.width,t.height),n=e.width,o=e.height;if(n<=0||o<=0)throw new Error("resizeResults - invalid dimensions: "+JSON.stringify({width:n,height:o}));if(Array.isArray(r))return r.map(function(s){return oh(s,{width:n,height:o})});if(_s(r)){var i=r.detection.forSize(n,o),a=r.unshiftedLandmarks.forSize(i.box.width,i.box.height);return na(si(r,i),a)}return ai(r)?si(r,r.detection.forSize(n,o)):r instanceof Bo||r instanceof Gn?r.forSize(n,o):r}var mA=U(57953),AA=U(33170),yA={wrp:"wrp___x6ffm"},Do=U(67294),sr=(r,t,e)=>new Promise((n,o)=>{var i=u=>{try{s(e.next(u))}catch(c){o(c)}},a=u=>{try{s(e.throw(u))}catch(c){o(c)}},s=u=>u.done?n(u.value):Promise.resolve(u.value).then(i,a);s((e=e.apply(r,t)).next())});const xA=function(t,e){const n=t.split(","),o=n[0].match(/:(.*?);/)[1],i=atob(n[1]);let a=i.length;const s=new Uint8Array(a);for(;a--;)s[a]=i.charCodeAt(a);return new Blob([s],{type:o})},bA=r=>sr(void 0,null,function*(){return new Promise((t,e)=>{let n=new Image;(r==null?void 0:r.indexOf("educoder.net"))>-1?n.setAttribute("crossOrigin","educoder.net"):n.setAttribute("crossOrigin","aliyuncs.com"),n.onload=function(){let o=document.createElement("canvas");o.width=this.naturalWidth,o.height=this.naturalHeight,o.getContext("2d").drawImage(n,0,0);let i=o.toDataURL("image/png");t(i)},n.src=r,n.onerror=()=>{e(new Error("\u56FE\u7247\u6D41\u5F02\u5E38")),be.ZP.error("\u60A8\u7684\u8EAB\u4EFD\u7167\u7247\u5F02\u5E38\uFF0C\u8BF7\u62CD\u7167\u540E\u63D0\u4EA4\u81F3\u4EBA\u5DE5\u5BA1\u6838")}})});var wA=(0,D.forwardRef)(({outputResult:r,identity_url:t,onCameraReady:e,defaultOpen:n},o)=>{const i=(0,ke.useParams)(),a=window.ENV==="build"?"/react/build/weights":"/weights",s=(0,D.useRef)(),u=(0,D.useRef)(),c=(0,D.useRef)(),l=(0,D.useRef)(!1);let f=(0,D.useRef)();const[h,d]=(0,D.useState)(!0),[p,v]=(0,D.useState)(""),[g,A]=(0,D.useState)(""),w=(0,D.useRef)(!1),E=(0,D.useRef)(""),[x]=(0,D.useState)(!0),C=.7,S=224,N="\u5BA1\u6838\u5931\u8D25",O=(0,D.useMemo)(()=>new Jf({inputSize:S,scoreThreshold:C}),[]),F=()=>sr(void 0,null,function*(){yield Lt.ssdMobilenetv1.loadFromUri("https://www-cdn.educoder.net/weights/"),yield uA("https://www-cdn.educoder.net/weights/"),yield cA("https://www-cdn.educoder.net/weights/"),yield lA("https://www-cdn.educoder.net/weights/"),ie(!0)});(0,D.useEffect)(()=>{n&&F()},[n]),(0,D.useImperativeHandle)(o,()=>({handleStop:se,handleRemove:ce,handlePlay:ie,startDiscern:G,handleUploadImage:V}));const P=ye=>sr(void 0,null,function*(){if(!s.current){setTimeout(()=>P(ye));return}navigator.mediaDevices.getUserMedia({video:{width:640,height:360}}).then(Be=>sr(void 0,null,function*(){if("srcObject"in s.current?s.current.srcObject=Be:s.current.src=window.URL.createObjectURL(Be),s.current.onloadedmetadata=function(Pe){d(!1),s.current.play()},ye){const Pe=document.createElement("img");Pe.src=yield bA(t+"?t="+new Date().getTime()),f.current=yield iu(Pe,O).withFaceLandmarks().withFaceDescriptor()}})).catch(function(Be){console.log("err:",Be,Be.message),Be.message==="Permission denied"||Be.name==="NotAllowedError"?be.ZP.error("\u60A8\u5DF2\u62D2\u7EDD\u4E86\u83B7\u53D6\u6444\u50CF\u5934"):Be.message!="\u56FE\u7247\u6D41\u5F02\u5E38"&&be.ZP.error("\u6444\u50CF\u5934\u83B7\u53D6\u5931\u8D25\uFF0C\u6216\u60A8\u5DF2\u62D2\u7EDD\u4E86\u83B7\u53D6\u6444\u50CF\u5934")})}),z=(ye,Be)=>sr(void 0,null,function*(){return new Promise(Pe=>sr(void 0,null,function*(){const et=new FormData;et.append("file",xA(ye,"1")),et.append("1","123");var Ye=new window.XMLHttpRequest;Ye.withCredentials=!0,Ye.addEventListener("load",function(st){let yt=JSON.parse(st.target.responseText);(0,AA.ZP)(`/api/exercises/${i.categoryId}/upload_identify_photo.json`,{method:"post",body:{attachment_id:yt.id}}),Pe(yt)},!1),Ye.addEventListener("error",function(st){console.error(st)},!1),Ye.open("POST",`${ENV.API_SERVER}/api/attachments.json`),Ye.send(et)}))}),_=ye=>sr(void 0,null,function*(){try{u.current.width=s.current.videoWidth,u.current.height=360,yield u.current.getContext("2d").drawImage(s.current,0,0,u.current.width,u.current.height),E.current=u.current.toDataURL("image/png"),ye===1&&z(E.current,ye)}catch(Be){}}),V=ye=>sr(void 0,null,function*(){return new Promise(Be=>sr(void 0,null,function*(){yield u.current.getContext("2d").drawImage(s.current,0,0,u.current.width,u.current.height),yield z(E.current,ye),Be()}))}),G=()=>sr(void 0,null,function*(){l.current=!0;const ye=yield iu(s.current,O).withFaceLandmarks().withFaceDescriptor();if(ye&&f.current){const Pe=new gA(ye).findBestMatch(f.current.descriptor);v(Pe._distance<.43?"\u8BC6\u522B\u6210\u529F":N),_(Pe._distance<.43?1:0),setTimeout(()=>{r==null||r({content:Pe._distance<.43?"\u8BC6\u522B\u6210\u529F":N,success:Pe._distance<.43})},1e3),w.current=!0}else _(0),v(N),setTimeout(()=>{r==null||r({content:N,success:!1})},1e3);setTimeout(()=>{s.current.pause()},600)}),te=()=>sr(void 0,null,function*(){var ye,Be;if((ye=s.current)!=null&&ye.paused||(Be=s.current)!=null&&Be.ended)return setTimeout(()=>te());const Pe=yield iu(s.current,O).withFaceLandmarks().withFaceDescriptor();l.current||(l.current=!0,e(!0)),Pe&&s.current?(A(""),de(s.current,c.current,[Pe],x)):A("\u8BF7\u5C06\u8138\u90E8\u79FB\u52A8\u81F3\u53D6\u666F\u6846\u5185"),w.current||setTimeout(()=>te())}),ce=()=>{try{s.current.srcObject.getTracks().forEach(function(Pe){Pe.stop()}),l.current=!1}catch(ye){}},se=()=>{d(!1);try{l.current=!1}catch(ye){}},ie=ye=>{l.current=!1,w.current=!1,u.current.getContext("2d").clearRect(0,0,640,480),v(""),d(!0);try{P(ye||!1)}catch(Be){}},de=(ye,Be,Pe,et=!0)=>{const Ye=ve(ye,Be,Pe);et&&Om(Be,Ye.map(st=>st.detection))},ve=(ye,Be,Pe)=>{const{width:et,height:Ye}=ye instanceof HTMLVideoElement?Ds(ye):ye;return Be.width=et,Be.height=Ye,oh(Pe,{width:et,height:Ye})};return Do.createElement("div",{className:yA.wrp},Do.createElement(mA.Z,{spinning:h,tip:"\u6B63\u5728\u542F\u52A8\u6444\u50CF\u5934\uFF0C\u8BF7\u7A0D\u540E..."},Do.createElement("video",{onPlay:te,ref:s,id:"inputVideo",autoPlay:!0,muted:!0}),Do.createElement("canvas",{style:{zIndex:2},ref:c}),Do.createElement("canvas",{ref:u}),Do.createElement("div",{className:"c-red mt5 tc",style:{height:22}},p," ",g)))}),EA="data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAABEAAAAHoCAYAAABJiJprAAAAAXNSR0IArs4c6QAAQABJREFUeAHsnQegXFW1/r+Z23vqTe89IYEAoQpBRBBFLIiU518BeYoFffr08RQVEbF3fE9AEaygwEOUJh1CaIkEEpIQ0utNQurtbe7815q5J/fM3Jkz7ZwzZ858S4c5ZZ9dfvvumzvfrL1WAHEWDocDcZd4SgIkQAIkQAIkQAIkQAIkQAIkQAIkQAIFRSAQCITNHT4idlD4MGPhMQmQAAmQAAmQAAmQAAmQAAmQAAmQgB8IGEJIRABJV/y4/vrrjwgmfoDAMZAACZAACZAACZAACZAACZAACZAACRQugeuuuy7GyyPZSFQESSmAHBE9rrsO1/XXdPfdd1MISUaV10mABEiABEiABEiABEiABEiABEiABBwlcOGFF0aEj+u1lesj/4WVGBIRQJJ5fxjCh1QQcrTXrJwESIAESIAESIAESIAESIAESIAESIAEciQgOkaJVpFMCAkmqj8ifojHx9y5c+npkQgQr5EACZAACZAACZAACZAACZAACZAACXiKQETDEC3DcOiI79wgAeSI+MFtLvGseE4CJEACJEACJEACJEACJEACJEACJOBhAnNVy0giggwSQHQckQfkfeTIkfQA8fDEsmskQAIkQAIkQAIkQAIkQAIkQAIkQAJRAoaGYWga8VxiBBD1/pC9MpEy+uCbb75JASSeGM9JgARIgARIgARIgARIgARIgARIgAQ8R0A1DEMEUW0jfitMjACivdcML2v6xY+hQ4dSAPHclLJDJEACJEACJEACJEACJEACJEACJEAC8QRUw1ARRDWNRNlrYwWQfu+PxVrLccdh9+7dFEDiifKcBEiABEiABEiABEiABEiABEiABEjAcwQiGoZoGRFNQ3vXr3EYHT0igES2v/RfVcVk6KZNgenTpxvl+E4CJEACJEACJEACJEACJEACJEACJEACniWgGoZqGUY4Dw3wYd4Gc0QAMUawZs2aI14fe/bsOXJs3Oc7CZAACZAACZAACZAACZAACZAACZAACXiNgFnDMGsbRj9jBJDIHpnFUWcRbn8xEPGdBEiABEiABEiABEiABEiABEiABEigEAgc0TJE24iPA1KacACyZwZ79+Jgays9QBIC4kUSIAESIAESIAESIAESIAESIAESIAEvEThYUxMoHTUqjMZGoKVlUNdiPEAG3eUFEiABEiABEiABEiABEiABEiABEiABEvABAQogPphEDoEESIAESIAESIAESIAESIAESIAESMCaAAUQaz68SwIkQAIkQAIkQAIkQAIkQAIkQAIk4AMCFEB8MIkcAgmQAAmQAAmQAAmQAAmQAAmQAAmQgDUBCiDWfHiXBEiABEiABEiABEiABEiABEiABEjABwQogPhgEjkEEiABEiABEiABEiABEiABEiABEiABawIUQKz58C4JkAAJkAAJkAAJkAAJkAAJkAAJkIAPCFAA8cEkcggkQAIkQAIkQAIkQAIkQAIkQAIkQALWBCiAWPPhXRIgARIgARIgARIgARIgARIgARIgAR8QoADig0nkEEiABEiABEiABEiABEiABEiABEiABKwJUACx5sO7JEACJEACJEACJEACJEACJEACJEACPiBAAcQHk8ghkAAJkAAJkAAJkAAJkAAJkAAJkAAJWBOgAGLNh3dJgARIgARIgARIgARIgARIgARIgAR8QIACiA8mkUMgARIgARIgARIgARIgARIgARIgARKwJkABxJoP75IACZAACZAACZAACZAACZAACZAACfiAAAUQH0wih0ACJEACJEACJEACJEACJEACJEACJGBNgAKINR/eJQESIAESIAESIAESIAESIAESIAES8AEBCiA+mEQOgQRIgARIgARIgARIgARIgARIgARIwJoABRBrPrxLAiRAAiRAAiRAAiRAAiRAAiRAAiTgAwIUQHwwiRwCCZAACZAACZAACZAACZAACZAACZCANQEKINZ8eJcESIAESIAESIAESIAESIAESIAESMAHBCiA+GASOQQSIAESIAESIAESIAESIAESIAESIAFrAhRArPnwLgmQAAmQAAmQAAmQAAmQAAmQAAmQgA8IUADxwSRyCCRAAiRAAiRAAiRAAiRAAiRAAiRAAtYEKIBY8+FdEiABEiABEiABEiABEiABEiABEiABHxCgAOKDSeQQSIAESIAESIAESIAESIAESIAESIAErAlQALHmw7skQAIkQAIkQAIkQAIkQAIkQAIkQAI+IEABxAeTyCGQAAmQAAmQAAmQAAmQAAmQAAmQAAlYE6AAYs2Hd0mABEiABEiABEiABEiABEiABEiABHxAgAKIDyaRQyABEiABEiABEiABEiABEiABEiABErAmQAHEmg/vkgAJkAAJkAAJkAAJkAAJkAAJkAAJ+IAABRAfTCKHQAIkQAIkQAIkQAIkQAIkQAIkQAIkYE2AAog1H94lARIgARIgARIgARIgARIgARIgARLwAQEKID6YRA6BBEiABEiABEiABEiABEiABEiABEjAmgAFEGs+vEsCJEACJEACJEACJEACJEACJEACJOADAhRAfDCJHAIJkAAJkAAJkAAJkAAJkAAJkAAJkIA1AQog1nx4lwRIgARIgARIgARIgARIgARIgARIwAcEKID4YBI5BBIgARIgARIgARIgARIgARIgARIgAWsCFECs+fAuCZAACZAACZAACZAACZAACZAACZCADwhQAPHBJHIIJEACJEACJEACJEACJEACJEACJEAC1gQogFjz4V0SIAESIAESIAESIAESIAESIAESIAEfEKAA4oNJ5BBIgARIgARIgARIgARIgARIgARIgASsCVAAsebDuyRAAiRAAiRAAiRAAiRAAiRAAiRAAj4gQAHEB5PIIZAACZAACZAACZAACZAACZAACZAACVgToABizYd3SYAESIAESIAESIAESIAESIAESIAEfECAAogPJpFDIAESIAESIAESIAESIAESIAESIAESsCZAAcSaD++SAAmQAAmQAAmQAAmQAAmQAAmQAAn4gAAFEB9MIodAAiRAAiRAAiRAAiRAAiRAAiRAAiRgTYACiDUf3iUBEiABEiABEiABEiABEiABEiABEvABAQogPphEDoEESIAESIAESIAESIAESIAESIAESMCaAAUQaz68SwIkQAIkQAIkQAIkQAIkQAIkQAIk4AMCFEB8MIkcAgmQAAmQAAmQAAmQAAmQAAmQAAmQgDUBCiDWfHiXBEiABEiABEiABEiABEiABEiABEjABwQogPhgEjkEEiABEiABEiABEiABEiABEiABEiABawIUQKz58C4JkAAJkAAJkAAJkAAJkAAJkAAJkIAPCFAA8cEkcggkQAIkQAIkQAIkQAIkQAIkQAIkQALWBCiAWPPhXRIgARIgARIgARIgARIgARIgARIgAR8QoADig0nkEEiABEiABEiABEiABEiABEiABEiABKwJUACx5sO7JEACJEACJEACJEACJEACJEACJEACPiBAAcQHk8ghkAAJkAAJkAAJkAAJkAAJkAAJkAAJWBOgAGLNh3dJgARIgARIgARIgARIgARIgARIgAR8QIACiA8mkUMgARIgARIgARIgARIgARIgARIgARKwJkABxJoP75IACZAACZAACZAACZAACZAACZAACfiAAAUQH0wih0ACJEACJEACJEACJEACJEACJEACJGBNgAKINR/eJQESIAESIAESIAESIAESIAESIAES8AEBCiA+mEQOgQRIgARIgARIgARIgARIgARIgARIwJoABRBrPrxLAiRAAiRAAiRAAiRAAiRAAiRAAiTgAwIUQHwwiRwCCZAACZAACZAACZAACZAACZAACZCANQEKINZ8eJcESIAESIAESIAESIAESIAESIAESMAHBCiA+GASOQQSIAESIAESIAESIAESIAESIAESIAFrAhRArPnwLgmQAAmQAAmQAAmQAAmQAAmQAAmQgA8IlPpgDBwCCZAACZAACZAACZBACgJdPcCWPcDGJnntBjbJ+75moK0TaJVX5L0j+q5V1VQCtVX973Ks5yPqgaljgGmj5SXvk0cBFWUpGuZtEiABcP3xh4AEvEGAAog35iFlL3r7gG75T6gvgL6+cMryLEACJEACJJCcQDAYQEkwjPLSIOT/NBLwJYENInA8v0Zea4FVW4Cd+yF/Q6Q/1O5W4KC8rCwo62fccGD+ZOCUOfKaC0wXYYRGAsVOgOuv2H8COH6vEqAA4tWZ6e9XSMSOju6wCB9GRyl+GCT4TgIkQALZElAhWT8I9oiwXCIf4KrKVRAJZFsdnyMBTxBQseLRV4Cl/aLH3kPOd0vX0fa3oq+HlkXbaxwSFUNOFTHk7GOBobXO94MtkEC+CXD95XsG2D4JpEeAAkh6nPJSSr0+2ruAcL/mUVEWQFlJAPptC/9Mz8uUsFESIAEfENBfqRHxIxQWl+SowNwmv2urK0BvEB/Mb7ENobsXeHwFcO9S4OlVKurln4AKL397Ifr66u+AM+YDF5wKnLUQ4nWV//6xByRgFwGuP7tIsh4ScI8A/xlyj3VGLannR1T8CEe+nayuCIJfTmaEkIVJgARIICEBFZDV60M9PspLA/K7VrcXRn/n1ogIQk+QhNh40WMEVm4G7noW+MdLwOE2j3XO1B0VZB4TgUZfDTXAe08ELj4dWDDFVIiHJFBgBLj+CmzC2F0SMBGgAGKC4aVD3fainh/6R3pNZZAeH16aHPaFBEjANwRUWNbfsW2d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ysQfqZx0Mr/7kPRBw0nrySFfYoKAICAICAKCgCAgCAgCgkARIBD7F3QRDE6GIAhkFYE+g7PafCqNNyxcSnWz5lHTspVkrWWvk1gpdTkVatPyVbRy6iya/+n39Mcr7/PnA2pYkAdZPyAu25G1UArclq1qoxBuCuO2+PwuWx37ONbUX6iB0+D279qDNt58B0V4dGPPj+FD1wuTH9aK1eqI/fv1p+b61dShvJw01gIZvslWVNlQT01za8maHcokk0LXpKogIAikiUBdXR09/PDD9NZbb6XZUmZ2b2xsTKmhr7/+ms4880z6/vvvU9pv7Nix9P777ye1z+eff05TpkxJqq5UKl0EVqxYQatXh/6vyzYKd999N/32228xDzN//nxCne+++y5mHe+GpUuXeotirj/wwAOET6asublZtZfoPp43bx499NBDtHZt7N8kmeqTtCMIZAoB8QDJFJLSTukhAC0QeIKsSv4/qGyA1Lh4Gc356OuIpqEoAq8OfAx4d3D2FZMzgQQbmzj9abSAZrAhtR+4EQfLxAqyw/QemImW2r2N5XVrKTjXos4dGf9kst6k2GOTSSyQH41rY2vMaJxFR5s/lyr1Vk+P8eN/YH2PAA1hbRCEZNk4511C4TALF82n+vpWTRvDZAFXlrTRehS2HkuK0Ep1QSArCLz44os0adKkqLYPOugg2nzzzaPK77vvPnrhhRf4sa3RwIEDaeONN46q4y344YcfCMRJOjZs2DDq169fRBNo84wzzqD111+frrjiCtWniAo+KwMGDFCTvJ49e9JWW23lU8O/6P7776empibac889IyqgrMLltRbklN7nn38+7bXXXnTdddeF6yKL1cSJE5PCK7yTLBQtAiDuTj31VDJYn+2ee+6h7t3591qLvf7667Rs2TJnNanvwYMH0+jRo33r/vzzz/T444/TjBkz6Pbbb1d1li9fTtXV1RQIhKZaCxcuVHWqqqpo66239m3HXfjMM88QngVXX3017bbbbuFNsUiR9957T9U5/PDDw3XdCzU1NeG+uMtjLYPQALGB55BzH1v8+3Hu3Lk0a9Ys9fnmm28IhCfK0X6sY8c6hpQLAu2FgBAg7YW8HLc4EOjDk/Y6TonrQyrkaoBGRTkZnGbWVDojoaMilanJniD4sD+Ir+Ftf4eeXal6YD+qHjzAt07OCrv05MwxLAZbJLa6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",CA=U(96486),IA=Object.defineProperty,la=Object.getOwnPropertySymbols,ih=Object.prototype.hasOwnProperty,ah=Object.prototype.propertyIsEnumerable,sh=(r,t,e)=>t in r?IA(r,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[t]=e,au=(r,t)=>{for(var e in t||(t={}))ih.call(t,e)&&sh(r,e,t[e]);if(la)for(var e of la(t))ah.call(t,e)&&sh(r,e,t[e]);return r},SA=(r,t)=>{var e={};for(var n in r)ih.call(r,n)&&t.indexOf(n)<0&&(e[n]=r[n]);if(r!=null&&la)for(var n of la(r))t.indexOf(n)<0&&ah.call(r,n)&&(e[n]=r[n]);return e},co=(r,t,e)=>new Promise((n,o)=>{var i=u=>{try{s(e.next(u))}catch(c){o(c)}},a=u=>{try{s(e.throw(u))}catch(c){o(c)}},s=u=>u.done?n(u.value):Promise.resolve(u.value).then(i,a);s((e=e.apply(r,t)).next())});const{Countdown:RA}=le.default,{Step:BA}=Se.default,vy=null,gy={0:"c-red-ee4",1:"c-green"},my=null,kA=r=>{var t=r,{globalSetting:e,loading:n,user:o,exercise:i,dispatch:a}=t,s=SA(t,["globalSetting","loading","user","exercise","dispatch"]),u;const c=(0,ke.useParams)(),[l,f]=(0,D.useState)(0),[h,d]=(0,D.useState)(!1),[p,v]=(0,D.useState)(!1),[g,A]=(0,D.useState)(!1),[w,E]=(0,D.useState)(0),[x,C]=(0,D.useState)({}),S=(0,D.useRef)(),N=(0,D.useRef)(!0),O=[{title:"\u91C7\u96C6\u7167\u7247",content:"First-content"},{title:"\u5BA1\u6838\u7ED3\u679C",content:"Second-content"},{title:"\u5F00\u542F\u624B\u673A\u5F55\u5236",content:"Last-content"}].filter(V=>x!=null&&x.open_phone_video_recording?!0:V.content!=="Last-content"),F=()=>co(void 0,null,function*(){return new Promise(V=>co(void 0,null,function*(){const G=yield(0,ge.PJ)(au({},c));C(au({},G)),V(G)}))}),P=()=>co(void 0,null,function*(){var V;const G=yield F();G!=null&&G.identity_verify||f(2),G!=null&&G.can_start&&G.countdown_time===0?f(2):(G==null?void 0:G.identity_photo_state)==="rejected"?(N.current=!1,E(1)):(G==null?void 0:G.identity_photo_state)==="passed"&&(N.current=!1,(V=S==null?void 0:S.current)==null||V.handleStop(),x!=null&&x.open_phone_video_recording||f(2))}),z=()=>co(void 0,null,function*(){var V;const G=yield F();(G==null?void 0:G.identity_photo_state)==="submitted"||((G==null?void 0:G.identity_photo_state)==="rejected"?(N.current=!1,E(2)):(G==null?void 0:G.identity_photo_state)==="passed"&&(N.current=!1,(V=S==null?void 0:S.current)==null||V.handleStop(),E(1),x!=null&&x.open_phone_video_recording||f(2))),(G==null?void 0:G.identity_photo_state)!=="passed"&&N.current&&setTimeout(()=>{z()},30*1e3)}),_=()=>{var V;d(!1),(V=S==null?void 0:S.current)==null||V.startDiscern()};return(0,D.useEffect)(()=>(P(),console.log("captureRef:",S),()=>{E(0),A(!1),v(!1),f(0)}),[]),D.createElement("div",{className:"p30 bg-white minHb100 edu-container mt20"},(x==null?void 0:x.identity_verify)&&D.createElement(D.Fragment,null,D.createElement("div",{className:"tc font16 blod"},"\u8EAB\u4EFD\u9A8C\u8BC1"),D.createElement("div",{className:Y.steps},D.createElement(Se.default,{current:l},O.map(V=>D.createElement(BA,{key:V.title,title:V.title}))))),D.createElement("div",{className:l===0?"":"hide"},D.createElement("div",{className:"tc mt50"},"\u8BF7\u4FDD\u8BC1\u5468\u56F4\u5149\u7EBF\u5145\u8DB3\uFF0C\u4E94\u5B98\u6E05\u6670\u53EF\u89C1\uFF01"),!p&&D.createElement("div",{className:"tc"},D.createElement("img",{width:536,src:EA,className:"mt30"})),D.createElement("div",{className:p?"":"hide"},D.createElement(wA,{ref:S,onCameraReady:V=>{d(V)},defaultOpen:x==null?void 0:x.identity_verify,identity_url:(0,pe.Tv)((u=o==null?void 0:o.userInfo)==null?void 0:u.identity_url),outputResult:V=>{V.success?(be.ZP.success({content:"\u4EBA\u8138\u8BC6\u522B\u6210\u529F",key:"checkapi"}),f(2)):A(!0),d(!1)}})),p&&D.createElement(D.Fragment,null,g?D.createElement("div",{className:"tc mb30 mt15"},D.createElement(ee.ZP,{type:"primary",onClick:()=>{var V;(V=S==null?void 0:S.current)==null||V.handlePlay(),C(au({},{})),A(!1)}},"\u91CD\u65B0\u8BC6\u522B"),D.createElement(ee.ZP,{type:"primary",className:"ml90",onClick:()=>co(void 0,null,function*(){var V;yield(V=S==null?void 0:S.current)==null?void 0:V.handleUploadImage(0),N.current=!0,f(1),E(0),A(!1),z()})},"\u4EBA\u5DE5\u5BA1\u6838")):h&&D.createElement("div",{className:"tc mb30 mt15"},D.createElement(ee.ZP,{type:"primary",onClick:(0,CA.throttle)(_,2e3)},"\u5F00\u59CB\u8BC6\u522B"))),!p&&D.createElement("div",{className:"tc mb30 mt15"},D.createElement(ee.ZP,{type:"primary",onClick:()=>{v(!0)}},"\u5F00\u59CB\u91C7\u96C6"))),l===1&&D.createElement("div",{className:"tc"},w===0&&D.createElement(D.Fragment,null,D.createElement("div",{className:"tc mt50"},D.createElement("span",{className:"c-blue font50 iconfont icon-dengdaishenhe"}),D.createElement("br",null),"\u4EBA\u5DE5\u5BA1\u6838\u4E2D...",D.createElement("br",null),"\u7533\u8BF7\u5DF2\u63D0\u4EA4\uFF0C\u76D1\u63A7\u8001\u5E08\u5BA1\u6838\u4E2D\uFF0C\u8BF7\u8010\u5FC3\u7B49\u5F85\uFF01"),D.createElement(ee.ZP,{type:"primary",className:"mt50",onClick:()=>co(void 0,null,function*(){const V=yield F();(V==null?void 0:V.identity_photo_state)==="submitted"?be.ZP.warning({content:"\u6B63\u5728\u7B49\u5F85\u8001\u5E08\u5BA1\u6838\u4E2D\uFF0C\u8BF7\u7A0D\u540E...",key:"sh1"}):(V==null?void 0:V.identity_photo_state)==="rejected"?(E(2),N.current=!1):(V==null?void 0:V.identity_photo_state)==="passed"&&(N.current=!1,E(1),x!=null&&x.open_phone_video_recording||f(2))})},"\u67E5\u770B\u5BA1\u6838\u7ED3\u679C")),w===1&&D.createElement(D.Fragment,null,D.createElement("div",{className:"tc mt50"},D.createElement("span",{className:"c-green font50 iconfont icon-tongguo"}),D.createElement("br",null),"\u8EAB\u4EFD\u9A8C\u8BC1\u5BA1\u6838\u901A\u8FC7\u3002"),(x==null?void 0:x.open_phone_video_recording)&&D.createElement(ee.ZP,{type:"primary",className:"mt50",onClick:()=>f(2)},"\u4E0B\u4E00\u6B65")),w===2&&D.createElement(D.Fragment,null,D.createElement("div",{className:"tc mt50"},D.createElement("span",{className:"c-red font50 iconfont icon-hongsejingshi"}),D.createElement("br",null),"\u8EAB\u4EFD\u9A8C\u8BC1\u5BA1\u6838\u4E0D\u901A\u8FC7\u3002\u8BF7\u91CD\u65B0\u62CD\u7167\u9A8C\u8BC1\u3002"),D.createElement("div",{className:"mt20"},D.createElement(ne.Z,null,D.createElement(M.Z,{className:"tr",flex:"430px"},"\u5931\u8D25\u539F\u56E0\uFF1A"),D.createElement(M.Z,null,x==null?void 0:x.identity_photo_comment)),D.createElement(ne.Z,{className:"mt30"},D.createElement(M.Z,{className:"tr",flex:"430px"},"\u91C7\u96C6\u7167\u7247\uFF1A"),D.createElement(M.Z,null,D.createElement("img",{src:(0,pe.Tv)(x==null?void 0:x.identity_photo_url),width:200}))),D.createElement(ne.Z,null,D.createElement(M.Z,{className:"tr",flex:"430px"}),D.createElement(M.Z,null,D.createElement(ee.ZP,{type:"primary",className:"mt50",onClick:()=>{var V;f(0),d(!1),A(!1),v(!1),(V=S==null?void 0:S.current)==null||V.handlePlay()}},"\u91CD\u65B0\u8BA4\u8BC1")))))),l===2&&D.createElement(D.Fragment,null,D.createElement("div",{className:"tc mt50"},!(x!=null&&x.open_phone_video_recording)&&D.createElement(D.Fragment,null,(x==null?void 0:x.countdown_time)<=0?D.createElement(D.Fragment,null,D.createElement("div",{className:"tc mt50"},D.createElement("span",{className:"c-green font50 iconfont icon-tongguo"}),D.createElement("br",null),"\u8EAB\u4EFD\u9A8C\u8BC1\u5BA1\u6838\u901A\u8FC7\u3002")):"\u8003\u8BD5\u5373\u5C06\u5F00\u59CB\uFF0C\u8BF7\u8010\u5FC3\u7B49\u5F85..."),(x==null?void 0:x.open_phone_video_recording)&&D.createElement(D.Fragment,null,(x==null?void 0:x.countdown_time)<=0?D.createElement("div",{className:"tc"},"\u6839\u636E\u8003\u8BD5\u89C4\u5B9A\uFF0C\u8BF7\u6253\u5F00\u5FAE\u4FE1\u626B\u4E00\u626B\uFF0C\u626B\u7801\u4E0B\u9762\u7684\u4E8C\u7EF4\u7801\u5F00\u542F\u624B\u673A\u5F55\u5236\u89C6\u9891",D.createElement("br",null),D.createElement("span",{className:"c-blue",style:{cursor:"default"},onClick:()=>{K.default.info({icon:null,title:"\u67E5\u770B\u64CD\u4F5C\u6307\u5F15",className:"custom-modal-divider",width:540,content:D.createElement(ne.Z,null,D.createElement(M.Z,{flex:"178px"},D.createElement("img",{width:148,src:"/images/operation_guidance.png"})),D.createElement(M.Z,{flex:"1"},"\u8BF7\u70B9\u51FB\u53F3\u4E0A\u89D2\u201C\u2026\u201D\uFF0C\u9009\u62E9",D.createElement("span",{className:"c-orange"},"Safari\u4E2D\u6253\u5F00"),"\u6216\u8005",D.createElement("span",{className:"c-orange"},"\u201C\u5728\u9ED8\u8BA4\u6D4F\u89C8\u5668\u4E2D\u6253\u5F00\u201D"),"\u540E\uFF0C\u6D4F\u89C8\u5668\u6253\u5F00\u540E\u8BF7\u70B9\u51FB\u5F00\u59CB\u5F55\u5236\u6309\u94AE\uFF0C\u53EF\u4EE5\u5F00\u542F\u624B\u673A\u5F55\u5236\u89C6\u9891\u3002"))})}},"\u5982\u82F9\u679C\u624B\u673A\u5FAE\u4FE1\u626B\u63CF\u4E8C\u7EF4\u7801\u540E\uFF0C\u51FA\u73B0\u70B9\u51FB\u5F00\u59CB\u5F55\u5236\u65E0\u54CD\u5E94\uFF0C\u8BF7\u67E5\u770B\u64CD\u4F5C\u6307\u5F15\u3002")):"\u8003\u8BD5\u5373\u5C06\u5F00\u59CB\uFF0C\u8BF7\u8010\u5FC3\u7B49\u5F85...")),(x==null?void 0:x.open_phone_video_recording)&&D.createElement("div",{className:Y.qrcode},D.createElement(we(),{value:`https://${document.domain}/live-push.html?id=${c.categoryId}&login=${c.login}&cookie=${(0,pe.ej)("_educoder_session")}`})),(x==null?void 0:x.countdown_time)>0&&D.createElement("div",{className:"tc mt20"},D.createElement(RA,{value:Date.now()+(x==null?void 0:x.countdown_time)*1e3,valueStyle:{color:"#cf1322",fontSize:40},onFinish:()=>{F()}})),D.createElement("div",{className:"tc mb30 mt50"},D.createElement(ee.ZP,{type:"primary",onClick:()=>co(void 0,null,function*(){var V;const G=yield F();G!=null&&G.can_start&&(G==null?void 0:G.countdown_time)<=0?((V=S==null?void 0:S.current)==null||V.handleRemove(),x!=null&&x.open_phone_video_recording?G!=null&&G.video_url&&setTimeout(()=>{location.href=`/classrooms/${c.coursesId}/exercise/${c.categoryId}/users/${c.login}`},300):setTimeout(()=>{location.href=`/classrooms/${c.coursesId}/exercise/${c.categoryId}/users/${c.login}`},300)):(G==null?void 0:G.countdown_time)>0?be.ZP.warning({content:"\u8003\u8BD5\u6682\u672A\u5F00\u59CB\uFF0C\u8BF7\u7A0D\u540E..."}):be.ZP.warning({content:"\u8BF7\u6253\u5F00\u5FAE\u4FE1\u626B\u4E00\u626B\uFF0C\u5F00\u542F\u624B\u673A\u89C6\u9891\u5F55\u5236"})})},"\u5F00\u59CB\u8003\u8BD5"))))};var TA=(0,ke.connect)(({loading:r,user:t,exercise:e,globalSetting:n})=>({globalSetting:n,user:t,exercise:e,loading:r.effects}))(kA)},57838:function(Qt,$e,U){"use strict";U.d($e,{Z:function(){return ke}});var D=U(67294);function ke(){const[,le]=D.useReducer(Se=>Se+1,0);return le}},25378:function(Qt,$e,U){"use strict";var D=U(67294),ke=U(14075),le=U(57838),Se=U(74443);function be(){let ee=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;const ne=(0,D.useRef)({}),M=(0,le.Z)(),K=(0,Se.ZP)();return(0,ke.Z)(()=>{const Y=K.subscribe(pe=>{ne.current=pe,ee&&M()});return()=>K.unsubscribe(Y)},[]),ne.current}$e.Z=be},38703:function(Qt,$e,U){"use strict";U.d($e,{Z:function(){return xt}});var D=U(67294),ke=U(87725),le=U(18299),Se=U(16646),be=U(73475),ee=U(94184),ne=U.n(ee),M=U(10366),K=U(53124),Y=U(87462),pe=U(1413),ge=U(45987),ae={percent:0,prefixCls:"rc-progress",strokeColor:"#2db7f5",strokeLinecap:"round",strokeWidth:1,trailColor:"#D9D9D9",trailWidth:1,gapPosition:"bottom"},we=function(){var Z=(0,D.useRef)([]),$=(0,D.useRef)(null);return(0,D.useEffect)(function(){var Ce=Date.now(),Fe=!1;Z.current.forEach(function(Me){if(Me){Fe=!0;var Xe=Me.style;Xe.transitionDuration=".3s, .3s, .3s, .06s",$.current&&Ce-$.current<100&&(Xe.transitionDuration="0s, 0s")}}),Fe&&($.current=Date.now())}),Z.current},me=["className","percent","prefixCls","strokeColor","strokeLinecap","strokeWidth","style","trailColor","trailWidth","transition"],Qe=function(Z){var $=(0,pe.Z)((0,pe.Z)({},ae),Z),Ce=$.className,Fe=$.percent,Me=$.prefixCls,Xe=$.strokeColor,Ge=$.strokeLinecap,Ze=$.strokeWidth,ft=$.style,ot=$.trailColor,mt=$.trailWidth,bt=$.transition,Gt=(0,ge.Z)($,me);delete Gt.gapPosition;var Xt=Array.isArray(Fe)?Fe:[Fe],At=Array.isArray(Xe)?Xe:[Xe],dt=we(),Pt=Ze/2,wt=100-Ze/2,ct="M ".concat(Ge==="round"?Pt:0,",").concat(Pt,`
|
|
L `).concat(Ge==="round"?wt:100,",").concat(Pt),j="0 0 100 ".concat(Ze),hn=0;return D.createElement("svg",(0,Y.Z)({className:ne()("".concat(Me,"-line"),Ce),viewBox:j,preserveAspectRatio:"none",style:ft},Gt),D.createElement("path",{className:"".concat(Me,"-line-trail"),d:ct,strokeLinecap:Ge,stroke:ot,strokeWidth:mt||Ze,fillOpacity:"0"}),Xt.map(function(at,In){var gn=1;switch(Ge){case"round":gn=1-Ze/100;break;case"square":gn=1-Ze/2/100;break;default:gn=1;break}var Kn={strokeDasharray:"".concat(at*gn,"px, 100px"),strokeDashoffset:"-".concat(hn,"px"),transition:bt||"stroke-dashoffset 0.3s ease 0s, stroke-dasharray .3s ease 0s, stroke 0.3s linear"},Sn=At[In]||At[At.length-1];return hn+=at,D.createElement("path",{key:In,className:"".concat(Me,"-line-path"),d:ct,strokeLinecap:Ge,stroke:Sn,strokeWidth:Ze,fillOpacity:"0",ref:function(ln){dt[In]=ln},style:Kn})}))},Et=Qe,De=U(71002),xe=U(97685),Ie=U(98924),Bt=0,cn=(0,Ie.Z)();function J(){var H;return cn?(H=Bt,Bt+=1):H="TEST_OR_SSR",H}var Zt=function(H){var Z=D.useState(),$=(0,xe.Z)(Z,2),Ce=$[0],Fe=$[1];return D.useEffect(function(){Fe("rc_progress_".concat(J()))},[]),H||Ce},ut=function(Z){var $=Z.bg,Ce=Z.children;return D.createElement("div",{style:{width:"100%",height:"100%",background:$}},Ce)};function rt(H,Z){return Object.keys(H).map(function($){var Ce=parseFloat($),Fe="".concat(Math.floor(Ce*Z),"%");return"".concat(H[$]," ").concat(Fe)})}var Vt=D.forwardRef(function(H,Z){var $=H.prefixCls,Ce=H.color,Fe=H.gradientId,Me=H.radius,Xe=H.style,Ge=H.ptg,Ze=H.strokeLinecap,ft=H.strokeWidth,ot=H.size,mt=H.gapDegree,bt=Ce&&(0,De.Z)(Ce)==="object",Gt=bt?"#FFF":void 0,Xt=ot/2,At=D.createElement("circle",{className:"".concat($,"-circle-path"),r:Me,cx:Xt,cy:Xt,stroke:Gt,strokeLinecap:Ze,strokeWidth:ft,opacity:Ge===0?0:1,style:Xe,ref:Z});if(!bt)return At;var dt="".concat(Fe,"-conic"),Pt=mt?"".concat(180+mt/2,"deg"):"0deg",wt=rt(Ce,(360-mt)/360),ct=rt(Ce,1),j="conic-gradient(from ".concat(Pt,", ").concat(wt.join(", "),")"),hn="linear-gradient(to ".concat(mt?"bottom":"top",", ").concat(ct.join(", "),")");return D.createElement(D.Fragment,null,D.createElement("mask",{id:dt},At),D.createElement("foreignObject",{x:0,y:0,width:ot,height:ot,mask:"url(#".concat(dt,")")},D.createElement(ut,{bg:hn},D.createElement(ut,{bg:j}))))}),_t=Vt,zt=100,qt=function(Z,$,Ce,Fe,Me,Xe,Ge,Ze,ft,ot){var mt=arguments.length>10&&arguments[10]!==void 0?arguments[10]:0,bt=Ce/100*360*((360-Xe)/360),Gt=Xe===0?0:{bottom:0,top:180,left:90,right:-90}[Ge],Xt=(100-Fe)/100*$;ft==="round"&&Fe!==100&&(Xt+=ot/2,Xt>=$&&(Xt=$-.01));var At=zt/2;return{stroke:typeof Ze=="string"?Ze:void 0,strokeDasharray:"".concat($,"px ").concat(Z),strokeDashoffset:Xt+mt,transform:"rotate(".concat(Me+bt+Gt,"deg)"),transformOrigin:"".concat(At,"px ").concat(At,"px"),transition:"stroke-dashoffset .3s ease 0s, stroke-dasharray .3s ease 0s, stroke .3s, stroke-width .06s ease .3s, opacity .3s ease 0s",fillOpacity:0}},Ut=["id","prefixCls","steps","strokeWidth","trailWidth","gapDegree","gapPosition","trailColor","strokeLinecap","style","className","strokeColor","percent"];function Ee(H){var Z=H!=null?H:[];return Array.isArray(Z)?Z:[Z]}var re=function(Z){var $=(0,pe.Z)((0,pe.Z)({},ae),Z),Ce=$.id,Fe=$.prefixCls,Me=$.steps,Xe=$.strokeWidth,Ge=$.trailWidth,Ze=$.gapDegree,ft=Ze===void 0?0:Ze,ot=$.gapPosition,mt=$.trailColor,bt=$.strokeLinecap,Gt=$.style,Xt=$.className,At=$.strokeColor,dt=$.percent,Pt=(0,ge.Z)($,Ut),wt=zt/2,ct=Zt(Ce),j="".concat(ct,"-gradient"),hn=wt-Xe/2,at=Math.PI*2*hn,In=ft>0?90+ft/2:-90,gn=at*((360-ft)/360),Kn=(0,De.Z)(Me)==="object"?Me:{count:Me,space:2},Sn=Kn.count,$n=Kn.space,ln=Ee(dt),nn=Ee(At),Mt=nn.find(function(Jr){return Jr&&(0,De.Z)(Jr)==="object"}),dn=Mt&&(0,De.Z)(Mt)==="object",pt=dn?"butt":bt,lo=qt(at,gn,0,100,In,ft,ot,mt,pt,Xe),fo=we(),Oo=function(){var ho=0;return ln.map(function(L,wr){var Un=nn[wr]||nn[nn.length-1],er=qt(at,gn,ho,L,In,ft,ot,Un,pt,Xe);return ho+=L,D.createElement(_t,{key:wr,color:Un,ptg:L,radius:hn,prefixCls:Fe,gradientId:j,style:er,strokeLinecap:pt,strokeWidth:Xe,gapDegree:ft,ref:function(Rn){fo[wr]=Rn},size:zt})}).reverse()},hu=function(){var ho=Math.round(Sn*(ln[0]/100)),L=100/Sn,wr=0;return new Array(Sn).fill(null).map(function(Un,er){var bn=er<=ho-1?nn[0]:mt,Rn=bn&&(0,De.Z)(bn)==="object"?"url(#".concat(j,")"):void 0,ur=qt(at,gn,wr,L,In,ft,ot,bn,"butt",Xe,$n);return wr+=(gn-ur.strokeDashoffset+$n)*100/gn,D.createElement("circle",{key:er,className:"".concat(Fe,"-circle-path"),r:hn,cx:wt,cy:wt,stroke:Rn,strokeWidth:Xe,opacity:1,style:ur,ref:function(li){fo[er]=li}})})};return D.createElement("svg",(0,Y.Z)({className:ne()("".concat(Fe,"-circle"),Xt),viewBox:"0 0 ".concat(zt," ").concat(zt),style:Gt,id:Ce,role:"presentation"},Pt),!Sn&&D.createElement("circle",{className:"".concat(Fe,"-circle-trail"),r:hn,cx:wt,cy:wt,stroke:mt,strokeLinecap:pt,strokeWidth:Ge||Xe,style:lo}),Sn?hu():Oo())},Ae=re,fe={Line:Et,Circle:Ae},Oe=U(83062),_e=U(47448);function Ve(H){return!H||H<0?0:H>100?100:H}function R(H){let{success:Z,successPercent:$}=H,Ce=$;return Z&&"progress"in Z&&(Ce=Z.progress),Z&&"percent"in Z&&(Ce=Z.percent),Ce}const Je=H=>{let{percent:Z,success:$,successPercent:Ce}=H;const Fe=Ve(R({success:$,successPercent:Ce}));return[Fe,Ve(Ve(Z)-Fe)]},Yt=H=>{let{success:Z={},strokeColor:$}=H;const{strokeColor:Ce}=Z;return[Ce||_e.presetPrimaryColors.green,$||null]},kt=(H,Z,$)=>{var Ce,Fe,Me,Xe;let Ge=-1,Ze=-1;if(Z==="step"){const ft=$.steps,ot=$.strokeWidth;typeof H=="string"||typeof H=="undefined"?(Ge=H==="small"?2:14,Ze=ot!=null?ot:8):typeof H=="number"?[Ge,Ze]=[H,H]:[Ge=14,Ze=8]=H,Ge*=ft}else if(Z==="line"){const ft=$==null?void 0:$.strokeWidth;typeof H=="string"||typeof H=="undefined"?Ze=ft||(H==="small"?6:8):typeof H=="number"?[Ge,Ze]=[H,H]:[Ge=-1,Ze=8]=H}else(Z==="circle"||Z==="dashboard")&&(typeof H=="string"||typeof H=="undefined"?[Ge,Ze]=H==="small"?[60,60]:[120,120]:typeof H=="number"?[Ge,Ze]=[H,H]:(Ge=(Fe=(Ce=H[0])!==null&&Ce!==void 0?Ce:H[1])!==null&&Fe!==void 0?Fe:120,Ze=(Xe=(Me=H[0])!==null&&Me!==void 0?Me:H[1])!==null&&Xe!==void 0?Xe:120));return[Ge,Ze]},Re=3,Ke=H=>Re/H*100;var Ft=H=>{const{prefixCls:Z,trailColor:$=null,strokeLinecap:Ce="round",gapPosition:Fe,gapDegree:Me,width:Xe=120,type:Ge,children:Ze,success:ft,size:ot=Xe}=H,[mt,bt]=kt(ot,"circle");let{strokeWidth:Gt}=H;Gt===void 0&&(Gt=Math.max(Ke(mt),6));const Xt={width:mt,height:bt,fontSize:mt*.15+6},At=D.useMemo(()=>{if(Me||Me===0)return Me;if(Ge==="dashboard")return 75},[Me,Ge]),dt=Fe||Ge==="dashboard"&&"bottom"||void 0,Pt=Object.prototype.toString.call(H.strokeColor)==="[object Object]",wt=Yt({success:ft,strokeColor:H.strokeColor}),ct=ne()(`${Z}-inner`,{[`${Z}-circle-gradient`]:Pt}),j=D.createElement(Ae,{percent:Je(H),strokeWidth:Gt,trailWidth:Gt,strokeColor:wt,strokeLinecap:Ce,trailColor:$,prefixCls:Z,gapDegree:At,gapPosition:dt});return D.createElement("div",{className:ct,style:Xt},mt<=20?D.createElement(Oe.Z,{title:Ze},D.createElement("span",null,j)):D.createElement(D.Fragment,null,j,Ze))},Ct=function(H,Z){var $={};for(var Ce in H)Object.prototype.hasOwnProperty.call(H,Ce)&&Z.indexOf(Ce)<0&&($[Ce]=H[Ce]);if(H!=null&&typeof Object.getOwnPropertySymbols=="function")for(var Fe=0,Ce=Object.getOwnPropertySymbols(H);Fe<Ce.length;Fe++)Z.indexOf(Ce[Fe])<0&&Object.prototype.propertyIsEnumerable.call(H,Ce[Fe])&&($[Ce[Fe]]=H[Ce[Fe]]);return $};const It=H=>{let Z=[];return Object.keys(H).forEach($=>{const Ce=parseFloat($.replace(/%/g,""));isNaN(Ce)||Z.push({key:Ce,value:H[$]})}),Z=Z.sort(($,Ce)=>$.key-Ce.key),Z.map($=>{let{key:Ce,value:Fe}=$;return`${Fe} ${Ce}%`}).join(", ")},Ht=(H,Z)=>{const{from:$=_e.presetPrimaryColors.blue,to:Ce=_e.presetPrimaryColors.blue,direction:Fe=Z==="rtl"?"to left":"to right"}=H,Me=Ct(H,["from","to","direction"]);if(Object.keys(Me).length!==0){const Xe=It(Me);return{backgroundImage:`linear-gradient(${Fe}, ${Xe})`}}return{backgroundImage:`linear-gradient(${Fe}, ${$}, ${Ce})`}};var ht=H=>{const{prefixCls:Z,direction:$,percent:Ce,size:Fe,strokeWidth:Me,strokeColor:Xe,strokeLinecap:Ge="round",children:Ze,trailColor:ft=null,success:ot}=H,mt=Xe&&typeof Xe!="string"?Ht(Xe,$):{backgroundColor:Xe},bt=Ge==="square"||Ge==="butt"?0:void 0,Gt={backgroundColor:ft||void 0,borderRadius:bt},Xt=Fe!=null?Fe:[-1,Me||(Fe==="small"?6:8)],[At,dt]=kt(Xt,"line",{strokeWidth:Me}),Pt=Object.assign({width:`${Ve(Ce)}%`,height:dt,borderRadius:bt},mt),wt=R(H),ct={width:`${Ve(wt)}%`,height:dt,borderRadius:bt,backgroundColor:ot==null?void 0:ot.strokeColor},j={width:At<0?"100%":At,height:dt};return D.createElement(D.Fragment,null,D.createElement("div",{className:`${Z}-outer`,style:j},D.createElement("div",{className:`${Z}-inner`,style:Gt},D.createElement("div",{className:`${Z}-bg`,style:Pt}),wt!==void 0?D.createElement("div",{className:`${Z}-success-bg`,style:ct}):null)),Ze)},T=H=>{const{size:Z,steps:$,percent:Ce=0,strokeWidth:Fe=8,strokeColor:Me,trailColor:Xe=null,prefixCls:Ge,children:Ze}=H,ft=Math.round($*(Ce/100)),ot=Z==="small"?2:14,mt=Z!=null?Z:[ot,Fe],[bt,Gt]=kt(mt,"step",{steps:$,strokeWidth:Fe}),Xt=bt/$,At=new Array($);for(let dt=0;dt<$;dt++){const Pt=Array.isArray(Me)?Me[dt]:Me;At[dt]=D.createElement("div",{key:dt,className:ne()(`${Ge}-steps-item`,{[`${Ge}-steps-item-active`]:dt<=ft-1}),style:{backgroundColor:dt<=ft-1?Pt:Xe,width:Xt,height:Gt}})}return D.createElement("div",{className:`${Ge}-steps-outer`},At,Ze)},m=U(45930),y=U(14747),k=U(67968),b=U(45503);const I=H=>{const Z=H?"100%":"-100%";return new m.Keyframes(`antProgress${H?"RTL":"LTR"}Active`,{"0%":{transform:`translateX(${Z}) scaleX(0)`,opacity:.1},"20%":{transform:`translateX(${Z}) scaleX(0)`,opacity:.5},to:{transform:"translateX(0) scaleX(1)",opacity:0}})},W=H=>{const{componentCls:Z,iconCls:$}=H;return{[Z]:Object.assign(Object.assign({},(0,y.Wf)(H)),{display:"inline-block","&-rtl":{direction:"rtl"},"&-line":{position:"relative",width:"100%",fontSize:H.fontSize,marginInlineEnd:H.marginXS,marginBottom:H.marginXS},[`${Z}-outer`]:{display:"inline-block",width:"100%"},[`&${Z}-show-info`]:{[`${Z}-outer`]:{marginInlineEnd:`calc(-2em - ${H.marginXS}px)`,paddingInlineEnd:`calc(2em + ${H.paddingXS}px)`}},[`${Z}-inner`]:{position:"relative",display:"inline-block",width:"100%",overflow:"hidden",verticalAlign:"middle",backgroundColor:H.remainingColor,borderRadius:H.lineBorderRadius},[`${Z}-inner:not(${Z}-circle-gradient)`]:{[`${Z}-circle-path`]:{stroke:H.defaultColor}},[`${Z}-success-bg, ${Z}-bg`]:{position:"relative",backgroundColor:H.defaultColor,borderRadius:H.lineBorderRadius,transition:`all ${H.motionDurationSlow} ${H.motionEaseInOutCirc}`},[`${Z}-success-bg`]:{position:"absolute",insetBlockStart:0,insetInlineStart:0,backgroundColor:H.colorSuccess},[`${Z}-text`]:{display:"inline-block",width:"2em",marginInlineStart:H.marginXS,color:H.colorText,lineHeight:1,whiteSpace:"nowrap",textAlign:"start",verticalAlign:"middle",wordBreak:"normal",[$]:{fontSize:H.fontSize}},[`&${Z}-status-active`]:{[`${Z}-bg::before`]:{position:"absolute",inset:0,backgroundColor:H.colorBgContainer,borderRadius:H.lineBorderRadius,opacity:0,animationName:I(),animationDuration:H.progressActiveMotionDuration,animationTimingFunction:H.motionEaseOutQuint,animationIterationCount:"infinite",content:'""'}},[`&${Z}-rtl${Z}-status-active`]:{[`${Z}-bg::before`]:{animationName:I(!0)}},[`&${Z}-status-exception`]:{[`${Z}-bg`]:{backgroundColor:H.colorError},[`${Z}-text`]:{color:H.colorError}},[`&${Z}-status-exception ${Z}-inner:not(${Z}-circle-gradient)`]:{[`${Z}-circle-path`]:{stroke:H.colorError}},[`&${Z}-status-success`]:{[`${Z}-bg`]:{backgroundColor:H.colorSuccess},[`${Z}-text`]:{color:H.colorSuccess}},[`&${Z}-status-success ${Z}-inner:not(${Z}-circle-gradient)`]:{[`${Z}-circle-path`]:{stroke:H.colorSuccess}}})}},X=H=>{const{componentCls:Z,iconCls:$}=H;return{[Z]:{[`${Z}-circle-trail`]:{stroke:H.remainingColor},[`&${Z}-circle ${Z}-inner`]:{position:"relative",lineHeight:1,backgroundColor:"transparent"},[`&${Z}-circle ${Z}-text`]:{position:"absolute",insetBlockStart:"50%",insetInlineStart:0,width:"100%",margin:0,padding:0,color:H.circleTextColor,fontSize:H.circleTextFontSize,lineHeight:1,whiteSpace:"normal",textAlign:"center",transform:"translateY(-50%)",[$]:{fontSize:`${H.fontSize/H.fontSizeSM}em`}},[`${Z}-circle&-status-exception`]:{[`${Z}-text`]:{color:H.colorError}},[`${Z}-circle&-status-success`]:{[`${Z}-text`]:{color:H.colorSuccess}}},[`${Z}-inline-circle`]:{lineHeight:1,[`${Z}-inner`]:{verticalAlign:"bottom"}}}},oe=H=>{const{componentCls:Z}=H;return{[Z]:{[`${Z}-steps`]:{display:"inline-block","&-outer":{display:"flex",flexDirection:"row",alignItems:"center"},"&-item":{flexShrink:0,minWidth:H.progressStepMinWidth,marginInlineEnd:H.progressStepMarginInlineEnd,backgroundColor:H.remainingColor,transition:`all ${H.motionDurationSlow}`,"&-active":{backgroundColor:H.defaultColor}}}}}},ue=H=>{const{componentCls:Z,iconCls:$}=H;return{[Z]:{[`${Z}-small&-line, ${Z}-small&-line ${Z}-text ${$}`]:{fontSize:H.fontSizeSM}}}};var Ne=(0,k.Z)("Progress",H=>{const Z=H.marginXXS/2,$=(0,b.TS)(H,{progressStepMarginInlineEnd:Z,progressStepMinWidth:Z,progressActiveMotionDuration:"2.4s"});return[W($),X($),oe($),ue($)]},H=>({circleTextColor:H.colorText,defaultColor:H.colorInfo,remainingColor:H.colorFillSecondary,lineBorderRadius:100,circleTextFontSize:"1em"})),je=function(H,Z){var $={};for(var Ce in H)Object.prototype.hasOwnProperty.call(H,Ce)&&Z.indexOf(Ce)<0&&($[Ce]=H[Ce]);if(H!=null&&typeof Object.getOwnPropertySymbols=="function")for(var Fe=0,Ce=Object.getOwnPropertySymbols(H);Fe<Ce.length;Fe++)Z.indexOf(Ce[Fe])<0&&Object.prototype.propertyIsEnumerable.call(H,Ce[Fe])&&($[Ce[Fe]]=H[Ce[Fe]]);return $};const qe=null,Ot=["normal","exception","active","success"];var en=D.forwardRef((H,Z)=>{const{prefixCls:$,className:Ce,rootClassName:Fe,steps:Me,strokeColor:Xe,percent:Ge=0,size:Ze="default",showInfo:ft=!0,type:ot="line",status:mt,format:bt,style:Gt}=H,Xt=je(H,["prefixCls","className","rootClassName","steps","strokeColor","percent","size","showInfo","type","status","format","style"]),At=D.useMemo(()=>{var ln,nn;const Mt=R(H);return parseInt(Mt!==void 0?(ln=Mt!=null?Mt:0)===null||ln===void 0?void 0:ln.toString():(nn=Ge!=null?Ge:0)===null||nn===void 0?void 0:nn.toString(),10)},[Ge,H.success,H.successPercent]),dt=D.useMemo(()=>!Ot.includes(mt)&&At>=100?"success":mt||"normal",[mt,At]),{getPrefixCls:Pt,direction:wt,progress:ct}=D.useContext(K.E_),j=Pt("progress",$),[hn,at]=Ne(j),In=D.useMemo(()=>{if(!ft)return null;const ln=R(H);let nn;const Mt=bt||(pt=>`${pt}%`),dn=ot==="line";return bt||dt!=="exception"&&dt!=="success"?nn=Mt(Ve(Ge),Ve(ln)):dt==="exception"?nn=dn?D.createElement(Se.Z,null):D.createElement(be.Z,null):dt==="success"&&(nn=dn?D.createElement(ke.Z,null):D.createElement(le.Z,null)),D.createElement("span",{className:`${j}-text`,title:typeof nn=="string"?nn:void 0},nn)},[ft,Ge,At,dt,ot,j,bt]),gn=Array.isArray(Xe)?Xe[0]:Xe,Kn=typeof Xe=="string"||Array.isArray(Xe)?Xe:void 0;let Sn;ot==="line"?Sn=Me?D.createElement(T,Object.assign({},H,{strokeColor:Kn,prefixCls:j,steps:Me}),In):D.createElement(ht,Object.assign({},H,{strokeColor:gn,prefixCls:j,direction:wt}),In):(ot==="circle"||ot==="dashboard")&&(Sn=D.createElement(Ft,Object.assign({},H,{strokeColor:gn,prefixCls:j,progressStatus:dt}),In));const $n=ne()(j,`${j}-status-${dt}`,`${j}-${ot==="dashboard"&&"circle"||Me&&"steps"||ot}`,{[`${j}-inline-circle`]:ot==="circle"&&kt(Ze,"circle")[0]<=20,[`${j}-show-info`]:ft,[`${j}-${Ze}`]:typeof Ze=="string",[`${j}-rtl`]:wt==="rtl"},ct==null?void 0:ct.className,Ce,Fe,at);return hn(D.createElement("div",Object.assign({ref:Z,style:Object.assign(Object.assign({},ct==null?void 0:ct.style),Gt),className:$n,role:"progressbar","aria-valuenow":At},(0,M.Z)(Xt,["trailColor","strokeWidth","width","gapDegree","gapPosition","strokeLinecap","success","successPercent"])),Sn))}),xt=en},46303:function(Qt,$e,U){"use strict";U.d($e,{Z:function(){return T}});var D=U(94184),ke=U.n(D),le=U(67294),Se=U(53124),be=U(10366),ne=m=>{const{prefixCls:y,className:k,style:b,size:I,shape:W}=m,X=ke()({[`${y}-lg`]:I==="large",[`${y}-sm`]:I==="small"}),oe=ke()({[`${y}-circle`]:W==="circle",[`${y}-square`]:W==="square",[`${y}-round`]:W==="round"}),ue=le.useMemo(()=>typeof I=="number"?{width:I,height:I,lineHeight:`${I}px`}:{},[I]);return le.createElement("span",{className:ke()(y,X,oe,k),style:Object.assign(Object.assign({},ue),b)})},M=U(45930),K=U(67968),Y=U(45503);const pe=new M.Keyframes("ant-skeleton-loading",{"0%":{backgroundPosition:"100% 50%"},"100%":{backgroundPosition:"0 50%"}}),ge=m=>({height:m,lineHeight:`${m}px`}),ae=m=>Object.assign({width:m},ge(m)),we=m=>({background:m.skeletonLoadingBackground,backgroundSize:"400% 100%",animationName:pe,animationDuration:m.skeletonLoadingMotionDuration,animationTimingFunction:"ease",animationIterationCount:"infinite"}),me=m=>Object.assign({width:m*5,minWidth:m*5},ge(m)),Qe=m=>{const{skeletonAvatarCls:y,gradientFromColor:k,controlHeight:b,controlHeightLG:I,controlHeightSM:W}=m;return{[`${y}`]:Object.assign({display:"inline-block",verticalAlign:"top",background:k},ae(b)),[`${y}${y}-circle`]:{borderRadius:"50%"},[`${y}${y}-lg`]:Object.assign({},ae(I)),[`${y}${y}-sm`]:Object.assign({},ae(W))}},Et=m=>{const{controlHeight:y,borderRadiusSM:k,skeletonInputCls:b,controlHeightLG:I,controlHeightSM:W,gradientFromColor:X}=m;return{[`${b}`]:Object.assign({display:"inline-block",verticalAlign:"top",background:X,borderRadius:k},me(y)),[`${b}-lg`]:Object.assign({},me(I)),[`${b}-sm`]:Object.assign({},me(W))}},De=m=>Object.assign({width:m},ge(m)),xe=m=>{const{skeletonImageCls:y,imageSizeBase:k,gradientFromColor:b,borderRadiusSM:I}=m;return{[`${y}`]:Object.assign(Object.assign({display:"flex",alignItems:"center",justifyContent:"center",verticalAlign:"top",background:b,borderRadius:I},De(k*2)),{[`${y}-path`]:{fill:"#bfbfbf"},[`${y}-svg`]:Object.assign(Object.assign({},De(k)),{maxWidth:k*4,maxHeight:k*4}),[`${y}-svg${y}-svg-circle`]:{borderRadius:"50%"}}),[`${y}${y}-circle`]:{borderRadius:"50%"}}},Ie=(m,y,k)=>{const{skeletonButtonCls:b}=m;return{[`${k}${b}-circle`]:{width:y,minWidth:y,borderRadius:"50%"},[`${k}${b}-round`]:{borderRadius:y}}},Bt=m=>Object.assign({width:m*2,minWidth:m*2},ge(m)),cn=m=>{const{borderRadiusSM:y,skeletonButtonCls:k,controlHeight:b,controlHeightLG:I,controlHeightSM:W,gradientFromColor:X}=m;return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({[`${k}`]:Object.assign({display:"inline-block",verticalAlign:"top",background:X,borderRadius:y,width:b*2,minWidth:b*2},Bt(b))},Ie(m,b,k)),{[`${k}-lg`]:Object.assign({},Bt(I))}),Ie(m,I,`${k}-lg`)),{[`${k}-sm`]:Object.assign({},Bt(W))}),Ie(m,W,`${k}-sm`))},J=m=>{const{componentCls:y,skeletonAvatarCls:k,skeletonTitleCls:b,skeletonParagraphCls:I,skeletonButtonCls:W,skeletonInputCls:X,skeletonImageCls:oe,controlHeight:ue,controlHeightLG:Ne,controlHeightSM:je,gradientFromColor:qe,padding:Ot,marginSM:jt,borderRadius:en,titleHeight:xt,blockRadius:H,paragraphLiHeight:Z,controlHeightXS:$,paragraphMarginTop:Ce}=m;return{[`${y}`]:{display:"table",width:"100%",[`${y}-header`]:{display:"table-cell",paddingInlineEnd:Ot,verticalAlign:"top",[`${k}`]:Object.assign({display:"inline-block",verticalAlign:"top",background:qe},ae(ue)),[`${k}-circle`]:{borderRadius:"50%"},[`${k}-lg`]:Object.assign({},ae(Ne)),[`${k}-sm`]:Object.assign({},ae(je))},[`${y}-content`]:{display:"table-cell",width:"100%",verticalAlign:"top",[`${b}`]:{width:"100%",height:xt,background:qe,borderRadius:H,[`+ ${I}`]:{marginBlockStart:je}},[`${I}`]:{padding:0,"> li":{width:"100%",height:Z,listStyle:"none",background:qe,borderRadius:H,"+ li":{marginBlockStart:$}}},[`${I}> li:last-child:not(:first-child):not(:nth-child(2))`]:{width:"61%"}},[`&-round ${y}-content`]:{[`${b}, ${I} > li`]:{borderRadius:en}}},[`${y}-with-avatar ${y}-content`]:{[`${b}`]:{marginBlockStart:jt,[`+ ${I}`]:{marginBlockStart:Ce}}},[`${y}${y}-element`]:Object.assign(Object.assign(Object.assign(Object.assign({display:"inline-block",width:"auto"},cn(m)),Qe(m)),Et(m)),xe(m)),[`${y}${y}-block`]:{width:"100%",[`${W}`]:{width:"100%"},[`${X}`]:{width:"100%"}},[`${y}${y}-active`]:{[`
|
|
${b},
|
|
${I} > li,
|
|
${k},
|
|
${W},
|
|
${X},
|
|
${oe}
|
|
`]:Object.assign({},we(m))}}};var Zt=(0,K.Z)("Skeleton",m=>{const{componentCls:y}=m,k=(0,Y.TS)(m,{skeletonAvatarCls:`${y}-avatar`,skeletonTitleCls:`${y}-title`,skeletonParagraphCls:`${y}-paragraph`,skeletonButtonCls:`${y}-button`,skeletonInputCls:`${y}-input`,skeletonImageCls:`${y}-image`,imageSizeBase:m.controlHeight*1.5,borderRadius:100,skeletonLoadingBackground:`linear-gradient(90deg, ${m.gradientFromColor} 25%, ${m.gradientToColor} 37%, ${m.gradientFromColor} 63%)`,skeletonLoadingMotionDuration:"1.4s"});return[J(k)]},m=>{const{colorFillContent:y,colorFill:k}=m,b=y,I=k;return{color:b,colorGradientEnd:I,gradientFromColor:b,gradientToColor:I,titleHeight:m.controlHeight/2,blockRadius:m.borderRadiusSM,paragraphMarginTop:m.marginLG+m.marginXXS,paragraphLiHeight:m.controlHeight/2}},{deprecatedTokens:[["color","gradientFromColor"],["colorGradientEnd","gradientToColor"]]}),rt=m=>{const{prefixCls:y,className:k,rootClassName:b,active:I,shape:W="circle",size:X="default"}=m,{getPrefixCls:oe}=le.useContext(Se.E_),ue=oe("skeleton",y),[Ne,je]=Zt(ue),qe=(0,be.Z)(m,["prefixCls","className"]),Ot=ke()(ue,`${ue}-element`,{[`${ue}-active`]:I},k,b,je);return Ne(le.createElement("div",{className:Ot},le.createElement(ne,Object.assign({prefixCls:`${ue}-avatar`,shape:W,size:X},qe))))},_t=m=>{const{prefixCls:y,className:k,rootClassName:b,active:I,block:W=!1,size:X="default"}=m,{getPrefixCls:oe}=le.useContext(Se.E_),ue=oe("skeleton",y),[Ne,je]=Zt(ue),qe=(0,be.Z)(m,["prefixCls"]),Ot=ke()(ue,`${ue}-element`,{[`${ue}-active`]:I,[`${ue}-block`]:W},k,b,je);return Ne(le.createElement("div",{className:Ot},le.createElement(ne,Object.assign({prefixCls:`${ue}-button`,size:X},qe))))};const zt="M365.714286 329.142857q0 45.714286-32.036571 77.677714t-77.677714 32.036571-77.677714-32.036571-32.036571-77.677714 32.036571-77.677714 77.677714-32.036571 77.677714 32.036571 32.036571 77.677714zM950.857143 548.571429l0 256-804.571429 0 0-109.714286 182.857143-182.857143 91.428571 91.428571 292.571429-292.571429zM1005.714286 146.285714l-914.285714 0q-7.460571 0-12.873143 5.412571t-5.412571 12.873143l0 694.857143q0 7.460571 5.412571 12.873143t12.873143 5.412571l914.285714 0q7.460571 0 12.873143-5.412571t5.412571-12.873143l0-694.857143q0-7.460571-5.412571-12.873143t-12.873143-5.412571zM1097.142857 164.571429l0 694.857143q0 37.741714-26.843429 64.585143t-64.585143 26.843429l-914.285714 0q-37.741714 0-64.585143-26.843429t-26.843429-64.585143l0-694.857143q0-37.741714 26.843429-64.585143t64.585143-26.843429l914.285714 0q37.741714 0 64.585143 26.843429t26.843429 64.585143z";var Ut=m=>{const{prefixCls:y,className:k,rootClassName:b,style:I,active:W}=m,{getPrefixCls:X}=le.useContext(Se.E_),oe=X("skeleton",y),[ue,Ne]=Zt(oe),je=ke()(oe,`${oe}-element`,{[`${oe}-active`]:W},k,b,Ne);return ue(le.createElement("div",{className:je},le.createElement("div",{className:ke()(`${oe}-image`,k),style:I},le.createElement("svg",{viewBox:"0 0 1098 1024",xmlns:"http://www.w3.org/2000/svg",className:`${oe}-image-svg`},le.createElement("path",{d:zt,className:`${oe}-image-path`})))))},re=m=>{const{prefixCls:y,className:k,rootClassName:b,active:I,block:W,size:X="default"}=m,{getPrefixCls:oe}=le.useContext(Se.E_),ue=oe("skeleton",y),[Ne,je]=Zt(ue),qe=(0,be.Z)(m,["prefixCls"]),Ot=ke()(ue,`${ue}-element`,{[`${ue}-active`]:I,[`${ue}-block`]:W},k,b,je);return Ne(le.createElement("div",{className:Ot},le.createElement(ne,Object.assign({prefixCls:`${ue}-input`,size:X},qe))))},Ae=U(87462),fe={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M888 792H200V168c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v688c0 4.4 3.6 8 8 8h752c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM288 604a64 64 0 10128 0 64 64 0 10-128 0zm118-224a48 48 0 1096 0 48 48 0 10-96 0zm158 228a96 96 0 10192 0 96 96 0 10-192 0zm148-314a56 56 0 10112 0 56 56 0 10-112 0z"}}]},name:"dot-chart",theme:"outlined"},Oe=fe,_e=U(74643),Ve=function(y,k){return le.createElement(_e.Z,(0,Ae.Z)({},y,{ref:k,icon:Oe}))},R=le.forwardRef(Ve),Yt=m=>{const{prefixCls:y,className:k,rootClassName:b,style:I,active:W,children:X}=m,{getPrefixCls:oe}=le.useContext(Se.E_),ue=oe("skeleton",y),[Ne,je]=Zt(ue),qe=ke()(ue,`${ue}-element`,{[`${ue}-active`]:W},je,k,b),Ot=X!=null?X:le.createElement(R,null);return Ne(le.createElement("div",{className:qe},le.createElement("div",{className:ke()(`${ue}-image`,k),style:I},Ot)))},kt=U(74902),Ke=m=>{const y=oe=>{const{width:ue,rows:Ne=2}=m;if(Array.isArray(ue))return ue[oe];if(Ne-1===oe)return ue},{prefixCls:k,className:b,style:I,rows:W}=m,X=(0,kt.Z)(Array(W)).map((oe,ue)=>le.createElement("li",{key:ue,style:{width:y(ue)}}));return le.createElement("ul",{className:ke()(k,b),style:I},X)},Ft=m=>{let{prefixCls:y,className:k,width:b,style:I}=m;return le.createElement("h3",{className:ke()(y,k),style:Object.assign({width:b},I)})};function Ct(m){return m&&typeof m=="object"?m:{}}function It(m,y){return m&&!y?{size:"large",shape:"square"}:{size:"large",shape:"circle"}}function Ht(m,y){return!m&&y?{width:"38%"}:m&&y?{width:"50%"}:{}}function Kt(m,y){const k={};return(!m||!y)&&(k.width="61%"),!m&&y?k.rows=3:k.rows=2,k}const ht=m=>{const{prefixCls:y,loading:k,className:b,rootClassName:I,style:W,children:X,avatar:oe=!1,title:ue=!0,paragraph:Ne=!0,active:je,round:qe}=m,{getPrefixCls:Ot,direction:jt,skeleton:en}=le.useContext(Se.E_),xt=Ot("skeleton",y),[H,Z]=Zt(xt);if(k||!("loading"in m)){const $=!!oe,Ce=!!ue,Fe=!!Ne;let Me;if($){const Ze=Object.assign(Object.assign({prefixCls:`${xt}-avatar`},It(Ce,Fe)),Ct(oe));Me=le.createElement("div",{className:`${xt}-header`},le.createElement(ne,Object.assign({},Ze)))}let Xe;if(Ce||Fe){let Ze;if(Ce){const ot=Object.assign(Object.assign({prefixCls:`${xt}-title`},Ht($,Fe)),Ct(ue));Ze=le.createElement(Ft,Object.assign({},ot))}let ft;if(Fe){const ot=Object.assign(Object.assign({prefixCls:`${xt}-paragraph`},Kt($,Ce)),Ct(Ne));ft=le.createElement(Ke,Object.assign({},ot))}Xe=le.createElement("div",{className:`${xt}-content`},Ze,ft)}const Ge=ke()(xt,{[`${xt}-with-avatar`]:$,[`${xt}-active`]:je,[`${xt}-rtl`]:jt==="rtl",[`${xt}-round`]:qe},en==null?void 0:en.className,b,I,Z);return H(le.createElement("div",{className:Ge,style:Object.assign(Object.assign({},en==null?void 0:en.style),W)},Me,Xe))}return typeof X!="undefined"?X:null};ht.Button=_t,ht.Avatar=rt,ht.Input=re,ht.Image=Ut,ht.Node=Yt;var Cn=ht,T=Cn},55054:function(Qt,$e,U){"use strict";U.d($e,{default:function(){return Zt}});var D=U(67294),ke=U(57838),le=U(96159),Se=U(94184),be=U.n(Se),ee=U(53124),ne=U(46303),K=ut=>{const{value:rt,formatter:Vt,precision:_t,decimalSeparator:zt,groupSeparator:qt="",prefixCls:Ut}=ut;let Ee;if(typeof Vt=="function")Ee=Vt(rt);else{const re=String(rt),Ae=re.match(/^(-?)(\d*)(\.(\d+))?$/);if(!Ae||re==="-")Ee=re;else{const fe=Ae[1];let Oe=Ae[2]||"0",_e=Ae[4]||"";Oe=Oe.replace(/\B(?=(\d{3})+(?!\d))/g,qt),typeof _t=="number"&&(_e=_e.padEnd(_t,"0").slice(0,_t>0?_t:0)),_e&&(_e=`${zt}${_e}`),Ee=[D.createElement("span",{key:"int",className:`${Ut}-content-value-int`},fe,Oe),_e&&D.createElement("span",{key:"decimal",className:`${Ut}-content-value-decimal`},_e)]}}return D.createElement("span",{className:`${Ut}-content-value`},Ee)},Y=U(14747),pe=U(67968),ge=U(45503);const ae=ut=>{const{componentCls:rt,marginXXS:Vt,padding:_t,colorTextDescription:zt,titleFontSize:qt,colorTextHeading:Ut,contentFontSize:Ee,fontFamily:re}=ut;return{[`${rt}`]:Object.assign(Object.assign({},(0,Y.Wf)(ut)),{[`${rt}-title`]:{marginBottom:Vt,color:zt,fontSize:qt},[`${rt}-skeleton`]:{paddingTop:_t},[`${rt}-content`]:{color:Ut,fontSize:Ee,fontFamily:re,[`${rt}-content-value`]:{display:"inline-block",direction:"ltr"},[`${rt}-content-prefix, ${rt}-content-suffix`]:{display:"inline-block"},[`${rt}-content-prefix`]:{marginInlineEnd:Vt},[`${rt}-content-suffix`]:{marginInlineStart:Vt}}})}};var we=(0,pe.Z)("Statistic",ut=>{const rt=(0,ge.TS)(ut,{});return[ae(rt)]},ut=>{const{fontSizeHeading3:rt,fontSize:Vt}=ut;return{titleFontSize:Vt,contentFontSize:rt}}),Qe=ut=>{const{prefixCls:rt,className:Vt,rootClassName:_t,style:zt,valueStyle:qt,value:Ut=0,title:Ee,valueRender:re,prefix:Ae,suffix:fe,loading:Oe=!1,onMouseEnter:_e,onMouseLeave:Ve,decimalSeparator:R=".",groupSeparator:Je=","}=ut,{getPrefixCls:Yt,direction:kt,statistic:Re}=D.useContext(ee.E_),Ke=Yt("statistic",rt),[He,Ft]=we(Ke),Ct=D.createElement(K,Object.assign({decimalSeparator:R,groupSeparator:Je,prefixCls:Ke},ut,{value:Ut})),It=be()(Ke,{[`${Ke}-rtl`]:kt==="rtl"},Re==null?void 0:Re.className,Vt,_t,Ft);return He(D.createElement("div",{className:It,style:Object.assign(Object.assign({},Re==null?void 0:Re.style),zt),onMouseEnter:_e,onMouseLeave:Ve},Ee&&D.createElement("div",{className:`${Ke}-title`},Ee),D.createElement(ne.Z,{paragraph:!1,loading:Oe,className:`${Ke}-skeleton`},D.createElement("div",{style:qt,className:`${Ke}-content`},Ae&&D.createElement("span",{className:`${Ke}-content-prefix`},Ae),re?re(Ct):Ct,fe&&D.createElement("span",{className:`${Ke}-content-suffix`},fe)))))};const Et=[["Y",1e3*60*60*24*365],["M",1e3*60*60*24*30],["D",1e3*60*60*24],["H",1e3*60*60],["m",1e3*60],["s",1e3],["S",1]];function De(ut,rt){let Vt=ut;const _t=/\[[^\]]*]/g,zt=(rt.match(_t)||[]).map(re=>re.slice(1,-1)),qt=rt.replace(_t,"[]"),Ut=Et.reduce((re,Ae)=>{let[fe,Oe]=Ae;if(re.includes(fe)){const _e=Math.floor(Vt/Oe);return Vt-=_e*Oe,re.replace(new RegExp(`${fe}+`,"g"),Ve=>{const R=Ve.length;return _e.toString().padStart(R,"0")})}return re},qt);let Ee=0;return Ut.replace(_t,()=>{const re=zt[Ee];return Ee+=1,re})}function xe(ut,rt){const{format:Vt=""}=rt,_t=new Date(ut).getTime(),zt=Date.now(),qt=Math.max(_t-zt,0);return De(qt,Vt)}const Ie=1e3/30;function Bt(ut){return new Date(ut).getTime()}const cn=ut=>{const{value:rt,format:Vt="HH:mm:ss",onChange:_t,onFinish:zt}=ut,qt=(0,ke.Z)(),Ut=D.useRef(null),Ee=()=>{zt==null||zt(),Ut.current&&(clearInterval(Ut.current),Ut.current=null)},re=()=>{const Oe=Bt(rt);Oe>=Date.now()&&(Ut.current=setInterval(()=>{qt(),_t==null||_t(Oe-Date.now()),Oe<Date.now()&&Ee()},Ie))};D.useEffect(()=>(re(),()=>{Ut.current&&(clearInterval(Ut.current),Ut.current=null)}),[rt]);const Ae=(Oe,_e)=>xe(Oe,Object.assign(Object.assign({},_e),{format:Vt})),fe=Oe=>(0,le.Tm)(Oe,{title:void 0});return D.createElement(Qe,Object.assign({},ut,{valueRender:fe,formatter:Ae}))};var J=D.memo(cn);Qe.Countdown=J;var Zt=Qe},3363:function(Qt,$e,U){"use strict";U.d($e,{default:function(){return k}});var D=U(18299),ke=U(73475),le=U(94184),Se=U.n(le),be=U(87462),ee=U(1413),ne=U(4942),M=U(45987),K=U(67294),Y=U(15105),pe=["className","prefixCls","style","active","status","iconPrefix","icon","wrapperStyle","stepNumber","disabled","description","title","subTitle","progressDot","stepIcon","tailContent","icons","stepIndex","onStepClick","onClick","render"];function ge(b){return typeof b=="string"}function ae(b){var I,W=b.className,X=b.prefixCls,oe=b.style,ue=b.active,Ne=b.status,je=b.iconPrefix,qe=b.icon,Ot=b.wrapperStyle,jt=b.stepNumber,en=b.disabled,xt=b.description,H=b.title,Z=b.subTitle,$=b.progressDot,Ce=b.stepIcon,Fe=b.tailContent,Me=b.icons,Xe=b.stepIndex,Ge=b.onStepClick,Ze=b.onClick,ft=b.render,ot=(0,M.Z)(b,pe),mt=!!Ge&&!en,bt={};mt&&(bt.role="button",bt.tabIndex=0,bt.onClick=function(wt){Ze==null||Ze(wt),Ge(Xe)},bt.onKeyDown=function(wt){var ct=wt.which;(ct===Y.Z.ENTER||ct===Y.Z.SPACE)&&Ge(Xe)});var Gt=function(){var ct,j,hn=Se()("".concat(X,"-icon"),"".concat(je,"icon"),(ct={},(0,ne.Z)(ct,"".concat(je,"icon-").concat(qe),qe&&ge(qe)),(0,ne.Z)(ct,"".concat(je,"icon-check"),!qe&&Ne==="finish"&&(Me&&!Me.finish||!Me)),(0,ne.Z)(ct,"".concat(je,"icon-cross"),!qe&&Ne==="error"&&(Me&&!Me.error||!Me)),ct)),at=K.createElement("span",{className:"".concat(X,"-icon-dot")});return $?typeof $=="function"?j=K.createElement("span",{className:"".concat(X,"-icon")},$(at,{index:jt-1,status:Ne,title:H,description:xt})):j=K.createElement("span",{className:"".concat(X,"-icon")},at):qe&&!ge(qe)?j=K.createElement("span",{className:"".concat(X,"-icon")},qe):Me&&Me.finish&&Ne==="finish"?j=K.createElement("span",{className:"".concat(X,"-icon")},Me.finish):Me&&Me.error&&Ne==="error"?j=K.createElement("span",{className:"".concat(X,"-icon")},Me.error):qe||Ne==="finish"||Ne==="error"?j=K.createElement("span",{className:hn}):j=K.createElement("span",{className:"".concat(X,"-icon")},jt),Ce&&(j=Ce({index:jt-1,status:Ne,title:H,description:xt,node:j})),j},Xt=Ne||"wait",At=Se()("".concat(X,"-item"),"".concat(X,"-item-").concat(Xt),W,(I={},(0,ne.Z)(I,"".concat(X,"-item-custom"),qe),(0,ne.Z)(I,"".concat(X,"-item-active"),ue),(0,ne.Z)(I,"".concat(X,"-item-disabled"),en===!0),I)),dt=(0,ee.Z)({},oe),Pt=K.createElement("div",(0,be.Z)({},ot,{className:At,style:dt}),K.createElement("div",(0,be.Z)({onClick:Ze},bt,{className:"".concat(X,"-item-container")}),K.createElement("div",{className:"".concat(X,"-item-tail")},Fe),K.createElement("div",{className:"".concat(X,"-item-icon")},Gt()),K.createElement("div",{className:"".concat(X,"-item-content")},K.createElement("div",{className:"".concat(X,"-item-title")},H,Z&&K.createElement("div",{title:typeof Z=="string"?Z:void 0,className:"".concat(X,"-item-subtitle")},Z)),xt&&K.createElement("div",{className:"".concat(X,"-item-description")},xt))));return ft&&(Pt=ft(Pt)||null),Pt}var we=ae,me=["prefixCls","style","className","children","direction","type","labelPlacement","iconPrefix","status","size","current","progressDot","stepIcon","initial","icons","onChange","itemRender","items"];function Qe(b){var I,W=b.prefixCls,X=W===void 0?"rc-steps":W,oe=b.style,ue=oe===void 0?{}:oe,Ne=b.className,je=b.children,qe=b.direction,Ot=qe===void 0?"horizontal":qe,jt=b.type,en=jt===void 0?"default":jt,xt=b.labelPlacement,H=xt===void 0?"horizontal":xt,Z=b.iconPrefix,$=Z===void 0?"rc":Z,Ce=b.status,Fe=Ce===void 0?"process":Ce,Me=b.size,Xe=b.current,Ge=Xe===void 0?0:Xe,Ze=b.progressDot,ft=Ze===void 0?!1:Ze,ot=b.stepIcon,mt=b.initial,bt=mt===void 0?0:mt,Gt=b.icons,Xt=b.onChange,At=b.itemRender,dt=b.items,Pt=dt===void 0?[]:dt,wt=(0,M.Z)(b,me),ct=en==="navigation",j=en==="inline",hn=j||ft,at=j?"horizontal":Ot,In=j?void 0:Me,gn=hn?"vertical":H,Kn=Se()(X,"".concat(X,"-").concat(at),Ne,(I={},(0,ne.Z)(I,"".concat(X,"-").concat(In),In),(0,ne.Z)(I,"".concat(X,"-label-").concat(gn),at==="horizontal"),(0,ne.Z)(I,"".concat(X,"-dot"),!!hn),(0,ne.Z)(I,"".concat(X,"-navigation"),ct),(0,ne.Z)(I,"".concat(X,"-inline"),j),I)),Sn=function(nn){Xt&&Ge!==nn&&Xt(nn)},$n=function(nn,Mt){var dn=(0,ee.Z)({},nn),pt=bt+Mt;return Fe==="error"&&Mt===Ge-1&&(dn.className="".concat(X,"-next-error")),dn.status||(pt===Ge?dn.status=Fe:pt<Ge?dn.status="finish":dn.status="wait"),j&&(dn.icon=void 0,dn.subTitle=void 0),!dn.render&&At&&(dn.render=function(lo){return At(dn,lo)}),K.createElement(we,(0,be.Z)({},dn,{active:pt===Ge,stepNumber:pt+1,stepIndex:pt,key:pt,prefixCls:X,iconPrefix:$,wrapperStyle:ue,progressDot:hn,stepIcon:ot,icons:Gt,onStepClick:Xt&&Sn}))};return K.createElement("div",(0,be.Z)({className:Kn,style:ue},wt),Pt.filter(function(ln){return ln}).map($n))}Qe.Step=we;var Et=Qe,De=Et,xe=U(53124),Ie=U(98675),Bt=U(25378),cn=U(38703),J=U(83062),Zt=U(14747),ut=U(67968),rt=U(45503),_t=b=>{const{componentCls:I,customIconTop:W,customIconSize:X,customIconFontSize:oe}=b;return{[`${I}-item-custom`]:{[`> ${I}-item-container > ${I}-item-icon`]:{height:"auto",background:"none",border:0,[`> ${I}-icon`]:{top:W,width:X,height:X,fontSize:oe,lineHeight:`${oe}px`}}},[`&:not(${I}-vertical)`]:{[`${I}-item-custom`]:{[`${I}-item-icon`]:{width:"auto",background:"none"}}}}},qt=b=>{const{componentCls:I,inlineDotSize:W,inlineTitleColor:X,inlineTailColor:oe}=b,ue=b.paddingXS+b.lineWidth,Ne={[`${I}-item-container ${I}-item-content ${I}-item-title`]:{color:X}};return{[`&${I}-inline`]:{width:"auto",display:"inline-flex",[`${I}-item`]:{flex:"none","&-container":{padding:`${ue}px ${b.paddingXXS}px 0`,margin:`0 ${b.marginXXS/2}px`,borderRadius:b.borderRadiusSM,cursor:"pointer",transition:`background-color ${b.motionDurationMid}`,"&:hover":{background:b.controlItemBgHover},"&[role='button']:hover":{opacity:1}},"&-icon":{width:W,height:W,marginInlineStart:`calc(50% - ${W/2}px)`,[`> ${I}-icon`]:{top:0},[`${I}-icon-dot`]:{borderRadius:b.fontSizeSM/4}},"&-content":{width:"auto",marginTop:b.marginXS-b.lineWidth},"&-title":{color:X,fontSize:b.fontSizeSM,lineHeight:b.lineHeightSM,fontWeight:"normal",marginBottom:b.marginXXS/2},"&-description":{display:"none"},"&-tail":{marginInlineStart:0,top:ue+W/2,transform:"translateY(-50%)","&:after":{width:"100%",height:b.lineWidth,borderRadius:0,marginInlineStart:0,background:oe}},[`&:first-child ${I}-item-tail`]:{width:"50%",marginInlineStart:"50%"},[`&:last-child ${I}-item-tail`]:{display:"block",width:"50%"},"&-wait":Object.assign({[`${I}-item-icon ${I}-icon ${I}-icon-dot`]:{backgroundColor:b.colorBorderBg,border:`${b.lineWidth}px ${b.lineType} ${oe}`}},Ne),"&-finish":Object.assign({[`${I}-item-tail::after`]:{backgroundColor:oe},[`${I}-item-icon ${I}-icon ${I}-icon-dot`]:{backgroundColor:oe,border:`${b.lineWidth}px ${b.lineType} ${oe}`}},Ne),"&-error":Ne,"&-active, &-process":Object.assign({[`${I}-item-icon`]:{width:W,height:W,marginInlineStart:`calc(50% - ${W/2}px)`,top:0}},Ne),[`&:not(${I}-item-active) > ${I}-item-container[role='button']:hover`]:{[`${I}-item-title`]:{color:X}}}}}},Ee=b=>{const{componentCls:I,iconSize:W,lineHeight:X,iconSizeSM:oe}=b;return{[`&${I}-label-vertical`]:{[`${I}-item`]:{overflow:"visible","&-tail":{marginInlineStart:W/2+b.controlHeightLG,padding:`${b.paddingXXS}px ${b.paddingLG}px`},"&-content":{display:"block",width:(W/2+b.controlHeightLG)*2,marginTop:b.marginSM,textAlign:"center"},"&-icon":{display:"inline-block",marginInlineStart:b.controlHeightLG},"&-title":{paddingInlineEnd:0,paddingInlineStart:0,"&::after":{display:"none"}},"&-subtitle":{display:"block",marginBottom:b.marginXXS,marginInlineStart:0,lineHeight:X}},[`&${I}-small:not(${I}-dot)`]:{[`${I}-item`]:{"&-icon":{marginInlineStart:b.controlHeightLG+(W-oe)/2}}}}}},Ae=b=>{const{componentCls:I,navContentMaxWidth:W,navArrowColor:X,stepsNavActiveColor:oe,motionDurationSlow:ue}=b;return{[`&${I}-navigation`]:{paddingTop:b.paddingSM,[`&${I}-small`]:{[`${I}-item`]:{"&-container":{marginInlineStart:-b.marginSM}}},[`${I}-item`]:{overflow:"visible",textAlign:"center","&-container":{display:"inline-block",height:"100%",marginInlineStart:-b.margin,paddingBottom:b.paddingSM,textAlign:"start",transition:`opacity ${ue}`,[`${I}-item-content`]:{maxWidth:W},[`${I}-item-title`]:Object.assign(Object.assign({maxWidth:"100%",paddingInlineEnd:0},Zt.vS),{"&::after":{display:"none"}})},[`&:not(${I}-item-active)`]:{[`${I}-item-container[role='button']`]:{cursor:"pointer","&:hover":{opacity:.85}}},"&:last-child":{flex:1,"&::after":{display:"none"}},"&::after":{position:"absolute",top:`calc(50% - ${b.paddingSM/2}px)`,insetInlineStart:"100%",display:"inline-block",width:b.fontSizeIcon,height:b.fontSizeIcon,borderTop:`${b.lineWidth}px ${b.lineType} ${X}`,borderBottom:"none",borderInlineStart:"none",borderInlineEnd:`${b.lineWidth}px ${b.lineType} ${X}`,transform:"translateY(-50%) translateX(-50%) rotate(45deg)",content:'""'},"&::before":{position:"absolute",bottom:0,insetInlineStart:"50%",display:"inline-block",width:0,height:b.lineWidthBold,backgroundColor:oe,transition:`width ${ue}, inset-inline-start ${ue}`,transitionTimingFunction:"ease-out",content:'""'}},[`${I}-item${I}-item-active::before`]:{insetInlineStart:0,width:"100%"}},[`&${I}-navigation${I}-vertical`]:{[`> ${I}-item`]:{marginInlineEnd:0,"&::before":{display:"none"},[`&${I}-item-active::before`]:{top:0,insetInlineEnd:0,insetInlineStart:"unset",display:"block",width:b.lineWidth*3,height:`calc(100% - ${b.marginLG}px)`},"&::after":{position:"relative",insetInlineStart:"50%",display:"block",width:b.controlHeight*.25,height:b.controlHeight*.25,marginBottom:b.marginXS,textAlign:"center",transform:"translateY(-50%) translateX(-50%) rotate(135deg)"},"&:last-child":{"&::after":{display:"none"}},[`> ${I}-item-container > ${I}-item-tail`]:{visibility:"hidden"}}},[`&${I}-navigation${I}-horizontal`]:{[`> ${I}-item > ${I}-item-container > ${I}-item-tail`]:{visibility:"hidden"}}}},Oe=b=>{const{antCls:I,componentCls:W}=b;return{[`&${W}-with-progress`]:{[`${W}-item`]:{paddingTop:b.paddingXXS,[`&-process ${W}-item-container ${W}-item-icon ${W}-icon`]:{color:b.processIconColor}},[`&${W}-vertical > ${W}-item `]:{paddingInlineStart:b.paddingXXS,[`> ${W}-item-container > ${W}-item-tail`]:{top:b.marginXXS,insetInlineStart:b.iconSize/2-b.lineWidth+b.paddingXXS}},[`&, &${W}-small`]:{[`&${W}-horizontal ${W}-item:first-child`]:{paddingBottom:b.paddingXXS,paddingInlineStart:b.paddingXXS}},[`&${W}-small${W}-vertical > ${W}-item > ${W}-item-container > ${W}-item-tail`]:{insetInlineStart:b.iconSizeSM/2-b.lineWidth+b.paddingXXS},[`&${W}-label-vertical`]:{[`${W}-item ${W}-item-tail`]:{top:b.margin-2*b.lineWidth}},[`${W}-item-icon`]:{position:"relative",[`${I}-progress`]:{position:"absolute",insetBlockStart:(b.iconSize-b.stepsProgressSize-b.lineWidth*2)/2,insetInlineStart:(b.iconSize-b.stepsProgressSize-b.lineWidth*2)/2}}}}},Ve=b=>{const{componentCls:I,descriptionMaxWidth:W,lineHeight:X,dotCurrentSize:oe,dotSize:ue,motionDurationSlow:Ne}=b;return{[`&${I}-dot, &${I}-dot${I}-small`]:{[`${I}-item`]:{"&-title":{lineHeight:X},"&-tail":{top:Math.floor((b.dotSize-b.lineWidth*3)/2),width:"100%",marginTop:0,marginBottom:0,marginInline:`${W/2}px 0`,padding:0,"&::after":{width:`calc(100% - ${b.marginSM*2}px)`,height:b.lineWidth*3,marginInlineStart:b.marginSM}},"&-icon":{width:ue,height:ue,marginInlineStart:(b.descriptionMaxWidth-ue)/2,paddingInlineEnd:0,lineHeight:`${ue}px`,background:"transparent",border:0,[`${I}-icon-dot`]:{position:"relative",float:"left",width:"100%",height:"100%",borderRadius:100,transition:`all ${Ne}`,"&::after":{position:"absolute",top:-b.marginSM,insetInlineStart:(ue-b.controlHeightLG*1.5)/2,width:b.controlHeightLG*1.5,height:b.controlHeight,background:"transparent",content:'""'}}},"&-content":{width:W},[`&-process ${I}-item-icon`]:{position:"relative",top:(ue-oe)/2,width:oe,height:oe,lineHeight:`${oe}px`,background:"none",marginInlineStart:(b.descriptionMaxWidth-oe)/2},[`&-process ${I}-icon`]:{[`&:first-child ${I}-icon-dot`]:{insetInlineStart:0}}}},[`&${I}-vertical${I}-dot`]:{[`${I}-item-icon`]:{marginTop:(b.controlHeight-ue)/2,marginInlineStart:0,background:"none"},[`${I}-item-process ${I}-item-icon`]:{marginTop:(b.controlHeight-oe)/2,top:0,insetInlineStart:(ue-oe)/2,marginInlineStart:0},[`${I}-item > ${I}-item-container > ${I}-item-tail`]:{top:(b.controlHeight-ue)/2,insetInlineStart:0,margin:0,padding:`${ue+b.paddingXS}px 0 ${b.paddingXS}px`,"&::after":{marginInlineStart:(ue-b.lineWidth)/2}},[`&${I}-small`]:{[`${I}-item-icon`]:{marginTop:(b.controlHeightSM-ue)/2},[`${I}-item-process ${I}-item-icon`]:{marginTop:(b.controlHeightSM-oe)/2},[`${I}-item > ${I}-item-container > ${I}-item-tail`]:{top:(b.controlHeightSM-ue)/2}},[`${I}-item:first-child ${I}-icon-dot`]:{insetInlineStart:0},[`${I}-item-content`]:{width:"inherit"}}}},Je=b=>{const{componentCls:I}=b;return{[`&${I}-rtl`]:{direction:"rtl",[`${I}-item`]:{"&-subtitle":{float:"left"}},[`&${I}-navigation`]:{[`${I}-item::after`]:{transform:"rotate(-45deg)"}},[`&${I}-vertical`]:{[`> ${I}-item`]:{"&::after":{transform:"rotate(225deg)"},[`${I}-item-icon`]:{float:"right"}}},[`&${I}-dot`]:{[`${I}-item-icon ${I}-icon-dot, &${I}-small ${I}-item-icon ${I}-icon-dot`]:{float:"right"}}}}},kt=b=>{const{componentCls:I,iconSizeSM:W,fontSizeSM:X,fontSize:oe,colorTextDescription:ue}=b;return{[`&${I}-small`]:{[`&${I}-horizontal:not(${I}-label-vertical) ${I}-item`]:{paddingInlineStart:b.paddingSM,"&:first-child":{paddingInlineStart:0}},[`${I}-item-icon`]:{width:W,height:W,marginTop:0,marginBottom:0,marginInline:`0 ${b.marginXS}px`,fontSize:X,lineHeight:`${W}px`,textAlign:"center",borderRadius:W},[`${I}-item-title`]:{paddingInlineEnd:b.paddingSM,fontSize:oe,lineHeight:`${W}px`,"&::after":{top:W/2}},[`${I}-item-description`]:{color:ue,fontSize:oe},[`${I}-item-tail`]:{top:W/2-b.paddingXXS},[`${I}-item-custom ${I}-item-icon`]:{width:"inherit",height:"inherit",lineHeight:"inherit",background:"none",border:0,borderRadius:0,[`> ${I}-icon`]:{fontSize:W,lineHeight:`${W}px`,transform:"none"}}}}},Ke=b=>{const{componentCls:I,iconSizeSM:W,iconSize:X}=b;return{[`&${I}-vertical`]:{display:"flex",flexDirection:"column",[`> ${I}-item`]:{display:"block",flex:"1 0 auto",paddingInlineStart:0,overflow:"visible",[`${I}-item-icon`]:{float:"left",marginInlineEnd:b.margin},[`${I}-item-content`]:{display:"block",minHeight:b.controlHeight*1.5,overflow:"hidden"},[`${I}-item-title`]:{lineHeight:`${X}px`},[`${I}-item-description`]:{paddingBottom:b.paddingSM}},[`> ${I}-item > ${I}-item-container > ${I}-item-tail`]:{position:"absolute",top:0,insetInlineStart:X/2-b.lineWidth,width:b.lineWidth,height:"100%",padding:`${X+b.marginXXS*1.5}px 0 ${b.marginXXS*1.5}px`,"&::after":{width:b.lineWidth,height:"100%"}},[`> ${I}-item:not(:last-child) > ${I}-item-container > ${I}-item-tail`]:{display:"block"},[` > ${I}-item > ${I}-item-container > ${I}-item-content > ${I}-item-title`]:{"&::after":{display:"none"}},[`&${I}-small ${I}-item-container`]:{[`${I}-item-tail`]:{position:"absolute",top:0,insetInlineStart:W/2-b.lineWidth,padding:`${W+b.marginXXS*1.5}px 0 ${b.marginXXS*1.5}px`},[`${I}-item-title`]:{lineHeight:`${W}px`}}}}},He;(function(b){b.wait="wait",b.process="process",b.finish="finish",b.error="error"})(He||(He={}));const Ft=(b,I)=>{const W=`${I.componentCls}-item`,X=`${b}IconColor`,oe=`${b}TitleColor`,ue=`${b}DescriptionColor`,Ne=`${b}TailColor`,je=`${b}IconBgColor`,qe=`${b}IconBorderColor`,Ot=`${b}DotColor`;return{[`${W}-${b} ${W}-icon`]:{backgroundColor:I[je],borderColor:I[qe],[`> ${I.componentCls}-icon`]:{color:I[X],[`${I.componentCls}-icon-dot`]:{background:I[Ot]}}},[`${W}-${b}${W}-custom ${W}-icon`]:{[`> ${I.componentCls}-icon`]:{color:I[Ot]}},[`${W}-${b} > ${W}-container > ${W}-content > ${W}-title`]:{color:I[oe],"&::after":{backgroundColor:I[Ne]}},[`${W}-${b} > ${W}-container > ${W}-content > ${W}-description`]:{color:I[ue]},[`${W}-${b} > ${W}-container > ${W}-tail::after`]:{backgroundColor:I[Ne]}}},Ct=b=>{const{componentCls:I,motionDurationSlow:W}=b,X=`${I}-item`,oe=`${X}-icon`;return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({[X]:{position:"relative",display:"inline-block",flex:1,overflow:"hidden",verticalAlign:"top","&:last-child":{flex:"none",[`> ${X}-container > ${X}-tail, > ${X}-container > ${X}-content > ${X}-title::after`]:{display:"none"}}},[`${X}-container`]:{outline:"none","&:focus-visible":{[oe]:Object.assign({},(0,Zt.oN)(b))}},[`${oe}, ${X}-content`]:{display:"inline-block",verticalAlign:"top"},[oe]:{width:b.iconSize,height:b.iconSize,marginTop:0,marginBottom:0,marginInlineStart:0,marginInlineEnd:b.marginXS,fontSize:b.iconFontSize,fontFamily:b.fontFamily,lineHeight:`${b.iconSize}px`,textAlign:"center",borderRadius:b.iconSize,border:`${b.lineWidth}px ${b.lineType} transparent`,transition:`background-color ${W}, border-color ${W}`,[`${I}-icon`]:{position:"relative",top:b.iconTop,color:b.colorPrimary,lineHeight:1}},[`${X}-tail`]:{position:"absolute",top:b.iconSize/2-b.paddingXXS,insetInlineStart:0,width:"100%","&::after":{display:"inline-block",width:"100%",height:b.lineWidth,background:b.colorSplit,borderRadius:b.lineWidth,transition:`background ${W}`,content:'""'}},[`${X}-title`]:{position:"relative",display:"inline-block",paddingInlineEnd:b.padding,color:b.colorText,fontSize:b.fontSizeLG,lineHeight:`${b.titleLineHeight}px`,"&::after":{position:"absolute",top:b.titleLineHeight/2,insetInlineStart:"100%",display:"block",width:9999,height:b.lineWidth,background:b.processTailColor,content:'""'}},[`${X}-subtitle`]:{display:"inline",marginInlineStart:b.marginXS,color:b.colorTextDescription,fontWeight:"normal",fontSize:b.fontSize},[`${X}-description`]:{color:b.colorTextDescription,fontSize:b.fontSize}},Ft(He.wait,b)),Ft(He.process,b)),{[`${X}-process > ${X}-container > ${X}-title`]:{fontWeight:b.fontWeightStrong}}),Ft(He.finish,b)),Ft(He.error,b)),{[`${X}${I}-next-error > ${I}-item-title::after`]:{background:b.colorError},[`${X}-disabled`]:{cursor:"not-allowed"}})},It=b=>{const{componentCls:I,motionDurationSlow:W}=b;return{[`& ${I}-item`]:{[`&:not(${I}-item-active)`]:{[`& > ${I}-item-container[role='button']`]:{cursor:"pointer",[`${I}-item`]:{[`&-title, &-subtitle, &-description, &-icon ${I}-icon`]:{transition:`color ${W}`}},"&:hover":{[`${I}-item`]:{"&-title, &-subtitle, &-description":{color:b.colorPrimary}}}},[`&:not(${I}-item-process)`]:{[`& > ${I}-item-container[role='button']:hover`]:{[`${I}-item`]:{"&-icon":{borderColor:b.colorPrimary,[`${I}-icon`]:{color:b.colorPrimary}}}}}}},[`&${I}-horizontal:not(${I}-label-vertical)`]:{[`${I}-item`]:{paddingInlineStart:b.padding,whiteSpace:"nowrap","&:first-child":{paddingInlineStart:0},[`&:last-child ${I}-item-title`]:{paddingInlineEnd:0},"&-tail":{display:"none"},"&-description":{maxWidth:b.descriptionMaxWidth,whiteSpace:"normal"}}}}},Ht=b=>{const{componentCls:I}=b;return{[I]:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},(0,Zt.Wf)(b)),{display:"flex",width:"100%",fontSize:0,textAlign:"initial"}),Ct(b)),It(b)),_t(b)),kt(b)),Ke(b)),Ee(b)),Ve(b)),Ae(b)),Je(b)),Oe(b)),qt(b))}};var Kt=(0,ut.Z)("Steps",b=>{const{wireframe:I,colorTextDisabled:W,controlHeightLG:X,colorTextLightSolid:oe,colorText:ue,colorPrimary:Ne,colorTextLabel:je,colorTextDescription:qe,colorTextQuaternary:Ot,colorFillContent:jt,controlItemBgActive:en,colorError:xt,colorBgContainer:H,colorBorderSecondary:Z,colorSplit:$}=b,Ce=(0,rt.TS)(b,{processIconColor:oe,processTitleColor:ue,processDescriptionColor:ue,processIconBgColor:Ne,processIconBorderColor:Ne,processDotColor:Ne,processTailColor:$,waitIconColor:I?W:je,waitTitleColor:qe,waitDescriptionColor:qe,waitTailColor:$,waitIconBgColor:I?H:jt,waitIconBorderColor:I?W:"transparent",waitDotColor:W,finishIconColor:Ne,finishTitleColor:ue,finishDescriptionColor:qe,finishTailColor:Ne,finishIconBgColor:I?H:en,finishIconBorderColor:I?Ne:en,finishDotColor:Ne,errorIconColor:oe,errorTitleColor:xt,errorDescriptionColor:xt,errorTailColor:$,errorIconBgColor:xt,errorIconBorderColor:xt,errorDotColor:xt,stepsNavActiveColor:Ne,stepsProgressSize:X,inlineDotSize:6,inlineTitleColor:Ot,inlineTailColor:Z});return[Ht(Ce)]},b=>{const{colorTextDisabled:I,fontSize:W,controlHeightSM:X,controlHeight:oe,controlHeightLG:ue,fontSizeHeading3:Ne}=b;return{titleLineHeight:oe,customIconSize:oe,customIconTop:0,customIconFontSize:X,iconSize:oe,iconTop:-.5,iconFontSize:W,iconSizeSM:Ne,dotSize:oe/4,dotCurrentSize:ue/4,navArrowColor:I,navContentMaxWidth:"auto",descriptionMaxWidth:140}}),ht=U(37419);function Cn(b){return b.filter(I=>I)}function T(b,I){if(b)return b;const W=(0,ht.Z)(I).map(X=>{if(K.isValidElement(X)){const{props:oe}=X;return Object.assign({},oe)}return null});return Cn(W)}var m=function(b,I){var W={};for(var X in b)Object.prototype.hasOwnProperty.call(b,X)&&I.indexOf(X)<0&&(W[X]=b[X]);if(b!=null&&typeof Object.getOwnPropertySymbols=="function")for(var oe=0,X=Object.getOwnPropertySymbols(b);oe<X.length;oe++)I.indexOf(X[oe])<0&&Object.prototype.propertyIsEnumerable.call(b,X[oe])&&(W[X[oe]]=b[X[oe]]);return W};const y=b=>{const{percent:I,size:W,className:X,rootClassName:oe,direction:ue,items:Ne,responsive:je=!0,current:qe=0,children:Ot,style:jt}=b,en=m(b,["percent","size","className","rootClassName","direction","items","responsive","current","children","style"]),{xs:xt}=(0,Bt.Z)(je),{getPrefixCls:H,direction:Z,steps:$}=K.useContext(xe.E_),Ce=K.useMemo(()=>je&&xt?"vertical":ue,[xt,ue]),Fe=(0,Ie.Z)(W),Me=H("steps",b.prefixCls),[Xe,Ge]=Kt(Me),Ze=b.type==="inline",ft=H("",b.iconPrefix),ot=T(Ne,Ot),mt=Ze?void 0:I,bt=Object.assign(Object.assign({},$==null?void 0:$.style),jt),Gt=Se()($==null?void 0:$.className,{[`${Me}-rtl`]:Z==="rtl",[`${Me}-with-progress`]:mt!==void 0},X,oe,Ge),Xt={finish:K.createElement(D.Z,{className:`${Me}-finish-icon`}),error:K.createElement(ke.Z,{className:`${Me}-error-icon`})},At=Pt=>{let{node:wt,status:ct}=Pt;if(ct==="process"&&mt!==void 0){const j=Fe==="small"?32:40;return K.createElement("div",{className:`${Me}-progress-icon`},K.createElement(cn.Z,{type:"circle",percent:mt,size:j,strokeWidth:4,format:()=>null}),wt)}return wt},dt=(Pt,wt)=>Pt.description?K.createElement(J.Z,{title:Pt.description},wt):wt;return Xe(K.createElement(De,Object.assign({icons:Xt},en,{style:bt,current:qe,size:Fe,items:ot,itemRender:Ze?dt:void 0,stepIcon:At,direction:Ce,prefixCls:Me,iconPrefix:ft,className:Gt})))};y.Step=De.Step;var k=y},80258:function(Qt,$e){"use strict";$e.byteLength=ne,$e.toByteArray=K,$e.fromByteArray=ge;for(var U=[],D=[],ke=typeof Uint8Array!="undefined"?Uint8Array:Array,le="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",Se=0,be=le.length;Se<be;++Se)U[Se]=le[Se],D[le.charCodeAt(Se)]=Se;D[45]=62,D[95]=63;function ee(ae){var we=ae.length;if(we%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var me=ae.indexOf("=");me===-1&&(me=we);var Qe=me===we?0:4-me%4;return[me,Qe]}function ne(ae){var we=ee(ae),me=we[0],Qe=we[1];return(me+Qe)*3/4-Qe}function M(ae,we,me){return(we+me)*3/4-me}function K(ae){var we,me=ee(ae),Qe=me[0],Et=me[1],De=new ke(M(ae,Qe,Et)),xe=0,Ie=Et>0?Qe-4:Qe,Bt;for(Bt=0;Bt<Ie;Bt+=4)we=D[ae.charCodeAt(Bt)]<<18|D[ae.charCodeAt(Bt+1)]<<12|D[ae.charCodeAt(Bt+2)]<<6|D[ae.charCodeAt(Bt+3)],De[xe++]=we>>16&255,De[xe++]=we>>8&255,De[xe++]=we&255;return Et===2&&(we=D[ae.charCodeAt(Bt)]<<2|D[ae.charCodeAt(Bt+1)]>>4,De[xe++]=we&255),Et===1&&(we=D[ae.charCodeAt(Bt)]<<10|D[ae.charCodeAt(Bt+1)]<<4|D[ae.charCodeAt(Bt+2)]>>2,De[xe++]=we>>8&255,De[xe++]=we&255),De}function Y(ae){return U[ae>>18&63]+U[ae>>12&63]+U[ae>>6&63]+U[ae&63]}function pe(ae,we,me){for(var Qe,Et=[],De=we;De<me;De+=3)Qe=(ae[De]<<16&16711680)+(ae[De+1]<<8&65280)+(ae[De+2]&255),Et.push(Y(Qe));return Et.join("")}function ge(ae){for(var we,me=ae.length,Qe=me%3,Et=[],De=16383,xe=0,Ie=me-Qe;xe<Ie;xe+=De)Et.push(pe(ae,xe,xe+De>Ie?Ie:xe+De));return Qe===1?(we=ae[me-1],Et.push(U[we>>2]+U[we<<4&63]+"==")):Qe===2&&(we=(ae[me-2]<<8)+ae[me-1],Et.push(U[we>>10]+U[we>>4&63]+U[we<<2&63]+"=")),Et.join("")}},48764:function(Qt,$e,U){"use strict";var D;var ke=U(80258),le=U(80645),Se=typeof Symbol=="function"&&typeof Symbol.for=="function"?Symbol.for("nodejs.util.inspect.custom"):null;$e.lW=M,D=xe,$e.h2=50;var be=2147483647;D=be,M.TYPED_ARRAY_SUPPORT=ee(),!M.TYPED_ARRAY_SUPPORT&&typeof console!="undefined"&&typeof console.error=="function"&&console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.");function ee(){try{var T=new Uint8Array(1),m={foo:function(){return 42}};return Object.setPrototypeOf(m,Uint8Array.prototype),Object.setPrototypeOf(T,m),T.foo()===42}catch(y){return!1}}Object.defineProperty(M.prototype,"parent",{enumerable:!0,get:function(){if(M.isBuffer(this))return this.buffer}}),Object.defineProperty(M.prototype,"offset",{enumerable:!0,get:function(){if(M.isBuffer(this))return this.byteOffset}});function ne(T){if(T>be)throw new RangeError('The value "'+T+'" is invalid for option "size"');var m=new Uint8Array(T);return Object.setPrototypeOf(m,M.prototype),m}function M(T,m,y){if(typeof T=="number"){if(typeof m=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return ge(T)}return K(T,m,y)}M.poolSize=8192;function K(T,m,y){if(typeof T=="string")return ae(T,m);if(ArrayBuffer.isView(T))return me(T);if(T==null)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof T);if(Kt(T,ArrayBuffer)||T&&Kt(T.buffer,ArrayBuffer)||typeof SharedArrayBuffer!="undefined"&&(Kt(T,SharedArrayBuffer)||T&&Kt(T.buffer,SharedArrayBuffer)))return Qe(T,m,y);if(typeof T=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');var k=T.valueOf&&T.valueOf();if(k!=null&&k!==T)return M.from(k,m,y);var b=Et(T);if(b)return b;if(typeof Symbol!="undefined"&&Symbol.toPrimitive!=null&&typeof T[Symbol.toPrimitive]=="function")return M.from(T[Symbol.toPrimitive]("string"),m,y);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof T)}M.from=function(T,m,y){return K(T,m,y)},Object.setPrototypeOf(M.prototype,Uint8Array.prototype),Object.setPrototypeOf(M,Uint8Array);function Y(T){if(typeof T!="number")throw new TypeError('"size" argument must be of type number');if(T<0)throw new RangeError('The value "'+T+'" is invalid for option "size"')}function pe(T,m,y){return Y(T),T<=0?ne(T):m!==void 0?typeof y=="string"?ne(T).fill(m,y):ne(T).fill(m):ne(T)}M.alloc=function(T,m,y){return pe(T,m,y)};function ge(T){return Y(T),ne(T<0?0:De(T)|0)}M.allocUnsafe=function(T){return ge(T)},M.allocUnsafeSlow=function(T){return ge(T)};function ae(T,m){if((typeof m!="string"||m==="")&&(m="utf8"),!M.isEncoding(m))throw new TypeError("Unknown encoding: "+m);var y=Ie(T,m)|0,k=ne(y),b=k.write(T,m);return b!==y&&(k=k.slice(0,b)),k}function we(T){for(var m=T.length<0?0:De(T.length)|0,y=ne(m),k=0;k<m;k+=1)y[k]=T[k]&255;return y}function me(T){if(Kt(T,Uint8Array)){var m=new Uint8Array(T);return Qe(m.buffer,m.byteOffset,m.byteLength)}return we(T)}function Qe(T,m,y){if(m<0||T.byteLength<m)throw new RangeError('"offset" is outside of buffer bounds');if(T.byteLength<m+(y||0))throw new RangeError('"length" is outside of buffer bounds');var k;return m===void 0&&y===void 0?k=new Uint8Array(T):y===void 0?k=new Uint8Array(T,m):k=new Uint8Array(T,m,y),Object.setPrototypeOf(k,M.prototype),k}function Et(T){if(M.isBuffer(T)){var m=De(T.length)|0,y=ne(m);return y.length===0||T.copy(y,0,0,m),y}if(T.length!==void 0)return typeof T.length!="number"||ht(T.length)?ne(0):we(T);if(T.type==="Buffer"&&Array.isArray(T.data))return we(T.data)}function De(T){if(T>=be)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+be.toString(16)+" bytes");return T|0}function xe(T){return+T!=T&&(T=0),M.alloc(+T)}M.isBuffer=function(m){return m!=null&&m._isBuffer===!0&&m!==M.prototype},M.compare=function(m,y){if(Kt(m,Uint8Array)&&(m=M.from(m,m.offset,m.byteLength)),Kt(y,Uint8Array)&&(y=M.from(y,y.offset,y.byteLength)),!M.isBuffer(m)||!M.isBuffer(y))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(m===y)return 0;for(var k=m.length,b=y.length,I=0,W=Math.min(k,b);I<W;++I)if(m[I]!==y[I]){k=m[I],b=y[I];break}return k<b?-1:b<k?1:0},M.isEncoding=function(m){switch(String(m).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},M.concat=function(m,y){if(!Array.isArray(m))throw new TypeError('"list" argument must be an Array of Buffers');if(m.length===0)return M.alloc(0);var k;if(y===void 0)for(y=0,k=0;k<m.length;++k)y+=m[k].length;var b=M.allocUnsafe(y),I=0;for(k=0;k<m.length;++k){var W=m[k];if(Kt(W,Uint8Array))I+W.length>b.length?M.from(W).copy(b,I):Uint8Array.prototype.set.call(b,W,I);else if(M.isBuffer(W))W.copy(b,I);else throw new TypeError('"list" argument must be an Array of Buffers');I+=W.length}return b};function Ie(T,m){if(M.isBuffer(T))return T.length;if(ArrayBuffer.isView(T)||Kt(T,ArrayBuffer))return T.byteLength;if(typeof T!="string")throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof T);var y=T.length,k=arguments.length>2&&arguments[2]===!0;if(!k&&y===0)return 0;for(var b=!1;;)switch(m){case"ascii":case"latin1":case"binary":return y;case"utf8":case"utf-8":return He(T).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return y*2;case"hex":return y>>>1;case"base64":return It(T).length;default:if(b)return k?-1:He(T).length;m=(""+m).toLowerCase(),b=!0}}M.byteLength=Ie;function Bt(T,m,y){var k=!1;if((m===void 0||m<0)&&(m=0),m>this.length||((y===void 0||y>this.length)&&(y=this.length),y<=0)||(y>>>=0,m>>>=0,y<=m))return"";for(T||(T="utf8");;)switch(T){case"hex":return Oe(this,m,y);case"utf8":case"utf-8":return Ut(this,m,y);case"ascii":return Ae(this,m,y);case"latin1":case"binary":return fe(this,m,y);case"base64":return qt(this,m,y);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return _e(this,m,y);default:if(k)throw new TypeError("Unknown encoding: "+T);T=(T+"").toLowerCase(),k=!0}}M.prototype._isBuffer=!0;function cn(T,m,y){var k=T[m];T[m]=T[y],T[y]=k}M.prototype.swap16=function(){var m=this.length;if(m%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var y=0;y<m;y+=2)cn(this,y,y+1);return this},M.prototype.swap32=function(){var m=this.length;if(m%4!==0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var y=0;y<m;y+=4)cn(this,y,y+3),cn(this,y+1,y+2);return this},M.prototype.swap64=function(){var m=this.length;if(m%8!==0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var y=0;y<m;y+=8)cn(this,y,y+7),cn(this,y+1,y+6),cn(this,y+2,y+5),cn(this,y+3,y+4);return this},M.prototype.toString=function(){var m=this.length;return m===0?"":arguments.length===0?Ut(this,0,m):Bt.apply(this,arguments)},M.prototype.toLocaleString=M.prototype.toString,M.prototype.equals=function(m){if(!M.isBuffer(m))throw new TypeError("Argument must be a Buffer");return this===m?!0:M.compare(this,m)===0},M.prototype.inspect=function(){var m="",y=$e.h2;return m=this.toString("hex",0,y).replace(/(.{2})/g,"$1 ").trim(),this.length>y&&(m+=" ... "),"<Buffer "+m+">"},Se&&(M.prototype[Se]=M.prototype.inspect),M.prototype.compare=function(m,y,k,b,I){if(Kt(m,Uint8Array)&&(m=M.from(m,m.offset,m.byteLength)),!M.isBuffer(m))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof m);if(y===void 0&&(y=0),k===void 0&&(k=m?m.length:0),b===void 0&&(b=0),I===void 0&&(I=this.length),y<0||k>m.length||b<0||I>this.length)throw new RangeError("out of range index");if(b>=I&&y>=k)return 0;if(b>=I)return-1;if(y>=k)return 1;if(y>>>=0,k>>>=0,b>>>=0,I>>>=0,this===m)return 0;for(var W=I-b,X=k-y,oe=Math.min(W,X),ue=this.slice(b,I),Ne=m.slice(y,k),je=0;je<oe;++je)if(ue[je]!==Ne[je]){W=ue[je],X=Ne[je];break}return W<X?-1:X<W?1:0};function J(T,m,y,k,b){if(T.length===0)return-1;if(typeof y=="string"?(k=y,y=0):y>2147483647?y=2147483647:y<-2147483648&&(y=-2147483648),y=+y,ht(y)&&(y=b?0:T.length-1),y<0&&(y=T.length+y),y>=T.length){if(b)return-1;y=T.length-1}else if(y<0)if(b)y=0;else return-1;if(typeof m=="string"&&(m=M.from(m,k)),M.isBuffer(m))return m.length===0?-1:Zt(T,m,y,k,b);if(typeof m=="number")return m=m&255,typeof Uint8Array.prototype.indexOf=="function"?b?Uint8Array.prototype.indexOf.call(T,m,y):Uint8Array.prototype.lastIndexOf.call(T,m,y):Zt(T,[m],y,k,b);throw new TypeError("val must be string, number or Buffer")}function Zt(T,m,y,k,b){var I=1,W=T.length,X=m.length;if(k!==void 0&&(k=String(k).toLowerCase(),k==="ucs2"||k==="ucs-2"||k==="utf16le"||k==="utf-16le")){if(T.length<2||m.length<2)return-1;I=2,W/=2,X/=2,y/=2}function oe(Ot,jt){return I===1?Ot[jt]:Ot.readUInt16BE(jt*I)}var ue;if(b){var Ne=-1;for(ue=y;ue<W;ue++)if(oe(T,ue)===oe(m,Ne===-1?0:ue-Ne)){if(Ne===-1&&(Ne=ue),ue-Ne+1===X)return Ne*I}else Ne!==-1&&(ue-=ue-Ne),Ne=-1}else for(y+X>W&&(y=W-X),ue=y;ue>=0;ue--){for(var je=!0,qe=0;qe<X;qe++)if(oe(T,ue+qe)!==oe(m,qe)){je=!1;break}if(je)return ue}return-1}M.prototype.includes=function(m,y,k){return this.indexOf(m,y,k)!==-1},M.prototype.indexOf=function(m,y,k){return J(this,m,y,k,!0)},M.prototype.lastIndexOf=function(m,y,k){return J(this,m,y,k,!1)};function ut(T,m,y,k){y=Number(y)||0;var b=T.length-y;k?(k=Number(k),k>b&&(k=b)):k=b;var I=m.length;k>I/2&&(k=I/2);for(var W=0;W<k;++W){var X=parseInt(m.substr(W*2,2),16);if(ht(X))return W;T[y+W]=X}return W}function rt(T,m,y,k){return Ht(He(m,T.length-y),T,y,k)}function Vt(T,m,y,k){return Ht(Ft(m),T,y,k)}function _t(T,m,y,k){return Ht(It(m),T,y,k)}function zt(T,m,y,k){return Ht(Ct(m,T.length-y),T,y,k)}M.prototype.write=function(m,y,k,b){if(y===void 0)b="utf8",k=this.length,y=0;else if(k===void 0&&typeof y=="string")b=y,k=this.length,y=0;else if(isFinite(y))y=y>>>0,isFinite(k)?(k=k>>>0,b===void 0&&(b="utf8")):(b=k,k=void 0);else throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");var I=this.length-y;if((k===void 0||k>I)&&(k=I),m.length>0&&(k<0||y<0)||y>this.length)throw new RangeError("Attempt to write outside buffer bounds");b||(b="utf8");for(var W=!1;;)switch(b){case"hex":return ut(this,m,y,k);case"utf8":case"utf-8":return rt(this,m,y,k);case"ascii":case"latin1":case"binary":return Vt(this,m,y,k);case"base64":return _t(this,m,y,k);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return zt(this,m,y,k);default:if(W)throw new TypeError("Unknown encoding: "+b);b=(""+b).toLowerCase(),W=!0}},M.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function qt(T,m,y){return m===0&&y===T.length?ke.fromByteArray(T):ke.fromByteArray(T.slice(m,y))}function Ut(T,m,y){y=Math.min(T.length,y);for(var k=[],b=m;b<y;){var I=T[b],W=null,X=I>239?4:I>223?3:I>191?2:1;if(b+X<=y){var oe,ue,Ne,je;switch(X){case 1:I<128&&(W=I);break;case 2:oe=T[b+1],(oe&192)===128&&(je=(I&31)<<6|oe&63,je>127&&(W=je));break;case 3:oe=T[b+1],ue=T[b+2],(oe&192)===128&&(ue&192)===128&&(je=(I&15)<<12|(oe&63)<<6|ue&63,je>2047&&(je<55296||je>57343)&&(W=je));break;case 4:oe=T[b+1],ue=T[b+2],Ne=T[b+3],(oe&192)===128&&(ue&192)===128&&(Ne&192)===128&&(je=(I&15)<<18|(oe&63)<<12|(ue&63)<<6|Ne&63,je>65535&&je<1114112&&(W=je))}}W===null?(W=65533,X=1):W>65535&&(W-=65536,k.push(W>>>10&1023|55296),W=56320|W&1023),k.push(W),b+=X}return re(k)}var Ee=4096;function re(T){var m=T.length;if(m<=Ee)return String.fromCharCode.apply(String,T);for(var y="",k=0;k<m;)y+=String.fromCharCode.apply(String,T.slice(k,k+=Ee));return y}function Ae(T,m,y){var k="";y=Math.min(T.length,y);for(var b=m;b<y;++b)k+=String.fromCharCode(T[b]&127);return k}function fe(T,m,y){var k="";y=Math.min(T.length,y);for(var b=m;b<y;++b)k+=String.fromCharCode(T[b]);return k}function Oe(T,m,y){var k=T.length;(!m||m<0)&&(m=0),(!y||y<0||y>k)&&(y=k);for(var b="",I=m;I<y;++I)b+=Cn[T[I]];return b}function _e(T,m,y){for(var k=T.slice(m,y),b="",I=0;I<k.length-1;I+=2)b+=String.fromCharCode(k[I]+k[I+1]*256);return b}M.prototype.slice=function(m,y){var k=this.length;m=~~m,y=y===void 0?k:~~y,m<0?(m+=k,m<0&&(m=0)):m>k&&(m=k),y<0?(y+=k,y<0&&(y=0)):y>k&&(y=k),y<m&&(y=m);var b=this.subarray(m,y);return Object.setPrototypeOf(b,M.prototype),b};function Ve(T,m,y){if(T%1!==0||T<0)throw new RangeError("offset is not uint");if(T+m>y)throw new RangeError("Trying to access beyond buffer length")}M.prototype.readUintLE=M.prototype.readUIntLE=function(m,y,k){m=m>>>0,y=y>>>0,k||Ve(m,y,this.length);for(var b=this[m],I=1,W=0;++W<y&&(I*=256);)b+=this[m+W]*I;return b},M.prototype.readUintBE=M.prototype.readUIntBE=function(m,y,k){m=m>>>0,y=y>>>0,k||Ve(m,y,this.length);for(var b=this[m+--y],I=1;y>0&&(I*=256);)b+=this[m+--y]*I;return b},M.prototype.readUint8=M.prototype.readUInt8=function(m,y){return m=m>>>0,y||Ve(m,1,this.length),this[m]},M.prototype.readUint16LE=M.prototype.readUInt16LE=function(m,y){return m=m>>>0,y||Ve(m,2,this.length),this[m]|this[m+1]<<8},M.prototype.readUint16BE=M.prototype.readUInt16BE=function(m,y){return m=m>>>0,y||Ve(m,2,this.length),this[m]<<8|this[m+1]},M.prototype.readUint32LE=M.prototype.readUInt32LE=function(m,y){return m=m>>>0,y||Ve(m,4,this.length),(this[m]|this[m+1]<<8|this[m+2]<<16)+this[m+3]*16777216},M.prototype.readUint32BE=M.prototype.readUInt32BE=function(m,y){return m=m>>>0,y||Ve(m,4,this.length),this[m]*16777216+(this[m+1]<<16|this[m+2]<<8|this[m+3])},M.prototype.readIntLE=function(m,y,k){m=m>>>0,y=y>>>0,k||Ve(m,y,this.length);for(var b=this[m],I=1,W=0;++W<y&&(I*=256);)b+=this[m+W]*I;return I*=128,b>=I&&(b-=Math.pow(2,8*y)),b},M.prototype.readIntBE=function(m,y,k){m=m>>>0,y=y>>>0,k||Ve(m,y,this.length);for(var b=y,I=1,W=this[m+--b];b>0&&(I*=256);)W+=this[m+--b]*I;return I*=128,W>=I&&(W-=Math.pow(2,8*y)),W},M.prototype.readInt8=function(m,y){return m=m>>>0,y||Ve(m,1,this.length),this[m]&128?(255-this[m]+1)*-1:this[m]},M.prototype.readInt16LE=function(m,y){m=m>>>0,y||Ve(m,2,this.length);var k=this[m]|this[m+1]<<8;return k&32768?k|4294901760:k},M.prototype.readInt16BE=function(m,y){m=m>>>0,y||Ve(m,2,this.length);var k=this[m+1]|this[m]<<8;return k&32768?k|4294901760:k},M.prototype.readInt32LE=function(m,y){return m=m>>>0,y||Ve(m,4,this.length),this[m]|this[m+1]<<8|this[m+2]<<16|this[m+3]<<24},M.prototype.readInt32BE=function(m,y){return m=m>>>0,y||Ve(m,4,this.length),this[m]<<24|this[m+1]<<16|this[m+2]<<8|this[m+3]},M.prototype.readFloatLE=function(m,y){return m=m>>>0,y||Ve(m,4,this.length),le.read(this,m,!0,23,4)},M.prototype.readFloatBE=function(m,y){return m=m>>>0,y||Ve(m,4,this.length),le.read(this,m,!1,23,4)},M.prototype.readDoubleLE=function(m,y){return m=m>>>0,y||Ve(m,8,this.length),le.read(this,m,!0,52,8)},M.prototype.readDoubleBE=function(m,y){return m=m>>>0,y||Ve(m,8,this.length),le.read(this,m,!1,52,8)};function R(T,m,y,k,b,I){if(!M.isBuffer(T))throw new TypeError('"buffer" argument must be a Buffer instance');if(m>b||m<I)throw new RangeError('"value" argument is out of bounds');if(y+k>T.length)throw new RangeError("Index out of range")}M.prototype.writeUintLE=M.prototype.writeUIntLE=function(m,y,k,b){if(m=+m,y=y>>>0,k=k>>>0,!b){var I=Math.pow(2,8*k)-1;R(this,m,y,k,I,0)}var W=1,X=0;for(this[y]=m&255;++X<k&&(W*=256);)this[y+X]=m/W&255;return y+k},M.prototype.writeUintBE=M.prototype.writeUIntBE=function(m,y,k,b){if(m=+m,y=y>>>0,k=k>>>0,!b){var I=Math.pow(2,8*k)-1;R(this,m,y,k,I,0)}var W=k-1,X=1;for(this[y+W]=m&255;--W>=0&&(X*=256);)this[y+W]=m/X&255;return y+k},M.prototype.writeUint8=M.prototype.writeUInt8=function(m,y,k){return m=+m,y=y>>>0,k||R(this,m,y,1,255,0),this[y]=m&255,y+1},M.prototype.writeUint16LE=M.prototype.writeUInt16LE=function(m,y,k){return m=+m,y=y>>>0,k||R(this,m,y,2,65535,0),this[y]=m&255,this[y+1]=m>>>8,y+2},M.prototype.writeUint16BE=M.prototype.writeUInt16BE=function(m,y,k){return m=+m,y=y>>>0,k||R(this,m,y,2,65535,0),this[y]=m>>>8,this[y+1]=m&255,y+2},M.prototype.writeUint32LE=M.prototype.writeUInt32LE=function(m,y,k){return m=+m,y=y>>>0,k||R(this,m,y,4,4294967295,0),this[y+3]=m>>>24,this[y+2]=m>>>16,this[y+1]=m>>>8,this[y]=m&255,y+4},M.prototype.writeUint32BE=M.prototype.writeUInt32BE=function(m,y,k){return m=+m,y=y>>>0,k||R(this,m,y,4,4294967295,0),this[y]=m>>>24,this[y+1]=m>>>16,this[y+2]=m>>>8,this[y+3]=m&255,y+4},M.prototype.writeIntLE=function(m,y,k,b){if(m=+m,y=y>>>0,!b){var I=Math.pow(2,8*k-1);R(this,m,y,k,I-1,-I)}var W=0,X=1,oe=0;for(this[y]=m&255;++W<k&&(X*=256);)m<0&&oe===0&&this[y+W-1]!==0&&(oe=1),this[y+W]=(m/X>>0)-oe&255;return y+k},M.prototype.writeIntBE=function(m,y,k,b){if(m=+m,y=y>>>0,!b){var I=Math.pow(2,8*k-1);R(this,m,y,k,I-1,-I)}var W=k-1,X=1,oe=0;for(this[y+W]=m&255;--W>=0&&(X*=256);)m<0&&oe===0&&this[y+W+1]!==0&&(oe=1),this[y+W]=(m/X>>0)-oe&255;return y+k},M.prototype.writeInt8=function(m,y,k){return m=+m,y=y>>>0,k||R(this,m,y,1,127,-128),m<0&&(m=255+m+1),this[y]=m&255,y+1},M.prototype.writeInt16LE=function(m,y,k){return m=+m,y=y>>>0,k||R(this,m,y,2,32767,-32768),this[y]=m&255,this[y+1]=m>>>8,y+2},M.prototype.writeInt16BE=function(m,y,k){return m=+m,y=y>>>0,k||R(this,m,y,2,32767,-32768),this[y]=m>>>8,this[y+1]=m&255,y+2},M.prototype.writeInt32LE=function(m,y,k){return m=+m,y=y>>>0,k||R(this,m,y,4,2147483647,-2147483648),this[y]=m&255,this[y+1]=m>>>8,this[y+2]=m>>>16,this[y+3]=m>>>24,y+4},M.prototype.writeInt32BE=function(m,y,k){return m=+m,y=y>>>0,k||R(this,m,y,4,2147483647,-2147483648),m<0&&(m=4294967295+m+1),this[y]=m>>>24,this[y+1]=m>>>16,this[y+2]=m>>>8,this[y+3]=m&255,y+4};function Je(T,m,y,k,b,I){if(y+k>T.length)throw new RangeError("Index out of range");if(y<0)throw new RangeError("Index out of range")}function Yt(T,m,y,k,b){return m=+m,y=y>>>0,b||Je(T,m,y,4,34028234663852886e22,-34028234663852886e22),le.write(T,m,y,k,23,4),y+4}M.prototype.writeFloatLE=function(m,y,k){return Yt(this,m,y,!0,k)},M.prototype.writeFloatBE=function(m,y,k){return Yt(this,m,y,!1,k)};function kt(T,m,y,k,b){return m=+m,y=y>>>0,b||Je(T,m,y,8,17976931348623157e292,-17976931348623157e292),le.write(T,m,y,k,52,8),y+8}M.prototype.writeDoubleLE=function(m,y,k){return kt(this,m,y,!0,k)},M.prototype.writeDoubleBE=function(m,y,k){return kt(this,m,y,!1,k)},M.prototype.copy=function(m,y,k,b){if(!M.isBuffer(m))throw new TypeError("argument should be a Buffer");if(k||(k=0),!b&&b!==0&&(b=this.length),y>=m.length&&(y=m.length),y||(y=0),b>0&&b<k&&(b=k),b===k||m.length===0||this.length===0)return 0;if(y<0)throw new RangeError("targetStart out of bounds");if(k<0||k>=this.length)throw new RangeError("Index out of range");if(b<0)throw new RangeError("sourceEnd out of bounds");b>this.length&&(b=this.length),m.length-y<b-k&&(b=m.length-y+k);var I=b-k;return this===m&&typeof Uint8Array.prototype.copyWithin=="function"?this.copyWithin(y,k,b):Uint8Array.prototype.set.call(m,this.subarray(k,b),y),I},M.prototype.fill=function(m,y,k,b){if(typeof m=="string"){if(typeof y=="string"?(b=y,y=0,k=this.length):typeof k=="string"&&(b=k,k=this.length),b!==void 0&&typeof b!="string")throw new TypeError("encoding must be a string");if(typeof b=="string"&&!M.isEncoding(b))throw new TypeError("Unknown encoding: "+b);if(m.length===1){var I=m.charCodeAt(0);(b==="utf8"&&I<128||b==="latin1")&&(m=I)}}else typeof m=="number"?m=m&255:typeof m=="boolean"&&(m=Number(m));if(y<0||this.length<y||this.length<k)throw new RangeError("Out of range index");if(k<=y)return this;y=y>>>0,k=k===void 0?this.length:k>>>0,m||(m=0);var W;if(typeof m=="number")for(W=y;W<k;++W)this[W]=m;else{var X=M.isBuffer(m)?m:M.from(m,b),oe=X.length;if(oe===0)throw new TypeError('The value "'+m+'" is invalid for argument "value"');for(W=0;W<k-y;++W)this[W+y]=X[W%oe]}return this};var Re=/[^+/0-9A-Za-z-_]/g;function Ke(T){if(T=T.split("=")[0],T=T.trim().replace(Re,""),T.length<2)return"";for(;T.length%4!==0;)T=T+"=";return T}function He(T,m){m=m||1/0;for(var y,k=T.length,b=null,I=[],W=0;W<k;++W){if(y=T.charCodeAt(W),y>55295&&y<57344){if(!b){if(y>56319){(m-=3)>-1&&I.push(239,191,189);continue}else if(W+1===k){(m-=3)>-1&&I.push(239,191,189);continue}b=y;continue}if(y<56320){(m-=3)>-1&&I.push(239,191,189),b=y;continue}y=(b-55296<<10|y-56320)+65536}else b&&(m-=3)>-1&&I.push(239,191,189);if(b=null,y<128){if((m-=1)<0)break;I.push(y)}else if(y<2048){if((m-=2)<0)break;I.push(y>>6|192,y&63|128)}else if(y<65536){if((m-=3)<0)break;I.push(y>>12|224,y>>6&63|128,y&63|128)}else if(y<1114112){if((m-=4)<0)break;I.push(y>>18|240,y>>12&63|128,y>>6&63|128,y&63|128)}else throw new Error("Invalid code point")}return I}function Ft(T){for(var m=[],y=0;y<T.length;++y)m.push(T.charCodeAt(y)&255);return m}function Ct(T,m){for(var y,k,b,I=[],W=0;W<T.length&&!((m-=2)<0);++W)y=T.charCodeAt(W),k=y>>8,b=y%256,I.push(b),I.push(k);return I}function It(T){return ke.toByteArray(Ke(T))}function Ht(T,m,y,k){for(var b=0;b<k&&!(b+y>=m.length||b>=T.length);++b)m[b+y]=T[b];return b}function Kt(T,m){return T instanceof m||T!=null&&T.constructor!=null&&T.constructor.name!=null&&T.constructor.name===m.name}function ht(T){return T!==T}var Cn=function(){for(var T="0123456789abcdef",m=new Array(256),y=0;y<16;++y)for(var k=y*16,b=0;b<16;++b)m[k+b]=T[y]+T[b];return m}()},80645:function(Qt,$e){$e.read=function(U,D,ke,le,Se){var be,ee,ne=Se*8-le-1,M=(1<<ne)-1,K=M>>1,Y=-7,pe=ke?Se-1:0,ge=ke?-1:1,ae=U[D+pe];for(pe+=ge,be=ae&(1<<-Y)-1,ae>>=-Y,Y+=ne;Y>0;be=be*256+U[D+pe],pe+=ge,Y-=8);for(ee=be&(1<<-Y)-1,be>>=-Y,Y+=le;Y>0;ee=ee*256+U[D+pe],pe+=ge,Y-=8);if(be===0)be=1-K;else{if(be===M)return ee?NaN:(ae?-1:1)*(1/0);ee=ee+Math.pow(2,le),be=be-K}return(ae?-1:1)*ee*Math.pow(2,be-le)},$e.write=function(U,D,ke,le,Se,be){var ee,ne,M,K=be*8-Se-1,Y=(1<<K)-1,pe=Y>>1,ge=Se===23?Math.pow(2,-24)-Math.pow(2,-77):0,ae=le?0:be-1,we=le?1:-1,me=D<0||D===0&&1/D<0?1:0;for(D=Math.abs(D),isNaN(D)||D===1/0?(ne=isNaN(D)?1:0,ee=Y):(ee=Math.floor(Math.log(D)/Math.LN2),D*(M=Math.pow(2,-ee))<1&&(ee--,M*=2),ee+pe>=1?D+=ge/M:D+=ge*Math.pow(2,1-pe),D*M>=2&&(ee++,M/=2),ee+pe>=Y?(ne=0,ee=Y):ee+pe>=1?(ne=(D*M-1)*Math.pow(2,Se),ee=ee+pe):(ne=D*Math.pow(2,pe-1)*Math.pow(2,Se),ee=0));Se>=8;U[ke+ae]=ne&255,ae+=we,ne/=256,Se-=8);for(ee=ee<<Se|ne,K+=Se;K>0;U[ke+ae]=ee&255,ae+=we,ee/=256,K-=8);U[ke+ae-we]|=me*128}},3655:function(Qt,$e,U){var D=U(32792);function ke(le){this.mode=D.MODE_8BIT_BYTE,this.data=le}ke.prototype={getLength:function(le){return this.data.length},write:function(le){for(var Se=0;Se<this.data.length;Se++)le.put(this.data.charCodeAt(Se),8)}},Qt.exports=ke},27321:function(Qt){function $e(){this.buffer=new Array,this.length=0}$e.prototype={get:function(U){var D=Math.floor(U/8);return(this.buffer[D]>>>7-U%8&1)==1},put:function(U,D){for(var ke=0;ke<D;ke++)this.putBit((U>>>D-ke-1&1)==1)},getLengthInBits:function(){return this.length},putBit:function(U){var D=Math.floor(this.length/8);this.buffer.length<=D&&this.buffer.push(0),U&&(this.buffer[D]|=128>>>this.length%8),this.length++}},Qt.exports=$e},49381:function(Qt){Qt.exports={L:1,M:0,Q:3,H:2}},32832:function(Qt,$e,U){var D=U(11518);function ke(le,Se){if(le.length==null)throw new Error(le.length+"/"+Se);for(var be=0;be<le.length&&le[be]==0;)be++;this.num=new Array(le.length-be+Se);for(var ee=0;ee<le.length-be;ee++)this.num[ee]=le[ee+be]}ke.prototype={get:function(le){return this.num[le]},getLength:function(){return this.num.length},multiply:function(le){for(var Se=new Array(this.getLength()+le.getLength()-1),be=0;be<this.getLength();be++)for(var ee=0;ee<le.getLength();ee++)Se[be+ee]^=D.gexp(D.glog(this.get(be))+D.glog(le.get(ee)));return new ke(Se,0)},mod:function(le){if(this.getLength()-le.getLength()<0)return this;for(var Se=D.glog(this.get(0))-D.glog(le.get(0)),be=new Array(this.getLength()),ee=0;ee<this.getLength();ee++)be[ee]=this.get(ee);for(var ee=0;ee<le.getLength();ee++)be[ee]^=D.gexp(D.glog(le.get(ee))+Se);return new ke(be,0).mod(le)}},Qt.exports=ke},14450:function(Qt,$e,U){var D=U(3655),ke=U(17611),le=U(27321),Se=U(93160),be=U(32832);function ee(M,K){this.typeNumber=M,this.errorCorrectLevel=K,this.modules=null,this.moduleCount=0,this.dataCache=null,this.dataList=[]}var ne=ee.prototype;ne.addData=function(M){var K=new D(M);this.dataList.push(K),this.dataCache=null},ne.isDark=function(M,K){if(M<0||this.moduleCount<=M||K<0||this.moduleCount<=K)throw new Error(M+","+K);return this.modules[M][K]},ne.getModuleCount=function(){return this.moduleCount},ne.make=function(){if(this.typeNumber<1){var M=1;for(M=1;M<40;M++){for(var K=ke.getRSBlocks(M,this.errorCorrectLevel),Y=new le,pe=0,ge=0;ge<K.length;ge++)pe+=K[ge].dataCount;for(var ge=0;ge<this.dataList.length;ge++){var ae=this.dataList[ge];Y.put(ae.mode,4),Y.put(ae.getLength(),Se.getLengthInBits(ae.mode,M)),ae.write(Y)}if(Y.getLengthInBits()<=pe*8)break}this.typeNumber=M}this.makeImpl(!1,this.getBestMaskPattern())},ne.makeImpl=function(M,K){this.moduleCount=this.typeNumber*4+17,this.modules=new Array(this.moduleCount);for(var Y=0;Y<this.moduleCount;Y++){this.modules[Y]=new Array(this.moduleCount);for(var pe=0;pe<this.moduleCount;pe++)this.modules[Y][pe]=null}this.setupPositionProbePattern(0,0),this.setupPositionProbePattern(this.moduleCount-7,0),this.setupPositionProbePattern(0,this.moduleCount-7),this.setupPositionAdjustPattern(),this.setupTimingPattern(),this.setupTypeInfo(M,K),this.typeNumber>=7&&this.setupTypeNumber(M),this.dataCache==null&&(this.dataCache=ee.createData(this.typeNumber,this.errorCorrectLevel,this.dataList)),this.mapData(this.dataCache,K)},ne.setupPositionProbePattern=function(M,K){for(var Y=-1;Y<=7;Y++)if(!(M+Y<=-1||this.moduleCount<=M+Y))for(var pe=-1;pe<=7;pe++)K+pe<=-1||this.moduleCount<=K+pe||(0<=Y&&Y<=6&&(pe==0||pe==6)||0<=pe&&pe<=6&&(Y==0||Y==6)||2<=Y&&Y<=4&&2<=pe&&pe<=4?this.modules[M+Y][K+pe]=!0:this.modules[M+Y][K+pe]=!1)},ne.getBestMaskPattern=function(){for(var M=0,K=0,Y=0;Y<8;Y++){this.makeImpl(!0,Y);var pe=Se.getLostPoint(this);(Y==0||M>pe)&&(M=pe,K=Y)}return K},ne.createMovieClip=function(M,K,Y){var pe=M.createEmptyMovieClip(K,Y),ge=1;this.make();for(var ae=0;ae<this.modules.length;ae++)for(var we=ae*ge,me=0;me<this.modules[ae].length;me++){var Qe=me*ge,Et=this.modules[ae][me];Et&&(pe.beginFill(0,100),pe.moveTo(Qe,we),pe.lineTo(Qe+ge,we),pe.lineTo(Qe+ge,we+ge),pe.lineTo(Qe,we+ge),pe.endFill())}return pe},ne.setupTimingPattern=function(){for(var M=8;M<this.moduleCount-8;M++)this.modules[M][6]==null&&(this.modules[M][6]=M%2==0);for(var K=8;K<this.moduleCount-8;K++)this.modules[6][K]==null&&(this.modules[6][K]=K%2==0)},ne.setupPositionAdjustPattern=function(){for(var M=Se.getPatternPosition(this.typeNumber),K=0;K<M.length;K++)for(var Y=0;Y<M.length;Y++){var pe=M[K],ge=M[Y];if(this.modules[pe][ge]==null)for(var ae=-2;ae<=2;ae++)for(var we=-2;we<=2;we++)ae==-2||ae==2||we==-2||we==2||ae==0&&we==0?this.modules[pe+ae][ge+we]=!0:this.modules[pe+ae][ge+we]=!1}},ne.setupTypeNumber=function(M){for(var K=Se.getBCHTypeNumber(this.typeNumber),Y=0;Y<18;Y++){var pe=!M&&(K>>Y&1)==1;this.modules[Math.floor(Y/3)][Y%3+this.moduleCount-8-3]=pe}for(var Y=0;Y<18;Y++){var pe=!M&&(K>>Y&1)==1;this.modules[Y%3+this.moduleCount-8-3][Math.floor(Y/3)]=pe}},ne.setupTypeInfo=function(M,K){for(var Y=this.errorCorrectLevel<<3|K,pe=Se.getBCHTypeInfo(Y),ge=0;ge<15;ge++){var ae=!M&&(pe>>ge&1)==1;ge<6?this.modules[ge][8]=ae:ge<8?this.modules[ge+1][8]=ae:this.modules[this.moduleCount-15+ge][8]=ae}for(var ge=0;ge<15;ge++){var ae=!M&&(pe>>ge&1)==1;ge<8?this.modules[8][this.moduleCount-ge-1]=ae:ge<9?this.modules[8][15-ge-1+1]=ae:this.modules[8][15-ge-1]=ae}this.modules[this.moduleCount-8][8]=!M},ne.mapData=function(M,K){for(var Y=-1,pe=this.moduleCount-1,ge=7,ae=0,we=this.moduleCount-1;we>0;we-=2)for(we==6&&we--;;){for(var me=0;me<2;me++)if(this.modules[pe][we-me]==null){var Qe=!1;ae<M.length&&(Qe=(M[ae]>>>ge&1)==1);var Et=Se.getMask(K,pe,we-me);Et&&(Qe=!Qe),this.modules[pe][we-me]=Qe,ge--,ge==-1&&(ae++,ge=7)}if(pe+=Y,pe<0||this.moduleCount<=pe){pe-=Y,Y=-Y;break}}},ee.PAD0=236,ee.PAD1=17,ee.createData=function(M,K,Y){for(var pe=ke.getRSBlocks(M,K),ge=new le,ae=0;ae<Y.length;ae++){var we=Y[ae];ge.put(we.mode,4),ge.put(we.getLength(),Se.getLengthInBits(we.mode,M)),we.write(ge)}for(var me=0,ae=0;ae<pe.length;ae++)me+=pe[ae].dataCount;if(ge.getLengthInBits()>me*8)throw new Error("code length overflow. ("+ge.getLengthInBits()+">"+me*8+")");for(ge.getLengthInBits()+4<=me*8&&ge.put(0,4);ge.getLengthInBits()%8!=0;)ge.putBit(!1);for(;!(ge.getLengthInBits()>=me*8||(ge.put(ee.PAD0,8),ge.getLengthInBits()>=me*8));)ge.put(ee.PAD1,8);return ee.createBytes(ge,pe)},ee.createBytes=function(M,K){for(var Y=0,pe=0,ge=0,ae=new Array(K.length),we=new Array(K.length),me=0;me<K.length;me++){var Qe=K[me].dataCount,Et=K[me].totalCount-Qe;pe=Math.max(pe,Qe),ge=Math.max(ge,Et),ae[me]=new Array(Qe);for(var De=0;De<ae[me].length;De++)ae[me][De]=255&M.buffer[De+Y];Y+=Qe;var xe=Se.getErrorCorrectPolynomial(Et),Ie=new be(ae[me],xe.getLength()-1),Bt=Ie.mod(xe);we[me]=new Array(xe.getLength()-1);for(var De=0;De<we[me].length;De++){var cn=De+Bt.getLength()-we[me].length;we[me][De]=cn>=0?Bt.get(cn):0}}for(var J=0,De=0;De<K.length;De++)J+=K[De].totalCount;for(var Zt=new Array(J),ut=0,De=0;De<pe;De++)for(var me=0;me<K.length;me++)De<ae[me].length&&(Zt[ut++]=ae[me][De]);for(var De=0;De<ge;De++)for(var me=0;me<K.length;me++)De<we[me].length&&(Zt[ut++]=we[me][De]);return Zt},Qt.exports=ee},17611:function(Qt,$e,U){var D=U(49381);function ke(le,Se){this.totalCount=le,this.dataCount=Se}ke.RS_BLOCK_TABLE=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]],ke.getRSBlocks=function(le,Se){var be=ke.getRsBlockTable(le,Se);if(be==null)throw new Error("bad rs block @ typeNumber:"+le+"/errorCorrectLevel:"+Se);for(var ee=be.length/3,ne=new Array,M=0;M<ee;M++)for(var K=be[M*3+0],Y=be[M*3+1],pe=be[M*3+2],ge=0;ge<K;ge++)ne.push(new ke(Y,pe));return ne},ke.getRsBlockTable=function(le,Se){switch(Se){case D.L:return ke.RS_BLOCK_TABLE[(le-1)*4+0];case D.M:return ke.RS_BLOCK_TABLE[(le-1)*4+1];case D.Q:return ke.RS_BLOCK_TABLE[(le-1)*4+2];case D.H:return ke.RS_BLOCK_TABLE[(le-1)*4+3];default:return}},Qt.exports=ke},11518:function(Qt){for(var $e={glog:function(D){if(D<1)throw new Error("glog("+D+")");return $e.LOG_TABLE[D]},gexp:function(D){for(;D<0;)D+=255;for(;D>=256;)D-=255;return $e.EXP_TABLE[D]},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)},U=0;U<8;U++)$e.EXP_TABLE[U]=1<<U;for(var U=8;U<256;U++)$e.EXP_TABLE[U]=$e.EXP_TABLE[U-4]^$e.EXP_TABLE[U-5]^$e.EXP_TABLE[U-6]^$e.EXP_TABLE[U-8];for(var U=0;U<255;U++)$e.LOG_TABLE[$e.EXP_TABLE[U]]=U;Qt.exports=$e},32792:function(Qt){Qt.exports={MODE_NUMBER:1,MODE_ALPHA_NUM:2,MODE_8BIT_BYTE:4,MODE_KANJI:8}},93160:function(Qt,$e,U){var D=U(32792),ke=U(32832),le=U(11518),Se={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7},be={PATTERN_POSITION_TABLE:[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],G15:1335,G18:7973,G15_MASK:21522,getBCHTypeInfo:function(ee){for(var ne=ee<<10;be.getBCHDigit(ne)-be.getBCHDigit(be.G15)>=0;)ne^=be.G15<<be.getBCHDigit(ne)-be.getBCHDigit(be.G15);return(ee<<10|ne)^be.G15_MASK},getBCHTypeNumber:function(ee){for(var ne=ee<<12;be.getBCHDigit(ne)-be.getBCHDigit(be.G18)>=0;)ne^=be.G18<<be.getBCHDigit(ne)-be.getBCHDigit(be.G18);return ee<<12|ne},getBCHDigit:function(ee){for(var ne=0;ee!=0;)ne++,ee>>>=1;return ne},getPatternPosition:function(ee){return be.PATTERN_POSITION_TABLE[ee-1]},getMask:function(ee,ne,M){switch(ee){case Se.PATTERN000:return(ne+M)%2==0;case Se.PATTERN001:return ne%2==0;case Se.PATTERN010:return M%3==0;case Se.PATTERN011:return(ne+M)%3==0;case Se.PATTERN100:return(Math.floor(ne/2)+Math.floor(M/3))%2==0;case Se.PATTERN101:return ne*M%2+ne*M%3==0;case Se.PATTERN110:return(ne*M%2+ne*M%3)%2==0;case Se.PATTERN111:return(ne*M%3+(ne+M)%2)%2==0;default:throw new Error("bad maskPattern:"+ee)}},getErrorCorrectPolynomial:function(ee){for(var ne=new ke([1],0),M=0;M<ee;M++)ne=ne.multiply(new ke([1,le.gexp(M)],0));return ne},getLengthInBits:function(ee,ne){if(1<=ne&&ne<10)switch(ee){case D.MODE_NUMBER:return 10;case D.MODE_ALPHA_NUM:return 9;case D.MODE_8BIT_BYTE:return 8;case D.MODE_KANJI:return 8;default:throw new Error("mode:"+ee)}else if(ne<27)switch(ee){case D.MODE_NUMBER:return 12;case D.MODE_ALPHA_NUM:return 11;case D.MODE_8BIT_BYTE:return 16;case D.MODE_KANJI:return 10;default:throw new Error("mode:"+ee)}else if(ne<41)switch(ee){case D.MODE_NUMBER:return 14;case D.MODE_ALPHA_NUM:return 13;case D.MODE_8BIT_BYTE:return 16;case D.MODE_KANJI:return 12;default:throw new Error("mode:"+ee)}else throw new Error("type:"+ne)},getLostPoint:function(ee){for(var ne=ee.getModuleCount(),M=0,K=0;K<ne;K++)for(var Y=0;Y<ne;Y++){for(var pe=0,ge=ee.isDark(K,Y),ae=-1;ae<=1;ae++)if(!(K+ae<0||ne<=K+ae))for(var we=-1;we<=1;we++)Y+we<0||ne<=Y+we||ae==0&&we==0||ge==ee.isDark(K+ae,Y+we)&&pe++;pe>5&&(M+=3+pe-5)}for(var K=0;K<ne-1;K++)for(var Y=0;Y<ne-1;Y++){var me=0;ee.isDark(K,Y)&&me++,ee.isDark(K+1,Y)&&me++,ee.isDark(K,Y+1)&&me++,ee.isDark(K+1,Y+1)&&me++,(me==0||me==4)&&(M+=3)}for(var K=0;K<ne;K++)for(var Y=0;Y<ne-6;Y++)ee.isDark(K,Y)&&!ee.isDark(K,Y+1)&&ee.isDark(K,Y+2)&&ee.isDark(K,Y+3)&&ee.isDark(K,Y+4)&&!ee.isDark(K,Y+5)&&ee.isDark(K,Y+6)&&(M+=40);for(var Y=0;Y<ne;Y++)for(var K=0;K<ne-6;K++)ee.isDark(K,Y)&&!ee.isDark(K+1,Y)&&ee.isDark(K+2,Y)&&ee.isDark(K+3,Y)&&ee.isDark(K+4,Y)&&!ee.isDark(K+5,Y)&&ee.isDark(K+6,Y)&&(M+=40);for(var Qe=0,Y=0;Y<ne;Y++)for(var K=0;K<ne;K++)ee.isDark(K,Y)&&Qe++;var Et=Math.abs(100*Qe/ne/ne-50)/5;return M+=Et*10,M}};Qt.exports=be},79361:function(Qt,$e,U){"use strict";function D(Ee){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?D=function(Ae){return typeof Ae}:D=function(Ae){return Ae&&typeof Symbol=="function"&&Ae.constructor===Symbol&&Ae!==Symbol.prototype?"symbol":typeof Ae},D(Ee)}function ke(){return ke=Object.assign||function(Ee){for(var re=1;re<arguments.length;re++){var Ae=arguments[re];for(var fe in Ae)Object.prototype.hasOwnProperty.call(Ae,fe)&&(Ee[fe]=Ae[fe])}return Ee},ke.apply(this,arguments)}function le(Ee,re){var Ae=Object.keys(Ee);if(Object.getOwnPropertySymbols){var fe=Object.getOwnPropertySymbols(Ee);re&&(fe=fe.filter(function(Oe){return Object.getOwnPropertyDescriptor(Ee,Oe).enumerable})),Ae.push.apply(Ae,fe)}return Ae}function Se(Ee){for(var re=1;re<arguments.length;re++){var Ae=arguments[re]!=null?arguments[re]:{};re%2?le(Ae,!0).forEach(function(fe){me(Ee,fe,Ae[fe])}):Object.getOwnPropertyDescriptors?Object.defineProperties(Ee,Object.getOwnPropertyDescriptors(Ae)):le(Ae).forEach(function(fe){Object.defineProperty(Ee,fe,Object.getOwnPropertyDescriptor(Ae,fe))})}return Ee}function be(Ee,re){if(Ee==null)return{};var Ae=ee(Ee,re),fe,Oe;if(Object.getOwnPropertySymbols){var _e=Object.getOwnPropertySymbols(Ee);for(Oe=0;Oe<_e.length;Oe++)fe=_e[Oe],!(re.indexOf(fe)>=0)&&Object.prototype.propertyIsEnumerable.call(Ee,fe)&&(Ae[fe]=Ee[fe])}return Ae}function ee(Ee,re){if(Ee==null)return{};var Ae={},fe=Object.keys(Ee),Oe,_e;for(_e=0;_e<fe.length;_e++)Oe=fe[_e],!(re.indexOf(Oe)>=0)&&(Ae[Oe]=Ee[Oe]);return Ae}function ne(Ee,re){if(!(Ee instanceof re))throw new TypeError("Cannot call a class as a function")}function M(Ee,re){for(var Ae=0;Ae<re.length;Ae++){var fe=re[Ae];fe.enumerable=fe.enumerable||!1,fe.configurable=!0,"value"in fe&&(fe.writable=!0),Object.defineProperty(Ee,fe.key,fe)}}function K(Ee,re,Ae){return re&&M(Ee.prototype,re),Ae&&M(Ee,Ae),Ee}function Y(Ee,re){return re&&(D(re)==="object"||typeof re=="function")?re:ge(Ee)}function pe(Ee){return pe=Object.setPrototypeOf?Object.getPrototypeOf:function(Ae){return Ae.__proto__||Object.getPrototypeOf(Ae)},pe(Ee)}function ge(Ee){if(Ee===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return Ee}function ae(Ee,re){if(typeof re!="function"&&re!==null)throw new TypeError("Super expression must either be null or a function");Ee.prototype=Object.create(re&&re.prototype,{constructor:{value:Ee,writable:!0,configurable:!0}}),re&&we(Ee,re)}function we(Ee,re){return we=Object.setPrototypeOf||function(fe,Oe){return fe.__proto__=Oe,fe},we(Ee,re)}function me(Ee,re,Ae){return re in Ee?Object.defineProperty(Ee,re,{value:Ae,enumerable:!0,configurable:!0,writable:!0}):Ee[re]=Ae,Ee}var Qe=U(67294),Et=U(45697),De=U(14450),xe=U(49381);function Ie(Ee){for(var re="",Ae=0;Ae<Ee.length;Ae++){var fe=Ee.charCodeAt(Ae);fe<128?re+=String.fromCharCode(fe):fe<2048?(re+=String.fromCharCode(192|fe>>6),re+=String.fromCharCode(128|fe&63)):fe<55296||fe>=57344?(re+=String.fromCharCode(224|fe>>12),re+=String.fromCharCode(128|fe>>6&63),re+=String.fromCharCode(128|fe&63)):(Ae++,fe=65536+((fe&1023)<<10|Ee.charCodeAt(Ae)&1023),re+=String.fromCharCode(240|fe>>18),re+=String.fromCharCode(128|fe>>12&63),re+=String.fromCharCode(128|fe>>6&63),re+=String.fromCharCode(128|fe&63))}return re}var Bt={size:128,level:"L",bgColor:"#FFFFFF",fgColor:"#000000",includeMargin:!1},cn={},J=4,Zt=.1;function ut(Ee){var re=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,Ae=[];return Ee.forEach(function(fe,Oe){var _e=null;fe.forEach(function(Ve,R){if(!Ve&&_e!==null){Ae.push("M".concat(_e+re," ").concat(Oe+re,"h").concat(R-_e,"v1H").concat(_e+re,"z")),_e=null;return}if(R===fe.length-1){if(!Ve)return;_e===null?Ae.push("M".concat(R+re,",").concat(Oe+re," h1v1H").concat(R+re,"z")):Ae.push("M".concat(_e+re,",").concat(Oe+re," h").concat(R+1-_e,"v1H").concat(_e+re,"z"));return}Ve&&_e===null&&(_e=R)})}),Ae.join("")}function rt(Ee,re){return Ee.slice().map(function(Ae,fe){return fe<re.y||fe>=re.y+re.h?Ae:Ae.map(function(Oe,_e){return _e<re.x||_e>=re.x+re.w?Oe:!1})})}function Vt(Ee,re){var Ae=Ee.imageSettings,fe=Ee.size,Oe=Ee.includeMargin;if(Ae==null)return null;var _e=Oe?J:0,Ve=re.length+_e*2,R=Math.floor(fe*Zt),Je=Ve/fe,Yt=(Ae.width||R)*Je,kt=(Ae.height||R)*Je,Re=Ae.x==null?re.length/2-Yt/2:Ae.x*Je,Ke=Ae.y==null?re.length/2-kt/2:Ae.y*Je,He=null;if(Ae.excavate){var Ft=Math.floor(Re),Ct=Math.floor(Ke),It=Math.ceil(Yt+Re-Ft),Ht=Math.ceil(kt+Ke-Ct);He={x:Ft,y:Ct,w:It,h:Ht}}return{x:Re,y:Ke,h:kt,w:Yt,excavation:He}}var _t=function(){try{new Path2D().addPath(new Path2D)}catch(Ee){return!1}return!0}(),zt=function(Ee){ae(re,Ee);function re(){var Ae,fe;ne(this,re);for(var Oe=arguments.length,_e=new Array(Oe),Ve=0;Ve<Oe;Ve++)_e[Ve]=arguments[Ve];return fe=Y(this,(Ae=pe(re)).call.apply(Ae,[this].concat(_e))),me(ge(fe),"_canvas",void 0),me(ge(fe),"_image",void 0),me(ge(fe),"state",{imgLoaded:!1}),me(ge(fe),"handleImageLoad",function(){fe.setState({imgLoaded:!0})}),fe}return K(re,[{key:"componentDidMount",value:function(){this.update()}},{key:"componentDidUpdate",value:function(){this.update()}},{key:"update",value:function(){var fe=this.props,Oe=fe.value,_e=fe.size,Ve=fe.level,R=fe.bgColor,Je=fe.fgColor,Yt=fe.includeMargin,kt=fe.imageSettings,Re=new De(-1,xe[Ve]);if(Re.addData(Ie(Oe)),Re.make(),this._canvas!=null){var Ke=this._canvas,He=Ke.getContext("2d");if(!He)return;var Ft=Re.modules;if(Ft===null)return;var Ct=Yt?J:0,It=Ft.length+Ct*2,Ht=Vt(this.props,Ft);kt!=null&&Ht!=null&&Ht.excavation!=null&&(Ft=rt(Ft,Ht.excavation));var Kt=window.devicePixelRatio||1;Ke.height=Ke.width=_e*Kt;var ht=_e/It*Kt;He.scale(ht,ht),He.fillStyle=R,He.fillRect(0,0,It,It),He.fillStyle=Je,_t?He.fill(new Path2D(ut(Ft,Ct))):Ft.forEach(function(Cn,T){Cn.forEach(function(m,y){m&&He.fillRect(y+Ct,T+Ct,1,1)})}),this.state.imgLoaded&&this._image&&Ht!=null&&He.drawImage(this._image,Ht.x+Ct,Ht.y+Ct,Ht.w,Ht.h)}}},{key:"render",value:function(){var fe=this,Oe=this.props,_e=Oe.value,Ve=Oe.size,R=Oe.level,Je=Oe.bgColor,Yt=Oe.fgColor,kt=Oe.style,Re=Oe.includeMargin,Ke=Oe.imageSettings,He=be(Oe,["value","size","level","bgColor","fgColor","style","includeMargin","imageSettings"]),Ft=Se({height:Ve,width:Ve},kt),Ct=null,It=Ke&&Ke.src;return Ke!=null&&It!=null&&(Ct=Qe.createElement("img",{src:It,style:{display:"none"},onLoad:this.handleImageLoad,ref:function(Kt){return fe._image=Kt}})),Qe.createElement(Qe.Fragment,null,Qe.createElement("canvas",ke({style:Ft,height:Ve,width:Ve,ref:function(Kt){return fe._canvas=Kt}},He)),Ct)}}]),re}(Qe.PureComponent);me(zt,"defaultProps",Bt);var qt=function(Ee){ae(re,Ee);function re(){return ne(this,re),Y(this,pe(re).apply(this,arguments))}return K(re,[{key:"render",value:function(){var fe=this.props,Oe=fe.value,_e=fe.size,Ve=fe.level,R=fe.bgColor,Je=fe.fgColor,Yt=fe.includeMargin,kt=fe.imageSettings,Re=be(fe,["value","size","level","bgColor","fgColor","includeMargin","imageSettings"]),Ke=new De(-1,xe[Ve]);Ke.addData(Ie(Oe)),Ke.make();var He=Ke.modules;if(He===null)return null;var Ft=Yt?J:0,Ct=He.length+Ft*2,It=Vt(this.props,He),Ht=null;kt!=null&&It!=null&&(It.excavation!=null&&(He=rt(He,It.excavation)),Ht=Qe.createElement("image",{xlinkHref:kt.src,height:It.h,width:It.w,x:It.x+Ft,y:It.y+Ft,preserveAspectRatio:"none"}));var Kt=ut(He,Ft);return Qe.createElement("svg",ke({shapeRendering:"crispEdges",height:_e,width:_e,viewBox:"0 0 ".concat(Ct," ").concat(Ct)},Re),Qe.createElement("path",{fill:R,d:"M0,0 h".concat(Ct,"v").concat(Ct,"H0z")}),Qe.createElement("path",{fill:Je,d:Kt}),Ht)}}]),re}(Qe.PureComponent);me(qt,"defaultProps",Bt);var Ut=function(re){var Ae=re.renderAs,fe=be(re,["renderAs"]),Oe=Ae==="svg"?qt:zt;return Qe.createElement(Oe,fe)};Ut.defaultProps=Se({renderAs:"canvas"},Bt),Qt.exports=Ut},64902:function(){},40522:function(){},90753:function(){},12155:function(){}}]);
|