@datagrok/eda 1.1.28 → 1.1.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/package.js CHANGED
@@ -1,2 +1,2 @@
1
- var eda;(()=>{var t={5540:(t,n,e)=>{"use strict";t=e.hmd(t);var r,o=(r="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0,function(t={}){var n,e,o=void 0!==t?t:{};o.ready=new Promise((function(t,r){n=t,e=r}));var i,s=Object.assign({},o),a="object"==typeof window,u="function"==typeof importScripts,l=("object"==typeof process&&"object"==typeof process.versions&&process.versions.node,"");(a||u)&&(u?l=self.location.href:"undefined"!=typeof document&&document.currentScript&&(l=document.currentScript.src),r&&(l=r),l=0!==l.indexOf("blob:")?l.substr(0,l.replace(/[?#].*/,"").lastIndexOf("/")+1):"",u&&(i=t=>{var n=new XMLHttpRequest;return n.open("GET",t,!1),n.responseType="arraybuffer",n.send(null),new Uint8Array(n.response)})),o.print||console.log.bind(console);var c,f,h=o.printErr||console.warn.bind(console);Object.assign(o,s),s=null,o.arguments&&o.arguments,o.thisProgram&&o.thisProgram,o.quit&&o.quit,o.wasmBinary&&(c=o.wasmBinary),o.noExitRuntime,"object"!=typeof WebAssembly&&b("no native wasm support detected");var m,d,p,g=!1;function v(){var t=f.buffer;o.HEAP8=m=new Int8Array(t),o.HEAP16=new Int16Array(t),o.HEAP32=new Int32Array(t),o.HEAPU8=d=new Uint8Array(t),o.HEAPU16=new Uint16Array(t),o.HEAPU32=p=new Uint32Array(t),o.HEAPF32=new Float32Array(t),o.HEAPF64=new Float64Array(t)}var y=[],w=[],E=[],A=0,C=null,_=null;function b(t){o.onAbort&&o.onAbort(t),h(t="Aborted("+t+")"),g=!0,t+=". Build with -sASSERTIONS for more info.";var n=new WebAssembly.RuntimeError(t);throw e(n),n}var I,N;function S(t){return t.startsWith("data:application/octet-stream;base64,")}function M(t){try{if(t==I&&c)return new Uint8Array(c);if(i)return i(t);throw"both async and sync fetching of the wasm failed"}catch(t){b(t)}}function T(t,n,e){return function(t){return c||!a&&!u||"function"!=typeof fetch?Promise.resolve().then((function(){return M(t)})):fetch(t,{credentials:"same-origin"}).then((function(n){if(!n.ok)throw"failed to load wasm binary file at '"+t+"'";return n.arrayBuffer()})).catch((function(){return M(t)}))}(t).then((function(t){return WebAssembly.instantiate(t,n)})).then((function(t){return t})).then(e,(function(t){h("failed to asynchronously prepare wasm: "+t),b(t)}))}function O(t){for(;t.length>0;)t.shift()(o)}function P(t){this.excPtr=t,this.ptr=t-24,this.set_type=function(t){p[this.ptr+4>>2]=t},this.get_type=function(){return p[this.ptr+4>>2]},this.set_destructor=function(t){p[this.ptr+8>>2]=t},this.get_destructor=function(){return p[this.ptr+8>>2]},this.set_caught=function(t){t=t?1:0,m[this.ptr+12|0]=t},this.get_caught=function(){return 0!=m[this.ptr+12|0]},this.set_rethrown=function(t){t=t?1:0,m[this.ptr+13|0]=t},this.get_rethrown=function(){return 0!=m[this.ptr+13|0]},this.init=function(t,n){this.set_adjusted_ptr(0),this.set_type(t),this.set_destructor(n)},this.set_adjusted_ptr=function(t){p[this.ptr+16>>2]=t},this.get_adjusted_ptr=function(){return p[this.ptr+16>>2]},this.get_exception_ptr=function(){if(G(this.get_type()))return p[this.excPtr>>2];var t=this.get_adjusted_ptr();return 0!==t?t:this.excPtr}}function x(t){var n=f.buffer;try{return f.grow(t-n.byteLength+65535>>>16),v(),1}catch(t){}}function L(t){return o["_"+t]}S(I="wasmDbscan.wasm")||(N=I,I=o.locateFile?o.locateFile(N,l):l+N);var R="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function F(t,n,e,r,o){var i={string:t=>{var n=0;return null!=t&&0!==t&&(n=function(t){var n=function(t){for(var n=0,e=0;e<t.length;++e){var r=t.charCodeAt(e);r<=127?n++:r<=2047?n+=2:r>=55296&&r<=57343?(n+=4,++e):n+=3}return n}(t)+1,e=V(n);return function(t,n,e){!function(t,n,e,r){if(!(r>0))return 0;for(var o=e+r-1,i=0;i<t.length;++i){var s=t.charCodeAt(i);if(s>=55296&&s<=57343&&(s=65536+((1023&s)<<10)|1023&t.charCodeAt(++i)),s<=127){if(e>=o)break;n[e++]=s}else if(s<=2047){if(e+1>=o)break;n[e++]=192|s>>6,n[e++]=128|63&s}else if(s<=65535){if(e+2>=o)break;n[e++]=224|s>>12,n[e++]=128|s>>6&63,n[e++]=128|63&s}else{if(e+3>=o)break;n[e++]=240|s>>18,n[e++]=128|s>>12&63,n[e++]=128|s>>6&63,n[e++]=128|63&s}}n[e]=0}(t,d,n,e)}(t,e,n),e}(t)),n},array:t=>{var n,e,r=V(t.length);return n=t,e=r,m.set(n,e),r}},s=L(t),a=[],u=0;if(r)for(var l=0;l<r.length;l++){var c=i[e[l]];c?(0===u&&(u=B()),a[l]=c(r[l])):a[l]=r[l]}var f=s.apply(null,a);return function(t){return 0!==u&&k(u),function(t){return"string"===n?(e=t)?function(t,n,e){for(var r=n+e,o=n;t[o]&&!(o>=r);)++o;if(o-n>16&&t.buffer&&R)return R.decode(t.subarray(n,o));for(var i="";n<o;){var s=t[n++];if(128&s){var a=63&t[n++];if(192!=(224&s)){var u=63&t[n++];if((s=224==(240&s)?(15&s)<<12|a<<6|u:(7&s)<<18|a<<12|u<<6|63&t[n++])<65536)i+=String.fromCharCode(s);else{var l=s-65536;i+=String.fromCharCode(55296|l>>10,56320|1023&l)}}else i+=String.fromCharCode((31&s)<<6|a)}else i+=String.fromCharCode(s)}return i}(d,e,r):"":"boolean"===n?Boolean(t):t;var e,r}(t)}(f)}var D,U={__cxa_throw:function(t,n,e){throw new P(t).init(n,e),t},abort:function(){b("")},emscripten_memcpy_big:function(t,n,e){d.copyWithin(t,n,n+e)},emscripten_resize_heap:function(t){var n,e=d.length,r=2147483648;if((t>>>=0)>r)return!1;for(var o=1;o<=4;o*=2){var i=e*(1+.2/o);if(i=Math.min(i,t+100663296),x(Math.min(r,(n=Math.max(t,i))+(65536-n%65536)%65536)))return!0}return!1}},B=(function(){var t,n,r,i,s={env:U,wasi_snapshot_preview1:U};function a(t,n){var e,r=t.exports;return o.asm=r,f=o.asm.memory,v(),o.asm.__indirect_function_table,e=o.asm.__wasm_call_ctors,w.unshift(e),function(){if(A--,o.monitorRunDependencies&&o.monitorRunDependencies(A),0==A&&(null!==C&&(clearInterval(C),C=null),_)){var t=_;_=null,t()}}(),r}if(A++,o.monitorRunDependencies&&o.monitorRunDependencies(A),o.instantiateWasm)try{return o.instantiateWasm(s,a)}catch(t){h("Module.instantiateWasm callback failed with error: "+t),e(t)}(t=c,n=I,r=s,i=function(t){a(t.instance)},t||"function"!=typeof WebAssembly.instantiateStreaming||S(n)||"function"!=typeof fetch?T(n,r,i):fetch(n,{credentials:"same-origin"}).then((function(t){return WebAssembly.instantiateStreaming(t,r).then(i,(function(t){return h("wasm streaming compile failed: "+t),h("falling back to ArrayBuffer instantiation"),T(n,r,i)}))}))).catch(e)}(),o._dbscan=function(){return(o._dbscan=o.asm.dbscan).apply(null,arguments)},o._malloc=function(){return(o._malloc=o.asm.malloc).apply(null,arguments)},o._free=function(){return(o._free=o.asm.free).apply(null,arguments)},function(){return(B=o.asm.stackSave).apply(null,arguments)}),k=function(){return(k=o.asm.stackRestore).apply(null,arguments)},V=function(){return(V=o.asm.stackAlloc).apply(null,arguments)},G=function(){return(G=o.asm.__cxa_is_pointer_type).apply(null,arguments)};function q(){function t(){D||(D=!0,o.calledRun=!0,g||(O(w),n(o),o.onRuntimeInitialized&&o.onRuntimeInitialized(),function(){if(o.postRun)for("function"==typeof o.postRun&&(o.postRun=[o.postRun]);o.postRun.length;)t=o.postRun.shift(),E.unshift(t);var t;O(E)}()))}A>0||(function(){if(o.preRun)for("function"==typeof o.preRun&&(o.preRun=[o.preRun]);o.preRun.length;)t=o.preRun.shift(),y.unshift(t);var t;O(y)}(),A>0||(o.setStatus?(o.setStatus("Running..."),setTimeout((function(){setTimeout((function(){o.setStatus("")}),1),t()}),1)):t()))}if(o.ccall=F,o.cwrap=function(t,n,e,r){var o=!e||e.every((t=>"number"===t||"boolean"===t));return"string"!==n&&o&&!r?L(t):function(){return F(t,n,e,arguments)}},_=function t(){D||q(),D||(_=t)},o.preInit)for("function"==typeof o.preInit&&(o.preInit=[o.preInit]);o.preInit.length>0;)o.preInit.pop()();return q(),t.ready});"object"==typeof exports?t.exports=o:"function"==typeof define&&e.amdO?define([],(function(){return o})):"object"==typeof exports&&(exports.exportCppDbscanLib=o)},7939:(t,n,e)=>{"use strict";e.d(n,{A:()=>a});var r=e(1354),o=e.n(r),i=e(6314),s=e.n(i)()(o());s.push([t.id,".scatter_plot_link {\n position: absolute!important;\n right: 10px;\n}\n\n.cliffs_grid {\n top: 10px;\n}\n\n.show_only_cliffs {\n top: 30px;\n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings {\n font-size: 18px;\n position: absolute;\n height: 28px;\n \n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings:not(.ml-dim-reduction-column-editor-input-root i) {\n left: -20px;\n}\n.dlg-dimensionality-reduction.ui-form, .dlg-markov-clustering.ui-form, .dlg-markov-clustering.ui-form .ui-form, .dlg-dimensionality-reduction.ui-form .ui-form {\n max-width: unset;\n}\n\n.ml-dim-reduction-column-editor-input-root label {\n display: none !important;\n}\n\n.dim-reduction-dialog-form > .ui-input-root, .dim-reduction-dialog-form > div > .ui-input-root {\n margin-left: 10px;\n}\n\n.ml-dim-reduction-column-editor-input-root input, .ml-dim-reduction-column-editor-input-root select {\n margin-left: 20px !important;\n}\n\nh3.ml-dim-reduction-column-editor-input-root {\n margin: 0 !important;\n}\n\n.ml-dim-reduction-column-editor-root, .ml-dim-reduction-column-editor-header-root {\n display: flex;\n flex-direction: row;\n align-items: center;\n margin-bottom: 10px !important;\n width: 700px !important;\n}\n\n.ml-dim-reduction-column-editor-column-title {\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.ml-dim-reduction-column-editor-header-root > h1:not(:first-child) {\n margin-left: 20px !important;\n}\n\n.ml-dim-reduction-column-editor-table-root .header > td:not(:first-child) {\n padding-left: 32px;\n}","",{version:3,sources:["webpack://./node_modules/@datagrok-libraries/ml/css/styles.css"],names:[],mappings:"AAAA;IACI,4BAA4B;IAC5B,WAAW;AACf;;AAEA;IACI,SAAS;AACb;;AAEA;IACI,SAAS;AACb;;AAEA;IACI,eAAe;IACf,kBAAkB;IAClB,YAAY;;AAEhB;;AAEA;IACI,WAAW;AACf;AACA;IACI,gBAAgB;AACpB;;AAEA;IACI,wBAAwB;AAC5B;;AAEA;IACI,iBAAiB;AACrB;;AAEA;IACI,4BAA4B;AAChC;;AAEA;IACI,oBAAoB;AACxB;;AAEA;IACI,aAAa;IACb,mBAAmB;IACnB,mBAAmB;IACnB,8BAA8B;IAC9B,uBAAuB;AAC3B;;AAEA;IACI,uBAAuB;IACvB,gBAAgB;AACpB;;AAEA;IACI,4BAA4B;AAChC;;AAEA;IACI,kBAAkB;AACtB",sourcesContent:[".scatter_plot_link {\n position: absolute!important;\n right: 10px;\n}\n\n.cliffs_grid {\n top: 10px;\n}\n\n.show_only_cliffs {\n top: 30px;\n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings {\n font-size: 18px;\n position: absolute;\n height: 28px;\n \n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings:not(.ml-dim-reduction-column-editor-input-root i) {\n left: -20px;\n}\n.dlg-dimensionality-reduction.ui-form, .dlg-markov-clustering.ui-form, .dlg-markov-clustering.ui-form .ui-form, .dlg-dimensionality-reduction.ui-form .ui-form {\n max-width: unset;\n}\n\n.ml-dim-reduction-column-editor-input-root label {\n display: none !important;\n}\n\n.dim-reduction-dialog-form > .ui-input-root, .dim-reduction-dialog-form > div > .ui-input-root {\n margin-left: 10px;\n}\n\n.ml-dim-reduction-column-editor-input-root input, .ml-dim-reduction-column-editor-input-root select {\n margin-left: 20px !important;\n}\n\nh3.ml-dim-reduction-column-editor-input-root {\n margin: 0 !important;\n}\n\n.ml-dim-reduction-column-editor-root, .ml-dim-reduction-column-editor-header-root {\n display: flex;\n flex-direction: row;\n align-items: center;\n margin-bottom: 10px !important;\n width: 700px !important;\n}\n\n.ml-dim-reduction-column-editor-column-title {\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.ml-dim-reduction-column-editor-header-root > h1:not(:first-child) {\n margin-left: 20px !important;\n}\n\n.ml-dim-reduction-column-editor-table-root .header > td:not(:first-child) {\n padding-left: 32px;\n}"],sourceRoot:""}]);const a=s},6314:t=>{"use strict";t.exports=function(t){var n=[];return n.toString=function(){return this.map((function(n){var e="",r=void 0!==n[5];return n[4]&&(e+="@supports (".concat(n[4],") {")),n[2]&&(e+="@media ".concat(n[2]," {")),r&&(e+="@layer".concat(n[5].length>0?" ".concat(n[5]):""," {")),e+=t(n),r&&(e+="}"),n[2]&&(e+="}"),n[4]&&(e+="}"),e})).join("")},n.i=function(t,e,r,o,i){"string"==typeof t&&(t=[[null,t,void 0]]);var s={};if(r)for(var a=0;a<this.length;a++){var u=this[a][0];null!=u&&(s[u]=!0)}for(var l=0;l<t.length;l++){var c=[].concat(t[l]);r&&s[c[0]]||(void 0!==i&&(void 0===c[5]||(c[1]="@layer".concat(c[5].length>0?" ".concat(c[5]):""," {").concat(c[1],"}")),c[5]=i),e&&(c[2]?(c[1]="@media ".concat(c[2]," {").concat(c[1],"}"),c[2]=e):c[2]=e),o&&(c[4]?(c[1]="@supports (".concat(c[4],") {").concat(c[1],"}"),c[4]=o):c[4]="".concat(o)),n.push(c))}},n}},1354:t=>{"use strict";t.exports=function(t){var n=t[1],e=t[3];if(!e)return n;if("function"==typeof btoa){var r=btoa(unescape(encodeURIComponent(JSON.stringify(e)))),o="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(r),i="/*# ".concat(o," */");return[n].concat([i]).join("\n")}return[n].join("\n")}},6572:function(t){var n;t.exports=(n=function(t,n){var e=Array.prototype.concat,r=Array.prototype.slice,o=Object.prototype.toString;function i(n,e){var r=n>e?n:e;return t.pow(10,17-~~(t.log(r>0?r:-r)*t.LOG10E))}var s=Array.isArray||function(t){return"[object Array]"===o.call(t)};function a(t){return"[object Function]"===o.call(t)}function u(t){return"number"==typeof t&&t-t==0}function l(){return new l._init(arguments)}function c(){return 0}function f(){return 1}function h(t,n){return t===n?1:0}l.fn=l.prototype,l._init=function(t){if(s(t[0]))if(s(t[0][0])){a(t[1])&&(t[0]=l.map(t[0],t[1]));for(var n=0;n<t[0].length;n++)this[n]=t[0][n];this.length=t[0].length}else this[0]=a(t[1])?l.map(t[0],t[1]):t[0],this.length=1;else if(u(t[0]))this[0]=l.seq.apply(null,t),this.length=1;else{if(t[0]instanceof l)return l(t[0].toArray());this[0]=[],this.length=1}return this},l._init.prototype=l.prototype,l._init.constructor=l,l.utils={calcRdx:i,isArray:s,isFunction:a,isNumber:u,toVector:function(t){return e.apply([],t)}},l._random_fn=t.random,l.setRandom=function(t){if("function"!=typeof t)throw new TypeError("fn is not a function");l._random_fn=t},l.extend=function(t){var n,e;if(1===arguments.length){for(e in t)l[e]=t[e];return this}for(n=1;n<arguments.length;n++)for(e in arguments[n])t[e]=arguments[n][e];return t},l.rows=function(t){return t.length||1},l.cols=function(t){return t[0].length||1},l.dimensions=function(t){return{rows:l.rows(t),cols:l.cols(t)}},l.row=function(t,n){return s(n)?n.map((function(n){return l.row(t,n)})):t[n]},l.rowa=function(t,n){return l.row(t,n)},l.col=function(t,n){if(s(n)){var e=l.arange(t.length).map((function(){return new Array(n.length)}));return n.forEach((function(n,r){l.arange(t.length).forEach((function(o){e[o][r]=t[o][n]}))})),e}for(var r=new Array(t.length),o=0;o<t.length;o++)r[o]=[t[o][n]];return r},l.cola=function(t,n){return l.col(t,n).map((function(t){return t[0]}))},l.diag=function(t){for(var n=l.rows(t),e=new Array(n),r=0;r<n;r++)e[r]=[t[r][r]];return e},l.antidiag=function(t){for(var n=l.rows(t)-1,e=new Array(n),r=0;n>=0;n--,r++)e[r]=[t[r][n]];return e},l.transpose=function(t){var n,e,r,o,i,a=[];for(s(t[0])||(t=[t]),e=t.length,r=t[0].length,i=0;i<r;i++){for(n=new Array(e),o=0;o<e;o++)n[o]=t[o][i];a.push(n)}return 1===a.length?a[0]:a},l.map=function(t,n,e){var r,o,i,a,u;for(s(t[0])||(t=[t]),o=t.length,i=t[0].length,a=e?t:new Array(o),r=0;r<o;r++)for(a[r]||(a[r]=new Array(i)),u=0;u<i;u++)a[r][u]=n(t[r][u],r,u);return 1===a.length?a[0]:a},l.cumreduce=function(t,n,e){var r,o,i,a,u;for(s(t[0])||(t=[t]),o=t.length,i=t[0].length,a=e?t:new Array(o),r=0;r<o;r++)for(a[r]||(a[r]=new Array(i)),i>0&&(a[r][0]=t[r][0]),u=1;u<i;u++)a[r][u]=n(a[r][u-1],t[r][u]);return 1===a.length?a[0]:a},l.alter=function(t,n){return l.map(t,n,!0)},l.create=function(t,n,e){var r,o,i=new Array(t);for(a(n)&&(e=n,n=t),r=0;r<t;r++)for(i[r]=new Array(n),o=0;o<n;o++)i[r][o]=e(r,o);return i},l.zeros=function(t,n){return u(n)||(n=t),l.create(t,n,c)},l.ones=function(t,n){return u(n)||(n=t),l.create(t,n,f)},l.rand=function(t,n){return u(n)||(n=t),l.create(t,n,l._random_fn)},l.identity=function(t,n){return u(n)||(n=t),l.create(t,n,h)},l.symmetric=function(t){var n,e,r=t.length;if(t.length!==t[0].length)return!1;for(n=0;n<r;n++)for(e=0;e<r;e++)if(t[e][n]!==t[n][e])return!1;return!0},l.clear=function(t){return l.alter(t,c)},l.seq=function(t,n,e,r){a(r)||(r=!1);var o,s=[],u=i(t,n),l=(n*u-t*u)/((e-1)*u),c=t;for(o=0;c<=n&&o<e;c=(t*u+l*u*++o)/u)s.push(r?r(c,o):c);return s},l.arange=function(t,e,r){var o,i=[];if(r=r||1,e===n&&(e=t,t=0),t===e||0===r)return[];if(t<e&&r<0)return[];if(t>e&&r>0)return[];if(r>0)for(o=t;o<e;o+=r)i.push(o);else for(o=t;o>e;o+=r)i.push(o);return i},l.slice=function(){function t(t,e,r,o){var i,s=[],a=t.length;if(e===n&&r===n&&o===n)return l.copy(t);if(o=o||1,(e=(e=e||0)>=0?e:a+e)===(r=(r=r||t.length)>=0?r:a+r)||0===o)return[];if(e<r&&o<0)return[];if(e>r&&o>0)return[];if(o>0)for(i=e;i<r;i+=o)s.push(t[i]);else for(i=e;i>r;i+=o)s.push(t[i]);return s}return function(n,e){var r,o;return u((e=e||{}).row)?u(e.col)?n[e.row][e.col]:t(l.rowa(n,e.row),(r=e.col||{}).start,r.end,r.step):u(e.col)?t(l.cola(n,e.col),(o=e.row||{}).start,o.end,o.step):(o=e.row||{},r=e.col||{},t(n,o.start,o.end,o.step).map((function(n){return t(n,r.start,r.end,r.step)})))}}(),l.sliceAssign=function(e,r,o){var i,s;if(u(r.row)){if(u(r.col))return e[r.row][r.col]=o;r.col=r.col||{},r.col.start=r.col.start||0,r.col.end=r.col.end||e[0].length,r.col.step=r.col.step||1,i=l.arange(r.col.start,t.min(e.length,r.col.end),r.col.step);var a=r.row;return i.forEach((function(t,n){e[a][t]=o[n]})),e}if(u(r.col)){r.row=r.row||{},r.row.start=r.row.start||0,r.row.end=r.row.end||e.length,r.row.step=r.row.step||1,s=l.arange(r.row.start,t.min(e[0].length,r.row.end),r.row.step);var c=r.col;return s.forEach((function(t,n){e[t][c]=o[n]})),e}return o[0].length===n&&(o=[o]),r.row.start=r.row.start||0,r.row.end=r.row.end||e.length,r.row.step=r.row.step||1,r.col.start=r.col.start||0,r.col.end=r.col.end||e[0].length,r.col.step=r.col.step||1,s=l.arange(r.row.start,t.min(e.length,r.row.end),r.row.step),i=l.arange(r.col.start,t.min(e[0].length,r.col.end),r.col.step),s.forEach((function(t,n){i.forEach((function(r,i){e[t][r]=o[n][i]}))})),e},l.diagonal=function(t){var n=l.zeros(t.length,t.length);return t.forEach((function(t,e){n[e][e]=t})),n},l.copy=function(t){return t.map((function(t){return u(t)?t:t.map((function(t){return t}))}))};var m=l.prototype;return m.length=0,m.push=Array.prototype.push,m.sort=Array.prototype.sort,m.splice=Array.prototype.splice,m.slice=Array.prototype.slice,m.toArray=function(){return this.length>1?r.call(this):r.call(this)[0]},m.map=function(t,n){return l(l.map(this,t,n))},m.cumreduce=function(t,n){return l(l.cumreduce(this,t,n))},m.alter=function(t){return l.alter(this,t),this},function(t){for(var n=0;n<t.length;n++)!function(t){m[t]=function(n){var e,r=this;return n?(setTimeout((function(){n.call(r,m[t].call(r))})),this):(e=l[t](this),s(e)?l(e):e)}}(t[n])}("transpose clear symmetric rows cols dimensions diag antidiag".split(" ")),function(t){for(var n=0;n<t.length;n++)!function(t){m[t]=function(n,e){var r=this;return e?(setTimeout((function(){e.call(r,m[t].call(r,n))})),this):l(l[t](this,n))}}(t[n])}("row col".split(" ")),function(t){for(var n=0;n<t.length;n++)!function(t){m[t]=function(){return l(l[t].apply(null,arguments))}}(t[n])}("create zeros ones rand identity".split(" ")),l}(Math),function(t,n){var e=t.utils.isFunction;function r(t,n){return t-n}function o(t,e,r){return n.max(e,n.min(t,r))}t.sum=function(t){for(var n=0,e=t.length;--e>=0;)n+=t[e];return n},t.sumsqrd=function(t){for(var n=0,e=t.length;--e>=0;)n+=t[e]*t[e];return n},t.sumsqerr=function(n){for(var e,r=t.mean(n),o=0,i=n.length;--i>=0;)o+=(e=n[i]-r)*e;return o},t.sumrow=function(t){for(var n=0,e=t.length;--e>=0;)n+=t[e];return n},t.product=function(t){for(var n=1,e=t.length;--e>=0;)n*=t[e];return n},t.min=function(t){for(var n=t[0],e=0;++e<t.length;)t[e]<n&&(n=t[e]);return n},t.max=function(t){for(var n=t[0],e=0;++e<t.length;)t[e]>n&&(n=t[e]);return n},t.unique=function(t){for(var n={},e=[],r=0;r<t.length;r++)n[t[r]]||(n[t[r]]=!0,e.push(t[r]));return e},t.mean=function(n){return t.sum(n)/n.length},t.meansqerr=function(n){return t.sumsqerr(n)/n.length},t.geomean=function(e){var r=e.map(n.log),o=t.mean(r);return n.exp(o)},t.median=function(t){var n=t.length,e=t.slice().sort(r);return 1&n?e[n/2|0]:(e[n/2-1]+e[n/2])/2},t.cumsum=function(n){return t.cumreduce(n,(function(t,n){return t+n}))},t.cumprod=function(n){return t.cumreduce(n,(function(t,n){return t*n}))},t.diff=function(t){var n,e=[],r=t.length;for(n=1;n<r;n++)e.push(t[n]-t[n-1]);return e},t.rank=function(t){var n,e=[],o={};for(n=0;n<t.length;n++)o[u=t[n]]?o[u]++:(o[u]=1,e.push(u));var i=e.sort(r),s={},a=1;for(n=0;n<i.length;n++){var u,l=o[u=i[n]],c=(a+(a+l-1))/2;s[u]=c,a+=l}return t.map((function(t){return s[t]}))},t.mode=function(t){var n,e=t.length,o=t.slice().sort(r),i=1,s=0,a=0,u=[];for(n=0;n<e;n++)o[n]===o[n+1]?i++:(i>s?(u=[o[n]],s=i,a=0):i===s&&(u.push(o[n]),a++),i=1);return 0===a?u[0]:u},t.range=function(n){return t.max(n)-t.min(n)},t.variance=function(n,e){return t.sumsqerr(n)/(n.length-(e?1:0))},t.pooledvariance=function(n){return n.reduce((function(n,e){return n+t.sumsqerr(e)}),0)/(n.reduce((function(t,n){return t+n.length}),0)-n.length)},t.deviation=function(n){for(var e=t.mean(n),r=n.length,o=new Array(r),i=0;i<r;i++)o[i]=n[i]-e;return o},t.stdev=function(e,r){return n.sqrt(t.variance(e,r))},t.pooledstdev=function(e){return n.sqrt(t.pooledvariance(e))},t.meandev=function(e){for(var r=t.mean(e),o=[],i=e.length-1;i>=0;i--)o.push(n.abs(e[i]-r));return t.mean(o)},t.meddev=function(e){for(var r=t.median(e),o=[],i=e.length-1;i>=0;i--)o.push(n.abs(e[i]-r));return t.median(o)},t.coeffvar=function(n){return t.stdev(n)/t.mean(n)},t.quartiles=function(t){var e=t.length,o=t.slice().sort(r);return[o[n.round(e/4)-1],o[n.round(e/2)-1],o[n.round(3*e/4)-1]]},t.quantiles=function(t,e,i,s){var a,u,l,c,f,h=t.slice().sort(r),m=[e.length],d=t.length;for(void 0===i&&(i=3/8),void 0===s&&(s=3/8),a=0;a<e.length;a++)l=d*(u=e[a])+(i+u*(1-i-s)),c=n.floor(o(l,1,d-1)),f=o(l-c,0,1),m[a]=(1-f)*h[c-1]+f*h[c];return m},t.percentile=function(t,n,e){var o=t.slice().sort(r),i=n*(o.length+(e?1:-1))+(e?0:1),s=parseInt(i),a=i-s;return s+1<o.length?o[s-1]+a*(o[s]-o[s-1]):o[s-1]},t.percentileOfScore=function(t,n,e){var r,o,i=0,s=t.length,a=!1;for("strict"===e&&(a=!0),o=0;o<s;o++)r=t[o],(a&&r<n||!a&&r<=n)&&i++;return i/s},t.histogram=function(e,r){r=r||4;var o,i=t.min(e),s=(t.max(e)-i)/r,a=e.length,u=[];for(o=0;o<r;o++)u[o]=0;for(o=0;o<a;o++)u[n.min(n.floor((e[o]-i)/s),r-1)]+=1;return u},t.covariance=function(n,e){var r,o=t.mean(n),i=t.mean(e),s=n.length,a=new Array(s);for(r=0;r<s;r++)a[r]=(n[r]-o)*(e[r]-i);return t.sum(a)/(s-1)},t.corrcoeff=function(n,e){return t.covariance(n,e)/t.stdev(n,1)/t.stdev(e,1)},t.spearmancoeff=function(n,e){return n=t.rank(n),e=t.rank(e),t.corrcoeff(n,e)},t.stanMoment=function(e,r){for(var o=t.mean(e),i=t.stdev(e),s=e.length,a=0,u=0;u<s;u++)a+=n.pow((e[u]-o)/i,r);return a/e.length},t.skewness=function(n){return t.stanMoment(n,3)},t.kurtosis=function(n){return t.stanMoment(n,4)-3};var i=t.prototype;!function(n){for(var r=0;r<n.length;r++)!function(n){i[n]=function(r,o){var s=[],a=0,u=this;if(e(r)&&(o=r,r=!1),o)return setTimeout((function(){o.call(u,i[n].call(u,r))})),this;if(this.length>1){for(u=!0===r?this:this.transpose();a<u.length;a++)s[a]=t[n](u[a]);return s}return t[n](this[0],r)}}(n[r])}("cumsum cumprod".split(" ")),function(n){for(var r=0;r<n.length;r++)!function(n){i[n]=function(r,o){var s=[],a=0,u=this;if(e(r)&&(o=r,r=!1),o)return setTimeout((function(){o.call(u,i[n].call(u,r))})),this;if(this.length>1){for("sumrow"!==n&&(u=!0===r?this:this.transpose());a<u.length;a++)s[a]=t[n](u[a]);return!0===r?t[n](t.utils.toVector(s)):s}return t[n](this[0],r)}}(n[r])}("sum sumsqrd sumsqerr sumrow product min max unique mean meansqerr geomean median diff rank mode range variance deviation stdev meandev meddev coeffvar quartiles histogram skewness kurtosis".split(" ")),function(n){for(var r=0;r<n.length;r++)!function(n){i[n]=function(){var r,o=[],s=0,a=this,u=Array.prototype.slice.call(arguments);if(e(u[u.length-1])){r=u[u.length-1];var l=u.slice(0,u.length-1);return setTimeout((function(){r.call(a,i[n].apply(a,l))})),this}r=void 0;var c=function(e){return t[n].apply(a,[e].concat(u))};if(this.length>1){for(a=a.transpose();s<a.length;s++)o[s]=c(a[s]);return o}return c(this[0])}}(n[r])}("quantiles percentileOfScore".split(" "))}(n,Math),function(t,n){t.gammaln=function(t){var e,r,o,i=0,s=[76.18009172947146,-86.50532032941678,24.01409824083091,-1.231739572450155,.001208650973866179,-5395239384953e-18],a=1.000000000190015;for(o=(r=e=t)+5.5,o-=(e+.5)*n.log(o);i<6;i++)a+=s[i]/++r;return n.log(2.5066282746310007*a/e)-o},t.loggam=function(t){var e,r,o,i,s,a,u,l=[.08333333333333333,-.002777777777777778,.0007936507936507937,-.0005952380952380952,.0008417508417508418,-.001917526917526918,.00641025641025641,-.02955065359477124,.1796443723688307,-1.3924322169059];if(e=t,u=0,1==t||2==t)return 0;for(t<=7&&(e=t+(u=n.floor(7-t))),r=1/(e*e),o=2*n.PI,s=l[9],a=8;a>=0;a--)s*=r,s+=l[a];if(i=s/e+.5*n.log(o)+(e-.5)*n.log(e)-e,t<=7)for(a=1;a<=u;a++)i-=n.log(e-1),e-=1;return i},t.gammafn=function(t){var e,r,o,i,s=[-1.716185138865495,24.76565080557592,-379.80425647094563,629.3311553128184,866.9662027904133,-31451.272968848367,-36144.413418691176,66456.14382024054],a=[-30.8402300119739,315.35062697960416,-1015.1563674902192,-3107.771671572311,22538.11842098015,4755.846277527881,-134659.9598649693,-115132.2596755535],u=!1,l=0,c=0,f=0,h=t;if(t>171.6243769536076)return 1/0;if(h<=0){if(!(i=h%1+36e-17))return 1/0;u=(1&h?-1:1)*n.PI/n.sin(n.PI*i),h=1-h}for(o=h,r=h<1?h++:(h-=l=(0|h)-1)-1,e=0;e<8;++e)f=(f+s[e])*r,c=c*r+a[e];if(i=f/c+1,o<h)i/=o;else if(o>h)for(e=0;e<l;++e)i*=h,h++;return u&&(i=u/i),i},t.gammap=function(n,e){return t.lowRegGamma(n,e)*t.gammafn(n)},t.lowRegGamma=function(e,r){var o,i=t.gammaln(e),s=e,a=1/e,u=a,l=r+1-e,c=1/1e-30,f=1/l,h=f,m=1,d=-~(8.5*n.log(e>=1?e:1/e)+.4*e+17);if(r<0||e<=0)return NaN;if(r<e+1){for(;m<=d;m++)a+=u*=r/++s;return a*n.exp(-r+e*n.log(r)-i)}for(;m<=d;m++)h*=(f=1/(f=(o=-m*(m-e))*f+(l+=2)))*(c=l+o/c);return 1-h*n.exp(-r+e*n.log(r)-i)},t.factorialln=function(n){return n<0?NaN:t.gammaln(n+1)},t.factorial=function(n){return n<0?NaN:t.gammafn(n+1)},t.combination=function(e,r){return e>170||r>170?n.exp(t.combinationln(e,r)):t.factorial(e)/t.factorial(r)/t.factorial(e-r)},t.combinationln=function(n,e){return t.factorialln(n)-t.factorialln(e)-t.factorialln(n-e)},t.permutation=function(n,e){return t.factorial(n)/t.factorial(n-e)},t.betafn=function(e,r){if(!(e<=0||r<=0))return e+r>170?n.exp(t.betaln(e,r)):t.gammafn(e)*t.gammafn(r)/t.gammafn(e+r)},t.betaln=function(n,e){return t.gammaln(n)+t.gammaln(e)-t.gammaln(n+e)},t.betacf=function(t,e,r){var o,i,s,a,u=1e-30,l=1,c=e+r,f=e+1,h=e-1,m=1,d=1-c*t/f;for(n.abs(d)<u&&(d=u),a=d=1/d;l<=100&&(d=1+(i=l*(r-l)*t/((h+(o=2*l))*(e+o)))*d,n.abs(d)<u&&(d=u),m=1+i/m,n.abs(m)<u&&(m=u),a*=(d=1/d)*m,d=1+(i=-(e+l)*(c+l)*t/((e+o)*(f+o)))*d,n.abs(d)<u&&(d=u),m=1+i/m,n.abs(m)<u&&(m=u),a*=s=(d=1/d)*m,!(n.abs(s-1)<3e-7));l++);return a},t.gammapinv=function(e,r){var o,i,s,a,u,l,c=0,f=r-1,h=t.gammaln(r);if(e>=1)return n.max(100,r+100*n.sqrt(r));if(e<=0)return 0;for(r>1?(u=n.log(f),l=n.exp(f*(u-1)-h),a=e<.5?e:1-e,o=(2.30753+.27061*(i=n.sqrt(-2*n.log(a))))/(1+i*(.99229+.04481*i))-i,e<.5&&(o=-o),o=n.max(.001,r*n.pow(1-1/(9*r)-o/(3*n.sqrt(r)),3))):o=e<(i=1-r*(.253+.12*r))?n.pow(e/i,1/r):1-n.log(1-(e-i)/(1-i));c<12;c++){if(o<=0)return 0;if((o-=i=(s=(t.lowRegGamma(r,o)-e)/(i=r>1?l*n.exp(-(o-f)+f*(n.log(o)-u)):n.exp(-o+f*n.log(o)-h)))/(1-.5*n.min(1,s*((r-1)/o-1))))<=0&&(o=.5*(o+i)),n.abs(i)<1e-8*o)break}return o},t.erf=function(t){var e,r,o,i,s=[-1.3026537197817094,.6419697923564902,.019476473204185836,-.00956151478680863,-.000946595344482036,.000366839497852761,42523324806907e-18,-20278578112534e-18,-1624290004647e-18,130365583558e-17,1.5626441722e-8,-8.5238095915e-8,6.529054439e-9,5.059343495e-9,-9.91364156e-10,-2.27365122e-10,96467911e-18,2394038e-18,-6886027e-18,894487e-18,313092e-18,-112708e-18,381e-18,7106e-18,-1523e-18,-94e-18,121e-18,-28e-18],a=s.length-1,u=!1,l=0,c=0;for(t<0&&(t=-t,u=!0),r=4*(e=2/(2+t))-2;a>0;a--)o=l,l=r*l-c+s[a],c=o;return i=e*n.exp(-t*t+.5*(s[0]+r*l)-c),u?i-1:1-i},t.erfc=function(n){return 1-t.erf(n)},t.erfcinv=function(e){var r,o,i,s,a=0;if(e>=2)return-100;if(e<=0)return 100;for(s=e<1?e:2-e,r=-.70711*((2.30753+.27061*(i=n.sqrt(-2*n.log(s/2))))/(1+i*(.99229+.04481*i))-i);a<2;a++)r+=(o=t.erfc(r)-s)/(1.1283791670955126*n.exp(-r*r)-r*o);return e<1?r:-r},t.ibetainv=function(e,r,o){var i,s,a,u,l,c,f,h,m,d,p=r-1,g=o-1,v=0;if(e<=0)return 0;if(e>=1)return 1;for(r>=1&&o>=1?(a=e<.5?e:1-e,c=(2.30753+.27061*(u=n.sqrt(-2*n.log(a))))/(1+u*(.99229+.04481*u))-u,e<.5&&(c=-c),f=(c*c-3)/6,h=2/(1/(2*r-1)+1/(2*o-1)),m=c*n.sqrt(f+h)/h-(1/(2*o-1)-1/(2*r-1))*(f+5/6-2/(3*h)),c=r/(r+o*n.exp(2*m))):(i=n.log(r/(r+o)),s=n.log(o/(r+o)),c=e<(u=n.exp(r*i)/r)/(m=u+(l=n.exp(o*s)/o))?n.pow(r*m*e,1/r):1-n.pow(o*m*(1-e),1/o)),d=-t.gammaln(r)-t.gammaln(o)+t.gammaln(r+o);v<10;v++){if(0===c||1===c)return c;if((c-=u=(l=(t.ibeta(c,r,o)-e)/(u=n.exp(p*n.log(c)+g*n.log(1-c)+d)))/(1-.5*n.min(1,l*(p/c-g/(1-c)))))<=0&&(c=.5*(c+u)),c>=1&&(c=.5*(c+u+1)),n.abs(u)<1e-8*c&&v>0)break}return c},t.ibeta=function(e,r,o){var i=0===e||1===e?0:n.exp(t.gammaln(r+o)-t.gammaln(r)-t.gammaln(o)+r*n.log(e)+o*n.log(1-e));return!(e<0||e>1)&&(e<(r+1)/(r+o+2)?i*t.betacf(e,r,o)/r:1-i*t.betacf(1-e,o,r)/o)},t.randn=function(e,r){var o,i,s,a,u;if(r||(r=e),e)return t.create(e,r,(function(){return t.randn()}));do{o=t._random_fn(),i=1.7156*(t._random_fn()-.5),u=(s=o-.449871)*s+(a=n.abs(i)+.386595)*(.196*a-.25472*s)}while(u>.27597&&(u>.27846||i*i>-4*n.log(o)*o*o));return i/o},t.randg=function(e,r,o){var i,s,a,u,l,c,f=e;if(o||(o=r),e||(e=1),r)return(c=t.zeros(r,o)).alter((function(){return t.randg(e)})),c;e<1&&(e+=1),i=e-1/3,s=1/n.sqrt(9*i);do{do{u=1+s*(l=t.randn())}while(u<=0);u*=u*u,a=t._random_fn()}while(a>1-.331*n.pow(l,4)&&n.log(a)>.5*l*l+i*(1-u+n.log(u)));if(e==f)return i*u;do{a=t._random_fn()}while(0===a);return n.pow(a,1/f)*i*u},function(n){for(var e=0;e<n.length;e++)!function(n){t.fn[n]=function(){return t(t.map(this,(function(e){return t[n](e)})))}}(n[e])}("gammaln gammafn factorial factorialln".split(" ")),function(n){for(var e=0;e<n.length;e++)!function(n){t.fn[n]=function(){return t(t[n].apply(null,arguments))}}(n[e])}("randn".split(" "))}(n,Math),function(t,n){function e(t,e,r,o){for(var i,s=0,a=1,u=1,l=1,c=0,f=0;n.abs((u-f)/u)>o;)f=u,a=l+(i=-(e+c)*(e+r+c)*t/(e+2*c)/(e+2*c+1))*a,u=(s=u+i*s)+(i=(c+=1)*(r-c)*t/(e+2*c-1)/(e+2*c))*u,s/=l=a+i*l,a/=l,u/=l,l=1;return u/e}function r(e,r,o){var i=[.9815606342467192,.9041172563704749,.7699026741943047,.5873179542866175,.3678314989981802,.1252334085114689],s=[.04717533638651183,.10693932599531843,.16007832854334622,.20316742672306592,.2334925365383548,.24914704581340277],a=.5*e;if(a>=8)return 1;var u,l=2*t.normal.cdf(a,0,1,1,0)-1;l=l>=n.exp(-50/o)?n.pow(l,o):0;for(var c=a,f=(8-a)/(u=e>3?2:3),h=c+f,m=0,d=o-1,p=1;p<=u;p++){for(var g=0,v=.5*(h+c),y=.5*(h-c),w=1;w<=12;w++){var E,A=v+y*(6<w?i[(E=12-w+1)-1]:-i[(E=w)-1]),C=A*A;if(C>60)break;var _=2*t.normal.cdf(A,0,1,1,0)*.5-2*t.normal.cdf(A,e,1,1,0)*.5;_>=n.exp(-30/d)&&(g+=_=s[E-1]*n.exp(-.5*C)*n.pow(_,d))}m+=g*=2*y*o/n.sqrt(2*n.PI),c=h,h+=f}return(l+=m)<=n.exp(-30/r)?0:(l=n.pow(l,r))>=1?1:l}!function(n){for(var e=0;e<n.length;e++)!function(n){t[n]=function t(n,e,r){return this instanceof t?(this._a=n,this._b=e,this._c=r,this):new t(n,e,r)},t.fn[n]=function(e,r,o){var i=t[n](e,r,o);return i.data=this,i},t[n].prototype.sample=function(e){var r=this._a,o=this._b,i=this._c;return e?t.alter(e,(function(){return t[n].sample(r,o,i)})):t[n].sample(r,o,i)},function(e){for(var r=0;r<e.length;r++)!function(e){t[n].prototype[e]=function(r){var o=this._a,i=this._b,s=this._c;return r||0===r||(r=this.data),"number"!=typeof r?t.fn.map.call(r,(function(r){return t[n][e](r,o,i,s)})):t[n][e](r,o,i,s)}}(e[r])}("pdf cdf inv".split(" ")),function(e){for(var r=0;r<e.length;r++)!function(e){t[n].prototype[e]=function(){return t[n][e](this._a,this._b,this._c)}}(e[r])}("mean median mode variance".split(" "))}(n[e])}("beta centralF cauchy chisquare exponential gamma invgamma kumaraswamy laplace lognormal noncentralt normal pareto studentt weibull uniform binomial negbin hypgeom poisson triangular tukey arcsine".split(" ")),t.extend(t.beta,{pdf:function(e,r,o){return e>1||e<0?0:1==r&&1==o?1:r<512&&o<512?n.pow(e,r-1)*n.pow(1-e,o-1)/t.betafn(r,o):n.exp((r-1)*n.log(e)+(o-1)*n.log(1-e)-t.betaln(r,o))},cdf:function(n,e,r){return n>1||n<0?1*(n>1):t.ibeta(n,e,r)},inv:function(n,e,r){return t.ibetainv(n,e,r)},mean:function(t,n){return t/(t+n)},median:function(n,e){return t.ibetainv(.5,n,e)},mode:function(t,n){return(t-1)/(t+n-2)},sample:function(n,e){var r=t.randg(n);return r/(r+t.randg(e))},variance:function(t,e){return t*e/(n.pow(t+e,2)*(t+e+1))}}),t.extend(t.centralF,{pdf:function(e,r,o){var i;return e<0?0:r<=2?0===e&&r<2?1/0:0===e&&2===r?1:1/t.betafn(r/2,o/2)*n.pow(r/o,r/2)*n.pow(e,r/2-1)*n.pow(1+r/o*e,-(r+o)/2):(i=r*e/(o+e*r),r*(o/(o+e*r))/2*t.binomial.pdf((r-2)/2,(r+o-2)/2,i))},cdf:function(n,e,r){return n<0?0:t.ibeta(e*n/(e*n+r),e/2,r/2)},inv:function(n,e,r){return r/(e*(1/t.ibetainv(n,e/2,r/2)-1))},mean:function(t,n){return n>2?n/(n-2):void 0},mode:function(t,n){return t>2?n*(t-2)/(t*(n+2)):void 0},sample:function(n,e){return 2*t.randg(n/2)/n/(2*t.randg(e/2)/e)},variance:function(t,n){if(!(n<=4))return 2*n*n*(t+n-2)/(t*(n-2)*(n-2)*(n-4))}}),t.extend(t.cauchy,{pdf:function(t,e,r){return r<0?0:r/(n.pow(t-e,2)+n.pow(r,2))/n.PI},cdf:function(t,e,r){return n.atan((t-e)/r)/n.PI+.5},inv:function(t,e,r){return e+r*n.tan(n.PI*(t-.5))},median:function(t){return t},mode:function(t){return t},sample:function(e,r){return t.randn()*n.sqrt(1/(2*t.randg(.5)))*r+e}}),t.extend(t.chisquare,{pdf:function(e,r){return e<0?0:0===e&&2===r?.5:n.exp((r/2-1)*n.log(e)-e/2-r/2*n.log(2)-t.gammaln(r/2))},cdf:function(n,e){return n<0?0:t.lowRegGamma(e/2,n/2)},inv:function(n,e){return 2*t.gammapinv(n,.5*e)},mean:function(t){return t},median:function(t){return t*n.pow(1-2/(9*t),3)},mode:function(t){return t-2>0?t-2:0},sample:function(n){return 2*t.randg(n/2)},variance:function(t){return 2*t}}),t.extend(t.exponential,{pdf:function(t,e){return t<0?0:e*n.exp(-e*t)},cdf:function(t,e){return t<0?0:1-n.exp(-e*t)},inv:function(t,e){return-n.log(1-t)/e},mean:function(t){return 1/t},median:function(t){return 1/t*n.log(2)},mode:function(){return 0},sample:function(e){return-1/e*n.log(t._random_fn())},variance:function(t){return n.pow(t,-2)}}),t.extend(t.gamma,{pdf:function(e,r,o){return e<0?0:0===e&&1===r?1/o:n.exp((r-1)*n.log(e)-e/o-t.gammaln(r)-r*n.log(o))},cdf:function(n,e,r){return n<0?0:t.lowRegGamma(e,n/r)},inv:function(n,e,r){return t.gammapinv(n,e)*r},mean:function(t,n){return t*n},mode:function(t,n){if(t>1)return(t-1)*n},sample:function(n,e){return t.randg(n)*e},variance:function(t,n){return t*n*n}}),t.extend(t.invgamma,{pdf:function(e,r,o){return e<=0?0:n.exp(-(r+1)*n.log(e)-o/e-t.gammaln(r)+r*n.log(o))},cdf:function(n,e,r){return n<=0?0:1-t.lowRegGamma(e,r/n)},inv:function(n,e,r){return r/t.gammapinv(1-n,e)},mean:function(t,n){return t>1?n/(t-1):void 0},mode:function(t,n){return n/(t+1)},sample:function(n,e){return e/t.randg(n)},variance:function(t,n){if(!(t<=2))return n*n/((t-1)*(t-1)*(t-2))}}),t.extend(t.kumaraswamy,{pdf:function(t,e,r){return 0===t&&1===e?r:1===t&&1===r?e:n.exp(n.log(e)+n.log(r)+(e-1)*n.log(t)+(r-1)*n.log(1-n.pow(t,e)))},cdf:function(t,e,r){return t<0?0:t>1?1:1-n.pow(1-n.pow(t,e),r)},inv:function(t,e,r){return n.pow(1-n.pow(1-t,1/r),1/e)},mean:function(n,e){return e*t.gammafn(1+1/n)*t.gammafn(e)/t.gammafn(1+1/n+e)},median:function(t,e){return n.pow(1-n.pow(2,-1/e),1/t)},mode:function(t,e){if(t>=1&&e>=1&&1!==t&&1!==e)return n.pow((t-1)/(t*e-1),1/t)},variance:function(){throw new Error("variance not yet implemented")}}),t.extend(t.lognormal,{pdf:function(t,e,r){return t<=0?0:n.exp(-n.log(t)-.5*n.log(2*n.PI)-n.log(r)-n.pow(n.log(t)-e,2)/(2*r*r))},cdf:function(e,r,o){return e<0?0:.5+.5*t.erf((n.log(e)-r)/n.sqrt(2*o*o))},inv:function(e,r,o){return n.exp(-1.4142135623730951*o*t.erfcinv(2*e)+r)},mean:function(t,e){return n.exp(t+e*e/2)},median:function(t){return n.exp(t)},mode:function(t,e){return n.exp(t-e*e)},sample:function(e,r){return n.exp(t.randn()*r+e)},variance:function(t,e){return(n.exp(e*e)-1)*n.exp(2*t+e*e)}}),t.extend(t.noncentralt,{pdf:function(e,r,o){return n.abs(o)<1e-14?t.studentt.pdf(e,r):n.abs(e)<1e-14?n.exp(t.gammaln((r+1)/2)-o*o/2-.5*n.log(n.PI*r)-t.gammaln(r/2)):r/e*(t.noncentralt.cdf(e*n.sqrt(1+2/r),r+2,o)-t.noncentralt.cdf(e,r,o))},cdf:function(e,r,o){var i=1e-14;if(n.abs(o)<i)return t.studentt.cdf(e,r);var s=!1;e<0&&(s=!0,o=-o);for(var a=t.normal.cdf(-o,0,1),u=i+1,l=u,c=e*e/(e*e+r),f=0,h=n.exp(-o*o/2),m=n.exp(-o*o/2-.5*n.log(2)-t.gammaln(1.5))*o;f<200||l>i||u>i;)l=u,f>0&&(h*=o*o/(2*f),m*=o*o/(2*(f+.5))),a+=.5*(u=h*t.beta.cdf(c,f+.5,r/2)+m*t.beta.cdf(c,f+1,r/2)),f++;return s?1-a:a}}),t.extend(t.normal,{pdf:function(t,e,r){return n.exp(-.5*n.log(2*n.PI)-n.log(r)-n.pow(t-e,2)/(2*r*r))},cdf:function(e,r,o){return.5*(1+t.erf((e-r)/n.sqrt(2*o*o)))},inv:function(n,e,r){return-1.4142135623730951*r*t.erfcinv(2*n)+e},mean:function(t){return t},median:function(t){return t},mode:function(t){return t},sample:function(n,e){return t.randn()*e+n},variance:function(t,n){return n*n}}),t.extend(t.pareto,{pdf:function(t,e,r){return t<e?0:r*n.pow(e,r)/n.pow(t,r+1)},cdf:function(t,e,r){return t<e?0:1-n.pow(e/t,r)},inv:function(t,e,r){return e/n.pow(1-t,1/r)},mean:function(t,e){if(!(e<=1))return e*n.pow(t,e)/(e-1)},median:function(t,e){return t*(e*n.SQRT2)},mode:function(t){return t},variance:function(t,e){if(!(e<=2))return t*t*e/(n.pow(e-1,2)*(e-2))}}),t.extend(t.studentt,{pdf:function(e,r){return r=r>1e100?1e100:r,1/(n.sqrt(r)*t.betafn(.5,r/2))*n.pow(1+e*e/r,-(r+1)/2)},cdf:function(e,r){var o=r/2;return t.ibeta((e+n.sqrt(e*e+r))/(2*n.sqrt(e*e+r)),o,o)},inv:function(e,r){var o=t.ibetainv(2*n.min(e,1-e),.5*r,.5);return o=n.sqrt(r*(1-o)/o),e>.5?o:-o},mean:function(t){return t>1?0:void 0},median:function(){return 0},mode:function(){return 0},sample:function(e){return t.randn()*n.sqrt(e/(2*t.randg(e/2)))},variance:function(t){return t>2?t/(t-2):t>1?1/0:void 0}}),t.extend(t.weibull,{pdf:function(t,e,r){return t<0||e<0||r<0?0:r/e*n.pow(t/e,r-1)*n.exp(-n.pow(t/e,r))},cdf:function(t,e,r){return t<0?0:1-n.exp(-n.pow(t/e,r))},inv:function(t,e,r){return e*n.pow(-n.log(1-t),1/r)},mean:function(n,e){return n*t.gammafn(1+1/e)},median:function(t,e){return t*n.pow(n.log(2),1/e)},mode:function(t,e){return e<=1?0:t*n.pow((e-1)/e,1/e)},sample:function(e,r){return e*n.pow(-n.log(t._random_fn()),1/r)},variance:function(e,r){return e*e*t.gammafn(1+2/r)-n.pow(t.weibull.mean(e,r),2)}}),t.extend(t.uniform,{pdf:function(t,n,e){return t<n||t>e?0:1/(e-n)},cdf:function(t,n,e){return t<n?0:t<e?(t-n)/(e-n):1},inv:function(t,n,e){return n+t*(e-n)},mean:function(t,n){return.5*(t+n)},median:function(n,e){return t.mean(n,e)},mode:function(){throw new Error("mode is not yet implemented")},sample:function(n,e){return n/2+e/2+(e/2-n/2)*(2*t._random_fn()-1)},variance:function(t,e){return n.pow(e-t,2)/12}}),t.extend(t.binomial,{pdf:function(e,r,o){return 0===o||1===o?r*o===e?1:0:t.combination(r,e)*n.pow(o,e)*n.pow(1-o,r-e)},cdf:function(r,o,i){var s,a=1e-10;if(r<0)return 0;if(r>=o)return 1;if(i<0||i>1||o<=0)return NaN;var u=i,l=(r=n.floor(r))+1,c=o-r,f=l+c,h=n.exp(t.gammaln(f)-t.gammaln(c)-t.gammaln(l)+l*n.log(u)+c*n.log(1-u));return s=u<(l+1)/(f+2)?h*e(u,l,c,a):1-h*e(1-u,c,l,a),n.round(1/a*(1-s))/(1/a)}}),t.extend(t.negbin,{pdf:function(e,r,o){return e===e>>>0&&(e<0?0:t.combination(e+r-1,r-1)*n.pow(1-o,e)*n.pow(o,r))},cdf:function(n,e,r){var o=0,i=0;if(n<0)return 0;for(;i<=n;i++)o+=t.negbin.pdf(i,e,r);return o}}),t.extend(t.hypgeom,{pdf:function(e,r,o,i){if(e!=e|0)return!1;if(e<0||e<o-(r-i))return 0;if(e>i||e>o)return 0;if(2*o>r)return 2*i>r?t.hypgeom.pdf(r-o-i+e,r,r-o,r-i):t.hypgeom.pdf(i-e,r,r-o,i);if(2*i>r)return t.hypgeom.pdf(o-e,r,o,r-i);if(o<i)return t.hypgeom.pdf(e,r,i,o);for(var s=1,a=0,u=0;u<e;u++){for(;s>1&&a<i;)s*=1-o/(r-a),a++;s*=(i-u)*(o-u)/((u+1)*(r-o-i+u+1))}for(;a<i;a++)s*=1-o/(r-a);return n.min(1,n.max(0,s))},cdf:function(e,r,o,i){if(e<0||e<o-(r-i))return 0;if(e>=i||e>=o)return 1;if(2*o>r)return 2*i>r?t.hypgeom.cdf(r-o-i+e,r,r-o,r-i):1-t.hypgeom.cdf(i-e-1,r,r-o,i);if(2*i>r)return 1-t.hypgeom.cdf(o-e-1,r,o,r-i);if(o<i)return t.hypgeom.cdf(e,r,i,o);for(var s=1,a=1,u=0,l=0;l<e;l++){for(;s>1&&u<i;){var c=1-o/(r-u);a*=c,s*=c,u++}s+=a*=(i-l)*(o-l)/((l+1)*(r-o-i+l+1))}for(;u<i;u++)s*=1-o/(r-u);return n.min(1,n.max(0,s))}}),t.extend(t.poisson,{pdf:function(e,r){return r<0||e%1!=0||e<0?0:n.pow(r,e)*n.exp(-r)/t.factorial(e)},cdf:function(n,e){var r=[],o=0;if(n<0)return 0;for(;o<=n;o++)r.push(t.poisson.pdf(o,e));return t.sum(r)},mean:function(t){return t},variance:function(t){return t},sampleSmall:function(e){var r=1,o=0,i=n.exp(-e);do{o++,r*=t._random_fn()}while(r>i);return o-1},sampleLarge:function(e){var r,o,i,s,a,u,l,c,f,h,m=e;for(s=n.sqrt(m),a=n.log(m),u=.02483*(l=.931+2.53*s)-.059,c=1.1239+1.1328/(l-3.4),f=.9277-3.6224/(l-2);;){if(o=n.random()-.5,i=n.random(),h=.5-n.abs(o),r=n.floor((2*u/h+l)*o+m+.43),h>=.07&&i<=f)return r;if(!(r<0||h<.013&&i>h)&&n.log(i)+n.log(c)-n.log(u/(h*h)+l)<=r*a-m-t.loggam(r+1))return r}},sample:function(t){return t<10?this.sampleSmall(t):this.sampleLarge(t)}}),t.extend(t.triangular,{pdf:function(t,n,e,r){return e<=n||r<n||r>e?NaN:t<n||t>e?0:t<r?2*(t-n)/((e-n)*(r-n)):t===r?2/(e-n):2*(e-t)/((e-n)*(e-r))},cdf:function(t,e,r,o){return r<=e||o<e||o>r?NaN:t<=e?0:t>=r?1:t<=o?n.pow(t-e,2)/((r-e)*(o-e)):1-n.pow(r-t,2)/((r-e)*(r-o))},inv:function(t,e,r,o){return r<=e||o<e||o>r?NaN:t<=(o-e)/(r-e)?e+(r-e)*n.sqrt(t*((o-e)/(r-e))):e+(r-e)*(1-n.sqrt((1-t)*(1-(o-e)/(r-e))))},mean:function(t,n,e){return(t+n+e)/3},median:function(t,e,r){return r<=(t+e)/2?e-n.sqrt((e-t)*(e-r))/n.sqrt(2):r>(t+e)/2?t+n.sqrt((e-t)*(r-t))/n.sqrt(2):void 0},mode:function(t,n,e){return e},sample:function(e,r,o){var i=t._random_fn();return i<(o-e)/(r-e)?e+n.sqrt(i*(r-e)*(o-e)):r-n.sqrt((1-i)*(r-e)*(r-o))},variance:function(t,n,e){return(t*t+n*n+e*e-t*n-t*e-n*e)/18}}),t.extend(t.arcsine,{pdf:function(t,e,r){return r<=e?NaN:t<=e||t>=r?0:2/n.PI*n.pow(n.pow(r-e,2)-n.pow(2*t-e-r,2),-.5)},cdf:function(t,e,r){return t<e?0:t<r?2/n.PI*n.asin(n.sqrt((t-e)/(r-e))):1},inv:function(t,e,r){return e+(.5-.5*n.cos(n.PI*t))*(r-e)},mean:function(t,n){return n<=t?NaN:(t+n)/2},median:function(t,n){return n<=t?NaN:(t+n)/2},mode:function(){throw new Error("mode is not yet implemented")},sample:function(e,r){return(e+r)/2+(r-e)/2*n.sin(2*n.PI*t.uniform.sample(0,1))},variance:function(t,e){return e<=t?NaN:n.pow(e-t,2)/8}}),t.extend(t.laplace,{pdf:function(t,e,r){return r<=0?0:n.exp(-n.abs(t-e)/r)/(2*r)},cdf:function(t,e,r){return r<=0?0:t<e?.5*n.exp((t-e)/r):1-.5*n.exp(-(t-e)/r)},mean:function(t){return t},median:function(t){return t},mode:function(t){return t},variance:function(t,n){return 2*n*n},sample:function(e,r){var o,i=t._random_fn()-.5;return e-r*((o=i)/n.abs(o))*n.log(1-2*n.abs(i))}}),t.extend(t.tukey,{cdf:function(e,o,i){var s=o,a=[.9894009349916499,.9445750230732326,.8656312023878318,.755404408355003,.6178762444026438,.45801677765722737,.2816035507792589,.09501250983763744],u=[.027152459411754096,.062253523938647894,.09515851168249279,.12462897125553388,.14959598881657674,.16915651939500254,.18260341504492358,.1894506104550685];if(e<=0)return 0;if(i<2||s<2)return NaN;if(!Number.isFinite(e))return 1;if(i>25e3)return r(e,1,s);var l,c=.5*i,f=c*n.log(i)-i*n.log(2)-t.gammaln(c),h=c-1,m=.25*i;l=i<=100?1:i<=800?.5:i<=5e3?.25:.125,f+=n.log(l);for(var d=0,p=1;p<=50;p++){for(var g=0,v=(2*p-1)*l,y=1;y<=16;y++){var w,E;8<y?(w=y-8-1,E=f+h*n.log(v+a[w]*l)-(a[w]*l+v)*m):(w=y-1,E=f+h*n.log(v-a[w]*l)+(a[w]*l-v)*m),E>=-30&&(g+=r(8<y?e*n.sqrt(.5*(a[w]*l+v)):e*n.sqrt(.5*(-a[w]*l+v)),1,s)*u[w]*n.exp(E))}if(p*l>=1&&g<=1e-14)break;d+=g}if(g>1e-14)throw new Error("tukey.cdf failed to converge");return d>1&&(d=1),d},inv:function(e,r,o){if(o<2||r<2)return NaN;if(e<0||e>1)return NaN;if(0===e)return 0;if(1===e)return 1/0;var i,s=function(t,e,r){var o=.5-.5*t,i=n.sqrt(n.log(1/(o*o))),s=i+((((-453642210148e-16*i-.204231210125)*i-.342242088547)*i-1)*i+.322232421088)/((((.0038560700634*i+.10353775285)*i+.531103462366)*i+.588581570495)*i+.099348462606);r<120&&(s+=(s*s*s+s)/r/4);var a=.8832-.2368*s;return r<120&&(a+=-1.214/r+1.208*s/r),s*(a*n.log(e-1)+1.4142)}(e,r,o),a=t.tukey.cdf(s,r,o)-e;i=a>0?n.max(0,s-1):s+1;for(var u,l=t.tukey.cdf(i,r,o)-e,c=1;c<50;c++)if(u=i-l*(i-s)/(l-a),a=l,s=i,u<0&&(u=0,l=-e),l=t.tukey.cdf(u,r,o)-e,i=u,n.abs(i-s)<1e-4)return u;throw new Error("tukey.inv failed to converge")}})}(n,Math),function(t,n){var e,r,o=Array.prototype.push,i=t.utils.isArray;function s(n){return i(n)||n instanceof t}t.extend({add:function(n,e){return s(e)?(s(e[0])||(e=[e]),t.map(n,(function(t,n,r){return t+e[n][r]}))):t.map(n,(function(t){return t+e}))},subtract:function(n,e){return s(e)?(s(e[0])||(e=[e]),t.map(n,(function(t,n,r){return t-e[n][r]||0}))):t.map(n,(function(t){return t-e}))},divide:function(n,e){return s(e)?(s(e[0])||(e=[e]),t.multiply(n,t.inv(e))):t.map(n,(function(t){return t/e}))},multiply:function(n,e){var r,o,i,a,u,l,c,f;if(void 0===n.length&&void 0===e.length)return n*e;if(u=n.length,l=n[0].length,c=t.zeros(u,i=s(e)?e[0].length:l),f=0,s(e)){for(;f<i;f++)for(r=0;r<u;r++){for(a=0,o=0;o<l;o++)a+=n[r][o]*e[o][f];c[r][f]=a}return 1===u&&1===f?c[0][0]:c}return t.map(n,(function(t){return t*e}))},outer:function(n,e){return t.multiply(n.map((function(t){return[t]})),[e])},dot:function(n,e){s(n[0])||(n=[n]),s(e[0])||(e=[e]);for(var r,o,i=1===n[0].length&&1!==n.length?t.transpose(n):n,a=1===e[0].length&&1!==e.length?t.transpose(e):e,u=[],l=0,c=i.length,f=i[0].length;l<c;l++){for(u[l]=[],r=0,o=0;o<f;o++)r+=i[l][o]*a[l][o];u[l]=r}return 1===u.length?u[0]:u},pow:function(e,r){return t.map(e,(function(t){return n.pow(t,r)}))},exp:function(e){return t.map(e,(function(t){return n.exp(t)}))},log:function(e){return t.map(e,(function(t){return n.log(t)}))},abs:function(e){return t.map(e,(function(t){return n.abs(t)}))},norm:function(t,e){var r=0,o=0;for(isNaN(e)&&(e=2),s(t[0])&&(t=t[0]);o<t.length;o++)r+=n.pow(n.abs(t[o]),e);return n.pow(r,1/e)},angle:function(e,r){return n.acos(t.dot(e,r)/(t.norm(e)*t.norm(r)))},aug:function(t,n){var e,r=[];for(e=0;e<t.length;e++)r.push(t[e].slice());for(e=0;e<r.length;e++)o.apply(r[e],n[e]);return r},inv:function(n){for(var e,r=n.length,o=n[0].length,i=t.identity(r,o),s=t.gauss_jordan(n,i),a=[],u=0;u<r;u++)for(a[u]=[],e=o;e<s[0].length;e++)a[u][e-o]=s[u][e];return a},det:function t(n){if(2===n.length)return n[0][0]*n[1][1]-n[0][1]*n[1][0];for(var e=0,r=0;r<n.length;r++){for(var o=[],i=1;i<n.length;i++){o[i-1]=[];for(var s=0;s<n.length;s++)s<r?o[i-1][s]=n[i][s]:s>r&&(o[i-1][s-1]=n[i][s])}var a=r%2?-1:1;e+=t(o)*n[0][r]*a}return e},gauss_elimination:function(e,r){var o,i,s,a,u=0,l=0,c=e.length,f=e[0].length,h=1,m=0,d=[];for(o=(e=t.aug(e,r))[0].length,u=0;u<c;u++){for(i=e[u][u],l=u,a=u+1;a<f;a++)i<n.abs(e[a][u])&&(i=e[a][u],l=a);if(l!=u)for(a=0;a<o;a++)s=e[u][a],e[u][a]=e[l][a],e[l][a]=s;for(l=u+1;l<c;l++)for(h=e[l][u]/e[u][u],a=u;a<o;a++)e[l][a]=e[l][a]-h*e[u][a]}for(u=c-1;u>=0;u--){for(m=0,l=u+1;l<=c-1;l++)m+=d[l]*e[u][l];d[u]=(e[u][o-1]-m)/e[u][u]}return d},gauss_jordan:function(e,r){var o,i,s,a=t.aug(e,r),u=a.length,l=a[0].length,c=0;for(i=0;i<u;i++){var f=i;for(s=i+1;s<u;s++)n.abs(a[s][i])>n.abs(a[f][i])&&(f=s);var h=a[i];for(a[i]=a[f],a[f]=h,s=i+1;s<u;s++)for(c=a[s][i]/a[i][i],o=i;o<l;o++)a[s][o]-=a[i][o]*c}for(i=u-1;i>=0;i--){for(c=a[i][i],s=0;s<i;s++)for(o=l-1;o>i-1;o--)a[s][o]-=a[i][o]*a[s][i]/c;for(a[i][i]/=c,o=u;o<l;o++)a[i][o]/=c}return a},triaUpSolve:function(n,e){var r,o=n[0].length,i=t.zeros(1,o)[0],s=!1;return null!=e[0].length&&(e=e.map((function(t){return t[0]})),s=!0),t.arange(o-1,-1,-1).forEach((function(s){r=t.arange(s+1,o).map((function(t){return i[t]*n[s][t]})),i[s]=(e[s]-t.sum(r))/n[s][s]})),s?i.map((function(t){return[t]})):i},triaLowSolve:function(n,e){var r,o=n[0].length,i=t.zeros(1,o)[0],s=!1;return null!=e[0].length&&(e=e.map((function(t){return t[0]})),s=!0),t.arange(o).forEach((function(o){r=t.arange(o).map((function(t){return n[o][t]*i[t]})),i[o]=(e[o]-t.sum(r))/n[o][o]})),s?i.map((function(t){return[t]})):i},lu:function(n){var e,r=n.length,o=t.identity(r),i=t.zeros(n.length,n[0].length);return t.arange(r).forEach((function(t){i[0][t]=n[0][t]})),t.arange(1,r).forEach((function(s){t.arange(s).forEach((function(r){e=t.arange(r).map((function(t){return o[s][t]*i[t][r]})),o[s][r]=(n[s][r]-t.sum(e))/i[r][r]})),t.arange(s,r).forEach((function(r){e=t.arange(s).map((function(t){return o[s][t]*i[t][r]})),i[s][r]=n[e.length][r]-t.sum(e)}))})),[o,i]},cholesky:function(e){var r,o=e.length,i=t.zeros(e.length,e[0].length);return t.arange(o).forEach((function(s){r=t.arange(s).map((function(t){return n.pow(i[s][t],2)})),i[s][s]=n.sqrt(e[s][s]-t.sum(r)),t.arange(s+1,o).forEach((function(n){r=t.arange(s).map((function(t){return i[s][t]*i[n][t]})),i[n][s]=(e[s][n]-t.sum(r))/i[s][s]}))})),i},gauss_jacobi:function(e,r,o,i){for(var s,a,u,l,c=0,f=0,h=e.length,m=[],d=[],p=[];c<h;c++)for(m[c]=[],d[c]=[],p[c]=[],f=0;f<h;f++)c>f?(m[c][f]=e[c][f],d[c][f]=p[c][f]=0):c<f?(d[c][f]=e[c][f],m[c][f]=p[c][f]=0):(p[c][f]=e[c][f],m[c][f]=d[c][f]=0);for(u=t.multiply(t.multiply(t.inv(p),t.add(m,d)),-1),a=t.multiply(t.inv(p),r),s=o,l=t.add(t.multiply(u,o),a),c=2;n.abs(t.norm(t.subtract(l,s)))>i;)s=l,l=t.add(t.multiply(u,s),a),c++;return l},gauss_seidel:function(e,r,o,i){for(var s,a,u,l,c,f=0,h=e.length,m=[],d=[],p=[];f<h;f++)for(m[f]=[],d[f]=[],p[f]=[],s=0;s<h;s++)f>s?(m[f][s]=e[f][s],d[f][s]=p[f][s]=0):f<s?(d[f][s]=e[f][s],m[f][s]=p[f][s]=0):(p[f][s]=e[f][s],m[f][s]=d[f][s]=0);for(l=t.multiply(t.multiply(t.inv(t.add(p,m)),d),-1),u=t.multiply(t.inv(t.add(p,m)),r),a=o,c=t.add(t.multiply(l,o),u),f=2;n.abs(t.norm(t.subtract(c,a)))>i;)a=c,c=t.add(t.multiply(l,a),u),f+=1;return c},SOR:function(e,r,o,i,s){for(var a,u,l,c,f,h=0,m=e.length,d=[],p=[],g=[];h<m;h++)for(d[h]=[],p[h]=[],g[h]=[],a=0;a<m;a++)h>a?(d[h][a]=e[h][a],p[h][a]=g[h][a]=0):h<a?(p[h][a]=e[h][a],d[h][a]=g[h][a]=0):(g[h][a]=e[h][a],d[h][a]=p[h][a]=0);for(c=t.multiply(t.inv(t.add(g,t.multiply(d,s))),t.subtract(t.multiply(g,1-s),t.multiply(p,s))),l=t.multiply(t.multiply(t.inv(t.add(g,t.multiply(d,s))),r),s),u=o,f=t.add(t.multiply(c,o),l),h=2;n.abs(t.norm(t.subtract(f,u)))>i;)u=f,f=t.add(t.multiply(c,u),l),h++;return f},householder:function(e){for(var r,o,i,s,a=e.length,u=e[0].length,l=0,c=[],f=[];l<a-1;l++){for(r=0,s=l+1;s<u;s++)r+=e[s][l]*e[s][l];for(r=(e[l+1][l]>0?-1:1)*n.sqrt(r),o=n.sqrt((r*r-e[l+1][l]*r)/2),(c=t.zeros(a,1))[l+1][0]=(e[l+1][l]-r)/(2*o),i=l+2;i<a;i++)c[i][0]=e[i][l]/(2*o);f=t.subtract(t.identity(a,u),t.multiply(t.multiply(c,t.transpose(c)),2)),e=t.multiply(f,t.multiply(e,f))}return e},QR:(e=t.sum,r=t.arange,function(o){var i,s,a,u=o.length,l=o[0].length,c=t.zeros(l,l);for(o=t.copy(o),s=0;s<l;s++){for(c[s][s]=n.sqrt(e(r(u).map((function(t){return o[t][s]*o[t][s]})))),i=0;i<u;i++)o[i][s]=o[i][s]/c[s][s];for(a=s+1;a<l;a++)for(c[s][a]=e(r(u).map((function(t){return o[t][s]*o[t][a]}))),i=0;i<u;i++)o[i][a]=o[i][a]-o[i][s]*c[s][a]}return[o,c]}),lstsq:function(n,e){var r=!1;void 0===e[0].length&&(e=e.map((function(t){return[t]})),r=!0);var o=t.QR(n),i=o[0],s=o[1],a=n[0].length,u=t.slice(i,{col:{end:a}}),l=function(n){var e=(n=t.copy(n)).length,r=t.identity(e);return t.arange(e-1,-1,-1).forEach((function(e){t.sliceAssign(r,{row:e},t.divide(t.slice(r,{row:e}),n[e][e])),t.sliceAssign(n,{row:e},t.divide(t.slice(n,{row:e}),n[e][e])),t.arange(e).forEach((function(o){var i=t.multiply(n[o][e],-1),s=t.slice(n,{row:o}),a=t.multiply(t.slice(n,{row:e}),i);t.sliceAssign(n,{row:o},t.add(s,a));var u=t.slice(r,{row:o}),l=t.multiply(t.slice(r,{row:e}),i);t.sliceAssign(r,{row:o},t.add(u,l))}))})),r}(t.slice(s,{row:{end:a}})),c=t.transpose(u);void 0===c[0].length&&(c=[c]);var f=t.multiply(t.multiply(l,c),e);return void 0===f.length&&(f=[[f]]),r?f.map((function(t){return t[0]})):f},jacobi:function(e){for(var r,o,i,s,a,u,l,c=1,f=e.length,h=t.identity(f,f),m=[];1===c;){for(a=e[0][1],i=0,s=1,r=0;r<f;r++)for(o=0;o<f;o++)r!=o&&a<n.abs(e[r][o])&&(a=n.abs(e[r][o]),i=r,s=o);for(u=e[i][i]===e[s][s]?e[i][s]>0?n.PI/4:-n.PI/4:n.atan(2*e[i][s]/(e[i][i]-e[s][s]))/2,(l=t.identity(f,f))[i][i]=n.cos(u),l[i][s]=-n.sin(u),l[s][i]=n.sin(u),l[s][s]=n.cos(u),h=t.multiply(h,l),e=t.multiply(t.multiply(t.inv(l),e),l),c=0,r=1;r<f;r++)for(o=1;o<f;o++)r!=o&&n.abs(e[r][o])>.001&&(c=1)}for(r=0;r<f;r++)m.push(e[r][r]);return[h,m]},rungekutta:function(t,n,e,r,o,i){var s,a,u;if(2===i)for(;r<=e;)o+=((s=n*t(r,o))+(a=n*t(r+n,o+s)))/2,r+=n;if(4===i)for(;r<=e;)o+=((s=n*t(r,o))+2*(a=n*t(r+n/2,o+s/2))+2*(u=n*t(r+n/2,o+a/2))+n*t(r+n,o+u))/6,r+=n;return o},romberg:function(t,e,r,o){for(var i,s,a,u,l,c=0,f=(r-e)/2,h=[],m=[],d=[];c<o/2;){for(l=t(e),a=e,u=0;a<=r;a+=f,u++)h[u]=a;for(i=h.length,a=1;a<i-1;a++)l+=(a%2!=0?4:2)*t(h[a]);l=f/3*(l+t(r)),d[c]=l,f/=2,c++}for(s=d.length,i=1;1!==s;){for(a=0;a<s-1;a++)m[a]=(n.pow(4,i)*d[a+1]-d[a])/(n.pow(4,i)-1);s=m.length,d=m,m=[],i++}return d},richardson:function(t,e,r,o){function i(t,n){for(var e,r=0,o=t.length;r<o;r++)t[r]===n&&(e=r);return e}for(var s,a,u,l,c,f=n.abs(r-t[i(t,r)+1]),h=0,m=[],d=[];o>=f;)s=i(t,r+o),a=i(t,r),m[h]=(e[s]-2*e[a]+e[2*a-s])/(o*o),o/=2,h++;for(l=m.length,u=1;1!=l;){for(c=0;c<l-1;c++)d[c]=(n.pow(4,u)*m[c+1]-m[c])/(n.pow(4,u)-1);l=d.length,m=d,d=[],u++}return m},simpson:function(t,n,e,r){for(var o,i=(e-n)/r,s=t(n),a=[],u=n,l=0,c=1;u<=e;u+=i,l++)a[l]=u;for(o=a.length;c<o-1;c++)s+=(c%2!=0?4:2)*t(a[c]);return i/3*(s+t(e))},hermite:function(t,n,e,r){for(var o,i=t.length,s=0,a=0,u=[],l=[],c=[],f=[];a<i;a++){for(u[a]=1,o=0;o<i;o++)a!=o&&(u[a]*=(r-t[o])/(t[a]-t[o]));for(l[a]=0,o=0;o<i;o++)a!=o&&(l[a]+=1/(t[a]-t[o]));c[a]=(1-2*(r-t[a])*l[a])*(u[a]*u[a]),f[a]=(r-t[a])*(u[a]*u[a]),s+=c[a]*n[a]+f[a]*e[a]}return s},lagrange:function(t,n,e){for(var r,o,i=0,s=0,a=t.length;s<a;s++){for(o=n[s],r=0;r<a;r++)s!=r&&(o*=(e-t[r])/(t[s]-t[r]));i+=o}return i},cubic_spline:function(n,e,r){for(var o,i,s=n.length,a=0,u=[],l=[],c=[],f=[],h=[],m=[];a<s-1;a++)f[a]=n[a+1]-n[a];for(c[0]=0,a=1;a<s-1;a++)c[a]=3/f[a]*(e[a+1]-e[a])-3/f[a-1]*(e[a]-e[a-1]);for(a=1;a<s-1;a++)u[a]=[],l[a]=[],u[a][a-1]=f[a-1],u[a][a]=2*(f[a-1]+f[a]),u[a][a+1]=f[a],l[a][0]=c[a];for(i=t.multiply(t.inv(u),l),o=0;o<s-1;o++)h[o]=(e[o+1]-e[o])/f[o]-f[o]*(i[o+1][0]+2*i[o][0])/3,m[o]=(i[o+1][0]-i[o][0])/(3*f[o]);for(o=0;o<s&&!(n[o]>r);o++);return e[o-=1]+(r-n[o])*h[o]+t.sq(r-n[o])*i[o]+(r-n[o])*t.sq(r-n[o])*m[o]},gauss_quadrature:function(){throw new Error("gauss_quadrature not yet implemented")},PCA:function(n){var e,r,o,i,s,a=n.length,u=n[0].length,l=0,c=[],f=[],h=[],m=[],d=[],p=[],g=[];for(l=0;l<a;l++)c[l]=t.sum(n[l])/u;for(l=0;l<u;l++)for(d[l]=[],e=0;e<a;e++)d[l][e]=n[e][l]-c[e];for(d=t.transpose(d),l=0;l<a;l++)for(p[l]=[],e=0;e<a;e++)p[l][e]=t.dot([d[l]],[d[e]])/(u-1);for(s=(o=t.jacobi(p))[0],f=o[1],g=t.transpose(s),l=0;l<f.length;l++)for(e=l;e<f.length;e++)f[l]<f[e]&&(r=f[l],f[l]=f[e],f[e]=r,h=g[l],g[l]=g[e],g[e]=h);for(i=t.transpose(d),l=0;l<a;l++)for(m[l]=[],e=0;e<i.length;e++)m[l][e]=t.dot([g[l]],[i[e]]);return[n,f,g,m]}}),function(n){for(var e=0;e<n.length;e++)!function(n){t.fn[n]=function(e,r){var o=this;return r?(setTimeout((function(){r.call(o,t.fn[n].call(o,e))}),15),this):"number"==typeof t[n](this,e)?t[n](this,e):t(t[n](this,e))}}(n[e])}("add divide multiply subtract dot pow exp log abs norm angle".split(" "))}(n,Math),function(t,n){var e=[].slice,r=t.utils.isNumber,o=t.utils.isArray;function i(t,e,r,o){if(t>1||r>1||t<=0||r<=0)throw new Error("Proportions should be greater than 0 and less than 1");var i=(t*e+r*o)/(e+o);return(t-r)/n.sqrt(i*(1-i)*(1/e+1/o))}t.extend({zscore:function(){var n=e.call(arguments);return r(n[1])?(n[0]-n[1])/n[2]:(n[0]-t.mean(n[1]))/t.stdev(n[1],n[2])},ztest:function(){var r,i=e.call(arguments);return o(i[1])?(r=t.zscore(i[0],i[1],i[3]),1===i[2]?t.normal.cdf(-n.abs(r),0,1):2*t.normal.cdf(-n.abs(r),0,1)):i.length>2?(r=t.zscore(i[0],i[1],i[2]),1===i[3]?t.normal.cdf(-n.abs(r),0,1):2*t.normal.cdf(-n.abs(r),0,1)):(r=i[0],1===i[1]?t.normal.cdf(-n.abs(r),0,1):2*t.normal.cdf(-n.abs(r),0,1))}}),t.extend(t.fn,{zscore:function(t,n){return(t-this.mean())/this.stdev(n)},ztest:function(e,r,o){var i=n.abs(this.zscore(e,o));return 1===r?t.normal.cdf(-i,0,1):2*t.normal.cdf(-i,0,1)}}),t.extend({tscore:function(){var r=e.call(arguments);return 4===r.length?(r[0]-r[1])/(r[2]/n.sqrt(r[3])):(r[0]-t.mean(r[1]))/(t.stdev(r[1],!0)/n.sqrt(r[1].length))},ttest:function(){var o,i=e.call(arguments);return 5===i.length?(o=n.abs(t.tscore(i[0],i[1],i[2],i[3])),1===i[4]?t.studentt.cdf(-o,i[3]-1):2*t.studentt.cdf(-o,i[3]-1)):r(i[1])?(o=n.abs(i[0]),1==i[2]?t.studentt.cdf(-o,i[1]-1):2*t.studentt.cdf(-o,i[1]-1)):(o=n.abs(t.tscore(i[0],i[1])),1==i[2]?t.studentt.cdf(-o,i[1].length-1):2*t.studentt.cdf(-o,i[1].length-1))}}),t.extend(t.fn,{tscore:function(t){return(t-this.mean())/(this.stdev(!0)/n.sqrt(this.cols()))},ttest:function(e,r){return 1===r?1-t.studentt.cdf(n.abs(this.tscore(e)),this.cols()-1):2*t.studentt.cdf(-n.abs(this.tscore(e)),this.cols()-1)}}),t.extend({anovafscore:function(){var r,o,i,s,a,u,l,c,f=e.call(arguments);if(1===f.length){for(a=new Array(f[0].length),l=0;l<f[0].length;l++)a[l]=f[0][l];f=a}for(o=new Array,l=0;l<f.length;l++)o=o.concat(f[l]);for(i=t.mean(o),r=0,l=0;l<f.length;l++)r+=f[l].length*n.pow(t.mean(f[l])-i,2);for(r/=f.length-1,u=0,l=0;l<f.length;l++)for(s=t.mean(f[l]),c=0;c<f[l].length;c++)u+=n.pow(f[l][c]-s,2);return r/(u/(o.length-f.length))},anovaftest:function(){var n,o,i,s,a=e.call(arguments);if(r(a[0]))return 1-t.centralF.cdf(a[0],a[1],a[2]);var u=t.anovafscore(a);for(n=a.length-1,i=0,s=0;s<a.length;s++)i+=a[s].length;return o=i-n-1,1-t.centralF.cdf(u,n,o)},ftest:function(n,e,r){return 1-t.centralF.cdf(n,e,r)}}),t.extend(t.fn,{anovafscore:function(){return t.anovafscore(this.toArray())},anovaftes:function(){var n,e=0;for(n=0;n<this.length;n++)e+=this[n].length;return t.ftest(this.anovafscore(),this.length-1,e-this.length)}}),t.extend({qscore:function(){var o,i,s,a,u,l=e.call(arguments);return r(l[0])?(o=l[0],i=l[1],s=l[2],a=l[3],u=l[4]):(o=t.mean(l[0]),i=t.mean(l[1]),s=l[0].length,a=l[1].length,u=l[2]),n.abs(o-i)/(u*n.sqrt((1/s+1/a)/2))},qtest:function(){var n,r=e.call(arguments);3===r.length?(n=r[0],r=r.slice(1)):7===r.length?(n=t.qscore(r[0],r[1],r[2],r[3],r[4]),r=r.slice(5)):(n=t.qscore(r[0],r[1],r[2]),r=r.slice(3));var o=r[0],i=r[1];return 1-t.tukey.cdf(n,i,o-i)},tukeyhsd:function(n){for(var e=t.pooledstdev(n),r=n.map((function(n){return t.mean(n)})),o=n.reduce((function(t,n){return t+n.length}),0),i=[],s=0;s<n.length;++s)for(var a=s+1;a<n.length;++a){var u=t.qtest(r[s],r[a],n[s].length,n[a].length,e,o,n.length);i.push([[s,a],u])}return i}}),t.extend({normalci:function(){var r,o=e.call(arguments),i=new Array(2);return r=4===o.length?n.abs(t.normal.inv(o[1]/2,0,1)*o[2]/n.sqrt(o[3])):n.abs(t.normal.inv(o[1]/2,0,1)*t.stdev(o[2])/n.sqrt(o[2].length)),i[0]=o[0]-r,i[1]=o[0]+r,i},tci:function(){var r,o=e.call(arguments),i=new Array(2);return r=4===o.length?n.abs(t.studentt.inv(o[1]/2,o[3]-1)*o[2]/n.sqrt(o[3])):n.abs(t.studentt.inv(o[1]/2,o[2].length-1)*t.stdev(o[2],!0)/n.sqrt(o[2].length)),i[0]=o[0]-r,i[1]=o[0]+r,i},significant:function(t,n){return t<n}}),t.extend(t.fn,{normalci:function(n,e){return t.normalci(n,e,this.toArray())},tci:function(n,e){return t.tci(n,e,this.toArray())}}),t.extend(t.fn,{oneSidedDifferenceOfProportions:function(n,e,r,o){var s=i(n,e,r,o);return t.ztest(s,1)},twoSidedDifferenceOfProportions:function(n,e,r,o){var s=i(n,e,r,o);return t.ztest(s,2)}})}(n,Math),n.models=function(){function t(t,e){var r=t.length,o=e[0].length-1,i=r-o-1,s=n.lstsq(e,t),a=n.multiply(e,s.map((function(t){return[t]}))).map((function(t){return t[0]})),u=n.subtract(t,a),l=n.mean(t),c=n.sum(a.map((function(t){return Math.pow(t-l,2)}))),f=n.sum(t.map((function(t,n){return Math.pow(t-a[n],2)}))),h=c+f;return{exog:e,endog:t,nobs:r,df_model:o,df_resid:i,coef:s,predict:a,resid:u,ybar:l,SST:h,SSE:c,SSR:f,R2:c/h}}function e(e){var r,o,i=(r=e.exog,o=r[0].length,n.arange(o).map((function(e){var i=n.arange(o).filter((function(t){return t!==e}));return t(n.col(r,e).map((function(t){return t[0]})),n.col(r,i))}))),s=Math.sqrt(e.SSR/e.df_resid),a=i.map((function(t){var n=t.SST,e=t.R2;return s/Math.sqrt(n*(1-e))})),u=e.coef.map((function(t,n){return(t-0)/a[n]})),l=u.map((function(t){var r=n.studentt.cdf(t,e.df_resid);return 2*(r>.5?1-r:r)})),c=n.studentt.inv(.975,e.df_resid),f=e.coef.map((function(t,n){var e=c*a[n];return[t-e,t+e]}));return{se:a,t:u,p:l,sigmaHat:s,interval95:f}}return{ols:function(r,o){var i=t(r,o),s=e(i),a=function(t){var e,r,o,i=t.R2/t.df_model/((1-t.R2)/t.df_resid);return{F_statistic:i,pvalue:1-(e=i,r=t.df_model,o=t.df_resid,n.beta.cdf(e/(o/r+e),r/2,o/2))}}(i),u=1-(1-i.R2)*((i.nobs-1)/i.df_resid);return i.t=s,i.f=a,i.adjust_R2=u,i}}}(),n.extend({buildxmatrix:function(){for(var t=new Array(arguments.length),e=0;e<arguments.length;e++){t[e]=[1].concat(arguments[e])}return n(t)},builddxmatrix:function(){for(var t=new Array(arguments[0].length),e=0;e<arguments[0].length;e++){t[e]=[1].concat(arguments[0][e])}return n(t)},buildjxmatrix:function(t){for(var e=new Array(t.length),r=0;r<t.length;r++)e[r]=t[r];return n.builddxmatrix(e)},buildymatrix:function(t){return n(t).transpose()},buildjymatrix:function(t){return t.transpose()},matrixmult:function(t,e){var r,o,i,s,a;if(t.cols()==e.rows()){if(e.rows()>1){for(s=[],r=0;r<t.rows();r++)for(s[r]=[],o=0;o<e.cols();o++){for(a=0,i=0;i<t.cols();i++)a+=t.toArray()[r][i]*e.toArray()[i][o];s[r][o]=a}return n(s)}for(s=[],r=0;r<t.rows();r++)for(s[r]=[],o=0;o<e.cols();o++){for(a=0,i=0;i<t.cols();i++)a+=t.toArray()[r][i]*e.toArray()[o];s[r][o]=a}return n(s)}},regress:function(t,e){var r=n.xtranspxinv(t),o=t.transpose(),i=n.matrixmult(n(r),o);return n.matrixmult(i,e)},regresst:function(t,e,r){var o=n.regress(t,e),i={anova:{}},s=n.jMatYBar(t,o);i.yBar=s;var a=e.mean();i.anova.residuals=n.residuals(e,s),i.anova.ssr=n.ssr(s,a),i.anova.msr=i.anova.ssr/(t[0].length-1),i.anova.sse=n.sse(e,s),i.anova.mse=i.anova.sse/(e.length-(t[0].length-1)-1),i.anova.sst=n.sst(e,a),i.anova.mst=i.anova.sst/(e.length-1),i.anova.r2=1-i.anova.sse/i.anova.sst,i.anova.r2<0&&(i.anova.r2=0),i.anova.fratio=i.anova.msr/i.anova.mse,i.anova.pvalue=n.anovaftest(i.anova.fratio,t[0].length-1,e.length-(t[0].length-1)-1),i.anova.rmse=Math.sqrt(i.anova.mse),i.anova.r2adj=1-i.anova.mse/i.anova.mst,i.anova.r2adj<0&&(i.anova.r2adj=0),i.stats=new Array(t[0].length);for(var u,l,c,f=n.xtranspxinv(t),h=0;h<o.length;h++)u=Math.sqrt(i.anova.mse*Math.abs(f[h][h])),l=Math.abs(o[h]/u),c=n.ttest(l,e.length-t[0].length-1,r),i.stats[h]=[o[h],u,l,c];return i.regress=o,i},xtranspx:function(t){return n.matrixmult(t.transpose(),t)},xtranspxinv:function(t){var e=n.matrixmult(t.transpose(),t);return n.inv(e)},jMatYBar:function(t,e){var r=n.matrixmult(t,e);return new n(r)},residuals:function(t,e){return n.matrixsubtract(t,e)},ssr:function(t,n){for(var e=0,r=0;r<t.length;r++)e+=Math.pow(t[r]-n,2);return e},sse:function(t,n){for(var e=0,r=0;r<t.length;r++)e+=Math.pow(t[r]-n[r],2);return e},sst:function(t,n){for(var e=0,r=0;r<t.length;r++)e+=Math.pow(t[r]-n,2);return e},matrixsubtract:function(t,e){for(var r=new Array(t.length),o=0;o<t.length;o++){r[o]=new Array(t[o].length);for(var i=0;i<t[o].length;i++)r[o][i]=t[o][i]-e[o][i]}return n(r)}}),n.jStat=n,n)},5072:t=>{"use strict";var n=[];function e(t){for(var e=-1,r=0;r<n.length;r++)if(n[r].identifier===t){e=r;break}return e}function r(t,r){for(var i={},s=[],a=0;a<t.length;a++){var u=t[a],l=r.base?u[0]+r.base:u[0],c=i[l]||0,f="".concat(l," ").concat(c);i[l]=c+1;var h=e(f),m={css:u[1],media:u[2],sourceMap:u[3],supports:u[4],layer:u[5]};if(-1!==h)n[h].references++,n[h].updater(m);else{var d=o(m,r);r.byIndex=a,n.splice(a,0,{identifier:f,updater:d,references:1})}s.push(f)}return s}function o(t,n){var e=n.domAPI(n);return e.update(t),function(n){if(n){if(n.css===t.css&&n.media===t.media&&n.sourceMap===t.sourceMap&&n.supports===t.supports&&n.layer===t.layer)return;e.update(t=n)}else e.remove()}}t.exports=function(t,o){var i=r(t=t||[],o=o||{});return function(t){t=t||[];for(var s=0;s<i.length;s++){var a=e(i[s]);n[a].references--}for(var u=r(t,o),l=0;l<i.length;l++){var c=e(i[l]);0===n[c].references&&(n[c].updater(),n.splice(c,1))}i=u}}},7659:t=>{"use strict";var n={};t.exports=function(t,e){var r=function(t){if(void 0===n[t]){var e=document.querySelector(t);if(window.HTMLIFrameElement&&e instanceof window.HTMLIFrameElement)try{e=e.contentDocument.head}catch(t){e=null}n[t]=e}return n[t]}(t);if(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(e)}},540:t=>{"use strict";t.exports=function(t){var n=document.createElement("style");return t.setAttributes(n,t.attributes),t.insert(n,t.options),n}},5056:(t,n,e)=>{"use strict";t.exports=function(t){var n=e.nc;n&&t.setAttribute("nonce",n)}},7825:t=>{"use strict";t.exports=function(t){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var n=t.insertStyleElement(t);return{update:function(e){!function(t,n,e){var r="";e.supports&&(r+="@supports (".concat(e.supports,") {")),e.media&&(r+="@media ".concat(e.media," {"));var o=void 0!==e.layer;o&&(r+="@layer".concat(e.layer.length>0?" ".concat(e.layer):""," {")),r+=e.css,o&&(r+="}"),e.media&&(r+="}"),e.supports&&(r+="}");var i=e.sourceMap;i&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(i))))," */")),n.styleTagTransform(r,t,n.options)}(n,t,e)},remove:function(){!function(t){if(null===t.parentNode)return!1;t.parentNode.removeChild(t)}(n)}}}},1113:t=>{"use strict";t.exports=function(t,n){if(n.styleSheet)n.styleSheet.cssText=t;else{for(;n.firstChild;)n.removeChild(n.firstChild);n.appendChild(document.createTextNode(t))}}}},n={};function e(r){var o=n[r];if(void 0!==o)return o.exports;var i=n[r]={id:r,loaded:!1,exports:{}};return t[r].call(i.exports,i,i.exports,e),i.loaded=!0,i.exports}e.m=t,e.amdO={},e.n=t=>{var n=t&&t.__esModule?()=>t.default:()=>t;return e.d(n,{a:n}),n},e.d=(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},e.u=t=>t+".js",e.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),e.hmd=t=>((t=Object.create(t)).children||(t.children=[]),Object.defineProperty(t,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+t.id)}}),t),e.o=(t,n)=>Object.prototype.hasOwnProperty.call(t,n),e.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},(()=>{var t;e.g.importScripts&&(t=e.g.location+"");var n=e.g.document;if(!t&&n&&(n.currentScript&&(t=n.currentScript.src),!t)){var r=n.getElementsByTagName("script");if(r.length)for(var o=r.length-1;o>-1&&(!t||!/^http(s?):/.test(t));)t=r[o--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),e.p=t})(),e.b=document.baseURI||self.location.href,e.nc=void 0;var r={};(()=>{"use strict";e.r(r),e.d(r,{GetMCLEditor:()=>br,MCL:()=>Ir,MCLInitializationFunction:()=>Nr,MVA:()=>Tr,PCA:()=>wr,PLS:()=>Sr,_package:()=>pr,anova:()=>Zr,applyLinearKernelSVM:()=>Rr,applyLinearRegression:()=>io,applyPolynomialKernelSVM:()=>Yr,applyRBFkernelSVM:()=>kr,applySigmoidKernelSVM:()=>jr,dbScan:()=>yr,dbscanPostProcessingFunction:()=>Er,demoMultivariateAnalysis:()=>Or,generateDatasetForLinearRegressionTest:()=>ro,info:()=>gr,init:()=>vr,isApplicableLinearKernelSVM:()=>Fr,isApplicableLinearRegression:()=>so,isApplicablePolynomialKernelSVM:()=>Hr,isApplicableRBFkernelSVM:()=>Vr,isApplicableSigmoidKernelSVM:()=>Xr,isInteractiveLinearKernelSVM:()=>Dr,isInteractiveLinearRegression:()=>ao,isInteractivePolynomialKernelSVM:()=>zr,isInteractiveRBFkernelSVM:()=>Gr,isInteractiveSigmoidKernelSVM:()=>Qr,kNNImputation:()=>to,kNNImputationForTable:()=>no,linearRegression:()=>eo,numberPreprocessingFunction:()=>Ar,reduceDimensionality:()=>_r,stringPreprocessingFunction:()=>Cr,testDataLinearNonSeparable:()=>xr,testDataLinearSeparable:()=>Pr,topMenuPLS:()=>Mr,trainLinearKernelSVM:()=>Lr,trainLinearRegression:()=>oo,trainPolynomialKernelSVM:()=>Wr,trainRBFkernelSVM:()=>Br,trainSigmoidKernelSVM:()=>Kr,visualizeLinearKernelSVM:()=>Ur,visualizePolynomialKernelSVM:()=>$r,visualizeRBFkernelSVM:()=>qr,visualizeSigmoidKernelSVM:()=>Jr});const t=grok,n=ui,o=DG,i={i32:"HEAP32",f32:"HEAPF32"},s={i32:Int32Array,f32:Float32Array},a={i32:2,f32:2},u={i32:DG.Column.fromInt32Array,f32:DG.Column.fromFloat32Array};class l{constructor(t){this.data=t}complementArrOfParams(t){t.push(this.data)}complementArrOfTypes(t){t.push("number")}allocateMemoryForBuffer(t){}isMemoryForBufferAllocated(){return!0}putDataToBuffer(t){}getDataFromBuffer(t){}freeBuffer(t){}}class c extends l{constructor(t,n,e=!1){super(t),this.type=n,this.toUpdate=e,this.buf=0,this.numOfRows=t.length}complementArrOfParams(t){t.push(this.buf),t.push(this.numOfRows)}complementArrOfTypes(t){t.push("number"),t.push("number")}allocateMemoryForBuffer(t){this.buf=t._malloc(this.numOfRows*s[this.type].BYTES_PER_ELEMENT)}isMemoryForBufferAllocated(){return 0!=this.buf}putDataToBuffer(t){if(this.isMemoryForBufferAllocated()){const n=this.type,e=a[n],r=t[i[n]];let o=null;const u=this.data;o="int"==u.type&&"i32"==n||"double"==u.type&&"f32"==n?u.getRawData():new s[n](u.getRawData()),o&&r.set(o,this.buf>>e)}}getDataFromBuffer(t){if(this.toUpdate&&this.isMemoryForBufferAllocated()){const n=this.type,e=t[i[n]],r=this.buf,o=s[n].BYTES_PER_ELEMENT,a=this.data.getRawData();for(let t=0;t<this.numOfRows;t++)a[t]=e[r/o+t]}}freeBuffer(t){this.isMemoryForBufferAllocated()&&(t._free(this.buf),this.buf=0)}}class f extends c{constructor(t,n){super([],t,!0),this.numOfRows=n}putDataToBuffer(t){}getDataFromBuffer(t){if(this.toUpdate&&this.isMemoryForBufferAllocated()){const n=this.type,e=t[i[n]],r=this.buf,o=u[n],a=new s[n](this.numOfRows);for(let t=0;t<a.length;t++)a[t]=e[r/a.BYTES_PER_ELEMENT+t];this.data=o("name",a)}}}class h extends l{constructor(t,n,e=!1){super(t),this.type=n,this.toUpdate=e,this.buf=0,this.numOfColumns=t.length,this.numOfRows=t[0].length}complementArrOfParams(t){t.push(this.buf),t.push(this.numOfRows),t.push(this.numOfColumns)}complementArrOfTypes(t){t.push("number"),t.push("number"),t.push("number")}allocateMemoryForBuffer(t){this.buf=t._malloc(this.numOfRows*this.numOfColumns*s[this.type].BYTES_PER_ELEMENT)}isMemoryForBufferAllocated(){return 0!=this.buf}putDataToBuffer(t){if(this.isMemoryForBufferAllocated()){const n=this.type,e=a[n],r=t[i[n]],o=s[n].BYTES_PER_ELEMENT;for(let t=0;t<this.numOfColumns;t++){let i=null;const a=this.data[t];i="int"==a.type&&"i32"==n||"double"==a.type&&"f32"==n?a.getRawData():new s[n](a.getRawData()),null!=i&&r.set(i,this.buf+t*this.numOfRows*o>>e)}}}getDataFromBuffer(t){if(this.toUpdate&&this.isMemoryForBufferAllocated()){const n=this.type,e=t[i[n]],r=this.numOfRows,o=this.numOfColumns,a=new s[n](e.buffer,this.buf,r*o);for(let t=0;t<o;t++){const n=this.data[t].getRawData();for(let e=0;e<r;e++)n[e]=a[e+t*r]}}}freeBuffer(t){this.isMemoryForBufferAllocated()&&(t._free(this.buf),this.buf=0)}}class m extends h{constructor(t,n,e){super([[]],t,!0),this.data=[],this.numOfColumns=e,this.numOfRows=n}putDataToBuffer(t){}getDataFromBuffer(t){if(this.toUpdate&&this.isMemoryForBufferAllocated()){const n=this.type,e=t[i[n]],r=this.numOfRows,o=this.numOfColumns,a=s[n].BYTES_PER_ELEMENT,l=u[n],c=this.buf;for(let t=0;t<o;t++){const o=new s[n](r);for(let n=0;n<r;n++)o[n]=e[c/a+n+t*r];this.data.push(l((t+1).toString(),o))}}}}const d={intColumn:t=>new c(t,"i32"),newIntColumn:t=>new f("i32",t),intColumns:t=>new h(t.toList(),"i32"),newIntColumns:(t,n)=>new m("i32",t,n),floatColumn:t=>new c(t,"f32"),newFloatColumn:t=>new f("f32",t),floatColumns:t=>new h(t.toList(),"f32"),newFloatColumns:(t,n)=>new m("f32",t,n),int:t=>new l(t),num:t=>new l(t)},p={tableFromColumns:t=>DG.DataFrame.fromColumns(t.data),num:t=>t,int:t=>t,double:t=>t,column:t=>t.data},g="num",v="floatColumn",y="intColumn",w="floatColumns",E="newFloatColumns",A="intColumns",C="newIntColumns",_="newFloatColumn",b="newIntColumn",I="column",N="_callResult",S="numOfRows",M="numOfColumns",T="ref",O="value",P="tableFromColumns",x="objects",L="int",R="double",F={intColumn:Int32Array,floatColumn:Float32Array,floatColumns:Float32Array,newFloatColumns:Float32Array,intColumns:Int32Array,newIntColumns:Int32Array,newFloatColumn:Float32Array,newIntColumn:Int32Array};function D(t,n){let e,r=[],o=0;for(const i in t){const s=t[i],a=s.type;if(i!==N){switch(a){case g:case L:case R:s.data=n[o],o++;break;case y:case v:let r,i=n[o];r=i.type===L&&a===y||i.type===R&&a===v?i.getRawData():new F[a](i.getRawData()),s.data={array:r,numOfRows:r.length},o++;break;case b:case _:let u=0;e=s[S][T],u=t[e].type===g?t[e].data:t[e].data[s[S][O]],s.data={numOfRows:u},o++;break;case A:case w:let l=[];for(let t of n[o].toList())t.type===L&&a===y||t.type===R&&a===v?l.push(t.getRawData()):l.push(new F[a](t.getRawData()));s.data={arrays:l,numOfRows:l[0].length,numOfColumns:l.length},o++;break;case C:case E:let c=0,f=0;e=s[S][T],c=t[e].type===g?t[e].data:t[e].data[s[S][O]],e=s[M][T],f=t[e].type===g?t[e].data:t[e].data[s[M][O]],s.data={numOfRows:c,numOfColumns:f},o++;break;default:return}r.push(s)}}return r}function U(t,n){t.arguments._callResult=n.callResult,function(t,n){const e={newFloatColumns:DG.Column.fromFloat32Array,newIntColumns:DG.Column.fromInt32Array,newFloatColumn:DG.Column.fromFloat32Array,newIntColumn:DG.Column.fromInt32Array};let r=0;for(const o in t){const i=t[o];switch(i.type){case g:case L:case R:case y:case v:case w:case A:break;case _:case b:let t;null==i.name?t=(0).toString():a=i.name,i.column=e[i.type](t,n[r].array);break;case C:case E:let o=[],s=n[r].arrays.length,a=[];if(null==i.names)for(let t=1;t<=s;t++)a.push(t.toString());else a=i.names;for(let t=0;t<s;t++)o.push(e[i.type](a[t],n[r].arrays[t]));i.columns=o}r++}}(t.arguments,n.args);let e=function(t){let n=t.output;const e={newFloatColumns:"columns",newIntColumns:"columns",newFloatColumn:"column",newIntColumn:"column"};switch(n.type){case g:case L:case R:return t.arguments[n.source];case I:return t.arguments[n.source].column;case P:return DG.DataFrame.fromColumns(t.arguments[n.source].columns);case x:let r=[];for(let o of n.source){let n=t.arguments[o];r.push(n[e[n.type]])}return r}}(t);return function(t){for(const n in t){const e=t[n];switch(e.type){case g:case L:case R:case y:case v:case A:case w:break;case b:case _:e.column=null;break;case C:case E:e.columns=null}}}(t.arguments),e}const B=1,k=1,V=1,G=0,q=100,W=1e8,Y="components must be positive.",H="components must not be greater than features count.",z="min must be less than max.",$="features must be positive.",K="samples must be positive.",j="violators percentage must be from the range from 0 to 100.",X="dataframe is too big.",Q="unsupported column type: ";function J(t){if(t.type!=o.COLUMN_TYPE.FLOAT&&t.type!=o.COLUMN_TYPE.INT)throw new Error(Q+t.type)}function Z(t){if(t.stats.missingValueCount>0)throw new Error(`The column '${t.name}' has missing values.`)}function tt(t,n){if(function(t,n){if(n<B)throw new Error(Y);if(n>t.length)throw new Error(H);for(const n of t)J(n),Z(n)}(t,n),t.length*t.byIndex(0).length>W)throw new Error(X)}var nt=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};var et=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};const rt=0,ot=1,it="Feature #",st="Label";function at(t,n,r,i,s,a,u,l){return et(this,void 0,void 0,(function*(){!function(t,n,e,r,o){if(e>=r)throw new Error(z);if(n<V)throw new Error($);if(t<k)throw new Error(K);if(o<G||o>q)throw new Error(j)}(i,s,a,u,l);const c=o.Column.fromList("double","kernelParams",n);let f;const h=async function(t,n,r,o,i,s,a){return new Promise(((u,l)=>{const c=new Worker(new URL(e.p+e.u(583),e.b));c.postMessage(D(EDA.generateDataset.arguments,[t,n,r,o,i,s,a])),c.onmessage=function(t){c.terminate(),u(U(EDA.generateDataset,t.data))}}))}(t,c,i,s,a,u,l);yield h.then((t=>{f=t}),(t=>{throw new Error(`Error: ${t}`)})),f[ot].name=st;for(const t of f[rt])t.name=it+t.name;const m=o.DataFrame.fromColumns(f[rt]);return m.name=r,m.columns.add(f[ot]),m}))}var ut=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};const lt=0,ct=1,ft=2,ht=3,mt=4,dt=0,pt=1,gt=2,vt=3,yt=4,wt=5,Et=6,At=7,Ct=0,_t=1,bt=2,It=3,Nt=0,St=0,Mt=1,Tt=0,Ot=1,Pt=0,xt=0,Lt=0,Rt=0,Ft="gamma must be strictly positive.",Dt="sigma must be strictly positive.",Ut="c must be strictly positive.",Bt="d must be strictly positive.",kt="incorrect kernel.",Vt="labels must be strings of two categories.",Gt="Labels",qt="predicted",Wt="correctness",Yt="Confusion matrix",Ht="mean",zt="std dev",$t="alpha",Kt="weight",jt="Gamma",Xt="Kernel",Qt="Kernel params",Jt="Kernel parameter 1",Zt="Kernel parameter 2",tn="Features count",nn="Train samples count",en="Train error, %",rn=["linear","polynomial","RBF","sigmoid"],on="Sensitivity",sn="Specificity",an="Balanced accuracy",un="Positive predicitve value",ln="Negative predicitve value",cn="prediction",fn=4,hn=3,mn=2,dn=0,pn=1,gn=2,vn=0,yn=1;function wn(t,n,r){return ut(this,void 0,void 0,(function*(){const i=n.columns;if(2!=r.categories.length)throw new Error(Vt);let s=o.Column.float(r.name,r.length);for(var a=0;a<r.length;a++)s.set(a,r.get(a)==r.categories[0]?-1:1,!1);let u=yield function(t,n,r){return ut(this,void 0,void 0,(function*(){!function(t){if(t.gamma<=Pt)throw new Error(Ft);switch(t.kernel){case lt:return;case ft:if(t.sigma<=xt)throw new Error(Dt);return;case ct:if(t.cParam<=Lt)throw new Error(Ut);if(t.dParam<=Rt)throw new Error(Bt);return;case ht:return;default:throw new Error(kt)}}(t);const i=[vn,vn];switch(t.kernel){case lt:break;case ft:i[Nt]=t.sigma;break;case ct:i[St]=t.cParam,i[Mt]=t.dParam;break;case ht:i[Tt]=t.kappa,i[Ot]=t.theta;break;default:throw new Error(kt)}const s=o.Column.fromList("double",Qt,i),a=n.toList(),u=a[0].length+yn,l=a.length+yn,c=mt;let f;const h=async function(t,n,r,o,i,s,a,u){return new Promise(((l,c)=>{const f=new Worker(new URL(e.p+e.u(656),e.b));f.postMessage(D(EDA.trainAndAnalyzeLSSVM.arguments,[t,n,r,o,i,s,a,u])),f.onmessage=function(t){f.terminate(),l(U(EDA.trainAndAnalyzeLSSVM,t.data))}}))}(t.gamma,t.kernel,s,u,l,c,n,r);yield h.then((t=>{f=t}),(t=>{throw new Error(`Error: ${t}`)})),f[pt].name=Ht,f[gt].name=zt,f[vt].name=$t,f[yt].name=Kt,f[wt].name=qt,f[Et].name=Wt,f[At].name=Yt;const m={trainGamma:t.gamma,kernelType:t.kernel,kernelParams:s,trainLabels:r,normalizedTrainData:o.DataFrame.fromColumns(f[dt]),means:f[pt],stdDevs:f[gt],modelParams:f[vt],modelWeights:f[yt],predictedLabels:f[wt],correctness:f[Et],confusionMatrix:f[At],trainError:void 0,featuresCount:a.length,trainSamplesCount:a[0].length};return function(t){const n=t.confusionMatrix.getRawData(),e=n[Ct],r=n[It],o=n[bt],i=n[_t],s=e+i,a=o+r,u=e/s,l=r/a,c=e/(e+o),f=r/(r+i),h=(e+r)/(s+a),m=(u+l)/2;t.sensitivity=u,t.specificity=l,t.balancedAccuracy=m,t.positivePredicitveValue=c,t.negativePredicitveValue=f,t.trainError=100*(1-h)}(m),m}))}(t,i,s);return u.realLabels=r,u}))}function En(t,n){const e=Cn(n);return o.Viewer.form(e.modelInfo,{showNavigation:!1}).root}function An(t){const n=t.normalizedTrainData.columns,e=t.trainSamplesCount,r=t.featuresCount,i=o.DataFrame.fromColumns([t.realLabels]).toByteArray(),s=fn+i.length+4-i.length%4,a=function(t){const n=t.kernelParams.getRawData();return o.DataFrame.fromColumns([o.Column.fromList("double",jt,[t.trainGamma]),o.Column.fromStrings(Xt,[rn[t.kernelType]]),o.Column.fromList("double",Jt,[n[0]]),o.Column.fromList("double",Zt,[n[1]]),o.Column.fromList("double",tn,[t.featuresCount]),o.Column.fromList("double",nn,[t.trainSamplesCount]),o.Column.fromList("double",en,[t.trainError]),o.Column.fromList("double",an,[t.balancedAccuracy]),o.Column.fromList("double",on,[t.sensitivity]),o.Column.fromList("double",sn,[t.specificity]),o.Column.fromList("double",un,[t.positivePredicitveValue]),o.Column.fromList("double",ln,[t.negativePredicitveValue])])}(t).toByteArray(),u=fn+a.length+4-a.length%4,l=new Uint8Array(fn*(hn+mn+e+r+r+e+yn+r+yn+r*e)+s+u),c=l.buffer;let f=0,h=new Int32Array(c,f,hn);h[dn]=t.kernelType,h[pn]=e,h[gn]=r,f+=hn*fn;let m=new Float32Array(c,f,mn);m.set(t.kernelParams.getRawData()),f+=mn*fn,m=new Float32Array(c,f,e),m.set(t.trainLabels.getRawData()),f+=e*fn,m=new Float32Array(c,f,r),m.set(t.means.getRawData()),f+=r*fn,m=new Float32Array(c,f,r),m.set(t.stdDevs.getRawData()),f+=r*fn,m=new Float32Array(c,f,e+yn),m.set(t.modelParams.getRawData()),f+=(e+yn)*fn,m=new Float32Array(c,f,r+yn),m.set(t.modelWeights.getRawData()),f+=(r+yn)*fn;for(const t of n)m=new Float32Array(c,f,r),m.set(t.getRawData()),f+=r*fn;return h=new Int32Array(c,f,1),h[0]=i.length,l.set(i,f+fn),f+=s,h=new Int32Array(c,f,1),h[0]=a.length,l.set(a,f+fn),f+=u,l}function Cn(t){const n=t.buffer;let e=0;const r=new Int32Array(n,e,hn);e+=hn*fn;const i=r[pn],s=r[gn],a=o.Column.fromFloat32Array(Qt,new Float32Array(n,e,mn));e+=mn*fn;const u=o.Column.fromFloat32Array(Gt,new Float32Array(n,e,i));e+=i*fn;const l=o.Column.fromFloat32Array(Ht,new Float32Array(n,e,s));e+=s*fn;const c=o.Column.fromFloat32Array(zt,new Float32Array(n,e,s));e+=s*fn;const f=o.Column.fromFloat32Array($t,new Float32Array(n,e,i+yn));e+=(i+yn)*fn;const h=o.Column.fromFloat32Array(Kt,new Float32Array(n,e,s+yn));e+=(s+yn)*fn;const m=[];for(let t=0;t<i;t++)m.push(o.Column.fromFloat32Array(t.toString(),new Float32Array(n,e,s))),e+=s*fn;const d=o.DataFrame.fromColumns(m),p=new Int32Array(n,e,1)[0],g=p+4-p%4;e+=fn;const v=o.DataFrame.fromByteArray(new Uint8Array(n,e,p)).columns.byIndex(0);e+=g;const y=new Int32Array(n,e,1)[0],w=y+4-y%4;e+=fn;const E=o.DataFrame.fromByteArray(new Uint8Array(n,e,y));return e+=w,{kernelType:r[dn],kernelParams:a,trainLabels:u,realLabels:v,means:l,stdDevs:c,modelParams:f,modelWeights:h,normalizedTrainData:d,modelInfo:E}}function _n(t,n){return ut(this,void 0,void 0,(function*(){const r=Cn(new Uint8Array(n)),i=yield function(t,n){return ut(this,void 0,void 0,(function*(){let r;const o=async function(t,n,r,o,i,s,a,u,l){return new Promise(((c,f)=>{const h=new Worker(new URL(e.p+e.u(763),e.b));h.postMessage(D(EDA.predictByLSSVM.arguments,[t,n,r,o,i,s,a,u,l])),h.onmessage=function(t){h.terminate(),c(U(EDA.predictByLSSVM,t.data))}}))}(t.kernelType,t.kernelParams,t.normalizedTrainData.columns,t.trainLabels,t.means,t.stdDevs,t.modelParams,t.modelWeights,n);return yield o.then((t=>{r=t}),(t=>{throw new Error(`Error: ${t}`)})),r}))}(r,t.columns),s=o.Column.string(cn,i.length),a=r.realLabels.categories;for(var u=0;u<s.length;u++)s.set(u,-1==i.get(u)?a[0]:a[1]);return o.DataFrame.fromColumns([s])}))}function bn(t,n){const e=t.columns;if(!n.matches("categorical")||n.categories.length>2)return!1;for(var r=!0,o=0;o<e.length;o++)r=r&&e.byIndex(o).matches("numerical");return r}function In(t,n){return t.rowCount<=1e3}var Nn,Sn,Mn,Tn,On,Pn,xn,Ln;!function(t){t[t.COMPUTE_COMPONENTS=0]="COMPUTE_COMPONENTS",t[t.PERFORM_MVA=1]="PERFORM_MVA",t[t.DEMO=2]="DEMO"}(Nn||(Nn={})),function(t){t.NO_DF="No dataframe is opened",t.NO_COLS="No numeric columns without missing values",t.ONE_COL="No columns to be used as features (just one numeric columns without missing values)",t.EMPTY_DF="Dataframe is empty"}(Sn||(Sn={})),function(t){t.PREDICT="Predict",t.USING="Using",t.COMPONENTS="Components",t.PLS="PLS",t.MVA="Multivariate Analysis (PLS)",t.RUN="RUN",t.NAMES="Names",t.MODEL="Observed vs. Predicted",t.FEATURE="Feature",t.REGR_COEFS="Regression Coefficients",t.XLOADING="x.loading.p",t.LOADINGS="Loadings",t.XSCORE="x.score.t",t.YSCORE="y.score.u",t.SCORES="Scores",t.EXPL_VAR="Explained Variance",t.EXPLORE="Explore"}(Mn||(Mn={})),function(t){t.PREDICT="Column with the response variable",t.FEATURES="Predictors (features)",t.COMPONENTS="Number of PLS components",t.PLS="Compute PLS components",t.MVA="Perform multivariate analysis",t.NAMES="Names of data samples"}(Tn||(Tn={})),function(t){t.PLS="https://datagrok.ai/help/explore/multivariate-analysis/pls#pls-components",t.MVA="https://datagrok.ai/help/explore/multivariate-analysis/pls",t.MODEL="https://datagrok.ai/help/explore/multivariate-analysis/plots/predicted-vs-reference",t.COEFFS="https://datagrok.ai/help/explore/multivariate-analysis/plots/regression-coefficients",t.LOADINGS="https://datagrok.ai/help/explore/multivariate-analysis/plots/loadings",t.EXPL_VARS="https://datagrok.ai/help/explore/multivariate-analysis/plots/explained-variance",t.SCORES="https://datagrok.ai/help/explore/multivariate-analysis/plots/scores"}(On||(On={})),function(t){t[t.DEFAULT=3]="DEFAULT",t[t.MIN=1]="MIN"}(Pn||(Pn={})),function(t){t.PREFIX="PLS",t.SUFFIX="(predicted)",t.COMP="component",t.COMPS="components"}(xn||(xn={})),function(t){t[t.PREDICTION=0]="PREDICTION",t[t.REGR_COEFFS=1]="REGR_COEFFS",t[t.T_SCORES=2]="T_SCORES",t[t.U_SCORES=3]="U_SCORES",t[t.X_LOADINGS=4]="X_LOADINGS",t[t.Y_LOADINGS=5]="Y_LOADINGS"}(Ln||(Ln={}));const Rn="Int",Fn=6,Dn=[.49,.79,.99],Un=1,Bn=200,kn=200;var Vn;!function(t){t.AXIS="#838383",t.CIRCLE="#0000FF"}(Vn||(Vn={}));const Gn="# Data\nEach car has many features - patterns extraction is complicated.\n\n# Model\nPredict car price by its other features.\n\n# Try\nPress 'RUN' to perform multivariate analysis using partial least squares\n([PLS](https://en.wikipedia.org/wiki/Partial_least_squares_regression)) regression.\n\n# Essence\nThe method finds the latent factors that\n\n* capture the maximum variance in the features\n* maximize correlation with the response variable",qn=[{caption:Mn.MODEL,text:"Closer to the line means better price prediction."},{caption:Mn.SCORES,text:"The latent factor values for each data sample reflect the similarities and dissimilarities among observations."},{caption:Mn.LOADINGS,text:"The impact of each feature on the latent factors: higher loading means stronger influence."},{caption:Mn.REGR_COEFS,text:"Parameters of the obtained linear model: features make different contribution to the prediction."},{caption:Mn.EXPL_VAR,text:"How well the latent components fit source data: closer to one means better fit."}],Wn=qn.map((t=>`# ${t.caption}\n\n${t.text}`)).join("\n\n")+`\n\n# Learn more\n \n * [Multivariate analysis](${On.MVA}),\n * [ANOVA](https://datagrok.ai/help/explore/anova)`;var Yn=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};const Hn=Math.min,zn=Math.max;function $n(t){return Yn(this,void 0,void 0,(function*(){tt(t.features,t.components),J(t.predict),Z(t.predict);const n=yield async function(t,n,r,o){return new Promise(((t,i)=>{const s=new Worker(new URL(e.p+e.u(412),e.b));s.postMessage(D(EDA.partialLeastSquareRegression.arguments,[n,r,o])),s.onmessage=function(n){s.terminate(),t(U(EDA.partialLeastSquareRegression,n.data))}}))}(t.table,t.features,t.predict,t.components);return{prediction:n[Ln.PREDICTION],regressionCoefficients:n[Ln.REGR_COEFFS],tScores:n[Ln.T_SCORES],uScores:n[Ln.U_SCORES],xLoadings:n[Ln.X_LOADINGS],yLoadings:n[Ln.Y_LOADINGS]}}))}function Kn(e){return Yn(this,void 0,void 0,(function*(){const r=t.shell.t;if(null===r)return void t.shell.warning(Sn.NO_DF);if(0===r.rowCount)return void t.shell.warning(Sn.EMPTY_DF);const i=[],s=[],a=[],u=t=>(t.type===o.COLUMN_TYPE.INT||t.type===o.COLUMN_TYPE.FLOAT)&&0===t.stats.missingValueCount;if(r.columns.toList().forEach((t=>{u(t)?(i.push(t.name),s.push(t)):t.type===o.COLUMN_TYPE.STRING&&a.push(t)})),0===i.length)return void t.shell.warning(Sn.NO_COLS);if(1===i.length)return void t.shell.warning(Sn.ONE_COL);let l=s[s.length-1];const c=n.input.column(Mn.PREDICT,{table:r,value:l,onValueChanged:()=>{l=c.value,y()},filter:t=>u(t)});let f;c.setTooltip(Tn.PREDICT);const h=n.input.columns(Mn.USING,{table:r,available:i});h.onInput((()=>y())),h.setTooltip(Tn.FEATURES);let m=Hn(i.length-1,Pn.DEFAULT);const d=n.input.forProperty(o.Property.fromOptions({name:Mn.COMPONENTS,inputType:Rn,defaultValue:m,showPlusMinus:!0,min:Pn.MIN}));let p,g,v;d.onInput((()=>y())),d.setTooltip(Tn.COMPONENTS),e===Nn.COMPUTE_COMPONENTS?(p=Mn.PLS,g=On.PLS,v=Tn.PLS):(p=Mn.MVA,g=On.MVA,v=Tn.MVA);const y=()=>{var t;h.value=h.value.filter((t=>t!==l)),f=h.value,d.value=Hn(zn(null!==(t=d.value)&&void 0!==t?t:m,Pn.MIN),f.length),m=d.value,A.getButton(Mn.RUN).disabled=0===f.length||m<=0};let w=a.length>0?a[0]:null;const E=n.input.column(Mn.NAMES,{table:r,value:w,onValueChanged:()=>w=c.value,filter:t=>t.type===o.COLUMN_TYPE.STRING});E.setTooltip(Tn.NAMES),E.root.hidden=0===a.length||e===Nn.COMPUTE_COMPONENTS;const A=n.dialog({title:p,helpUrl:g}).add(n.form([c,h,d,E])).addButton(Mn.RUN,(()=>Yn(this,void 0,void 0,(function*(){A.close(),yield function(e,r){return Yn(this,void 0,void 0,(function*(){var i,s;const a=yield $n(e),u=a.tScores,l=e.table.columns,c=e.features.names(),f=r===Nn.COMPUTE_COMPONENTS?xn.PREFIX:Mn.XSCORE;if(u.forEach(((t,n)=>{t.name=l.getUnusedName(`${f}${n+1}`),l.add(t)})),r===Nn.COMPUTE_COMPONENTS)return;const h=t.shell.tableView(e.table.name),m=o.DataFrame.fromColumns([o.Column.fromStrings(Mn.FEATURE,c),a.regressionCoefficients]);a.xLoadings.forEach(((t,n)=>{t.name=m.columns.getUnusedName(`${Mn.XLOADING}${n+1}`),m.columns.add(t)}));const d=a.prediction;d.name=l.getUnusedName(`${e.predict.name} ${xn.SUFFIX}`),l.add(d);const p=h.addViewer(o.Viewer.scatterPlot(e.table,{title:Mn.MODEL,xColumnName:e.predict.name,yColumnName:d.name,showRegressionLine:!0,markerType:o.MARKER_TYPE.CIRCLE,labels:null===(i=e.names)||void 0===i?void 0:i.name,help:On.MODEL}));a.regressionCoefficients.name=Mn.REGR_COEFS;const g=h.addViewer(o.Viewer.barChart(m,{title:Mn.REGR_COEFS,splitColumnName:Mn.FEATURE,valueColumnName:a.regressionCoefficients.name,valueAggrType:o.AGG.AVG,help:On.COEFFS,showValueSelector:!1,showStackSelector:!1}));a.xLoadings.forEach(((t,n)=>t.name=`${Mn.XLOADING}${n+1}`));const v=h.addViewer(o.Viewer.scatterPlot(m,{title:Mn.LOADINGS,xColumnName:`${Mn.XLOADING}1`,yColumnName:`${Mn.XLOADING}${a.xLoadings.length>1?"2":"1"}`,markerType:o.MARKER_TYPE.CIRCLE,labels:Mn.FEATURE,help:On.LOADINGS})),y=u.map((t=>t.name));a.uScores.forEach(((t,n)=>{t.name=l.getUnusedName(`${Mn.YSCORE}${n+1}`),l.add(t),y.push(t.name)}));const w=o.Viewer.scatterPlot(e.table,{title:Mn.SCORES,xColumnName:u[0].name,yColumnName:u.length>1?u[1].name:a.uScores[0].name,markerType:o.MARKER_TYPE.CIRCLE,labels:null===(s=e.names)||void 0===s?void 0:s.name,help:On.SCORES,showViewerFormulaLines:!0}),E=[],A=(t,n)=>{E.push({type:"line",formula:t,width:Un,visible:!0,title:" ",min:-n,max:n,color:Vn.CIRCLE})};y.forEach((t=>{const n="${"+t+"}";E.push({type:"line",formula:`${n} = 0`,width:Un,visible:!0,title:" ",color:Vn.AXIS}),y.forEach((t=>{const e="${"+t+"}";Dn.forEach((t=>{A(e+` = sqrt(${t*t} - ${n} * ${n})`,t),A(e+` = -sqrt(${t*t} - ${n} * ${n})`,t)}))}))})),w.meta.formulaLines.addAll(E),h.addViewer(w);const C=a.yLoadings.getRawData(),_=a.xLoadings.map((t=>t.getRawData())),b=e.table.rowCount,I=c.length,N=e.components,S=new Float32Array(N),M=[],T=[];for(let t=0;t<I;++t)T.push(new Float32Array(N));S[0]=Math.pow(C[0],2)/b,M.push(`1 ${xn.COMP}`),T.forEach(((t,n)=>{t[0]=Math.pow(_[0][n],2)/b}));for(let t=1;t<N;++t)S[t]=S[t-1]+Math.pow(C[t],2)/b,T.forEach(((n,e)=>n[t]=n[t-1]+Math.pow(_[t][e],2)/b)),M.push(`${t+1} ${xn.COMPS}`);const O=o.DataFrame.fromColumns([o.Column.fromStrings(Mn.COMPONENTS,M),o.Column.fromFloat32Array(e.predict.name,S)]);T.forEach(((t,n)=>O.columns.add(o.Column.fromFloat32Array(c[n],t))));const P=h.addViewer(o.Viewer.barChart(O,{title:Mn.EXPL_VAR,splitColumnName:Mn.COMPONENTS,valueColumnName:e.predict.name,valueAggrType:o.AGG.AVG,help:On.EXPL_VARS,showCategorySelector:!1,showStackSelector:!1}));if(r===Nn.DEMO){const e=[p,w,v,g,P].map(((t,n)=>({text:qn[n].text,showNextTo:t.root})));n.hints.addTextHint({title:Mn.EXPLORE,pages:e}).helpUrl=On.MVA,t.shell.windows.help.showHelp(n.markdown(Wn))}}))}({table:r,features:o.DataFrame.fromColumns(f).columns,predict:l,components:m,names:w},e)}))),void 0,v).show({x:Bn,y:kn});setTimeout((()=>{h.value=s.filter((t=>t!==l)),f=h.value}),Fn),t.shell.v.append(A.root)}))}var jn,Xn=e(6572);function Qn(t){if(t<=0||t>=1)throw new Error(jn.INCORRECT_SIGNIFICANCE_LEVEL)}function Jn(t){const n=t.size;if(n<=0)throw new Error(jn.INCORRECT_SAMPLE_SIZE);return 1===n?0:(t.sumOfSquares-Math.pow(t.sum,2)/n)/(n-1)}function Zn(t,n,e=.05){Qn(e);const r=Jn(t),o=Jn(n);return 0===o?r===o:r/o<Xn.centralF.inv(1-e,t.size-1,n.size-1)}!function(t){t.NON_EQUAL_FACTORS_VALUES_SIZE="non-equal sizes of factor and values arrays. INPUT ERROR.",t.INCORRECT_SIGNIFICANCE_LEVEL="incorrect significance level. It must be from the interval (0, 1). INPUT ERROR.",t.INCORRECT_SAMPLE_SIZE="incorrect size of sample. DATA FACTORIZAING ERROR.",t.NON_EQUAL_VARIANCES="variances are not equal.",t.NON_NORMAL_DISTRIB="non-normal distribution.",t.UNSUPPORTED_COLUMN_TYPE="unsupported column type.",t.INCORRECT_CATEGORIES_COL_TYPE="incorrect categories column type.",t.ANOVA_FAILED_JUST_ONE_CAT="ANOVA filed: there should be at least 2 categories."}(jn||(jn={}));class te{constructor(t,n,e=!1,r=.05){if(this.isNormDistrib=void 0,this.categories=[],t.type!==o.COLUMN_TYPE.STRING)throw new Error;if(t.length!==n.length)throw new Error(jn.NON_EQUAL_FACTORS_VALUES_SIZE);this.setStats(t,n,e,r)}isNormal(){return!0}areVarsEqual(t=.05){const n=this.catCount;if(1===n)return!0;const e={sum:this.sums[0],sumOfSquares:this.sumsOfSquares[0],size:this.subSampleSizes[0]};for(let r=1;r<n;++r)if(!Zn(e,{sum:this.sums[r],sumOfSquares:this.sumsOfSquares[r],size:this.subSampleSizes[r]},t))return!1;return!0}getOneWayAnova(){const t=this.catCount;if(1===t)throw new Error(jn.ANOVA_FAILED_JUST_ONE_CAT);let n=0,e=0;const r=this.size;let o=0;for(let r=0;r<t;++r)n+=this.sums[r],e+=this.sumsOfSquares[r],o+=Math.pow(this.sums[r],2)/this.subSampleSizes[r];const i=e-Math.pow(n,2)/r,s=o-Math.pow(n,2)/r,a=i-s,u=t-1,l=r-t,c=s/u,f=a/l,h=c/f;return{ssBn:s,ssWn:a,ssTot:i,dfBn:u,dfWn:l,dfTot:r-1,msBn:c,msWn:f,fStat:h,pValue:1-Xn.centralF.cdf(h,u,l)}}setStats(t,n,e=!1,r=.05){const i=n.type,s=n.length;switch(i){case o.COLUMN_TYPE.INT:case o.COLUMN_TYPE.FLOAT:this.categories=t.categories;const e=this.categories.length;this.catCount=e,this.size=s;const r=n.getRawData(),i=t.getRawData(),a=new Float64Array(e).fill(0),u=new Float64Array(e).fill(0),l=new Int32Array(e).fill(0);for(let t=0;t<s;++t){const n=i[t];a[n]+=r[t],u[n]+=Math.pow(r[t],2),++l[n]}this.sums=a,this.sumsOfSquares=u,this.subSampleSizes=l;break;default:throw new Error(jn.UNSUPPORTED_COLUMN_TYPE)}}}var ne=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};function ee(t,n,r,o){return ne(this,void 0,void 0,(function*(){return new Promise((function(i,s){const a=new Worker(new URL(e.p+e.u(682),e.b));a.postMessage({embedX:t,embedY:n,minPts:o,epsilon:r}),a.onmessage=({data:{error:t,clusters:n}})=>{a.terminate(),t?s(t):i(n)}}))}))}e(5540);let re=null;function oe(){return t=this,n=void 0,r=function*(){if(!re&&(re=yield navigator.gpu.requestAdapter(),null==re))return null;const t=yield re.requestAdapterInfo();return t?ie(t.description,ie(t.vendor,"No GPU description available")):null},new((e=void 0)||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}));var t,n,e,r}function ie(t,n){return t&&""!=t?t:n}var se,ae,ue,le,ce,fe,he,me,de;(ae=se||(se={})).EUCLIDEAN="EUCLIDEAN",ae.MANHATTAN="MANHATTAN",se.EUCLIDEAN,se.MANHATTAN,(le=ue||(ue={})).HAMMING="Hamming",le.EUCLIDEAN="Euclidean",le.MANHATTAN="Manhattan",le.TANIMOTO="Tanimoto",le.LEVENSTEIN="Levenshtein",le.NEEDLEMAN_WUNSCH="Needlemann-Wunsch",le.MONOMER_CHEMICAL_DISTANCE="Monomer chemical distance",le.SOKAL="Sokal",le.COSINE="Cosine",le.ASYMMETRIC="Asymmetric",le.Difference="Difference",le.OneHot="One-Hot",ue.HAMMING,ue.EUCLIDEAN,ue.MANHATTAN,ue.TANIMOTO,ue.LEVENSTEIN,ue.NEEDLEMAN_WUNSCH,ue.MONOMER_CHEMICAL_DISTANCE,ue.SOKAL,ue.COSINE,ue.ASYMMETRIC,ue.Difference,ue.OneHot,ue.HAMMING,ue.EUCLIDEAN,ue.MANHATTAN,ue.TANIMOTO,ue.SOKAL,ue.COSINE,ue.ASYMMETRIC,ue.LEVENSTEIN,ue.NEEDLEMAN_WUNSCH,ue.MONOMER_CHEMICAL_DISTANCE,ue.Difference,ue.OneHot,new Set([ue.HAMMING,ue.LEVENSTEIN,ue.NEEDLEMAN_WUNSCH,ue.MONOMER_CHEMICAL_DISTANCE,ue.OneHot]),new Set([ue.HAMMING,ue.EUCLIDEAN,ue.MANHATTAN,ue.MONOMER_CHEMICAL_DISTANCE,ue.LEVENSTEIN,ue.NEEDLEMAN_WUNSCH,ue.TANIMOTO,ue.COSINE,ue.SOKAL,ue.ASYMMETRIC,ue.OneHot,ue.Difference]),new Set([ue.EUCLIDEAN,ue.MANHATTAN,ue.OneHot,ue.Difference]),new Set([ue.EUCLIDEAN,ue.MANHATTAN,ue.Difference]),new Set([ue.EUCLIDEAN,ue.MANHATTAN,ue.Difference]),new Set([ue.TANIMOTO,ue.COSINE,ue.SOKAL,ue.ASYMMETRIC]),function(t){t.ADD="ADD",t.SUB="SUB",t.MULT="MULT"}(ce||(ce={})),function(t){t.SQUARE="SQUARE",t.INVERSE="INVERSE",t.TRANSPOSE="TRANSPOSE",t.NORM="NORM",t.COLUMN_NORM="COLUMN_NORM"}(fe||(fe={})),function(t){t.SCALARMULT="SCALARMULT",t.SCALARADD="SCALARADD",t.SCALARPOW="SCALARPOW"}(he||(he={})),Object.prototype.toString,(de=me||(me={})).UMAP="UMAP",de.T_SNE="t-SNE";const pe=2,ge="MCL_OPTIONS";o.SEMTYPE.MOLECULE,o.SEMTYPE.MACROMOLECULE;class ve{constructor(){this.epsilon={uiName:"Epsilon",value:.01,tooltip:"Minimum distance between cluster points",min:0,max:2,step:.005},this.minPts={uiName:"Minimum points",value:4,tooltip:"Minimum number of points in cluster",min:1,max:1e3,step:1}}}const ye="bypassLargeDataWarning",we="show-scatterplot-progress";var Ee,Ae;(Ae=Ee||(Ee={})).EUCLIDEAN="EUCLIDEAN",Ae.MANHATTAN="MANHATTAN";const Ce=rxjs;var _e=e(5072),be=e.n(_e),Ie=e(7825),Ne=e.n(Ie),Se=e(7659),Me=e.n(Se),Te=e(5056),Oe=e.n(Te),Pe=e(540),xe=e.n(Pe),Le=e(1113),Re=e.n(Le),Fe=e(7939),De={};De.styleTagTransform=Re(),De.setAttributes=Oe(),De.insert=Me().bind(null,"head"),De.domAPI=Ne(),De.insertStyleElement=xe(),be()(Fe.A,De),Fe.A&&Fe.A.locals&&Fe.A.locals;class Ue{constructor(){this.learningRate={uiName:"Learninig rate",value:1,tooltip:"The initial learning rate for the embedding optimization"},this.nEpochs={uiName:"Epochs",value:0,tooltip:"The number of epochs to optimize embeddings via SGD. Computed automatically if set to 0"},this.nNeighbors={uiName:"Neighbors",value:15,tooltip:"The number of nearest neighbors to construct the fuzzy manifold"},this.spread={uiName:"Spread",value:1,tooltip:"The effective scale of embedded points, used with min distance to control \n the clumped/dispersed nature of the embedding"},this.minDist={uiName:"Min distance",value:.1,tooltip:"The effective minimum distance between embedded points, \n used with spread to control the clumped/dispersed nature of the embedding"},this.randomSeed={uiName:"Random seed",value:null,tooltip:"Random seed",type:"string"},this.useWebGPU={uiName:"Use WebGPU",value:!1,tooltip:"Use WebGPU for KNN computations",type:"boolean",disableTooltip:"WebGPU is not available"},oe().then((t=>{t?this.useWebGPU.tooltip+=` (${t})`:(this.useWebGPU.value=!1,this.useWebGPU.disable=!0)}))}}class Be{constructor(){this.epsilon={uiName:"Epsilon",value:10,tooltip:"Epsilon is learning rate"},this.perplexity={uiName:"Perplexity",value:30,tooltip:"Roughly how many neighbors each point influences"}}}class ke{constructor(e={}){this.editorSettings={},this.columnOptEditors=[],this.columnOptEditorsRoot=n.div(),this.columnParamsEditorRoot=n.div(),this.weightsEditorRoot=n.div(),this.columnFunctionsMap={},this.methodsParams={[me.UMAP]:new Ue,[me.T_SNE]:new Be},this.dbScanParams=new ve,this.methodSettingsDivs=[],this.supportedFunctions={},this.methodSettingsAnchor=n.div(),this.plotEmbeddingsInput=n.boolInput("Plot embeddings",!0),this.aggregationMethodInput=n.choiceInput("Aggregation",Ee.EUCLIDEAN,[Ee.EUCLIDEAN,Ee.MANHATTAN]),this.aggregationMethodInput.setTooltip("Aggregation method for combining distances between columns"),this.onColumnsChanged=new Ce.Subject,this.editorSettings=e,this.columnParamsEditorAccordion=n.accordion(),o.Func.find({tags:["dim-red-preprocessing-function"]}).forEach((t=>{const n=t.options.get("supportedSemTypes")??"",e=t.friendlyName??t.name,r=t.options.get("supportedTypes")??"",o=t.options.get("supportedUnits")??"",i=t.options.get("supportedDistanceFunctions")??"";this.editorSettings.semtype&&!n.includes(this.editorSettings.semtype)||this.editorSettings.type&&!r.includes(this.editorSettings.type)||this.editorSettings.units&&!o.includes(this.editorSettings.units)||(this.supportedFunctions[e]={func:t,semTypes:n?n.split(","):[],types:r?r.split(","):[],units:o?o.split(","):[],distanceFunctions:i?i.split(","):[]})})),this.postProcessingEditor=new qe,this.tableInput=n.tableInput("Table",t.shell.tv.dataFrame,t.shell.tables,(()=>{this.onTableInputChanged()})),this.onTableInputChanged();let r=!1;this.methodInput=n.choiceInput("Method",me.UMAP,[me.UMAP,me.T_SNE],(()=>{r&&this.createAlgorithmSettingsDiv(this.methodsParams[this.methodInput.value])})),this.methodSettingsIcon=n.icons.settings((()=>{r=!r,r?this.createAlgorithmSettingsDiv(this.methodsParams[this.methodInput.value]):(this.methodSettingsDivs.forEach((t=>t.remove())),this.methodSettingsDivs=[])}),"Modify methods parameters"),this.methodInput.root.classList.add("ml-dim-reduction-settings-input"),this.methodInput.root.prepend(this.methodSettingsIcon),this.columnParamsEditorAccordion.addPane("Column options",(()=>this.columnOptEditorsRoot),!0,null,!1),this.columnParamsEditorAccordion.root.style.display="none",this.columnParamsEditorRoot.appendChild(this.columnParamsEditorAccordion.root),this.columnParamsEditorRoot.appendChild(this.weightsEditorRoot)}onTableInputChanged(){const t=this.tableInput.value;if(!t)return;n.empty(this.columnOptEditorsRoot),n.empty(this.weightsEditorRoot),this.columnFunctionsMap={},t.columns.toList().forEach((t=>{Object.keys(this.supportedFunctions).forEach((n=>{const e=this.supportedFunctions[n].semTypes,r=this.supportedFunctions[n].types,i=this.supportedFunctions[n].units,s=!e.length||t.semType&&e.includes(t.semType),a=!r.length||r.includes(t.type),u=!i.length||t.getTag(o.TAGS.UNITS)&&i.includes(t.getTag(o.TAGS.UNITS));s&&a&&u&&(this.columnFunctionsMap[t.name]||(this.columnFunctionsMap[t.name]=[]),this.columnFunctionsMap[t.name].push(n))}))}));const e=Object.keys(this.columnFunctionsMap),r=n.columnsInput("Columns",t,(()=>{this.onColumnsChanged.next(),n.empty(this.columnOptEditorsRoot),n.empty(this.weightsEditorRoot);const t=r.value;if(this.aggregationMethodInput.root.style.display=!t||t?.length<2?"none":"flex",!t||0===t.length)return void(this.columnParamsEditorAccordion.root.style.display="none");this.columnOptEditors=t.map((t=>new Ve(t,this.columnFunctionsMap[t.name].map((t=>this.supportedFunctions[t])))));const e=n.divV([],{style:{maxHeight:"400px",overflow:"auto"}});this.columnOptEditors.forEach((t=>{e.appendChild(t.accordionDiv)}));const o=new Array(2*this.columnOptEditors.length).fill(null).map(((t,n)=>n%2==0?this.columnOptEditors[n/2].colOptEditors:[]));let i=0;const s=n.table(o,(t=>(i++,t&&t.length>0?t:[this.columnOptEditors[Math.floor((i-1)/2)].preprocessingFuncSettingsDiv=n.div([]),n.div(),n.div(),n.div()])),["Column","Encoding function","Similarity metric","Weight"]);this.columnOptEditors.forEach((t=>{t.preprocessingFuncSettingsDiv?.parentElement?.setAttribute("colspan","4"),t.preprocessingFuncSettingsDiv?.parentElement?.parentElement?.style?.setProperty("height","unset")})),this.columnOptEditors.length>0&&(this.columnParamsEditorAccordion.root.style.display="flex"),s.classList.add("ml-dim-reduction-column-editor-table-root"),this.columnOptEditorsRoot.appendChild(s)}),{available:e});r.fireChanged(),this.columnsInputRoot?(n.empty(this.columnsInputRoot),this.columnsInput=r,Array.from(this.columnsInput.root.children).forEach((t=>this.columnsInputRoot.appendChild(t)))):(this.columnsInputRoot=r.root,this.columnsInput=r)}createAlgorithmSettingsDiv(t){this.methodSettingsDivs.forEach((t=>t.remove())),this.methodSettingsDivs=[];const e=this.methodSettingsAnchor,r=e.parentElement;r&&Object.keys(t).forEach((o=>{const i=t[o],s="string"===i.type?n.stringInput(i.uiName,i.value??"",(()=>{i.value=s.value})):"boolean"===i.type?n.boolInput(i.uiName,i.value??!1,(()=>{i.value=s.value})):n.floatInput(i.uiName,i.value,(()=>{i.value=s.value}));i.disable?(s.enabled=!1,n.tooltip.bind(s.input??s.root,i.disableTooltip??"")):n.tooltip.bind(s.input??s.root,i.tooltip),r.insertBefore(s.root,e),this.methodSettingsDivs.push(s.root)}))}get algorithmOptions(){const t=this.methodsParams[this.methodInput.value],n={};return Object.keys(t).forEach((e=>{null!=t[e].value&&(n[e]=t[e].value)})),n}get dbScanOptions(){return{dbScanEpsilon:this.dbScanParams.epsilon.value??.01,dbScanMinPts:this.dbScanParams.minPts.value??4}}getEditor(){return n.div([this.tableInput.root,this.columnsInputRoot,this.columnParamsEditorRoot,this.aggregationMethodInput.root,this.methodInput.root,this.methodSettingsAnchor,this.plotEmbeddingsInput,this.postProcessingEditor.root],{style:{minWidth:"420px"},classes:"dim-reduction-dialog-form"})}getParams(){return{table:this.tableInput.value,columns:this.columnsInput.value,methodName:this.methodInput.value,preprocessingFunctions:this.columnOptEditors.map((t=>t.preProcessingFunction)),distanceMetrics:this.columnOptEditors.map((t=>t.similarityMetricInput.value)),weights:this.columnOptEditors.map((t=>t.weight??1)),options:{...this.algorithmOptions,...this.dbScanOptions,preprocessingFuncArgs:this.columnOptEditors.map((t=>t.preprocessingFunctionSettings))},plotEmbeddings:this.plotEmbeddingsInput.value,clusterEmbeddings:!1,postProcessingFunction:this.postProcessingEditor.postProcessingFunction,postProcessingFunctionArgs:this.postProcessingEditor.args,aggreaggregationMethod:this.aggregationMethodInput.value}}}class Ve{constructor(t,e){this.preprocessingFuncSettingsDiv=n.div([]),this.preprocessingFunctionSettings={},this.editorDiv=n.div([]),this.hasExtraSettings=!0,this.functionsMap={},this.needsConfiguration=!1,this.weight=1,this.colOptEditors=[],this.weightInput=n.floatInput("Weight",1,(()=>{this.weight=this.weightInput.value??1})),this.column=t,this.supportedFunctions=e.sort(((t,n)=>0!==t.units.length&&0!==n.units.length||t.units.length===n.units.length?t.units.length!==n.units.length?t.units.length-n.units.length:0===t.semTypes.length||0===n.semTypes.length?n.semTypes.length-t.semTypes.length:t.semTypes.length!==n.semTypes.length?t.semTypes.length-n.semTypes.length:t.types.length-n.types.length:n.units.length-t.units.length)),this.supportedFunctions.forEach((t=>{this.functionsMap[Ge(t.func)]=t.func})),this.preprocessingFunctionInput=n.choiceInput("Encoding function",Ge(this.supportedFunctions[0].func),this.supportedFunctions.map((t=>Ge(t.func))),(()=>{const t=this.preprocessingFunctionInput.value,e=this.functionsMap[t];this.preprocessingFunctionSettings={},this.hasExtraSettings=e.inputs.length>2;const o=this.supportedFunctions.find((n=>Ge(n.func)===t));this.getSimilarityMetricInput(o),n.empty(this.preprocessingFuncSettingsDiv),r=!1,this.hasExtraSettings?this.preprocessingFuncSettingsIcon.style.display="flex":this.preprocessingFuncSettingsIcon.style.display="none"})),this.preprocessingFunctionInput.root.style.display="flex",this.createSettingsDiv(this.preprocessingFuncSettingsDiv,this.supportedFunctions[0].func).then((()=>{n.empty(this.preprocessingFuncSettingsDiv)})),this.getSimilarityMetricInput(this.supportedFunctions[0]),this.hasExtraSettings=this.supportedFunctions[0].func.inputs.length>2;let r=!1;this.preprocessingFuncSettingsIcon=n.icons.settings((async()=>{r=!r,r?await this.createSettingsDiv(this.preprocessingFuncSettingsDiv,this.functionsMap[this.preprocessingFunctionInput.value]):n.empty(this.preprocessingFuncSettingsDiv)}),"Modify encoding function parameters"),this.preprocessingFunctionInput.root.classList.add("ml-dim-reduction-settings-input"),this.preprocessingFunctionInput.root.prepend(this.preprocessingFuncSettingsIcon),this.hasExtraSettings?this.preprocessingFuncSettingsIcon.style.display="flex":this.preprocessingFuncSettingsIcon.style.display="none",this.needsConfiguration=!(e.length<2&&!this.hasExtraSettings&&e[0].distanceFunctions.length<2);const o=n.h3(this.column.name,{classes:"ml-dim-reduction-column-editor-column-title"});this.colOptEditors=[o,this.preprocessingFunctionInput.root,this.similarityMetricInputRoot,this.weightInput.root],n.tooltip.bind(o,this.column.name),this.colOptEditors.forEach((t=>t.classList.add("ml-dim-reduction-column-editor-input-root")));const i=n.divH(this.colOptEditors,{classes:"ml-dim-reduction-column-editor-root"});this.accordionDiv=n.divV([]),this.editorDiv.appendChild(i),this.editorDiv.appendChild(this.preprocessingFuncSettingsDiv),this.accordionDiv.appendChild(this.editorDiv)}getSimilarityMetricInput(t){const e=n.choiceInput("Similarity metric",t.distanceFunctions[0],t.distanceFunctions);this.similarityMetricInputRoot?(n.empty(this.similarityMetricInputRoot),this.similarityMetricInput=e,Array.from(this.similarityMetricInput.root.children).forEach((t=>this.similarityMetricInputRoot.appendChild(t)))):(this.similarityMetricInputRoot=e.root,this.similarityMetricInput=e)}get preProcessingFunction(){return this.functionsMap[this.preprocessingFunctionInput.value]}async createSettingsDiv(t,e){if(n.empty(t),e.inputs.length<3)return n.div();const r=e.prepare(),o=await r.buildEditor(n.div());for(let n=2;n<e.inputs.length;n++){const i=e.inputs[n],s=this.preprocessingFunctionSettings[i.name]||r.inputParams[e.inputs[n].name].value||i.defaultValue;s&&(this.preprocessingFunctionSettings[i.name]=s);const a=o.find((t=>t.property.name===i.name));a&&(null!==this.preprocessingFunctionSettings[i.name]&&void 0!==this.preprocessingFunctionSettings[i.name]&&(a.value=this.preprocessingFunctionSettings[i.name]),a.onChanged((()=>{this.preprocessingFunctionSettings[i.name]=a.value})),t.append(a.root))}return t.style.marginBottom="10px",t}}function Ge(t){return t.friendlyName??t.name}class qe{constructor(){this.postProcessingFunctionsMap={},this._root=n.div([]),this._postProcessingArgs={},this._argsElement=n.div([]),this._settingsOpened=!1,this._settingsIcon=n.icons.settings((async()=>{this._settingsOpened=!this._settingsOpened,this._settingsOpened?this._argsElement.style.display="block":this._argsElement.style.display="none"})),this._argsElement.style.display="none",o.Func.find({tags:["dim-red-postprocessing-function"]}).filter((t=>t.inputs.length>=2)).forEach((t=>{const n=t.friendlyName??t.name;this.postProcessingFunctionsMap[n]=t})),this.postProcessingFunctionsMap.None=null;const t=Object.keys(this.postProcessingFunctionsMap).find((t=>!!this.postProcessingFunctionsMap[t]?.options?.defaultPostProcessingFunction))??"None";this.postProcessingFunctionInput=n.choiceInput("Postprocessing",t,Object.keys(this.postProcessingFunctionsMap),(async()=>{await this.onFunctionChanged()}),{nullable:!1}),this.onFunctionChanged(),this.postProcessingFunctionInput.nullable=!1,this.postProcessingFunctionInput.classList.add("ml-dim-reduction-settings-input"),this.postProcessingFunctionInput.root.prepend(this._settingsIcon),this._root.appendChild(this.postProcessingFunctionInput.root),this._root.appendChild(this._argsElement)}get postProcessingFunction(){return this.postProcessingFunctionInput.value?this.postProcessingFunctionsMap[this.postProcessingFunctionInput.value]:null}async onFunctionChanged(){const t=this.postProcessingFunction;if(n.empty(this._argsElement),this._postProcessingArgs={},!t||t.inputs.length<3)return void(this._settingsIcon.style.display="none");this._settingsIcon.style.display="flex";const e=t.prepare(),r=await e.buildEditor(n.div());for(let n=2;n<t.inputs.length;n++){const o=t.inputs[n],i=this._postProcessingArgs[o.name]||e.inputParams[t.inputs[n].name].value||o.defaultValue;i&&(this._postProcessingArgs[o.name]=i);const s=r.find((t=>t.property.name===o.name));s&&(s.onChanged((()=>{this._postProcessingArgs[o.name]=s.value})),this._argsElement.append(s.root))}}get root(){return this._root}get args(){return this._postProcessingArgs}}const We="dimensionality-reducer-terminate-event",Ye=t=>null==t;function He(t,n){return`${n} (${t.length>4?`${t.length} columns`:t.map((t=>t.name)).join(", ")})`}var ze;!function(t){t.NO_DATAFRAME="No dataframe is opened",t.NO_MISSING_VALUES="No missing values",t.ONE_AVAILABLE_FEATURE="Not enough of feature columns to apply imputation using the KNN method",t.ONE_FEATURE_SELECTED="Imputation cannot be applied to",t.UNSUPPORTED_COLUMN_TYPE="Unsupported column type",t.UNSUPPORTED_IMPUTATION_STRATEGY="Unsupported imputation strategy",t.KNN_CANNOT_BE_APPLIED="KNN imputer cannot be applied: no columns to be used as features",t.KNN_NO_TARGET_COLUMNS="KNN imputer cannot be applied: no columns with missing values",t.KNN_NO_FEATURE_COLUMNS="KNN imputer cannot be applied: no feature columns",t.KNN_NOT_ENOUGH_OF_ROWS="KNN imputer cannot be applied: not enough of rows",t.KNN_IMPOSSIBLE_IMPUTATION="Imputation is impossible, no features can be used",t.INCORRECT_NEIGHBORS="Incorrect number of neighbors",t.KNN_FAILS="KNN IMPUTATION FAILS",t.CORE_ISSUE="Core issue",t.FAILED_TO_IMPUTE="Failed to impute",t.UNSUPPORTED_FILL_VALUE_TYPE="Unsupported fill value type",t.EMPTY_COLUMN="Column contains just null values",t.FAILS_TO_PREDICT_IMPUTATION_FAILS="Failed to predict imputation fails",t.WRONG_PREDICTIONS="wrong evaluation of KNN imputation fails"}(ze||(ze={}));const $e="copy";var Ke;!function(t){t.KNN_IMPUTER="Impute",t.TABLE="Table",t.IN_PLACE="In-place",t.COLUMNS="Impute",t.FEATURES="Using",t.CANCEL="CANCEL",t.RUN="RUN",t.OK="OK",t.NEIGHBORS="Neighbors",t.DISTANCE="Distance",t.FILL="Fill",t.MARK="Mark",t.SIMPLE_IMPUTER="Simple impute",t.SETTINGS="Settings",t.KEEP_EMPTY="Keep empty"}(Ke||(Ke={}));const je="/help/transform/missing-values-imputation";var Xe;!function(t){t.TARGET="Columns with missing values that must be filled",t.FEATURES="Columns with features to be used for determining the 'nearest' elements in the KNN method",t.IN_PLACE="Defines whether to use in-place imputation or add a new column without missing values",t.METRIC="Type of metric between the feature values",t.WEIGHT="Weight",t.NEIGHBORS="Neighbors count used in the KNN method",t.DISTANCE="Type of distance between elements with the specified features",t.METRIC_SETTINGS="Show additional options",t.FILL_FAILED_ITEMS="Impute missing values using a simple approach: mean, median or most frequent",t.MARK_FAILED_ITEMS="Mark missing values cells with a color",t.FILL_VALUE="Fill value",t.IMPUTATION_SETTINGS="Simple imputation settings",t.KEEP_EMPTY="Defines whether to keep empty missing values failed to be imputed OR fill them using simple imputation"}(Xe||(Xe={}));const Qe=[o.COLUMN_TYPE.INT,o.COLUMN_TYPE.FLOAT,o.COLUMN_TYPE.STRING,o.COLUMN_TYPE.DATE_TIME,o.COLUMN_TYPE.QNUM];function Je(t){switch(t.type){case o.COLUMN_TYPE.INT:return o.INT_NULL;case o.COLUMN_TYPE.FLOAT:case o.COLUMN_TYPE.QNUM:case o.COLUMN_TYPE.DATE_TIME:return o.FLOAT_NULL;case o.COLUMN_TYPE.STRING:return t.max;default:throw new Error(ze.UNSUPPORTED_COLUMN_TYPE)}}var Ze,tr,nr;!function(t){t.ONE_HOT="One-hot",t.DIFFERENCE="Difference"}(Ze||(Ze={})),function(t){t.EUCLIDEAN="Euclidean",t.MANHATTAN="Manhattan"}(tr||(tr={})),function(t){t[t.WEIGHT=1]="WEIGHT",t[t.NEIGHBORS=4]="NEIGHBORS",t[t.IN_PLACE=1]="IN_PLACE",t[t.SELECTED=1]="SELECTED",t[t.KEEP_EMPTY=0]="KEEP_EMPTY"}(nr||(nr={}));const er=1;function rr(t,n,e){for(const t of n)if(!e.has(t))return!1;for(const r of t){const t=e.get(r);if(void 0===t)throw new Error(ze.FAILS_TO_PREDICT_IMPUTATION_FAILS);for(const r of t){let t=!0;for(const o of n){const n=e.get(o);if(void 0===n)throw new Error(ze.FAILS_TO_PREDICT_IMPUTATION_FAILS);if(!n.includes(r)){t=!1;break}}if(t)return!0}}return!1}var or,ir=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};function sr(e){return ir(this,void 0,void 0,(function*(){if(null!=e||(e=t.shell.t),null===e)return void t.shell.warning(ze.NO_DATAFRAME);const r=[],i=[],s=[];e.columns.toList().filter((t=>Qe.includes(t.type))).forEach((t=>{s.push(t.name),t.stats.missingValueCount>0&&(r.push(t),i.push(t.name))}));const a=function(t){const n=new Map;for(const e of t){if(!Qe.includes(e.type))throw new Error(ze.UNSUPPORTED_COLUMN_TYPE);if(0===e.stats.missingValueCount)continue;const t=[],r=Je(e);e.getRawData().forEach(((n,e)=>{n===r&&t.push(e)})),n.set(e.name,t)}return n}(r);if(0===r.length)return void t.shell.info(ze.NO_MISSING_VALUES);if(1===s.length)return void t.shell.error(ze.ONE_AVAILABLE_FEATURE);let u=nr.IN_PLACE>0;const l=n.input.bool(Ke.IN_PLACE,{value:u,onValueChanged:()=>{var t;u=null!==(t=l.value)&&void 0!==t&&t}});l.setTooltip(Xe.IN_PLACE);let c=nr.KEEP_EMPTY>0;const f=n.input.bool(Ke.KEEP_EMPTY,{value:c,onValueChanged:()=>{var t;c=null!==(t=f.value)&&void 0!==t&&t}});f.setTooltip(Xe.KEEP_EMPTY);let h=nr.NEIGHBORS;const m=n.input.int(Ke.NEIGHBORS,{value:h,onValueChanged:()=>{const t=m.value;null===t?m.value=h:t>=er?h=t:m.value=h}});m.setTooltip(Xe.NEIGHBORS);let d=tr.EUCLIDEAN;const p=n.input.choice(Ke.DISTANCE,{value:d,items:[tr.EUCLIDEAN,tr.MANHATTAN],onValueChanged:()=>{var t;return d=null!==(t=p.value)&&void 0!==t?t:tr.EUCLIDEAN}});p.setTooltip(Xe.DISTANCE);let g=r.map((t=>t.name));const v=n.input.columns(Ke.COLUMNS,{table:e,onValueChanged:()=>{g=v.value.map((t=>t.name)),A()},available:i,checked:i});v.setTooltip(Xe.TARGET);let y=s;const w=n.input.columns(Ke.FEATURES,{table:e,onValueChanged:()=>{y=w.value.map((t=>t.name)),y.length>0?(A(),_.forEach(((t,n)=>t.hidden=!y.includes(n)))):E()},available:s,checked:s});w.setTooltip(Xe.FEATURES);const E=()=>{I.getButton(Ke.RUN).disabled=!0,l.root.hidden=!0,f.root.hidden=!0,m.root.hidden=!0,S.hidden=!0,b.hidden=!0},A=()=>{I.getButton(Ke.RUN).disabled=!1,S.hidden=!1,l.root.hidden=!1,m.root.hidden=!1,p.root.hidden=!1,f.root.hidden=!rr(g,y,a),1===y.length&&g.forEach((n=>{y[0]===n&&(E(),t.shell.warning(`${ze.ONE_FEATURE_SELECTED} the column '${n}'`))}))},C=new Map,_=new Map,b=n.divV([]);b.style.overflow="auto",s.forEach((t=>{const r=function(t){switch(t){case o.COLUMN_TYPE.STRING:case o.COLUMN_TYPE.DATE_TIME:return{defaultWeight:nr.WEIGHT,defaultMetric:Ze.ONE_HOT,availableMetrics:[Ze.ONE_HOT]};case o.COLUMN_TYPE.INT:case o.COLUMN_TYPE.FLOAT:case o.COLUMN_TYPE.QNUM:return{defaultWeight:nr.WEIGHT,defaultMetric:Ze.DIFFERENCE,availableMetrics:[Ze.DIFFERENCE,Ze.ONE_HOT]};default:throw new Error(ze.UNSUPPORTED_COLUMN_TYPE)}}(e.col(t).type);C.set(t,{weight:r.defaultWeight,type:r.defaultMetric});const i=n.input.choice(t,{value:r.defaultMetric,items:r.availableMetrics,onValueChanged:()=>{var n,e;const o=null!==(n=C.get(t))&&void 0!==n?n:{weight:r.defaultWeight,type:r.defaultMetric};o.type=null!==(e=i.value)&&void 0!==e?e:r.defaultMetric,C.set(t,o)}});i.root.style.width="50%",i.setTooltip(Xe.METRIC),i.root.hidden=!0;const s=o.Property.fromOptions({name:t,inputType:"Float",min:0,max:10,showSlider:!0,step:1}),a=n.input.forProperty(s);a.value=r.defaultWeight,a.onChanged((()=>{var n,e;const o=null!==(n=C.get(t))&&void 0!==n?n:{weight:r.defaultWeight,type:r.defaultMetric};o.weight=null!==(e=a.value)&&void 0!==e?e:r.defaultWeight,C.set(t,o)})),a.setTooltip(Xe.WEIGHT);const u=n.divH([i.root,a.root]);_.set(t,u),b.append(u)}));const I=n.dialog({title:Ke.KNN_IMPUTER,helpUrl:je});t.shell.v.root.appendChild(I.root),b.hidden=!0,f.root.hidden=!rr(g,y,a);const N=n.icons.settings((()=>{b.hidden=!b.hidden}),Xe.METRIC_SETTINGS),S=n.divH([p.root,N]);let M,T,O=!1;const P=new Promise(((t,n)=>{M=t,T=n}));return I.add(v).add(w).add(S).add(b).add(m).add(l).add(f).show().onOK((()=>{O=!0,I.close(),s.filter((t=>!y.includes(t))).forEach((t=>C.delete(t)));try{const n=function(n,e,r,i,s,a,u){if(a<er)throw new Error(ze.INCORRECT_NEIGHBORS);if(n.rowCount<2)throw new Error(ze.KNN_NOT_ENOUGH_OF_ROWS);if(0===e.length)throw new Error(ze.KNN_NO_TARGET_COLUMNS);if(0===r.size)throw new Error(ze.KNN_NO_FEATURE_COLUMNS);1===r.size&&e.forEach((t=>{if(r.has(t))throw new Error(`${ze.KNN_NO_FEATURE_COLUMNS} can be used for the column '${t}'`)})),e.forEach((t=>{if(!i.has(t))throw new Error(`${ze.KNN_FAILS}: ${ze.WRONG_PREDICTIONS}`)}));const l=n.columns;e.forEach((t=>{if(!Qe.includes(l.byName(t).type))throw new Error(ze.UNSUPPORTED_COLUMN_TYPE)})),r.forEach(((t,e)=>{if(!Qe.includes(n.getCol(e).type))throw new Error(ze.UNSUPPORTED_COLUMN_TYPE)}));const c=new Map;return e.forEach((e=>{const f=l.byName(e),h=Je(f),m=f.length,d=f.getRawData(),p=new Uint16Array(f.categories.length),g=[],v=[],y=[],w=[];r.forEach(((t,n)=>{if(n!==f.name){const e=l.byName(n);switch(g.push(e.getRawData()),v.push(Je(e)),t.type){case Ze.DIFFERENCE:y.push(((n,e)=>t.weight*Math.abs(n-e)));break;case Ze.ONE_HOT:y.push(((n,e)=>t.weight*(n===e?0:1)))}}}));const E=g.length,A=new Uint32Array(g.length),C=new Float32Array(g.length);let _=0;const b=new Array(a);let I=0,N=0,S=0,M=0,T=0;const O=(t,n)=>{A.forEach(((e,r)=>{C[r]=y[e](g[e][t],g[e][n])}))},P=s===tr.EUCLIDEAN?()=>{let t=0;for(let n=0;n<_;++n)t+=C[n]*C[n];return Math.sqrt(t)}:()=>{let t=0;for(let n=0;n<_;++n)t+=Math.abs(C[n]);return Math.sqrt(t)},x=t=>{if(d[t]===h)return!1;for(let n=0;n<_;++n)if(g[A[n]][t]===v[A[n]])return!1;return!0},L=t=>{if((t=>{_=0;for(let n=0;n<E;++n)g[n][t]!==v[n]&&(A[_]=n,++_)})(t),0===_)throw new Error(`${ze.KNN_IMPOSSIBLE_IMPUTATION}: the column "${f.name}", row ${t+1}`);I=0;for(let n=0;n<m;++n)if(x(n)&&n!==t){O(t,n);const e=P();if(I<a)b[I]={index:n,dist:e},++I;else{N=0,S=b[0].dist;for(let t=1;t<I;++t)S<b[t].dist&&(S=b[t].dist,N=t);e<S&&(b[N]={index:n,dist:e})}}if(0===I)throw new Error(`${ze.KNN_IMPOSSIBLE_IMPUTATION}: the column "${f.name}", row ${t+1}`);if(f.type===o.COLUMN_TYPE.STRING)return(()=>{p.forEach(((t,n,e)=>e[n]=0));let t=0;for(t=0;t<I;++t)++p[d[b[t].index]];let n=p[0],e=0;return p.forEach(((t,r)=>{t>n&&(n=t,e=r)})),e})();M=0;for(let t=0;t<I;++t)M+=d[b[t].index];return T=M/I,f.type===o.COLUMN_TYPE.INT?Math.round(T):T};if(u){for(const n of i.get(e))try{d[n]=L(n)}catch(e){w.push(n),e instanceof Error||t.shell.error(ze.CORE_ISSUE)}w.length>0&&c.set(e,w),f.set(0,f.get(0))}else{const r=f.clone();let o=1,s=`${e}(${$e})`;for(;n.columns.contains(s);)s=`${e}(${$e} ${o})`,++o;r.name=s;const a=r.getRawData();for(const n of i.get(e))try{a[n]=L(n)}catch(e){w.push(n),e instanceof Error||t.shell.error(ze.CORE_ISSUE)}w.length>0&&c.set(s,w),r.set(0,r.get(0)),n.columns.add(r)}})),c}(e,g,C,a,d,h,u);c||function(t,n){n.forEach(((n,e)=>{const r=t.col(e);if(null!==r){if(!Qe.includes(r.type))throw new Error(ze.UNSUPPORTED_COLUMN_TYPE);const t=function(t){switch(t.type){case o.COLUMN_TYPE.STRING:case o.COLUMN_TYPE.DATE_TIME:return function(t){const n=Je(t),e=t.getRawData(),r=e.length;for(let o=0;o<r;++o)if(e[o]!==n)return t.get(o);throw new Error(ze.EMPTY_COLUMN)}(t);case o.COLUMN_TYPE.INT:case o.COLUMN_TYPE.FLOAT:case o.COLUMN_TYPE.QNUM:return t.stats.avg;default:throw new Error(ze.UNSUPPORTED_COLUMN_TYPE)}}(r);n.forEach((n=>r.set(n,t)))}}))}(e,n),M()}catch(n){n instanceof Error?t.shell.error(`${ze.KNN_FAILS}: ${n.message}`):t.shell.error(`${ze.KNN_FAILS}: ${ze.CORE_ISSUE}`),T(n)}})).onClose.subscribe((()=>!O&&T())),P}))}class ar extends ke{constructor(t={}){super(t),this.similarityThresholdInput=n.intInput("Similarity Threshold",80),this.maxIterationsInput=n.intInput("Max Iterations",5),this.useWebGPUInput=n.boolInput("Use WebGPU",!1),this.inflateInput=n.floatInput("Inflation Factor",pe),oe().then((t=>{t?this.useWebGPUInput.setTooltip(`Use webGPU for MCL calculation (${t})`):(this.useWebGPUInput.value=!1,this.useWebGPUInput.setTooltip("WebGPU is not available"),this.useWebGPUInput.enabled=!1)}))}getEditor(){return n.div([this.tableInput.root,this.columnsInputRoot,this.columnParamsEditorRoot,this.aggregationMethodInput.root,this.similarityThresholdInput.root,this.inflateInput.root,this.maxIterationsInput.root,this.useWebGPUInput.root],{style:{minWidth:"420px"},classes:"ui-form"})}get params(){return{table:this.tableInput.value,columns:this.columnsInput.value,methodName:this.methodInput.value,preprocessingFunctions:this.columnOptEditors.map((t=>t.preProcessingFunction)),distanceMetrics:this.columnOptEditors.map((t=>t.similarityMetricInput.value)),weights:this.columnOptEditors.map((t=>t.weight)),preprocessingFuncArgs:this.columnOptEditors.map((t=>t.preprocessingFunctionSettings)),aggreaggregationMethod:this.aggregationMethodInput.value,threshold:this.similarityThresholdInput.value,maxIterations:this.maxIterationsInput.value??5,useWebGPU:this.useWebGPUInput.value??!1,inflateFactor:this.inflateInput.value??pe}}}class ur{constructor(t,n=!1){if(this._length=0,this._version=0,this._updateLevel=0,this._selectedCount=0,this._selectedCountVersion=-1,this._selectedIndexesVersion=-1,this._versionedName="",this._versionedNameVersion=-1,this.SHRINK_THRESHOLD=256,"number"==typeof t){const e=t,r=ur._createBuffer(e);if(n)for(let t=0;t<r.length;t++)r[t]=-1;this._data=r,this._length=e}else{if(!(t instanceof Uint32Array))throw new Error("Invalid constructor");this._data=t,this._length=n}}getRawData(){return this._data}assureGoez(t,n){if(t<0)throw new Error(`${n} should be greater than zero`)}assureInRange(t,n,e,r){if(t<n||t>e)throw new Error(`Argument ${r} (${t}) out of range (${n}, ${e})`)}copy(t,n,e){for(let r=0;r<e;r++)n[r]=t[r]}copyFrom(t){if(this._length!=t._length)throw new Error(`Lengths differ (${this._length} != ${t._length})`);this.copy(t._data,this._data,this.lengthInInts),this._version++}get length(){return this._length}get buffer(){return this._data}set buffer(t){this._data=t,this._version++}get version(){return this._version}set version(t){this._version=t}incrementVersion(t=!0){this._version++}get lengthInInts(){return Math.floor((this._length+31)/32)}get versionedName(){return this._version==this._versionedNameVersion?this._versionedName:""}set versionedName(t){this._versionedName=t,this._versionedNameVersion=this._version}get self(){return this}setLength(t){if(t<0)throw new Error("should be >= 0");if(t==this._length)return;const n=Math.floor((t+31)/32);if(n>this._data.length||n+this.SHRINK_THRESHOLD<this._data.length){const t=new Uint32Array(n);this.copy(this._data,t,n>this._data.length?this._data.length:n),this._data=t}t>this._length&&(this._length%32>0&&(this._data[this.lengthInInts-1]&=(1<<(this._length%32&31))-1),this._data.fill(0,this.lengthInInts,n)),this._length=t,this._version++}static fromAnd(t,n){if(t._length!=n._length)throw new Error(`Lengths differ (${t._length} != ${n._length})`);const e=new ur(t._length);e._length=t._length,e._data=ur._createBuffer(e._length),e._version=0;const r=t.lengthInInts;for(let o=0;o<r;o++)e._data[o]=t._data[o]&n._data[o];return e}static _createBuffer(t){return new Uint32Array(Math.floor((t+31)/32))}static fromValues(t){const n=new ur(t.length);n._version=0;for(let e=0;e<n._length;e++)t[e]&&(n._data[Math.floor(e/32)]|=1<<(e%32&31));return n}static fromSeq(t,n){const e=new ur(t);for(let r=0;r<t;++r)e.setBit(r,n(r));return e._version=0,e}static fromString(t){return ur.fromSeq(t.length,(n=>"1"==t.charAt(n)))}static fromUint32Array(t,n){const e=new ur(t);return e._data=n,e}static fromBytes(t){const n=t.length,e=new ur(8*n);e._data=new Uint32Array(Math.floor((n+3)/4)),e._length=8*n;let r=0,o=0;for(;n-o>=4;)e._data[r++]=255&t[o]|(255&t[o+1])<<8|(255&t[o+2])<<16|(255&t[o+3])<<24,o+=4;return n-o==3&&(e._data[r]=(255&t[o+2])<<16),n-o==2&&(e._data[r]|=(255&t[o+1])<<8),n-o==1&&(e._data[r]|=255&t[o]),e._version=0,e}toString(){return`${this._length} bits, ${this.countBits(!0)} set`}equals(t){if(this==t)return!0;if(null==t)return!1;if(this._length!=t._length)return!1;if(0==this._length)return!0;for(let n=0;n<this._data.length-1;n++)if(this._data[n]!=t._data[n])return!1;for(let n=8*(this._data.length-1);n<this._length;n++)if(this.getBit(n)!=t.getBit(n))return!1;return!0}clone(){const t=new ur(0,!1);return t._data=Uint32Array.from(this._data),t._length=this._length,t._version=this._version,t}init(t,n){this.setAll(!1,!1);for(let n=0;n<this._length;n++)t(n)&&(this._data[Math.floor(n/32)]|=1<<(n%32&31));return this.incrementVersion(n),this}invert(t=!0){for(let t=0;t<this._data.length;t++)this._data[t]^=-1;this.incrementVersion(t)}setAll(t,n=!1){const e=t?-1:0,r=this.lengthInInts;for(let t=0;t<r;t++)this._data[t]=e;this.incrementVersion(n)}setIndexes(t,n=!0,e=!0,r=!0){e&&this.setAll(!n,!1);for(const e of t)this.setFast(e,n);this.incrementVersion(r)}everyIndex(t,n=!0){for(const e of t)if(this.getBit(e)!=n)return!1;return!0}anyIndex(t,n=!0){for(const e of t)if(this.getBit(e)==n)return!0;return!1}setWhere(t,n=!0,e=!0,r=!0,o=!0){if(e&&o&&this.setAll(!n,!1),o)for(let e=0;e<this._length;e++)t(e)&&this.setFast(e,n);else for(let e=0;e<this._length;e++)this.setFast(e,t(e)?n:!n);this.incrementVersion(r)}getRange(t,n){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(n,0,this._length,"to");const e=[];for(let r=t;r<n;++r)e.push(this.getBit(r));return ur.fromValues(e)}getRangeAsList(t,n){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(n,0,this._length,"to");const e=[];for(let r=t;r<n;++r)e.push(this.getBit(r));return e}setRange(t,n,e,r=!0){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(n,0,this._length-1,"to");const o=Math.min(t,n),i=Math.max(t,n);if(e)for(let t=o;t<=i;t++)this.setTrue(t);else for(let t=o;t<=i;t++)this.setFalse(t);return this.incrementVersion(r),this}setRandom(t,n,e=!0){if(t<0||t>this._length)throw new Error("n must be >= 0 && <= Count");t>this._length/2&&this.setRandom(this._length-t,!n),this.setAll(!n);for(let e=0;e<t;){const t=Math.floor(Math.random()*this._length);this.getBit(t)!=n&&(this.setFast(t,n),e++)}this.incrementVersion(e)}and(t,n=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let n=0,e=this.lengthInInts;n<e;n++)this._data[n]&=t._data[n];return this.incrementVersion(n),this}andNot(t,n=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");const e=this.lengthInInts;for(let n=0;n<e;n++)this._data[n]&=~t._data[n];return this.incrementVersion(n),this}notAnd(t,n=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let n=0,e=this.lengthInInts;n<e;n++)this._data[n]=~this._data[n]&t._data[n];return this.incrementVersion(n),this}not(t=!0){for(let t=0,n=this.lengthInInts;t<n;t++)this._data[t]=~this._data[t];return this.incrementVersion(t),this}or(t,n=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let n=0,e=this.lengthInInts;n<e;n++)this._data[n]|=t._data[n];return this.incrementVersion(n),this}xor(t,n=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let n=0,e=this.lengthInInts;n<e;n++)this._data[n]^=t._data[n];return this.incrementVersion(n),this}insertAt(t,n,e=!1){if(this.assureInRange(t,0,this._length,"pos"),0==n)return;const r=this._length;this.setLength(this._length+n);for(let e=r-1;e>=t;e--)this.setBit(e+n,this.getBit(e));for(let r=t;r<t+n;r++)this.setBit(r,e)}removeAt(t,n=1){if(n<0)throw new Error("n cannot be negative");if(this.assureInRange(t,0,this._length-n,"pos"),this.contains(!0))for(let e=t;e<this._length-n;e++)this.setBit(e,this.getBit(e+n));this.setLength(this._length-n)}removeByMask(t,n=!0){if(this._length!=t.length)throw new Error("length != mask.length");if(t==this)this.setLength(t.countBits(!n)),this.setAll(!n);else{let e=0;for(let r=-1;-1!=(r=t.findNext(r,!n));)this.setFast(e++,this.getBit(r));this._length=e,this._version++}return this}getBit(t){return!!(this._data[Math.floor(t/32)]&1<<(31&t))}setBit(t,n,e=!0){this.setFast(t,n),this._version++}setFast(t,n){n?this._data[Math.floor(t/32)]|=1<<(31&t):this._data[Math.floor(t/32)]&=~(1<<(31&t))}setTrue(t){this._data[Math.floor(t/32)]|=1<<(31&t)}setFalse(t){this._data[Math.floor(t/32)]&=~(1<<(31&t))}trueCount(){return this.countBits(!0)}falseCount(){return this.countBits(!1)}countBits(t){if(0==this._length)return 0;if(this._selectedCountVersion!=this._version){this._selectedCount=0;const t=this.lengthInInts;let n=0;for(;n<t-1;n++)for(let t=this._data[n];0!=t;t>>>=8)this._selectedCount+=ur._onBitCount[255&t];let e=this._data[n];const r=31&this._length;for(0!=r&&(e&=~(4294967295<<r));0!=e;e>>>=8)this._selectedCount+=ur._onBitCount[255&e];this._selectedCountVersion=this._version}return t?this._selectedCount:this._length-this._selectedCount}countWhere(t){let n=0;if(this.trueCount()==this._length)for(let e=0;e<this._length;e++)n+=t(e)?1:0;else for(let e=-1;-1!=(e=this.findNext(e,!0));)n+=t(e)?1:0;return n}andWithCountBits(t,n){if(0==this._length)return 0;let e=0;const r=this.lengthInInts;let o=0;for(;o<r-1;o++)for(let n=this._data[o]&t._data[o];0!=n;n>>>=8)e+=ur._onBitCount[255&n];let i=this._data[o]&t._data[o];const s=31&this._length;for(0!=s&&(i&=~(4294967295<<s));0!=i;i>>>=8)e+=ur._onBitCount[255&i];return n?e:this._length-e}clear(){this.setLength(0)}contains(t){return this.findNext(-1,t)>=0}get allTrue(){return this.countBits(!0)==this._length}get allFalse(){return this.countBits(!1)==this._length}get anyTrue(){return this.countBits(!0)>0}get anyFalse(){return this.countBits(!1)>0}findNext(t,n=!0){if(this.assureInRange(t,-1,this._length,"index"),t>=this._length-1)return-1;let e=31&(t=t<0?0:t+1);const r=this.lengthInInts;for(let o=Math.floor(t/32);o<r;o++){let r=n?this._data[o]:~this._data[o];if(0!=e)r&=4294967295<<e&4294967295,e=0;else if(!n&&-4294967296==r)continue;for(let n=0;0!=r;n+=8,r>>>=8){const e=ur._firstOnBit[255&r];if(e>=0)return(t=e+32*o+n)>=this._length?-1:t}}return-1}findPrev(t,n=!0){if(0==t)return-1;this.assureInRange(t,-1,this._length,"index");let e=1+(t=t<0?this._length-1:t-1)&31;for(let r=Math.floor(t/32);r>=0;r--){let t=n?this._data[r]:~this._data[r];0!=e&&(t&=~(4294967295<<e),e=0);for(let n=24;0!=t;n-=8,t<<=8){const e=ur._lastOnBit[t>>>24];if(e>=0)return e+32*r+n}}return-1}}ur._onBitCount=Int8Array.from([0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8]),ur._firstOnBit=Int8Array.from([-1,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0]),ur._lastOnBit=Int8Array.from([-1,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]),function(t){t.none="none",t.bold="bold",t.dashed="dashed"}(or||(or={}));class lr{get currentLineId(){return this._currentLineIdx}set currentLineId(t){t!==this._currentLineIdx&&(this._currentLineIdx=t,this.sp.render(this.ctx))}set linesToRender(t){this.updateLines(t),this.sp.render(this.ctx)}set linesVisibility(t){this.visibility=t,this.sp.render(this.ctx)}constructor(t,n,e,r,o=or.none){var i;this._currentLineIdx=-1,this.lineClicked=new Ce.Subject,this.lineHover=new Ce.Subject,this.mouseOverLineId=-1,this.arrowWidth=15,this.sp=t,this.xAxisCol=this.sp.dataFrame.columns.byName(n),this.yAxisCol=this.sp.dataFrame.columns.byName(e),this.canvas=this.sp.getInfo().canvas,this.ctx=this.canvas.getContext("2d"),this.currentLineStyle=o,this.updateLines(r),this.visibility=null!==(i=r.visibility)&&void 0!==i?i:new ur(this.lines.from.length),r.visibility||this.visibility.setAll(!0,!1),r.arrowSize&&(this.arrowWidth=r.arrowSize),this.canvas.onmousedown=t=>{-1!==this.mouseOverLineId&&this.lineClicked.next({x:t.clientX,y:t.clientY,id:this.mouseOverLineId,event:t})},this.canvas.onmousemove=t=>{this.mouseOverLineId=this.checkCoordsOnLine(t.offsetX,t.offsetY),-1!==this.mouseOverLineId&&this.lineHover.next({x:t.clientX,y:t.clientY,id:this.mouseOverLineId,event:t})},t.onEvent("d4-before-draw-scene").subscribe((t=>{this.renderLines()}))}updateLines(t){this.lines=t,this.multipleLinesCounts=new Uint8Array(this.lines.from.length),t.skipMultiLineCalculation?this.multipleLinesCounts.fill(0):this.createMultiLinesIndices()}renderLines(){var t,n,e,r,o,i,s,a,u,l,c,f,h;const m=this.sp.getOptions().look,d=this.lines.colors||this.lines.width||this.lines.opacities||this.lines.drawArrowsArr;d||(this.ctx.lineWidth=null!==(t=this.lines.width)&&void 0!==t?t:1,this.ctx.strokeStyle=`rgba(${null!==(n=this.lines.color)&&void 0!==n?n:"0,128,0"},${null!==(e=this.lines.opacity)&&void 0!==e?e:1})`);const p=m.sizeColumnName?this.sp.dataFrame.col(m.sizeColumnName):null,g=this.sp.dataFrame.filter;for(let t=0;t<this.lines.from.length;t++)if(g.get(this.lines.from[t])&&g.get(this.lines.to[t])&&this.visibility.getBit(t)){let n=0;const{sizeFrom:e,sizeTo:g}=this.getMarkersSizes(m,p,t),v=this.sp.worldToScreen(this.xAxisCol.get(this.lines.from[t]),this.yAxisCol.get(this.lines.from[t]));let y=null==v?void 0:v.x,w=null==v?void 0:v.y;const E=this.sp.worldToScreen(this.xAxisCol.get(this.lines.to[t]),this.yAxisCol.get(this.lines.to[t]));let A=null==E?void 0:E.x,C=null==E?void 0:E.y;const _=Math.min(this.sp.viewBox.width,this.sp.viewBox.height);if(this.ctx.beginPath(),y&&w&&A&&C&&Math.hypot(A-y,C-w)/_>.01){if(d){const n=(null===(r=this.lines.colors)||void 0===r?void 0:r[t])?null===(o=this.lines.colors)||void 0===o?void 0:o[t]:"0,128,0",e=(null===(i=this.lines.opacities)||void 0===i?void 0:i[t])?null===(s=this.lines.opacities)||void 0===s?void 0:s[t]:1;this.ctx.strokeStyle=`rgba(${n},${e})`,this.ctx.lineWidth=(null===(a=this.lines.widths)||void 0===a?void 0:a[t])?null===(u=this.lines.widths)||void 0===u?void 0:u[t]:1}t===this._currentLineIdx&&this.toggleCurrentLineStyle(!0);const m=this.multipleLinesCounts[t];let p=null;if(m){n=this.getLineLength(y,w,A,C);const r=this.getPointOnDistance(y,w,A,C,g,n),o=this.getPointOnDistance(A,C,y,w,e,n);y=r.x,w=r.y,A=o.x,C=o.y,p=this.lines.from[t]>this.lines.to[t]?this.findControlPoint(m,y,w,A,C,t):this.findControlPoint(m,A,C,y,w,t),this.ctx.moveTo(y,w),this.ctx.quadraticCurveTo(p.x,p.y,A,C)}else this.ctx.moveTo(y,w),this.ctx.lineTo(A,C);if((null!==(l=this.lines.drawArrows)&&void 0!==l?l:null===(c=this.lines.drawArrowsArr)||void 0===c?void 0:c.getBit(t))&&(n||(n=this.getLineLength(y,w,A,C)),n>this.arrowWidth)){const t=m?null:this.getPointOnDistance(y,w,A,C,g,n),e=m?p.x:y,r=m?p.y:w;this.canvasArrow(this.ctx,null!==(f=null==t?void 0:t.x)&&void 0!==f?f:y,null!==(h=null==t?void 0:t.y)&&void 0!==h?h:w,e,r)}this.ctx.stroke(),this.ctx.closePath(),t===this._currentLineIdx&&this.toggleCurrentLineStyle(!1)}}this.fillLeftBottomRect()}toggleCurrentLineStyle(t){switch(this.currentLineStyle){case or.bold:t?this.ctx.lineWidth+=2:this.ctx.lineWidth-=2;break;case or.dashed:t?this.ctx.setLineDash([5,5]):this.ctx.setLineDash([]);break;default:return}}getMarkersSizes(t,n,e){let r=3,o=3;return n?(r=(t.markerMinSize+(t.markerMaxSize-t.markerMinSize)*n.scale(this.lines.from[e]))/2,o=(t.markerMinSize+(t.markerMaxSize-t.markerMinSize)*n.scale(this.lines.to[e]))/2):t.markerDefaultSize&&(r=t.markerDefaultSize/2,o=t.markerDefaultSize/2),{sizeFrom:r,sizeTo:o}}fillLeftBottomRect(){const t=new Path2D;t.rect(this.sp.yAxisBox.minX,this.sp.yAxisBox.maxY,this.sp.yAxisBox.width,this.sp.xAxisBox.height),this.ctx.fillStyle="white",this.ctx.beginPath(),this.ctx.fill(t),this.ctx.closePath()}createMultiLinesIndices(){const t=new ur(this.lines.from.length);t.setAll(!0);for(let n=-1;-1!==(n=t.findNext(n));){const e=n,r=this.lines.from[e],o=this.lines.to[e];let i=1;for(let e=n;-1!==(e=t.findNext(e));){const n=this.lines.from[e],s=this.lines.to[e];(n===r&&s===o||s===r&&n===o)&&(this.multipleLinesCounts[e]=++i,t.setBit(e,!1,!1))}i>1&&(this.multipleLinesCounts[e]=1),t.setBit(n,!1,!1)}}checkCoordsOnLine(t,n){let e=-1,r=null,o=null;const i=this.sp.getOptions().look,s=i.sizeColumnName?this.sp.dataFrame.col(i.sizeColumnName):null,a=this.sp.dataFrame.filter;for(let u=0;u<this.lines.from.length;u++)if(a.get(this.lines.from[u])&&a.get(this.lines.to[u])&&this.visibility.getBit(u)){const{sizeFrom:a,sizeTo:l}=this.getMarkersSizes(i,s,u),c=this.sp.worldToScreen(this.xAxisCol.get(this.lines.from[u]),this.yAxisCol.get(this.lines.from[u])),f=this.sp.worldToScreen(this.xAxisCol.get(this.lines.to[u]),this.yAxisCol.get(this.lines.to[u]));if(this.multipleLinesCounts[u]){const e=this.getLineLength(c.x,c.y,f.x,f.y),r=this.getPointOnDistance(c.x,c.y,f.x,f.y,l,e),i=this.getPointOnDistance(f.x,f.y,null==c?void 0:c.x,null==c?void 0:c.y,a,e),s=this.lines.from[u]>this.lines.to[u]?this.findControlPoint(this.multipleLinesCounts[u],r.x,r.y,i.x,i.y,u):this.findControlPoint(this.multipleLinesCounts[u],i.x,i.y,r.x,r.y,u);o=this.calculateDistToCurveLine(u,t,n,r,i,s)}else o=this.calculateDistToStraightLine(t,n,c,f);(!r&&null!==o&&o<5||r&&null!==o&&o<r)&&(r=o,e=u)}return e}calculateDistToStraightLine(t,n,e,r){const o=Math.min(e.x,r.x),i=Math.max(e.x,r.x),s=Math.min(e.y,r.y),a=Math.max(e.y,r.y);return t>=o-2&&t<=i+2&&n>=s-2&&n<=a+2?this.distToStraightLineSegment(t,n,e,r):null}distToStraightLineSegment(t,n,e,r){const o=(t,n,e,r)=>Math.pow(t-e,2)+Math.pow(n-r,2),i=o(e.x,e.y,r.x,r.y);if(0==i)return o(t,n,e.x,e.y);let s=((t-e.x)*(r.x-e.x)+(n-e.y)*(r.y-e.y))/i;return s=Math.max(0,Math.min(1,s)),o(t,n,e.x+s*(r.x-e.x),e.y+s*(r.y-e.y))}calculateDistToCurveLine(t,n,e,r,o,i){const s=Math.min(r.x,o.x,i.x),a=Math.max(r.x,o.x,i.x),u=Math.min(r.y,o.y,i.y),l=Math.max(r.y,o.y,i.y);if(n>=s-2&&n<=a+2&&e>=u-2&&e<=l+2){const t=a-s,c=l-u;return this.calculateDistToCurveInRect(n,e,r,i,o,t,c)}return null}calculateDistToCurveInRect(t,n,e,r,o,i,s){const a=Math.floor((i+s)/3),u=1/a,l=new Uint32Array(a),c=new Uint32Array(a),f=new Uint32Array(a);let h=null;const m=new ur(a);for(let i=0;i<l.length;i++){const s=i*u,a=Math.pow(1-s,2)*e.x+2*s*(1-s)*r.x+Math.pow(s,2)*o.x,m=Math.pow(1-s,2)*e.y+2*s*(1-s)*r.y+Math.pow(s,2)*o.y,d=Math.abs(t-a),p=Math.abs(n-m),g=d+p;(!h||h>g)&&(h=g),f[i]=Math.max(d,p),l[i]=a,c[i]=m}for(let t=0;t<l.length;t++)f[t]<h&&m.setBit(t,!0,!1);let d=null;for(let e=-1;-1!==(e=m.findNext(e));){const r=Math.hypot(l[e]-t,c[e]-n);(!d||d>r)&&(d=r)}return d}getLineLength(t,n,e,r){return Math.sqrt(Math.pow(e-t,2)+Math.pow(r-n,2))}getPointOnDistance(t,n,e,r,i,s){const a=e-i*((e-t)/s),u=r-i*((r-n)/s);return new o.Point(a,u)}findControlPoint(t,n,e,r,i,s){const a=n+(r-n)/2,u=e+(i-e)/2;let l=a-n,c=u-e;const f=Math.sqrt(l*l+c*c);l/=f,c/=f;const h=50*Math.ceil(t/2);return t%2==0?new o.Point(a+h/2*c,u-h/2*l):new o.Point(a-h/2*c,u+h/2*l)}canvasArrow(t,n,e,r,o){const i=Math.atan2(r-n,o-e)+Math.PI;t.moveTo(n-this.arrowWidth*Math.sin(i-Math.PI/10),e-this.arrowWidth*Math.cos(i-Math.PI/10)),t.lineTo(n,e),t.lineTo(n-this.arrowWidth*Math.sin(i+Math.PI/10),e-this.arrowWidth*Math.cos(i+Math.PI/10))}}var cr=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};function fr(n,e){return cr(this,void 0,void 0,(function*(){const r=n.length,i=e.length,s=e.stats.avg,a=e.stats.stdev,u=new Float32Array(r+1).fill(0);if(u[r]=s,0===a||1===i)return u;try{const t=mr(r,i);if(t.toApplyPLS){const i=yield function(t,n,e){return cr(this,void 0,void 0,(function*(){return(yield $n({table:o.DataFrame.fromColumns([n]),features:t,predict:n,components:e,names:null})).regressionCoefficients.getRawData()}))}(n,e,t.components);let s=0;for(let t=0;t<r;++t)u[t]=i[t],s+=i[t]*n.byIndex(t).stats.avg;return u[r]-=s,u}const l=[],c=[],f=new Float32Array(r),h=new Float32Array(r);let m=0,g=0;for(const t of n){const n=t.stats;n.stdev>0&&(l.push(m),c.push(t),f[g]=n.avg,h[g]=n.stdev,++g),++m}if(0===g)return u;const v=function(t,n,e,r,o,i,s){return function(t,n,e){const r=t[n],o=r.arguments,i=[];let s=0;for(const t in o){const n=o[t];if("_callResult"!=t){switch(n.type){case"floatColumns":case"int":case"num":case"floatColumn":case"intColumn":case"intColumns":n.data=d[n.type](e[s]),s++;break;case"newFloatColumns":case"newIntColumns":const t=o[n.numOfRows.ref].data[n.numOfRows.value],r=o[n.numOfColumns.ref].data[n.numOfColumns.value];n.data=d[n.type](t,r);break;case"newFloatColumn":case"newIntColumn":const i=o[n.numOfRows.ref].data[n.numOfRows.value];n.data=d[n.type](i)}i.push(o[t].data)}}const a=function(t,n,e,r){let o;for(const n of r)n.allocateMemoryForBuffer(t);let i=!0;for(const t of r)i&=t.isMemoryForBufferAllocated();if(i){const e=[],i=[];for(const n of r)n.complementArrOfParams(e),n.complementArrOfTypes(i),n.putDataToBuffer(t);const s="number";o=t.ccall(n,s,i,e);for(const n of r)n.getDataFromBuffer(t)}for(const n of r)n.freeBuffer(t);if(null!=o)return o}(t,n,0,i);o._callResult=d.num(a);const u=r.output;if("objects"!=u.type)return p[u.type](o[u.source].data);const l=[];for(const t of u.source)l.push(o[t].data.data);return l}(EDA,"fitLinearRegressionParamsWithDataNormalizing",[t,n,e,r,o,i,s])}(o.DataFrame.fromColumns(c).columns,o.Column.fromFloat32Array("xAvgs",f,g),o.Column.fromFloat32Array("xStdevs",h,g),e,s,a,g+1).getRawData();for(let t=0;t<g;++t)u[l[t]]=v[t];u[r]=v[g]}catch(n){t.shell.error(`Fitted the trivial model: ${n instanceof Error?n.message:"due to the platform issue"}`)}return u}))}function hr(t,n){const e=t.length;if(e!==n.length-1)throw new Error("Incorrect parameters count");const r=t.byIndex(0),i=r.length,s=new Float32Array(i);let a=r.getRawData();const u=n[e];let l=n[0];for(let t=0;t<i;++t)s[t]=u+l*a[t];for(let r=1;r<e;++r){a=t.byIndex(r).getRawData(),l=n[r];for(let t=0;t<i;++t)s[t]+=l*a[t]}return o.Column.fromFloat32Array(t.getUnusedName("prediction"),s,i)}const mr=(t,n)=>((t,n)=>8*n*(t+1)>=268435456)(t,n)||t>=1e3?{toApplyPLS:!0,components:10}:n>=1e6?{toApplyPLS:!0,components:Math.min(10,t)}:n<=t?{toApplyPLS:!0,components:Math.min(10,n)}:{toApplyPLS:!1,components:10};var dr=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};const pr=new o.Package;function gr(){t.shell.info(pr.webRoot)}function vr(){return dr(this,void 0,void 0,(function*(){yield async function(){await initEDA()}()}))}function yr(t,n,e,r,i){return dr(this,void 0,void 0,(function*(){const s=n.getRawData(),a=e.getRawData(),u=yield ee(s,a,r,i),l=t.columns.getUnusedName("Cluster (DBSCAN)"),c=o.Column.fromInt32Array(l,u);return t.columns.add(c),c}))}function wr(n,r,o,i,s){return dr(this,void 0,void 0,(function*(){const a=yield function(t,n,r,o,i){return nt(this,void 0,void 0,(function*(){tt(n,r);const t=o?1:0,s=i?1:0;return yield async function(t,n,r,o,i){return new Promise(((t,s)=>{const a=new Worker(new URL(e.p+e.u(91),e.b));a.postMessage(D(EDA.principalComponentAnalysis.arguments,[n,r,o,i])),a.onmessage=function(n){a.terminate(),t(U(EDA.principalComponentAnalysis,n.data))}}))}(0,n,r,t,s)}))}(0,r,o,i,s);if(function(t,n){for(const t of n.toList())t.name="PC"+t.name}(0,a.columns),null===n.id)t.shell.addTableView(a);else{const t=n.columns;for(const n of a.columns)n.name=t.getUnusedName(n.name),t.add(n)}}))}function Er(n,e,r,i){return dr(this,void 0,void 0,(function*(){const s=n.dataFrame;if(null===s)return;const a=yield yr(s,n,e,r,i);s.changeColumnType(a,"string");const u=[n.name,e.name],l=t.shell.tableView(s.name);if(l)for(const t of l.viewers)if(t instanceof o.ScatterPlotViewer&&u.includes(t.props.xColumnName)&&u.includes(t.props.yColumnName))return void(t.props.colorColumnName=a.name)}))}function Ar(t,n){const e=t.stats.max-t.stats.min;return{entries:t.toList(),options:{range:e}}}function Cr(t,n){return{entries:t.toList(),options:{}}}function _r(){return dr(this,void 0,void 0,(function*(){const r=new ke,i=n.dialog("Dimensionality reduction").add(r.getEditor()).onOK((()=>dr(this,void 0,void 0,(function*(){const i=r.getParams();0!==i.columns.length&&(yield async function(r,i,s,a,u,l,c,f=!0,h=!1,m={preprocessingFuncArgs:[]},d={},p=null,g={}){const v={showXAxis:!1,showYAxis:!1,showXSelector:!1,showYSelector:!1};if(i.length!==a.length||i.length!==l.length||i.length!==u.length||i.length!==m.preprocessingFuncArgs.length)throw new Error("columns, metrics and preprocessing functions, weights and function argumentsmust have the same length");const y=f?t.shell.tableView(r.name)??t.shell.addTableView(r):null,w=async()=>{const w=o.TaskBarProgressIndicator.create(`Initializing ${d.scatterPlotName??"dimensionality reduction"} ...`);let E;try{const A=function(t){const n=["Embed_X","Embed_Y"],e=t.columns.names().filter((t=>t.includes(n[0]))).length+1;return n.map((t=>`${t}_${e}`))}(r);function C(t,e,a){let u=null,l=null;r.columns.names().includes(A[0])?(u=r.columns.byName(A[0]),l=r.columns.byName(A[1])):(u=r.columns.add(o.Column.float(A[0],r.rowCount)),l=r.columns.add(o.Column.float(A[1],r.rowCount)),f&&!E&&(E=y.scatterPlot({...v,x:A[0],y:A[1],title:d.scatterPlotName??He(i,s)}))),d[we]&&(E?.root&&n.setUpdateIndicator(E.root,!1),u.init((t=>a[0]?a[0][t]:void 0)),l.init((t=>a[1]?a[1][t]:void 0)));const c=t/e*100;w.update(c,`Running ${d.scatterPlotName??"dimensionality reduction"}... ${c.toFixed(0)}%`)}async function _(){r.columns.add(o.Column.float(A[0],r.rowCount)),r.columns.add(o.Column.float(A[1],r.rowCount));let h=null;f&&(E=y.scatterPlot({...v,x:A[0],y:A[1],title:d.scatterPlotName??He(i,s)}),n.setUpdateIndicator(E.root,!0));const p=t.events.onViewerClosed.subscribe((n=>{const e=n.args.viewer;e?.getOptions()?.look?.title&&E?.getOptions()?.look?.title&&e?.getOptions()?.look?.title===E?.getOptions()?.look?.title&&(t.events.fireCustomEvent(We,{}),p.unsubscribe(),h?.(),w.close())})),g=new Promise((async(n,r)=>{try{h=n;const r=[];for(let t=0;t<l.length;++t){const n=l[t];if(m.distanceFnArgs||(m.distanceFnArgs=[]),n){const e=n.inputs[0].name,o=n.inputs[1].name,{entries:s,options:u}=await n.apply({[e]:i[t],[o]:a[t],...m.preprocessingFuncArgs[t]??{}});r.push({entries:s,options:u}),m.distanceFnArgs.push(u)}else{const n=i[t].toList(),e={};r.push({entries:n,options:e}),m.distanceFnArgs.push(e)}}n(await async function(n,r,o,i,s,a,u){let l=await async function(n,r,o,i,s,a,u){if(!a.distanceFnArgs)throw new Error("options.distanceFnArgs must be defined");if(n.length!==r.length||n.length!==a.distanceFnArgs.length||n.length!==i.length)throw new Error("data, metrics and options and weights must have the same length");return new Promise((function(l,c){const f=new Worker(new URL(e.p+e.u(234),e.b));f.postMessage({columnsData:n,distanceMetrics:r,method:o,options:a,weights:i,aggregationMethod:s});const h=t.events.onCustomEvent(We).subscribe((()=>{try{f?.terminate()}finally{h.unsubscribe()}}));f.onmessage=({data:{error:t,embedding:n,epochNum:e,epochsLength:r}})=>{Ye(e)||Ye(r)?(h.unsubscribe(),t?c(t):l(n),setTimeout((()=>f.terminate()),100)):u&&u(e,r,n)}}))}(n,o,r,i,s,a,u);return l=l.map((t=>function(t){const n=t.length;let e=0,r=0;for(let o=0;o<n;++o)e+=t[o],r+=Math.pow(t[o],2);const o=e/n,i=1/Math.sqrt(r/n-Math.pow(o,2));for(let e=0;e<n;++e)t[e]=(t[e]-o)*i;return t}(t))),l}(r.map((t=>t.entries)),s,a,u,c,m,d[ye]?void 0:C))}catch(t){r(t)}})),_=await g;return w.close(),p.unsubscribe(),_}const b=await _();if(h&&b){const I=o.TaskBarProgressIndicator.create("Clustering embeddings ...");try{const N=await ee(b[0],b[1],m.dbScanEpsilon??.01,m.dbScanMinPts??4),S=r.columns.getUnusedName("Cluster (DBSCAN)");r.columns.addNewString(S).init((t=>N[t].toString())),E&&(E.props.colorColumnName=S)}catch(M){t.shell.error("Clustering embeddings failed"),console.error(M)}finally{I.close()}}if(b){const T=r.columns.byName(A[0]),O=r.columns.byName(A[1]);if(T.init((t=>b[0][t])),O.init((t=>b[1][t])),p)try{const P=p.inputs[0].name,x=p.inputs[1].name;await p.prepare({[P]:T,[x]:O,...g}).call(!0)}catch(L){t.shell.error("Post-processing failed"),console.error(L)}if(E)return n.setUpdateIndicator(E.root,!1),E.helpUrl="/help/compute/sequence-space",E}}catch(R){t.shell.error("Dimensionality reduction failed"),console.error(R),w.close(),E&&n.setUpdateIndicator(E.root,!1)}};return new Promise((async(t,e)=>{try{if(d.fastRowCount&&r.rowCount>d.fastRowCount&&!d[ye])n.dialog().add(n.divText("Analysis might take several minutes. Do you want to continue?")).onOK((async()=>{try{const n=await w();t(n)}catch(t){e(t)}})).onCancel((()=>t(void 0))).show();else{const n=await w();t(n)}}catch(t){e(t)}}))}(i.table,i.columns,i.methodName,i.distanceMetrics,i.weights,i.preprocessingFunctions,i.aggreaggregationMethod,!!i.plotEmbeddings,!!i.clusterEmbeddings,i.options,{fastRowCount:1e4},i.postProcessingFunction,i.postProcessingFunctionArgs))})))).show();i.helpUrl="https://datagrok.ai/help/explore/dim-reduction.md";const s=()=>{const t=r.columnsInput.value,n=i.getButton("OK");n&&(t&&0!==t.length?n.classList.remove("disabled"):n.classList.add("disabled"))};r.onColumnsChanged.subscribe((()=>{try{s()}catch(t){console.error(t)}})),s()}))}function br(e){try{const t=new ar;n.dialog("Markov clustering").add(t.getEditor()).onOK((()=>dr(this,void 0,void 0,(function*(){const n=t.params;return e.func.prepare({df:n.table,cols:n.columns,metrics:n.distanceMetrics,weights:n.weights,aggregationMethod:n.aggreaggregationMethod,preprocessingFuncs:n.preprocessingFunctions,preprocessingFuncArgs:n.preprocessingFuncArgs,threshold:n.threshold,maxIterations:n.maxIterations,useWebGPU:n.useWebGPU,inflate:n.inflateFactor}).call(!0)})))).show()}catch(n){const e=n instanceof Error?n.message:n.toString(),r=n instanceof Error?n.stack:void 0;t.shell.error(`Get region editor error: ${e}`),pr.logger.error(e,void 0,r)}}function Ir(n,e,r,i,s,a,u){return dr(this,arguments,void 0,(function*(n,e,r,i,s,a,u,l=80,c=10,f=!1,h=0){var m;const d=null!==(m=t.shell.tableView(n.name))&&void 0!==m?m:t.shell.addTableView(n),p=JSON.stringify({cols:e.map((t=>t.name)),metrics:r,weights:i,aggregationMethod:s,preprocessingFuncs:a.map((t=>{var n;return null!==(n=null==t?void 0:t.name)&&void 0!==n?n:null})),preprocessingFuncArgs:u,threshold:l,maxIterations:c,useWebGPU:f,inflate:h});return n.setTag(ge,p),d.addViewer(o.VIEWER.SCATTER_PLOT,{title:"MCL",initializationFunction:"EDA:MCLInitializationFunction"})}))}function Nr(r){return dr(this,void 0,void 0,(function*(){const i=r.dataFrame;if(null===i)throw new Error("Data frame of the scatter plot is null");const s=i.getTag(ge);if(!s)throw new Error("MCL options tag on the dataFrame is not found");const a=JSON.parse(s),u=a.cols.map((t=>i.columns.byName(t))),l=a.preprocessingFuncs.map((t=>t?o.Func.byName(t):null)),c=yield async function(r,o,i,s,a,u,l,c=80,f=10,h=!1,m=2,d){const p=t.shell.tableView(r.name)??t.shell.addTableView(r),g=d??p.scatterPlot({showXAxis:!1,showYAxis:!1,showXSelector:!1,showYSelector:!1,title:"MCL"});n.setUpdateIndicator(g.root,!0);const v=[],y=[];for(let t=0;t<u.length;++t){const n=u[t];if(n){const e=n.inputs[0].name,r=n.inputs[1].name,{entries:s,options:a}=await n.apply({[e]:o[t],[r]:i[t],...l[t]??{}});y.push({entries:s,options:a}),v.push(a??{})}else{const n=o[t].toList(),e={};y.push({entries:n,options:e}),v.push(e)}}const w=function(t,n,r,o,i,s,a=10,u=!1,l=2){const c=new Worker(new URL(e.p+e.u(317),e.b));let f;return c.postMessage({data:t,threshold:n,weights:r,aggregationMethod:o,distanceFns:i,distanceFnArgs:s,maxIterations:a,useWebGPU:u,inflate:l}),{promise:new Promise(((t,n)=>{f=t,c.onmessage=n=>{setTimeout((()=>c.terminate()),100),t(n.data.res)},c.onerror=t=>{setTimeout((()=>c.terminate()),100),n(t)}})),terminate:()=>{try{f(null),c.terminate()}catch(t){console.error(t)}}}}(y.map((t=>t.entries)),c,s,a,i,v,f,h,m),E=t.events.onViewerClosed.subscribe((t=>{t.args.viewer?.props?.title===g.props.title&&g.type===t.args?.viewer?.type&&(E.unsubscribe(),w.terminate())})),A=await w.promise;if(!A)return;const C=r.columns.getUnusedName("Cluster (MCL)"),_=r.columns.getUnusedName("EmbedX (MCL)"),b=r.columns.getUnusedName("EmbedY (MCL)"),I={};A.clusters.forEach((t=>{I[t]||(I[t]=0),I[t]++}));const N=new Uint32Array(A.embedX.length);for(let t=0;t<A.is.length;t++)N[A.is[t]]++,N[A.js[t]]++;const S=r.columns.getUnusedName("Cluster size (MCL)"),M=r.columns.getUnusedName("Connectivity (MCL)"),T=r.columns.addNewFloat(_);T.init((t=>A.embedX[t]));const O=r.columns.addNewFloat(b);O.init((t=>A.embedY[t]));const P=r.columns.addNewString(C);P.init((t=>A.clusters[t].toString()));const x=r.columns.addNewInt(S);x.init((t=>I[A.clusters[t]]));const L=r.columns.addNewInt(M);return L.init((t=>N[t])),g.props.xColumnName=_,g.props.yColumnName=b,g.props.colorColumnName=C,g.props.markerDefaultSize=5,E.unsubscribe(),new lr(g,_,b,{from:A.is,to:A.js,drawArrows:!1,opacity:.3,skipMultiLineCalculation:!0},or.none),n.setUpdateIndicator(g.root,!1),{sc:g,embedXCol:T,embedYCol:O,clusterCol:P,clusterCounterCol:x,connectivityCol:L}}(i,u,a.metrics,a.weights,a.aggregationMethod,l,a.preprocessingFuncArgs,a.threshold,a.maxIterations,a.useWebGPU,a.inflate,r);return null==c?void 0:c.sc}))}function Sr(t,n,e,r,o){return dr(this,void 0,void 0,(function*(){return yield $n({table:t,features:n,predict:e,components:r,names:o})}))}function Mr(){return dr(this,void 0,void 0,(function*(){yield Kn(Nn.COMPUTE_COMPONENTS)}))}function Tr(){return dr(this,void 0,void 0,(function*(){yield Kn(Nn.PERFORM_MVA)}))}function Or(){return dr(this,void 0,void 0,(function*(){!function(){Yn(this,void 0,void 0,(function*(){t.shell.addTableView(o.DataFrame.fromColumns([o.Column.fromStrings("model",["alfaromeo","audi","bmw","chevrolet","dodge1","dodge2","honda1","honda2","isuzu","jaguar","mazda","mercedes","mercury","mitsubishi","nissan1","nissan2","peugot","plymouth","porsche","saab","subaru","toyota1","toyota2","toyota3","toyota4","volkswagen1","volkswagen2","volvo1","volvo2","volvo3"]),o.Column.fromInt32Array("diesel",new Int32Array([0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1,1,0,0,0,1])),o.Column.fromInt32Array("turbo",new Int32Array([0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,1])),o.Column.fromInt32Array("two.doors",new Int32Array([1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,1,0,1,0,1,0,0,0,0])),o.Column.fromInt32Array("hatchback",new Int32Array([1,0,0,0,1,1,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0])),o.Column.fromFloat32Array("wheel.base",new Float32Array([94.5,105.80000305175781,101.19999694824219,94.5,93.69999694824219,93.69999694824219,93.69999694824219,96.5,94.30000305175781,113,93.0999984741211,115.5999984741211,102.69999694824219,93.69999694824219,94.5,94.5,93.69999694824219,114.19999694824219,89.5,99.0999984741211,97.19999694824219,95.69999694824219,95.69999694824219,98.4000015258789,102.4000015258789,97.30000305175781,100.4000015258789,104.30000305175781,109.0999984741211,109.0999984741211])),o.Column.fromFloat32Array("length",new Float32Array([171.1999969482422,192.6999969482422,176.8000030517578,158.8000030517578,157.3000030517578,157.3000030517578,150,175.39999389648438,170.6999969482422,199.60000610351562,166.8000030517578,202.60000610351562,178.39999389648438,157.3000030517578,170.1999969482422,165.3000030517578,157.3000030517578,198.89999389648438,168.89999389648438,186.60000610351562,172,158.6999969482422,166.3000030517578,176.1999969482422,175.60000610351562,171.6999969482422,180.1999969482422,188.8000030517578,188.8000030517578,188.8000030517578])),o.Column.fromFloat32Array("width",new Float32Array([65.5,71.4000015258789,64.80000305175781,63.599998474121094,63.79999923706055,63.79999923706055,64,65.19999694824219,61.79999923706055,69.5999984741211,64.19999694824219,71.69999694824219,68,64.4000015258789,63.79999923706055,63.79999923706055,63.79999923706055,68.4000015258789,65,66.5,65.4000015258789,63.599998474121094,64.4000015258789,65.5999984741211,66.5,65.5,66.9000015258789,67.19999694824219,68.80000305175781,68.9000015258789])),o.Column.fromFloat32Array("height",new Float32Array([52.400001525878906,55.70000076293945,54.29999923706055,52,50.79999923706055,50.599998474121094,52.599998474121094,54.099998474121094,53.5,52.79999923706055,54.099998474121094,56.29999923706055,54.79999923706055,50.79999923706055,53.5,54.5,50.599998474121094,58.70000076293945,51.599998474121094,56.099998474121094,52.5,54.5,53,52,54.900001525878906,55.70000076293945,55.099998474121094,56.20000076293945,55.5,55.5])),o.Column.fromInt32Array("curb.weight",new Int32Array([2823,2844,2395,1909,2128,1967,1956,2304,2337,4066,1950,3770,2910,1918,2024,1951,1967,3430,2800,2695,2190,1985,2275,2551,2480,2261,2661,2912,3049,3217])),o.Column.fromInt32Array("eng.size",new Int32Array([152,136,108,90,98,90,92,110,111,258,91,183,140,92,97,97,90,152,194,121,108,92,110,146,110,97,136,141,141,145])),o.Column.fromInt32Array("horsepower",new Int32Array([154,110,101,70,102,68,76,86,78,176,68,123,175,68,69,69,68,95,207,110,82,62,56,116,73,52,110,114,160,106])),o.Column.fromInt32Array("peak.rpm",new Int32Array([5e3,5500,5800,5400,5500,5500,6e3,5800,4800,4750,5e3,4350,5e3,5500,5200,5200,5500,4150,5900,5250,4400,4800,4500,4800,4500,4800,5500,5400,5300,4800])),o.Column.fromInt32Array("symbol",new Int32Array([1,1,2,0,1,1,1,0,0,0,1,-1,1,2,1,1,1,0,3,2,0,1,0,2,-1,2,0,-2,-1,-1])),o.Column.fromInt32Array("city.mpg",new Int32Array([19,19,23,38,24,31,30,27,24,15,31,22,19,37,31,31,31,25,17,21,28,35,34,24,30,37,19,23,19,26])),o.Column.fromInt32Array("highway.mpg",new Int32Array([26,25,29,43,30,38,34,33,29,19,38,25,24,41,37,37,38,25,25,28,33,39,36,30,33,46,24,28,25,27])),o.Column.fromInt32Array("price",new Int32Array([16500,17710,16430,6575,7957,6229,7129,8845,6785,35550,7395,31600,16503,5389,7349,7299,6229,13860,37028,12170,7775,5348,7898,9989,10698,7775,13295,12940,19045,22470]))])),t.shell.windows.help.visible=!0,t.shell.windows.help.showHelp(n.markdown(Gn)),t.shell.windows.showContextPanel=!1,t.shell.windows.showProperties=!1,yield Kn(Nn.DEMO)}))}()}))}function Pr(t,n,e,r,o,i){return dr(this,void 0,void 0,(function*(){return yield at(lt,[0,0],t,n,e,r,o,i)}))}function xr(t,n,e,r,o,i,s){return dr(this,void 0,void 0,(function*(){return yield at(ft,[n,0],t,e,r,o,i,s)}))}function Lr(t,n,e){return dr(this,void 0,void 0,(function*(){return An(yield wn({gamma:e,kernel:lt},t,n))}))}function Rr(t,n){return dr(this,void 0,void 0,(function*(){return yield _n(t,n)}))}function Fr(t,n){return dr(this,void 0,void 0,(function*(){return bn(t,n)}))}function Dr(t,n){return dr(this,void 0,void 0,(function*(){return In(t)}))}function Ur(t,n,e,r){return dr(this,void 0,void 0,(function*(){return En(0,r)}))}function Br(t,n,e,r){return dr(this,void 0,void 0,(function*(){return An(yield wn({gamma:e,kernel:ft,sigma:r},t,n))}))}function kr(t,n){return dr(this,void 0,void 0,(function*(){return yield _n(t,n)}))}function Vr(t,n){return dr(this,void 0,void 0,(function*(){return bn(t,n)}))}function Gr(t,n){return dr(this,void 0,void 0,(function*(){return In(t)}))}function qr(t,n,e,r){return dr(this,void 0,void 0,(function*(){return En(0,r)}))}function Wr(t,n,e,r,o){return dr(this,void 0,void 0,(function*(){return An(yield wn({gamma:e,kernel:ct,cParam:r,dParam:o},t,n))}))}function Yr(t,n){return dr(this,void 0,void 0,(function*(){return yield _n(t,n)}))}function Hr(t,n){return dr(this,void 0,void 0,(function*(){return bn(t,n)}))}function zr(t,n){return dr(this,void 0,void 0,(function*(){return In(t)}))}function $r(t,n,e,r){return dr(this,void 0,void 0,(function*(){return En(0,r)}))}function Kr(t,n,e,r,o){return dr(this,void 0,void 0,(function*(){return An(yield wn({gamma:e,kernel:ht,kappa:r,theta:o},t,n))}))}function jr(t,n){return dr(this,void 0,void 0,(function*(){return yield _n(t,n)}))}function Xr(t,n){return dr(this,void 0,void 0,(function*(){return bn(t,n)}))}function Qr(t,n){return dr(this,void 0,void 0,(function*(){return In(t)}))}function Jr(t,n,e,r){return dr(this,void 0,void 0,(function*(){return En(0,r)}))}function Zr(n,e,r,i,s){!function(n,e,r,i){const s=t.shell.getTableView(n.name);s.addViewer(o.Viewer.boxPlot(o.DataFrame.fromColumns([e,r]))),s.addViewer(o.Viewer.grid(i))}(n,e,r,function(t,n,e=.05,r=!1){Qn(e);const i=new te(t,n,r,e);if(r){if(!i.areVarsEqual(e))throw new Error(jn.NON_EQUAL_VARIANCES);if(!i.isNormal())throw new Error(jn.NON_NORMAL_DISTRIB)}const s=i.getOneWayAnova(),a=Xn.centralF.inv(1-e,s.dfBn,s.dfWn);return function(t,n,e,r,i){return o.DataFrame.fromColumns([o.Column.fromStrings("Source of variance",["Between groups","Within groups","Total","",r,"",i]),o.Column.fromList(o.COLUMN_TYPE.FLOAT,"Sum of squares",[t.ssBn,t.ssWn,t.ssTot,null,null,null,null]),o.Column.fromList(o.COLUMN_TYPE.INT,"Degrees of freedom",[t.dfBn,t.dfWn,t.dfTot,null,null,null,null]),o.Column.fromList(o.COLUMN_TYPE.FLOAT,"Mean square",[t.msBn,t.msWn,null,null,null,null,null]),o.Column.fromList(o.COLUMN_TYPE.FLOAT,"F-statistics",[t.fStat,null,null,null,null,null,null]),o.Column.fromList(o.COLUMN_TYPE.FLOAT,"p-value",[t.pValue,null,null,null,null,null,null]),o.Column.fromList(o.COLUMN_TYPE.FLOAT,`${n}-critical value`,[e,null,null,null,null,null,null])])}(s,e,a,`THE NULL HYPOTHESIS: the "${t.name}" \n factor does not produce a significant difference in the "${n.name}" feature.`,"Test result: "+(s.fStat>a?"REJECTED.":"FAILED TO REJECT."))}(e,r,i,s))}function to(){sr()}function no(t){return dr(this,void 0,void 0,(function*(){yield sr(t)}))}function eo(n,e,r,i){return dr(this,void 0,void 0,(function*(){const s=performance.now(),a=yield fr(e,r),u=performance.now();console.log(`Fit: ${u-s} ms.`);const l=hr(e,a);console.log(`Predict: ${performance.now()-u} ms.`),l.name=n.columns.getUnusedName(l.name),n.columns.add(l),i&&t.shell.tableView(n.name).addViewer(o.VIEWER.SCATTER_PLOT,{xColumnName:r.name,yColumnName:l.name,showRegressionLine:!0})}))}function ro(n,e,r,i,s,a){return function(n,e,r,i,s,a){const u=t.data.demo.randomWalk(n,e+1),l=u.columns,c=l.byIndex(e);c.name="y (noisy)";const f=c.getRawData(),h=new Float32Array(n).fill(a);let m=0,d=0,p=0,g=0;for(const t of l){t.name=`x${m}`,d=Math.random()*r,p=Math.random()*i;const o=t.getRawData();g=Math.random()*s;for(let t=0;t<n;++t)o[t]=d*o[t]+p,h[t]+=o[t]*g;if(++m,m===e)break}d=Math.random()*r,p=Math.random()*i;for(let t=0;t<n;++t)f[t]=d*f[t]+h[t];return l.add(o.Column.fromFloat32Array("y",h,n)),u}(n,e,r,i,s,a)}function oo(t,n){return dr(this,void 0,void 0,(function*(){const e=t.columns,r=yield fr(e,n);return new Uint8Array(r.buffer)}))}function io(t,n){const e=t.columns,r=new Float32Array(n.buffer);return o.DataFrame.fromColumns([hr(e,r)])}function so(t,n){for(const n of t.columns)if(!n.matches("numerical"))return!1;return!!n.matches("numerical")}function ao(t,n){return t.rowCount<=1e5}})(),eda=r})();
1
+ var eda;(()=>{var t={5540:(t,n,e)=>{"use strict";t=e.hmd(t);var r,o=(r="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0,function(t={}){var n,e,o=void 0!==t?t:{};o.ready=new Promise((function(t,r){n=t,e=r}));var i,s=Object.assign({},o),a="object"==typeof window,u="function"==typeof importScripts,l=("object"==typeof process&&"object"==typeof process.versions&&process.versions.node,"");(a||u)&&(u?l=self.location.href:"undefined"!=typeof document&&document.currentScript&&(l=document.currentScript.src),r&&(l=r),l=0!==l.indexOf("blob:")?l.substr(0,l.replace(/[?#].*/,"").lastIndexOf("/")+1):"",u&&(i=t=>{var n=new XMLHttpRequest;return n.open("GET",t,!1),n.responseType="arraybuffer",n.send(null),new Uint8Array(n.response)})),o.print||console.log.bind(console);var c,f,h=o.printErr||console.warn.bind(console);Object.assign(o,s),s=null,o.arguments&&o.arguments,o.thisProgram&&o.thisProgram,o.quit&&o.quit,o.wasmBinary&&(c=o.wasmBinary),o.noExitRuntime,"object"!=typeof WebAssembly&&b("no native wasm support detected");var m,d,p,g=!1;function v(){var t=f.buffer;o.HEAP8=m=new Int8Array(t),o.HEAP16=new Int16Array(t),o.HEAP32=new Int32Array(t),o.HEAPU8=d=new Uint8Array(t),o.HEAPU16=new Uint16Array(t),o.HEAPU32=p=new Uint32Array(t),o.HEAPF32=new Float32Array(t),o.HEAPF64=new Float64Array(t)}var w=[],y=[],E=[],A=0,C=null,_=null;function b(t){o.onAbort&&o.onAbort(t),h(t="Aborted("+t+")"),g=!0,t+=". Build with -sASSERTIONS for more info.";var n=new WebAssembly.RuntimeError(t);throw e(n),n}var I,S;function N(t){return t.startsWith("data:application/octet-stream;base64,")}function M(t){try{if(t==I&&c)return new Uint8Array(c);if(i)return i(t);throw"both async and sync fetching of the wasm failed"}catch(t){b(t)}}function T(t,n,e){return function(t){return c||!a&&!u||"function"!=typeof fetch?Promise.resolve().then((function(){return M(t)})):fetch(t,{credentials:"same-origin"}).then((function(n){if(!n.ok)throw"failed to load wasm binary file at '"+t+"'";return n.arrayBuffer()})).catch((function(){return M(t)}))}(t).then((function(t){return WebAssembly.instantiate(t,n)})).then((function(t){return t})).then(e,(function(t){h("failed to asynchronously prepare wasm: "+t),b(t)}))}function O(t){for(;t.length>0;)t.shift()(o)}function P(t){this.excPtr=t,this.ptr=t-24,this.set_type=function(t){p[this.ptr+4>>2]=t},this.get_type=function(){return p[this.ptr+4>>2]},this.set_destructor=function(t){p[this.ptr+8>>2]=t},this.get_destructor=function(){return p[this.ptr+8>>2]},this.set_caught=function(t){t=t?1:0,m[this.ptr+12|0]=t},this.get_caught=function(){return 0!=m[this.ptr+12|0]},this.set_rethrown=function(t){t=t?1:0,m[this.ptr+13|0]=t},this.get_rethrown=function(){return 0!=m[this.ptr+13|0]},this.init=function(t,n){this.set_adjusted_ptr(0),this.set_type(t),this.set_destructor(n)},this.set_adjusted_ptr=function(t){p[this.ptr+16>>2]=t},this.get_adjusted_ptr=function(){return p[this.ptr+16>>2]},this.get_exception_ptr=function(){if(G(this.get_type()))return p[this.excPtr>>2];var t=this.get_adjusted_ptr();return 0!==t?t:this.excPtr}}function L(t){var n=f.buffer;try{return f.grow(t-n.byteLength+65535>>>16),v(),1}catch(t){}}function x(t){return o["_"+t]}N(I="wasmDbscan.wasm")||(S=I,I=o.locateFile?o.locateFile(S,l):l+S);var R="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function F(t,n,e,r,o){var i={string:t=>{var n=0;return null!=t&&0!==t&&(n=function(t){var n=function(t){for(var n=0,e=0;e<t.length;++e){var r=t.charCodeAt(e);r<=127?n++:r<=2047?n+=2:r>=55296&&r<=57343?(n+=4,++e):n+=3}return n}(t)+1,e=V(n);return function(t,n,e){!function(t,n,e,r){if(!(r>0))return 0;for(var o=e+r-1,i=0;i<t.length;++i){var s=t.charCodeAt(i);if(s>=55296&&s<=57343&&(s=65536+((1023&s)<<10)|1023&t.charCodeAt(++i)),s<=127){if(e>=o)break;n[e++]=s}else if(s<=2047){if(e+1>=o)break;n[e++]=192|s>>6,n[e++]=128|63&s}else if(s<=65535){if(e+2>=o)break;n[e++]=224|s>>12,n[e++]=128|s>>6&63,n[e++]=128|63&s}else{if(e+3>=o)break;n[e++]=240|s>>18,n[e++]=128|s>>12&63,n[e++]=128|s>>6&63,n[e++]=128|63&s}}n[e]=0}(t,d,n,e)}(t,e,n),e}(t)),n},array:t=>{var n,e,r=V(t.length);return n=t,e=r,m.set(n,e),r}},s=x(t),a=[],u=0;if(r)for(var l=0;l<r.length;l++){var c=i[e[l]];c?(0===u&&(u=B()),a[l]=c(r[l])):a[l]=r[l]}var f=s.apply(null,a);return function(t){return 0!==u&&k(u),function(t){return"string"===n?(e=t)?function(t,n,e){for(var r=n+e,o=n;t[o]&&!(o>=r);)++o;if(o-n>16&&t.buffer&&R)return R.decode(t.subarray(n,o));for(var i="";n<o;){var s=t[n++];if(128&s){var a=63&t[n++];if(192!=(224&s)){var u=63&t[n++];if((s=224==(240&s)?(15&s)<<12|a<<6|u:(7&s)<<18|a<<12|u<<6|63&t[n++])<65536)i+=String.fromCharCode(s);else{var l=s-65536;i+=String.fromCharCode(55296|l>>10,56320|1023&l)}}else i+=String.fromCharCode((31&s)<<6|a)}else i+=String.fromCharCode(s)}return i}(d,e,r):"":"boolean"===n?Boolean(t):t;var e,r}(t)}(f)}var U,D={__cxa_throw:function(t,n,e){throw new P(t).init(n,e),t},abort:function(){b("")},emscripten_memcpy_big:function(t,n,e){d.copyWithin(t,n,n+e)},emscripten_resize_heap:function(t){var n,e=d.length,r=2147483648;if((t>>>=0)>r)return!1;for(var o=1;o<=4;o*=2){var i=e*(1+.2/o);if(i=Math.min(i,t+100663296),L(Math.min(r,(n=Math.max(t,i))+(65536-n%65536)%65536)))return!0}return!1}},B=(function(){var t,n,r,i,s={env:D,wasi_snapshot_preview1:D};function a(t,n){var e,r=t.exports;return o.asm=r,f=o.asm.memory,v(),o.asm.__indirect_function_table,e=o.asm.__wasm_call_ctors,y.unshift(e),function(){if(A--,o.monitorRunDependencies&&o.monitorRunDependencies(A),0==A&&(null!==C&&(clearInterval(C),C=null),_)){var t=_;_=null,t()}}(),r}if(A++,o.monitorRunDependencies&&o.monitorRunDependencies(A),o.instantiateWasm)try{return o.instantiateWasm(s,a)}catch(t){h("Module.instantiateWasm callback failed with error: "+t),e(t)}(t=c,n=I,r=s,i=function(t){a(t.instance)},t||"function"!=typeof WebAssembly.instantiateStreaming||N(n)||"function"!=typeof fetch?T(n,r,i):fetch(n,{credentials:"same-origin"}).then((function(t){return WebAssembly.instantiateStreaming(t,r).then(i,(function(t){return h("wasm streaming compile failed: "+t),h("falling back to ArrayBuffer instantiation"),T(n,r,i)}))}))).catch(e)}(),o._dbscan=function(){return(o._dbscan=o.asm.dbscan).apply(null,arguments)},o._malloc=function(){return(o._malloc=o.asm.malloc).apply(null,arguments)},o._free=function(){return(o._free=o.asm.free).apply(null,arguments)},function(){return(B=o.asm.stackSave).apply(null,arguments)}),k=function(){return(k=o.asm.stackRestore).apply(null,arguments)},V=function(){return(V=o.asm.stackAlloc).apply(null,arguments)},G=function(){return(G=o.asm.__cxa_is_pointer_type).apply(null,arguments)};function q(){function t(){U||(U=!0,o.calledRun=!0,g||(O(y),n(o),o.onRuntimeInitialized&&o.onRuntimeInitialized(),function(){if(o.postRun)for("function"==typeof o.postRun&&(o.postRun=[o.postRun]);o.postRun.length;)t=o.postRun.shift(),E.unshift(t);var t;O(E)}()))}A>0||(function(){if(o.preRun)for("function"==typeof o.preRun&&(o.preRun=[o.preRun]);o.preRun.length;)t=o.preRun.shift(),w.unshift(t);var t;O(w)}(),A>0||(o.setStatus?(o.setStatus("Running..."),setTimeout((function(){setTimeout((function(){o.setStatus("")}),1),t()}),1)):t()))}if(o.ccall=F,o.cwrap=function(t,n,e,r){var o=!e||e.every((t=>"number"===t||"boolean"===t));return"string"!==n&&o&&!r?x(t):function(){return F(t,n,e,arguments)}},_=function t(){U||q(),U||(_=t)},o.preInit)for("function"==typeof o.preInit&&(o.preInit=[o.preInit]);o.preInit.length>0;)o.preInit.pop()();return q(),t.ready});"object"==typeof exports?t.exports=o:"function"==typeof define&&e.amdO?define([],(function(){return o})):"object"==typeof exports&&(exports.exportCppDbscanLib=o)},7939:(t,n,e)=>{"use strict";e.d(n,{A:()=>a});var r=e(1354),o=e.n(r),i=e(6314),s=e.n(i)()(o());s.push([t.id,".scatter_plot_link {\n position: absolute!important;\n right: 10px;\n}\n\n.cliffs_grid {\n top: 10px;\n}\n\n.show_only_cliffs {\n top: 30px;\n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings {\n font-size: 18px;\n position: absolute;\n height: 28px;\n \n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings:not(.ml-dim-reduction-column-editor-input-root i) {\n left: -20px;\n}\n.dlg-dimensionality-reduction.ui-form, .dlg-markov-clustering.ui-form, .dlg-markov-clustering.ui-form .ui-form, .dlg-dimensionality-reduction.ui-form .ui-form {\n max-width: unset;\n}\n\n.ml-dim-reduction-column-editor-input-root label {\n display: none !important;\n}\n\n.dim-reduction-dialog-form > .ui-input-root, .dim-reduction-dialog-form > div > .ui-input-root {\n margin-left: 10px;\n}\n\n.ml-dim-reduction-column-editor-input-root input, .ml-dim-reduction-column-editor-input-root select {\n margin-left: 20px !important;\n}\n\nh3.ml-dim-reduction-column-editor-input-root {\n margin: 0 !important;\n}\n\n.ml-dim-reduction-column-editor-root, .ml-dim-reduction-column-editor-header-root {\n display: flex;\n flex-direction: row;\n align-items: center;\n margin-bottom: 10px !important;\n width: 700px !important;\n}\n\n.ml-dim-reduction-column-editor-column-title {\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.ml-dim-reduction-column-editor-header-root > h1:not(:first-child) {\n margin-left: 20px !important;\n}\n\n.ml-dim-reduction-column-editor-table-root .header > td:not(:first-child) {\n padding-left: 32px;\n}","",{version:3,sources:["webpack://./node_modules/@datagrok-libraries/ml/css/styles.css"],names:[],mappings:"AAAA;IACI,4BAA4B;IAC5B,WAAW;AACf;;AAEA;IACI,SAAS;AACb;;AAEA;IACI,SAAS;AACb;;AAEA;IACI,eAAe;IACf,kBAAkB;IAClB,YAAY;;AAEhB;;AAEA;IACI,WAAW;AACf;AACA;IACI,gBAAgB;AACpB;;AAEA;IACI,wBAAwB;AAC5B;;AAEA;IACI,iBAAiB;AACrB;;AAEA;IACI,4BAA4B;AAChC;;AAEA;IACI,oBAAoB;AACxB;;AAEA;IACI,aAAa;IACb,mBAAmB;IACnB,mBAAmB;IACnB,8BAA8B;IAC9B,uBAAuB;AAC3B;;AAEA;IACI,uBAAuB;IACvB,gBAAgB;AACpB;;AAEA;IACI,4BAA4B;AAChC;;AAEA;IACI,kBAAkB;AACtB",sourcesContent:[".scatter_plot_link {\n position: absolute!important;\n right: 10px;\n}\n\n.cliffs_grid {\n top: 10px;\n}\n\n.show_only_cliffs {\n top: 30px;\n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings {\n font-size: 18px;\n position: absolute;\n height: 28px;\n \n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings:not(.ml-dim-reduction-column-editor-input-root i) {\n left: -20px;\n}\n.dlg-dimensionality-reduction.ui-form, .dlg-markov-clustering.ui-form, .dlg-markov-clustering.ui-form .ui-form, .dlg-dimensionality-reduction.ui-form .ui-form {\n max-width: unset;\n}\n\n.ml-dim-reduction-column-editor-input-root label {\n display: none !important;\n}\n\n.dim-reduction-dialog-form > .ui-input-root, .dim-reduction-dialog-form > div > .ui-input-root {\n margin-left: 10px;\n}\n\n.ml-dim-reduction-column-editor-input-root input, .ml-dim-reduction-column-editor-input-root select {\n margin-left: 20px !important;\n}\n\nh3.ml-dim-reduction-column-editor-input-root {\n margin: 0 !important;\n}\n\n.ml-dim-reduction-column-editor-root, .ml-dim-reduction-column-editor-header-root {\n display: flex;\n flex-direction: row;\n align-items: center;\n margin-bottom: 10px !important;\n width: 700px !important;\n}\n\n.ml-dim-reduction-column-editor-column-title {\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.ml-dim-reduction-column-editor-header-root > h1:not(:first-child) {\n margin-left: 20px !important;\n}\n\n.ml-dim-reduction-column-editor-table-root .header > td:not(:first-child) {\n padding-left: 32px;\n}"],sourceRoot:""}]);const a=s},6314:t=>{"use strict";t.exports=function(t){var n=[];return n.toString=function(){return this.map((function(n){var e="",r=void 0!==n[5];return n[4]&&(e+="@supports (".concat(n[4],") {")),n[2]&&(e+="@media ".concat(n[2]," {")),r&&(e+="@layer".concat(n[5].length>0?" ".concat(n[5]):""," {")),e+=t(n),r&&(e+="}"),n[2]&&(e+="}"),n[4]&&(e+="}"),e})).join("")},n.i=function(t,e,r,o,i){"string"==typeof t&&(t=[[null,t,void 0]]);var s={};if(r)for(var a=0;a<this.length;a++){var u=this[a][0];null!=u&&(s[u]=!0)}for(var l=0;l<t.length;l++){var c=[].concat(t[l]);r&&s[c[0]]||(void 0!==i&&(void 0===c[5]||(c[1]="@layer".concat(c[5].length>0?" ".concat(c[5]):""," {").concat(c[1],"}")),c[5]=i),e&&(c[2]?(c[1]="@media ".concat(c[2]," {").concat(c[1],"}"),c[2]=e):c[2]=e),o&&(c[4]?(c[1]="@supports (".concat(c[4],") {").concat(c[1],"}"),c[4]=o):c[4]="".concat(o)),n.push(c))}},n}},1354:t=>{"use strict";t.exports=function(t){var n=t[1],e=t[3];if(!e)return n;if("function"==typeof btoa){var r=btoa(unescape(encodeURIComponent(JSON.stringify(e)))),o="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(r),i="/*# ".concat(o," */");return[n].concat([i]).join("\n")}return[n].join("\n")}},6572:function(t){var n;t.exports=(n=function(t,n){var e=Array.prototype.concat,r=Array.prototype.slice,o=Object.prototype.toString;function i(n,e){var r=n>e?n:e;return t.pow(10,17-~~(t.log(r>0?r:-r)*t.LOG10E))}var s=Array.isArray||function(t){return"[object Array]"===o.call(t)};function a(t){return"[object Function]"===o.call(t)}function u(t){return"number"==typeof t&&t-t==0}function l(){return new l._init(arguments)}function c(){return 0}function f(){return 1}function h(t,n){return t===n?1:0}l.fn=l.prototype,l._init=function(t){if(s(t[0]))if(s(t[0][0])){a(t[1])&&(t[0]=l.map(t[0],t[1]));for(var n=0;n<t[0].length;n++)this[n]=t[0][n];this.length=t[0].length}else this[0]=a(t[1])?l.map(t[0],t[1]):t[0],this.length=1;else if(u(t[0]))this[0]=l.seq.apply(null,t),this.length=1;else{if(t[0]instanceof l)return l(t[0].toArray());this[0]=[],this.length=1}return this},l._init.prototype=l.prototype,l._init.constructor=l,l.utils={calcRdx:i,isArray:s,isFunction:a,isNumber:u,toVector:function(t){return e.apply([],t)}},l._random_fn=t.random,l.setRandom=function(t){if("function"!=typeof t)throw new TypeError("fn is not a function");l._random_fn=t},l.extend=function(t){var n,e;if(1===arguments.length){for(e in t)l[e]=t[e];return this}for(n=1;n<arguments.length;n++)for(e in arguments[n])t[e]=arguments[n][e];return t},l.rows=function(t){return t.length||1},l.cols=function(t){return t[0].length||1},l.dimensions=function(t){return{rows:l.rows(t),cols:l.cols(t)}},l.row=function(t,n){return s(n)?n.map((function(n){return l.row(t,n)})):t[n]},l.rowa=function(t,n){return l.row(t,n)},l.col=function(t,n){if(s(n)){var e=l.arange(t.length).map((function(){return new Array(n.length)}));return n.forEach((function(n,r){l.arange(t.length).forEach((function(o){e[o][r]=t[o][n]}))})),e}for(var r=new Array(t.length),o=0;o<t.length;o++)r[o]=[t[o][n]];return r},l.cola=function(t,n){return l.col(t,n).map((function(t){return t[0]}))},l.diag=function(t){for(var n=l.rows(t),e=new Array(n),r=0;r<n;r++)e[r]=[t[r][r]];return e},l.antidiag=function(t){for(var n=l.rows(t)-1,e=new Array(n),r=0;n>=0;n--,r++)e[r]=[t[r][n]];return e},l.transpose=function(t){var n,e,r,o,i,a=[];for(s(t[0])||(t=[t]),e=t.length,r=t[0].length,i=0;i<r;i++){for(n=new Array(e),o=0;o<e;o++)n[o]=t[o][i];a.push(n)}return 1===a.length?a[0]:a},l.map=function(t,n,e){var r,o,i,a,u;for(s(t[0])||(t=[t]),o=t.length,i=t[0].length,a=e?t:new Array(o),r=0;r<o;r++)for(a[r]||(a[r]=new Array(i)),u=0;u<i;u++)a[r][u]=n(t[r][u],r,u);return 1===a.length?a[0]:a},l.cumreduce=function(t,n,e){var r,o,i,a,u;for(s(t[0])||(t=[t]),o=t.length,i=t[0].length,a=e?t:new Array(o),r=0;r<o;r++)for(a[r]||(a[r]=new Array(i)),i>0&&(a[r][0]=t[r][0]),u=1;u<i;u++)a[r][u]=n(a[r][u-1],t[r][u]);return 1===a.length?a[0]:a},l.alter=function(t,n){return l.map(t,n,!0)},l.create=function(t,n,e){var r,o,i=new Array(t);for(a(n)&&(e=n,n=t),r=0;r<t;r++)for(i[r]=new Array(n),o=0;o<n;o++)i[r][o]=e(r,o);return i},l.zeros=function(t,n){return u(n)||(n=t),l.create(t,n,c)},l.ones=function(t,n){return u(n)||(n=t),l.create(t,n,f)},l.rand=function(t,n){return u(n)||(n=t),l.create(t,n,l._random_fn)},l.identity=function(t,n){return u(n)||(n=t),l.create(t,n,h)},l.symmetric=function(t){var n,e,r=t.length;if(t.length!==t[0].length)return!1;for(n=0;n<r;n++)for(e=0;e<r;e++)if(t[e][n]!==t[n][e])return!1;return!0},l.clear=function(t){return l.alter(t,c)},l.seq=function(t,n,e,r){a(r)||(r=!1);var o,s=[],u=i(t,n),l=(n*u-t*u)/((e-1)*u),c=t;for(o=0;c<=n&&o<e;c=(t*u+l*u*++o)/u)s.push(r?r(c,o):c);return s},l.arange=function(t,e,r){var o,i=[];if(r=r||1,e===n&&(e=t,t=0),t===e||0===r)return[];if(t<e&&r<0)return[];if(t>e&&r>0)return[];if(r>0)for(o=t;o<e;o+=r)i.push(o);else for(o=t;o>e;o+=r)i.push(o);return i},l.slice=function(){function t(t,e,r,o){var i,s=[],a=t.length;if(e===n&&r===n&&o===n)return l.copy(t);if(o=o||1,(e=(e=e||0)>=0?e:a+e)===(r=(r=r||t.length)>=0?r:a+r)||0===o)return[];if(e<r&&o<0)return[];if(e>r&&o>0)return[];if(o>0)for(i=e;i<r;i+=o)s.push(t[i]);else for(i=e;i>r;i+=o)s.push(t[i]);return s}return function(n,e){var r,o;return u((e=e||{}).row)?u(e.col)?n[e.row][e.col]:t(l.rowa(n,e.row),(r=e.col||{}).start,r.end,r.step):u(e.col)?t(l.cola(n,e.col),(o=e.row||{}).start,o.end,o.step):(o=e.row||{},r=e.col||{},t(n,o.start,o.end,o.step).map((function(n){return t(n,r.start,r.end,r.step)})))}}(),l.sliceAssign=function(e,r,o){var i,s;if(u(r.row)){if(u(r.col))return e[r.row][r.col]=o;r.col=r.col||{},r.col.start=r.col.start||0,r.col.end=r.col.end||e[0].length,r.col.step=r.col.step||1,i=l.arange(r.col.start,t.min(e.length,r.col.end),r.col.step);var a=r.row;return i.forEach((function(t,n){e[a][t]=o[n]})),e}if(u(r.col)){r.row=r.row||{},r.row.start=r.row.start||0,r.row.end=r.row.end||e.length,r.row.step=r.row.step||1,s=l.arange(r.row.start,t.min(e[0].length,r.row.end),r.row.step);var c=r.col;return s.forEach((function(t,n){e[t][c]=o[n]})),e}return o[0].length===n&&(o=[o]),r.row.start=r.row.start||0,r.row.end=r.row.end||e.length,r.row.step=r.row.step||1,r.col.start=r.col.start||0,r.col.end=r.col.end||e[0].length,r.col.step=r.col.step||1,s=l.arange(r.row.start,t.min(e.length,r.row.end),r.row.step),i=l.arange(r.col.start,t.min(e[0].length,r.col.end),r.col.step),s.forEach((function(t,n){i.forEach((function(r,i){e[t][r]=o[n][i]}))})),e},l.diagonal=function(t){var n=l.zeros(t.length,t.length);return t.forEach((function(t,e){n[e][e]=t})),n},l.copy=function(t){return t.map((function(t){return u(t)?t:t.map((function(t){return t}))}))};var m=l.prototype;return m.length=0,m.push=Array.prototype.push,m.sort=Array.prototype.sort,m.splice=Array.prototype.splice,m.slice=Array.prototype.slice,m.toArray=function(){return this.length>1?r.call(this):r.call(this)[0]},m.map=function(t,n){return l(l.map(this,t,n))},m.cumreduce=function(t,n){return l(l.cumreduce(this,t,n))},m.alter=function(t){return l.alter(this,t),this},function(t){for(var n=0;n<t.length;n++)!function(t){m[t]=function(n){var e,r=this;return n?(setTimeout((function(){n.call(r,m[t].call(r))})),this):(e=l[t](this),s(e)?l(e):e)}}(t[n])}("transpose clear symmetric rows cols dimensions diag antidiag".split(" ")),function(t){for(var n=0;n<t.length;n++)!function(t){m[t]=function(n,e){var r=this;return e?(setTimeout((function(){e.call(r,m[t].call(r,n))})),this):l(l[t](this,n))}}(t[n])}("row col".split(" ")),function(t){for(var n=0;n<t.length;n++)!function(t){m[t]=function(){return l(l[t].apply(null,arguments))}}(t[n])}("create zeros ones rand identity".split(" ")),l}(Math),function(t,n){var e=t.utils.isFunction;function r(t,n){return t-n}function o(t,e,r){return n.max(e,n.min(t,r))}t.sum=function(t){for(var n=0,e=t.length;--e>=0;)n+=t[e];return n},t.sumsqrd=function(t){for(var n=0,e=t.length;--e>=0;)n+=t[e]*t[e];return n},t.sumsqerr=function(n){for(var e,r=t.mean(n),o=0,i=n.length;--i>=0;)o+=(e=n[i]-r)*e;return o},t.sumrow=function(t){for(var n=0,e=t.length;--e>=0;)n+=t[e];return n},t.product=function(t){for(var n=1,e=t.length;--e>=0;)n*=t[e];return n},t.min=function(t){for(var n=t[0],e=0;++e<t.length;)t[e]<n&&(n=t[e]);return n},t.max=function(t){for(var n=t[0],e=0;++e<t.length;)t[e]>n&&(n=t[e]);return n},t.unique=function(t){for(var n={},e=[],r=0;r<t.length;r++)n[t[r]]||(n[t[r]]=!0,e.push(t[r]));return e},t.mean=function(n){return t.sum(n)/n.length},t.meansqerr=function(n){return t.sumsqerr(n)/n.length},t.geomean=function(e){var r=e.map(n.log),o=t.mean(r);return n.exp(o)},t.median=function(t){var n=t.length,e=t.slice().sort(r);return 1&n?e[n/2|0]:(e[n/2-1]+e[n/2])/2},t.cumsum=function(n){return t.cumreduce(n,(function(t,n){return t+n}))},t.cumprod=function(n){return t.cumreduce(n,(function(t,n){return t*n}))},t.diff=function(t){var n,e=[],r=t.length;for(n=1;n<r;n++)e.push(t[n]-t[n-1]);return e},t.rank=function(t){var n,e=[],o={};for(n=0;n<t.length;n++)o[u=t[n]]?o[u]++:(o[u]=1,e.push(u));var i=e.sort(r),s={},a=1;for(n=0;n<i.length;n++){var u,l=o[u=i[n]],c=(a+(a+l-1))/2;s[u]=c,a+=l}return t.map((function(t){return s[t]}))},t.mode=function(t){var n,e=t.length,o=t.slice().sort(r),i=1,s=0,a=0,u=[];for(n=0;n<e;n++)o[n]===o[n+1]?i++:(i>s?(u=[o[n]],s=i,a=0):i===s&&(u.push(o[n]),a++),i=1);return 0===a?u[0]:u},t.range=function(n){return t.max(n)-t.min(n)},t.variance=function(n,e){return t.sumsqerr(n)/(n.length-(e?1:0))},t.pooledvariance=function(n){return n.reduce((function(n,e){return n+t.sumsqerr(e)}),0)/(n.reduce((function(t,n){return t+n.length}),0)-n.length)},t.deviation=function(n){for(var e=t.mean(n),r=n.length,o=new Array(r),i=0;i<r;i++)o[i]=n[i]-e;return o},t.stdev=function(e,r){return n.sqrt(t.variance(e,r))},t.pooledstdev=function(e){return n.sqrt(t.pooledvariance(e))},t.meandev=function(e){for(var r=t.mean(e),o=[],i=e.length-1;i>=0;i--)o.push(n.abs(e[i]-r));return t.mean(o)},t.meddev=function(e){for(var r=t.median(e),o=[],i=e.length-1;i>=0;i--)o.push(n.abs(e[i]-r));return t.median(o)},t.coeffvar=function(n){return t.stdev(n)/t.mean(n)},t.quartiles=function(t){var e=t.length,o=t.slice().sort(r);return[o[n.round(e/4)-1],o[n.round(e/2)-1],o[n.round(3*e/4)-1]]},t.quantiles=function(t,e,i,s){var a,u,l,c,f,h=t.slice().sort(r),m=[e.length],d=t.length;for(void 0===i&&(i=3/8),void 0===s&&(s=3/8),a=0;a<e.length;a++)l=d*(u=e[a])+(i+u*(1-i-s)),c=n.floor(o(l,1,d-1)),f=o(l-c,0,1),m[a]=(1-f)*h[c-1]+f*h[c];return m},t.percentile=function(t,n,e){var o=t.slice().sort(r),i=n*(o.length+(e?1:-1))+(e?0:1),s=parseInt(i),a=i-s;return s+1<o.length?o[s-1]+a*(o[s]-o[s-1]):o[s-1]},t.percentileOfScore=function(t,n,e){var r,o,i=0,s=t.length,a=!1;for("strict"===e&&(a=!0),o=0;o<s;o++)r=t[o],(a&&r<n||!a&&r<=n)&&i++;return i/s},t.histogram=function(e,r){r=r||4;var o,i=t.min(e),s=(t.max(e)-i)/r,a=e.length,u=[];for(o=0;o<r;o++)u[o]=0;for(o=0;o<a;o++)u[n.min(n.floor((e[o]-i)/s),r-1)]+=1;return u},t.covariance=function(n,e){var r,o=t.mean(n),i=t.mean(e),s=n.length,a=new Array(s);for(r=0;r<s;r++)a[r]=(n[r]-o)*(e[r]-i);return t.sum(a)/(s-1)},t.corrcoeff=function(n,e){return t.covariance(n,e)/t.stdev(n,1)/t.stdev(e,1)},t.spearmancoeff=function(n,e){return n=t.rank(n),e=t.rank(e),t.corrcoeff(n,e)},t.stanMoment=function(e,r){for(var o=t.mean(e),i=t.stdev(e),s=e.length,a=0,u=0;u<s;u++)a+=n.pow((e[u]-o)/i,r);return a/e.length},t.skewness=function(n){return t.stanMoment(n,3)},t.kurtosis=function(n){return t.stanMoment(n,4)-3};var i=t.prototype;!function(n){for(var r=0;r<n.length;r++)!function(n){i[n]=function(r,o){var s=[],a=0,u=this;if(e(r)&&(o=r,r=!1),o)return setTimeout((function(){o.call(u,i[n].call(u,r))})),this;if(this.length>1){for(u=!0===r?this:this.transpose();a<u.length;a++)s[a]=t[n](u[a]);return s}return t[n](this[0],r)}}(n[r])}("cumsum cumprod".split(" ")),function(n){for(var r=0;r<n.length;r++)!function(n){i[n]=function(r,o){var s=[],a=0,u=this;if(e(r)&&(o=r,r=!1),o)return setTimeout((function(){o.call(u,i[n].call(u,r))})),this;if(this.length>1){for("sumrow"!==n&&(u=!0===r?this:this.transpose());a<u.length;a++)s[a]=t[n](u[a]);return!0===r?t[n](t.utils.toVector(s)):s}return t[n](this[0],r)}}(n[r])}("sum sumsqrd sumsqerr sumrow product min max unique mean meansqerr geomean median diff rank mode range variance deviation stdev meandev meddev coeffvar quartiles histogram skewness kurtosis".split(" ")),function(n){for(var r=0;r<n.length;r++)!function(n){i[n]=function(){var r,o=[],s=0,a=this,u=Array.prototype.slice.call(arguments);if(e(u[u.length-1])){r=u[u.length-1];var l=u.slice(0,u.length-1);return setTimeout((function(){r.call(a,i[n].apply(a,l))})),this}r=void 0;var c=function(e){return t[n].apply(a,[e].concat(u))};if(this.length>1){for(a=a.transpose();s<a.length;s++)o[s]=c(a[s]);return o}return c(this[0])}}(n[r])}("quantiles percentileOfScore".split(" "))}(n,Math),function(t,n){t.gammaln=function(t){var e,r,o,i=0,s=[76.18009172947146,-86.50532032941678,24.01409824083091,-1.231739572450155,.001208650973866179,-5395239384953e-18],a=1.000000000190015;for(o=(r=e=t)+5.5,o-=(e+.5)*n.log(o);i<6;i++)a+=s[i]/++r;return n.log(2.5066282746310007*a/e)-o},t.loggam=function(t){var e,r,o,i,s,a,u,l=[.08333333333333333,-.002777777777777778,.0007936507936507937,-.0005952380952380952,.0008417508417508418,-.001917526917526918,.00641025641025641,-.02955065359477124,.1796443723688307,-1.3924322169059];if(e=t,u=0,1==t||2==t)return 0;for(t<=7&&(e=t+(u=n.floor(7-t))),r=1/(e*e),o=2*n.PI,s=l[9],a=8;a>=0;a--)s*=r,s+=l[a];if(i=s/e+.5*n.log(o)+(e-.5)*n.log(e)-e,t<=7)for(a=1;a<=u;a++)i-=n.log(e-1),e-=1;return i},t.gammafn=function(t){var e,r,o,i,s=[-1.716185138865495,24.76565080557592,-379.80425647094563,629.3311553128184,866.9662027904133,-31451.272968848367,-36144.413418691176,66456.14382024054],a=[-30.8402300119739,315.35062697960416,-1015.1563674902192,-3107.771671572311,22538.11842098015,4755.846277527881,-134659.9598649693,-115132.2596755535],u=!1,l=0,c=0,f=0,h=t;if(t>171.6243769536076)return 1/0;if(h<=0){if(!(i=h%1+36e-17))return 1/0;u=(1&h?-1:1)*n.PI/n.sin(n.PI*i),h=1-h}for(o=h,r=h<1?h++:(h-=l=(0|h)-1)-1,e=0;e<8;++e)f=(f+s[e])*r,c=c*r+a[e];if(i=f/c+1,o<h)i/=o;else if(o>h)for(e=0;e<l;++e)i*=h,h++;return u&&(i=u/i),i},t.gammap=function(n,e){return t.lowRegGamma(n,e)*t.gammafn(n)},t.lowRegGamma=function(e,r){var o,i=t.gammaln(e),s=e,a=1/e,u=a,l=r+1-e,c=1/1e-30,f=1/l,h=f,m=1,d=-~(8.5*n.log(e>=1?e:1/e)+.4*e+17);if(r<0||e<=0)return NaN;if(r<e+1){for(;m<=d;m++)a+=u*=r/++s;return a*n.exp(-r+e*n.log(r)-i)}for(;m<=d;m++)h*=(f=1/(f=(o=-m*(m-e))*f+(l+=2)))*(c=l+o/c);return 1-h*n.exp(-r+e*n.log(r)-i)},t.factorialln=function(n){return n<0?NaN:t.gammaln(n+1)},t.factorial=function(n){return n<0?NaN:t.gammafn(n+1)},t.combination=function(e,r){return e>170||r>170?n.exp(t.combinationln(e,r)):t.factorial(e)/t.factorial(r)/t.factorial(e-r)},t.combinationln=function(n,e){return t.factorialln(n)-t.factorialln(e)-t.factorialln(n-e)},t.permutation=function(n,e){return t.factorial(n)/t.factorial(n-e)},t.betafn=function(e,r){if(!(e<=0||r<=0))return e+r>170?n.exp(t.betaln(e,r)):t.gammafn(e)*t.gammafn(r)/t.gammafn(e+r)},t.betaln=function(n,e){return t.gammaln(n)+t.gammaln(e)-t.gammaln(n+e)},t.betacf=function(t,e,r){var o,i,s,a,u=1e-30,l=1,c=e+r,f=e+1,h=e-1,m=1,d=1-c*t/f;for(n.abs(d)<u&&(d=u),a=d=1/d;l<=100&&(d=1+(i=l*(r-l)*t/((h+(o=2*l))*(e+o)))*d,n.abs(d)<u&&(d=u),m=1+i/m,n.abs(m)<u&&(m=u),a*=(d=1/d)*m,d=1+(i=-(e+l)*(c+l)*t/((e+o)*(f+o)))*d,n.abs(d)<u&&(d=u),m=1+i/m,n.abs(m)<u&&(m=u),a*=s=(d=1/d)*m,!(n.abs(s-1)<3e-7));l++);return a},t.gammapinv=function(e,r){var o,i,s,a,u,l,c=0,f=r-1,h=t.gammaln(r);if(e>=1)return n.max(100,r+100*n.sqrt(r));if(e<=0)return 0;for(r>1?(u=n.log(f),l=n.exp(f*(u-1)-h),a=e<.5?e:1-e,o=(2.30753+.27061*(i=n.sqrt(-2*n.log(a))))/(1+i*(.99229+.04481*i))-i,e<.5&&(o=-o),o=n.max(.001,r*n.pow(1-1/(9*r)-o/(3*n.sqrt(r)),3))):o=e<(i=1-r*(.253+.12*r))?n.pow(e/i,1/r):1-n.log(1-(e-i)/(1-i));c<12;c++){if(o<=0)return 0;if((o-=i=(s=(t.lowRegGamma(r,o)-e)/(i=r>1?l*n.exp(-(o-f)+f*(n.log(o)-u)):n.exp(-o+f*n.log(o)-h)))/(1-.5*n.min(1,s*((r-1)/o-1))))<=0&&(o=.5*(o+i)),n.abs(i)<1e-8*o)break}return o},t.erf=function(t){var e,r,o,i,s=[-1.3026537197817094,.6419697923564902,.019476473204185836,-.00956151478680863,-.000946595344482036,.000366839497852761,42523324806907e-18,-20278578112534e-18,-1624290004647e-18,130365583558e-17,1.5626441722e-8,-8.5238095915e-8,6.529054439e-9,5.059343495e-9,-9.91364156e-10,-2.27365122e-10,96467911e-18,2394038e-18,-6886027e-18,894487e-18,313092e-18,-112708e-18,381e-18,7106e-18,-1523e-18,-94e-18,121e-18,-28e-18],a=s.length-1,u=!1,l=0,c=0;for(t<0&&(t=-t,u=!0),r=4*(e=2/(2+t))-2;a>0;a--)o=l,l=r*l-c+s[a],c=o;return i=e*n.exp(-t*t+.5*(s[0]+r*l)-c),u?i-1:1-i},t.erfc=function(n){return 1-t.erf(n)},t.erfcinv=function(e){var r,o,i,s,a=0;if(e>=2)return-100;if(e<=0)return 100;for(s=e<1?e:2-e,r=-.70711*((2.30753+.27061*(i=n.sqrt(-2*n.log(s/2))))/(1+i*(.99229+.04481*i))-i);a<2;a++)r+=(o=t.erfc(r)-s)/(1.1283791670955126*n.exp(-r*r)-r*o);return e<1?r:-r},t.ibetainv=function(e,r,o){var i,s,a,u,l,c,f,h,m,d,p=r-1,g=o-1,v=0;if(e<=0)return 0;if(e>=1)return 1;for(r>=1&&o>=1?(a=e<.5?e:1-e,c=(2.30753+.27061*(u=n.sqrt(-2*n.log(a))))/(1+u*(.99229+.04481*u))-u,e<.5&&(c=-c),f=(c*c-3)/6,h=2/(1/(2*r-1)+1/(2*o-1)),m=c*n.sqrt(f+h)/h-(1/(2*o-1)-1/(2*r-1))*(f+5/6-2/(3*h)),c=r/(r+o*n.exp(2*m))):(i=n.log(r/(r+o)),s=n.log(o/(r+o)),c=e<(u=n.exp(r*i)/r)/(m=u+(l=n.exp(o*s)/o))?n.pow(r*m*e,1/r):1-n.pow(o*m*(1-e),1/o)),d=-t.gammaln(r)-t.gammaln(o)+t.gammaln(r+o);v<10;v++){if(0===c||1===c)return c;if((c-=u=(l=(t.ibeta(c,r,o)-e)/(u=n.exp(p*n.log(c)+g*n.log(1-c)+d)))/(1-.5*n.min(1,l*(p/c-g/(1-c)))))<=0&&(c=.5*(c+u)),c>=1&&(c=.5*(c+u+1)),n.abs(u)<1e-8*c&&v>0)break}return c},t.ibeta=function(e,r,o){var i=0===e||1===e?0:n.exp(t.gammaln(r+o)-t.gammaln(r)-t.gammaln(o)+r*n.log(e)+o*n.log(1-e));return!(e<0||e>1)&&(e<(r+1)/(r+o+2)?i*t.betacf(e,r,o)/r:1-i*t.betacf(1-e,o,r)/o)},t.randn=function(e,r){var o,i,s,a,u;if(r||(r=e),e)return t.create(e,r,(function(){return t.randn()}));do{o=t._random_fn(),i=1.7156*(t._random_fn()-.5),u=(s=o-.449871)*s+(a=n.abs(i)+.386595)*(.196*a-.25472*s)}while(u>.27597&&(u>.27846||i*i>-4*n.log(o)*o*o));return i/o},t.randg=function(e,r,o){var i,s,a,u,l,c,f=e;if(o||(o=r),e||(e=1),r)return(c=t.zeros(r,o)).alter((function(){return t.randg(e)})),c;e<1&&(e+=1),i=e-1/3,s=1/n.sqrt(9*i);do{do{u=1+s*(l=t.randn())}while(u<=0);u*=u*u,a=t._random_fn()}while(a>1-.331*n.pow(l,4)&&n.log(a)>.5*l*l+i*(1-u+n.log(u)));if(e==f)return i*u;do{a=t._random_fn()}while(0===a);return n.pow(a,1/f)*i*u},function(n){for(var e=0;e<n.length;e++)!function(n){t.fn[n]=function(){return t(t.map(this,(function(e){return t[n](e)})))}}(n[e])}("gammaln gammafn factorial factorialln".split(" ")),function(n){for(var e=0;e<n.length;e++)!function(n){t.fn[n]=function(){return t(t[n].apply(null,arguments))}}(n[e])}("randn".split(" "))}(n,Math),function(t,n){function e(t,e,r,o){for(var i,s=0,a=1,u=1,l=1,c=0,f=0;n.abs((u-f)/u)>o;)f=u,a=l+(i=-(e+c)*(e+r+c)*t/(e+2*c)/(e+2*c+1))*a,u=(s=u+i*s)+(i=(c+=1)*(r-c)*t/(e+2*c-1)/(e+2*c))*u,s/=l=a+i*l,a/=l,u/=l,l=1;return u/e}function r(e,r,o){var i=[.9815606342467192,.9041172563704749,.7699026741943047,.5873179542866175,.3678314989981802,.1252334085114689],s=[.04717533638651183,.10693932599531843,.16007832854334622,.20316742672306592,.2334925365383548,.24914704581340277],a=.5*e;if(a>=8)return 1;var u,l=2*t.normal.cdf(a,0,1,1,0)-1;l=l>=n.exp(-50/o)?n.pow(l,o):0;for(var c=a,f=(8-a)/(u=e>3?2:3),h=c+f,m=0,d=o-1,p=1;p<=u;p++){for(var g=0,v=.5*(h+c),w=.5*(h-c),y=1;y<=12;y++){var E,A=v+w*(6<y?i[(E=12-y+1)-1]:-i[(E=y)-1]),C=A*A;if(C>60)break;var _=2*t.normal.cdf(A,0,1,1,0)*.5-2*t.normal.cdf(A,e,1,1,0)*.5;_>=n.exp(-30/d)&&(g+=_=s[E-1]*n.exp(-.5*C)*n.pow(_,d))}m+=g*=2*w*o/n.sqrt(2*n.PI),c=h,h+=f}return(l+=m)<=n.exp(-30/r)?0:(l=n.pow(l,r))>=1?1:l}!function(n){for(var e=0;e<n.length;e++)!function(n){t[n]=function t(n,e,r){return this instanceof t?(this._a=n,this._b=e,this._c=r,this):new t(n,e,r)},t.fn[n]=function(e,r,o){var i=t[n](e,r,o);return i.data=this,i},t[n].prototype.sample=function(e){var r=this._a,o=this._b,i=this._c;return e?t.alter(e,(function(){return t[n].sample(r,o,i)})):t[n].sample(r,o,i)},function(e){for(var r=0;r<e.length;r++)!function(e){t[n].prototype[e]=function(r){var o=this._a,i=this._b,s=this._c;return r||0===r||(r=this.data),"number"!=typeof r?t.fn.map.call(r,(function(r){return t[n][e](r,o,i,s)})):t[n][e](r,o,i,s)}}(e[r])}("pdf cdf inv".split(" ")),function(e){for(var r=0;r<e.length;r++)!function(e){t[n].prototype[e]=function(){return t[n][e](this._a,this._b,this._c)}}(e[r])}("mean median mode variance".split(" "))}(n[e])}("beta centralF cauchy chisquare exponential gamma invgamma kumaraswamy laplace lognormal noncentralt normal pareto studentt weibull uniform binomial negbin hypgeom poisson triangular tukey arcsine".split(" ")),t.extend(t.beta,{pdf:function(e,r,o){return e>1||e<0?0:1==r&&1==o?1:r<512&&o<512?n.pow(e,r-1)*n.pow(1-e,o-1)/t.betafn(r,o):n.exp((r-1)*n.log(e)+(o-1)*n.log(1-e)-t.betaln(r,o))},cdf:function(n,e,r){return n>1||n<0?1*(n>1):t.ibeta(n,e,r)},inv:function(n,e,r){return t.ibetainv(n,e,r)},mean:function(t,n){return t/(t+n)},median:function(n,e){return t.ibetainv(.5,n,e)},mode:function(t,n){return(t-1)/(t+n-2)},sample:function(n,e){var r=t.randg(n);return r/(r+t.randg(e))},variance:function(t,e){return t*e/(n.pow(t+e,2)*(t+e+1))}}),t.extend(t.centralF,{pdf:function(e,r,o){var i;return e<0?0:r<=2?0===e&&r<2?1/0:0===e&&2===r?1:1/t.betafn(r/2,o/2)*n.pow(r/o,r/2)*n.pow(e,r/2-1)*n.pow(1+r/o*e,-(r+o)/2):(i=r*e/(o+e*r),r*(o/(o+e*r))/2*t.binomial.pdf((r-2)/2,(r+o-2)/2,i))},cdf:function(n,e,r){return n<0?0:t.ibeta(e*n/(e*n+r),e/2,r/2)},inv:function(n,e,r){return r/(e*(1/t.ibetainv(n,e/2,r/2)-1))},mean:function(t,n){return n>2?n/(n-2):void 0},mode:function(t,n){return t>2?n*(t-2)/(t*(n+2)):void 0},sample:function(n,e){return 2*t.randg(n/2)/n/(2*t.randg(e/2)/e)},variance:function(t,n){if(!(n<=4))return 2*n*n*(t+n-2)/(t*(n-2)*(n-2)*(n-4))}}),t.extend(t.cauchy,{pdf:function(t,e,r){return r<0?0:r/(n.pow(t-e,2)+n.pow(r,2))/n.PI},cdf:function(t,e,r){return n.atan((t-e)/r)/n.PI+.5},inv:function(t,e,r){return e+r*n.tan(n.PI*(t-.5))},median:function(t){return t},mode:function(t){return t},sample:function(e,r){return t.randn()*n.sqrt(1/(2*t.randg(.5)))*r+e}}),t.extend(t.chisquare,{pdf:function(e,r){return e<0?0:0===e&&2===r?.5:n.exp((r/2-1)*n.log(e)-e/2-r/2*n.log(2)-t.gammaln(r/2))},cdf:function(n,e){return n<0?0:t.lowRegGamma(e/2,n/2)},inv:function(n,e){return 2*t.gammapinv(n,.5*e)},mean:function(t){return t},median:function(t){return t*n.pow(1-2/(9*t),3)},mode:function(t){return t-2>0?t-2:0},sample:function(n){return 2*t.randg(n/2)},variance:function(t){return 2*t}}),t.extend(t.exponential,{pdf:function(t,e){return t<0?0:e*n.exp(-e*t)},cdf:function(t,e){return t<0?0:1-n.exp(-e*t)},inv:function(t,e){return-n.log(1-t)/e},mean:function(t){return 1/t},median:function(t){return 1/t*n.log(2)},mode:function(){return 0},sample:function(e){return-1/e*n.log(t._random_fn())},variance:function(t){return n.pow(t,-2)}}),t.extend(t.gamma,{pdf:function(e,r,o){return e<0?0:0===e&&1===r?1/o:n.exp((r-1)*n.log(e)-e/o-t.gammaln(r)-r*n.log(o))},cdf:function(n,e,r){return n<0?0:t.lowRegGamma(e,n/r)},inv:function(n,e,r){return t.gammapinv(n,e)*r},mean:function(t,n){return t*n},mode:function(t,n){if(t>1)return(t-1)*n},sample:function(n,e){return t.randg(n)*e},variance:function(t,n){return t*n*n}}),t.extend(t.invgamma,{pdf:function(e,r,o){return e<=0?0:n.exp(-(r+1)*n.log(e)-o/e-t.gammaln(r)+r*n.log(o))},cdf:function(n,e,r){return n<=0?0:1-t.lowRegGamma(e,r/n)},inv:function(n,e,r){return r/t.gammapinv(1-n,e)},mean:function(t,n){return t>1?n/(t-1):void 0},mode:function(t,n){return n/(t+1)},sample:function(n,e){return e/t.randg(n)},variance:function(t,n){if(!(t<=2))return n*n/((t-1)*(t-1)*(t-2))}}),t.extend(t.kumaraswamy,{pdf:function(t,e,r){return 0===t&&1===e?r:1===t&&1===r?e:n.exp(n.log(e)+n.log(r)+(e-1)*n.log(t)+(r-1)*n.log(1-n.pow(t,e)))},cdf:function(t,e,r){return t<0?0:t>1?1:1-n.pow(1-n.pow(t,e),r)},inv:function(t,e,r){return n.pow(1-n.pow(1-t,1/r),1/e)},mean:function(n,e){return e*t.gammafn(1+1/n)*t.gammafn(e)/t.gammafn(1+1/n+e)},median:function(t,e){return n.pow(1-n.pow(2,-1/e),1/t)},mode:function(t,e){if(t>=1&&e>=1&&1!==t&&1!==e)return n.pow((t-1)/(t*e-1),1/t)},variance:function(){throw new Error("variance not yet implemented")}}),t.extend(t.lognormal,{pdf:function(t,e,r){return t<=0?0:n.exp(-n.log(t)-.5*n.log(2*n.PI)-n.log(r)-n.pow(n.log(t)-e,2)/(2*r*r))},cdf:function(e,r,o){return e<0?0:.5+.5*t.erf((n.log(e)-r)/n.sqrt(2*o*o))},inv:function(e,r,o){return n.exp(-1.4142135623730951*o*t.erfcinv(2*e)+r)},mean:function(t,e){return n.exp(t+e*e/2)},median:function(t){return n.exp(t)},mode:function(t,e){return n.exp(t-e*e)},sample:function(e,r){return n.exp(t.randn()*r+e)},variance:function(t,e){return(n.exp(e*e)-1)*n.exp(2*t+e*e)}}),t.extend(t.noncentralt,{pdf:function(e,r,o){return n.abs(o)<1e-14?t.studentt.pdf(e,r):n.abs(e)<1e-14?n.exp(t.gammaln((r+1)/2)-o*o/2-.5*n.log(n.PI*r)-t.gammaln(r/2)):r/e*(t.noncentralt.cdf(e*n.sqrt(1+2/r),r+2,o)-t.noncentralt.cdf(e,r,o))},cdf:function(e,r,o){var i=1e-14;if(n.abs(o)<i)return t.studentt.cdf(e,r);var s=!1;e<0&&(s=!0,o=-o);for(var a=t.normal.cdf(-o,0,1),u=i+1,l=u,c=e*e/(e*e+r),f=0,h=n.exp(-o*o/2),m=n.exp(-o*o/2-.5*n.log(2)-t.gammaln(1.5))*o;f<200||l>i||u>i;)l=u,f>0&&(h*=o*o/(2*f),m*=o*o/(2*(f+.5))),a+=.5*(u=h*t.beta.cdf(c,f+.5,r/2)+m*t.beta.cdf(c,f+1,r/2)),f++;return s?1-a:a}}),t.extend(t.normal,{pdf:function(t,e,r){return n.exp(-.5*n.log(2*n.PI)-n.log(r)-n.pow(t-e,2)/(2*r*r))},cdf:function(e,r,o){return.5*(1+t.erf((e-r)/n.sqrt(2*o*o)))},inv:function(n,e,r){return-1.4142135623730951*r*t.erfcinv(2*n)+e},mean:function(t){return t},median:function(t){return t},mode:function(t){return t},sample:function(n,e){return t.randn()*e+n},variance:function(t,n){return n*n}}),t.extend(t.pareto,{pdf:function(t,e,r){return t<e?0:r*n.pow(e,r)/n.pow(t,r+1)},cdf:function(t,e,r){return t<e?0:1-n.pow(e/t,r)},inv:function(t,e,r){return e/n.pow(1-t,1/r)},mean:function(t,e){if(!(e<=1))return e*n.pow(t,e)/(e-1)},median:function(t,e){return t*(e*n.SQRT2)},mode:function(t){return t},variance:function(t,e){if(!(e<=2))return t*t*e/(n.pow(e-1,2)*(e-2))}}),t.extend(t.studentt,{pdf:function(e,r){return r=r>1e100?1e100:r,1/(n.sqrt(r)*t.betafn(.5,r/2))*n.pow(1+e*e/r,-(r+1)/2)},cdf:function(e,r){var o=r/2;return t.ibeta((e+n.sqrt(e*e+r))/(2*n.sqrt(e*e+r)),o,o)},inv:function(e,r){var o=t.ibetainv(2*n.min(e,1-e),.5*r,.5);return o=n.sqrt(r*(1-o)/o),e>.5?o:-o},mean:function(t){return t>1?0:void 0},median:function(){return 0},mode:function(){return 0},sample:function(e){return t.randn()*n.sqrt(e/(2*t.randg(e/2)))},variance:function(t){return t>2?t/(t-2):t>1?1/0:void 0}}),t.extend(t.weibull,{pdf:function(t,e,r){return t<0||e<0||r<0?0:r/e*n.pow(t/e,r-1)*n.exp(-n.pow(t/e,r))},cdf:function(t,e,r){return t<0?0:1-n.exp(-n.pow(t/e,r))},inv:function(t,e,r){return e*n.pow(-n.log(1-t),1/r)},mean:function(n,e){return n*t.gammafn(1+1/e)},median:function(t,e){return t*n.pow(n.log(2),1/e)},mode:function(t,e){return e<=1?0:t*n.pow((e-1)/e,1/e)},sample:function(e,r){return e*n.pow(-n.log(t._random_fn()),1/r)},variance:function(e,r){return e*e*t.gammafn(1+2/r)-n.pow(t.weibull.mean(e,r),2)}}),t.extend(t.uniform,{pdf:function(t,n,e){return t<n||t>e?0:1/(e-n)},cdf:function(t,n,e){return t<n?0:t<e?(t-n)/(e-n):1},inv:function(t,n,e){return n+t*(e-n)},mean:function(t,n){return.5*(t+n)},median:function(n,e){return t.mean(n,e)},mode:function(){throw new Error("mode is not yet implemented")},sample:function(n,e){return n/2+e/2+(e/2-n/2)*(2*t._random_fn()-1)},variance:function(t,e){return n.pow(e-t,2)/12}}),t.extend(t.binomial,{pdf:function(e,r,o){return 0===o||1===o?r*o===e?1:0:t.combination(r,e)*n.pow(o,e)*n.pow(1-o,r-e)},cdf:function(r,o,i){var s,a=1e-10;if(r<0)return 0;if(r>=o)return 1;if(i<0||i>1||o<=0)return NaN;var u=i,l=(r=n.floor(r))+1,c=o-r,f=l+c,h=n.exp(t.gammaln(f)-t.gammaln(c)-t.gammaln(l)+l*n.log(u)+c*n.log(1-u));return s=u<(l+1)/(f+2)?h*e(u,l,c,a):1-h*e(1-u,c,l,a),n.round(1/a*(1-s))/(1/a)}}),t.extend(t.negbin,{pdf:function(e,r,o){return e===e>>>0&&(e<0?0:t.combination(e+r-1,r-1)*n.pow(1-o,e)*n.pow(o,r))},cdf:function(n,e,r){var o=0,i=0;if(n<0)return 0;for(;i<=n;i++)o+=t.negbin.pdf(i,e,r);return o}}),t.extend(t.hypgeom,{pdf:function(e,r,o,i){if(e!=e|0)return!1;if(e<0||e<o-(r-i))return 0;if(e>i||e>o)return 0;if(2*o>r)return 2*i>r?t.hypgeom.pdf(r-o-i+e,r,r-o,r-i):t.hypgeom.pdf(i-e,r,r-o,i);if(2*i>r)return t.hypgeom.pdf(o-e,r,o,r-i);if(o<i)return t.hypgeom.pdf(e,r,i,o);for(var s=1,a=0,u=0;u<e;u++){for(;s>1&&a<i;)s*=1-o/(r-a),a++;s*=(i-u)*(o-u)/((u+1)*(r-o-i+u+1))}for(;a<i;a++)s*=1-o/(r-a);return n.min(1,n.max(0,s))},cdf:function(e,r,o,i){if(e<0||e<o-(r-i))return 0;if(e>=i||e>=o)return 1;if(2*o>r)return 2*i>r?t.hypgeom.cdf(r-o-i+e,r,r-o,r-i):1-t.hypgeom.cdf(i-e-1,r,r-o,i);if(2*i>r)return 1-t.hypgeom.cdf(o-e-1,r,o,r-i);if(o<i)return t.hypgeom.cdf(e,r,i,o);for(var s=1,a=1,u=0,l=0;l<e;l++){for(;s>1&&u<i;){var c=1-o/(r-u);a*=c,s*=c,u++}s+=a*=(i-l)*(o-l)/((l+1)*(r-o-i+l+1))}for(;u<i;u++)s*=1-o/(r-u);return n.min(1,n.max(0,s))}}),t.extend(t.poisson,{pdf:function(e,r){return r<0||e%1!=0||e<0?0:n.pow(r,e)*n.exp(-r)/t.factorial(e)},cdf:function(n,e){var r=[],o=0;if(n<0)return 0;for(;o<=n;o++)r.push(t.poisson.pdf(o,e));return t.sum(r)},mean:function(t){return t},variance:function(t){return t},sampleSmall:function(e){var r=1,o=0,i=n.exp(-e);do{o++,r*=t._random_fn()}while(r>i);return o-1},sampleLarge:function(e){var r,o,i,s,a,u,l,c,f,h,m=e;for(s=n.sqrt(m),a=n.log(m),u=.02483*(l=.931+2.53*s)-.059,c=1.1239+1.1328/(l-3.4),f=.9277-3.6224/(l-2);;){if(o=n.random()-.5,i=n.random(),h=.5-n.abs(o),r=n.floor((2*u/h+l)*o+m+.43),h>=.07&&i<=f)return r;if(!(r<0||h<.013&&i>h)&&n.log(i)+n.log(c)-n.log(u/(h*h)+l)<=r*a-m-t.loggam(r+1))return r}},sample:function(t){return t<10?this.sampleSmall(t):this.sampleLarge(t)}}),t.extend(t.triangular,{pdf:function(t,n,e,r){return e<=n||r<n||r>e?NaN:t<n||t>e?0:t<r?2*(t-n)/((e-n)*(r-n)):t===r?2/(e-n):2*(e-t)/((e-n)*(e-r))},cdf:function(t,e,r,o){return r<=e||o<e||o>r?NaN:t<=e?0:t>=r?1:t<=o?n.pow(t-e,2)/((r-e)*(o-e)):1-n.pow(r-t,2)/((r-e)*(r-o))},inv:function(t,e,r,o){return r<=e||o<e||o>r?NaN:t<=(o-e)/(r-e)?e+(r-e)*n.sqrt(t*((o-e)/(r-e))):e+(r-e)*(1-n.sqrt((1-t)*(1-(o-e)/(r-e))))},mean:function(t,n,e){return(t+n+e)/3},median:function(t,e,r){return r<=(t+e)/2?e-n.sqrt((e-t)*(e-r))/n.sqrt(2):r>(t+e)/2?t+n.sqrt((e-t)*(r-t))/n.sqrt(2):void 0},mode:function(t,n,e){return e},sample:function(e,r,o){var i=t._random_fn();return i<(o-e)/(r-e)?e+n.sqrt(i*(r-e)*(o-e)):r-n.sqrt((1-i)*(r-e)*(r-o))},variance:function(t,n,e){return(t*t+n*n+e*e-t*n-t*e-n*e)/18}}),t.extend(t.arcsine,{pdf:function(t,e,r){return r<=e?NaN:t<=e||t>=r?0:2/n.PI*n.pow(n.pow(r-e,2)-n.pow(2*t-e-r,2),-.5)},cdf:function(t,e,r){return t<e?0:t<r?2/n.PI*n.asin(n.sqrt((t-e)/(r-e))):1},inv:function(t,e,r){return e+(.5-.5*n.cos(n.PI*t))*(r-e)},mean:function(t,n){return n<=t?NaN:(t+n)/2},median:function(t,n){return n<=t?NaN:(t+n)/2},mode:function(){throw new Error("mode is not yet implemented")},sample:function(e,r){return(e+r)/2+(r-e)/2*n.sin(2*n.PI*t.uniform.sample(0,1))},variance:function(t,e){return e<=t?NaN:n.pow(e-t,2)/8}}),t.extend(t.laplace,{pdf:function(t,e,r){return r<=0?0:n.exp(-n.abs(t-e)/r)/(2*r)},cdf:function(t,e,r){return r<=0?0:t<e?.5*n.exp((t-e)/r):1-.5*n.exp(-(t-e)/r)},mean:function(t){return t},median:function(t){return t},mode:function(t){return t},variance:function(t,n){return 2*n*n},sample:function(e,r){var o,i=t._random_fn()-.5;return e-r*((o=i)/n.abs(o))*n.log(1-2*n.abs(i))}}),t.extend(t.tukey,{cdf:function(e,o,i){var s=o,a=[.9894009349916499,.9445750230732326,.8656312023878318,.755404408355003,.6178762444026438,.45801677765722737,.2816035507792589,.09501250983763744],u=[.027152459411754096,.062253523938647894,.09515851168249279,.12462897125553388,.14959598881657674,.16915651939500254,.18260341504492358,.1894506104550685];if(e<=0)return 0;if(i<2||s<2)return NaN;if(!Number.isFinite(e))return 1;if(i>25e3)return r(e,1,s);var l,c=.5*i,f=c*n.log(i)-i*n.log(2)-t.gammaln(c),h=c-1,m=.25*i;l=i<=100?1:i<=800?.5:i<=5e3?.25:.125,f+=n.log(l);for(var d=0,p=1;p<=50;p++){for(var g=0,v=(2*p-1)*l,w=1;w<=16;w++){var y,E;8<w?(y=w-8-1,E=f+h*n.log(v+a[y]*l)-(a[y]*l+v)*m):(y=w-1,E=f+h*n.log(v-a[y]*l)+(a[y]*l-v)*m),E>=-30&&(g+=r(8<w?e*n.sqrt(.5*(a[y]*l+v)):e*n.sqrt(.5*(-a[y]*l+v)),1,s)*u[y]*n.exp(E))}if(p*l>=1&&g<=1e-14)break;d+=g}if(g>1e-14)throw new Error("tukey.cdf failed to converge");return d>1&&(d=1),d},inv:function(e,r,o){if(o<2||r<2)return NaN;if(e<0||e>1)return NaN;if(0===e)return 0;if(1===e)return 1/0;var i,s=function(t,e,r){var o=.5-.5*t,i=n.sqrt(n.log(1/(o*o))),s=i+((((-453642210148e-16*i-.204231210125)*i-.342242088547)*i-1)*i+.322232421088)/((((.0038560700634*i+.10353775285)*i+.531103462366)*i+.588581570495)*i+.099348462606);r<120&&(s+=(s*s*s+s)/r/4);var a=.8832-.2368*s;return r<120&&(a+=-1.214/r+1.208*s/r),s*(a*n.log(e-1)+1.4142)}(e,r,o),a=t.tukey.cdf(s,r,o)-e;i=a>0?n.max(0,s-1):s+1;for(var u,l=t.tukey.cdf(i,r,o)-e,c=1;c<50;c++)if(u=i-l*(i-s)/(l-a),a=l,s=i,u<0&&(u=0,l=-e),l=t.tukey.cdf(u,r,o)-e,i=u,n.abs(i-s)<1e-4)return u;throw new Error("tukey.inv failed to converge")}})}(n,Math),function(t,n){var e,r,o=Array.prototype.push,i=t.utils.isArray;function s(n){return i(n)||n instanceof t}t.extend({add:function(n,e){return s(e)?(s(e[0])||(e=[e]),t.map(n,(function(t,n,r){return t+e[n][r]}))):t.map(n,(function(t){return t+e}))},subtract:function(n,e){return s(e)?(s(e[0])||(e=[e]),t.map(n,(function(t,n,r){return t-e[n][r]||0}))):t.map(n,(function(t){return t-e}))},divide:function(n,e){return s(e)?(s(e[0])||(e=[e]),t.multiply(n,t.inv(e))):t.map(n,(function(t){return t/e}))},multiply:function(n,e){var r,o,i,a,u,l,c,f;if(void 0===n.length&&void 0===e.length)return n*e;if(u=n.length,l=n[0].length,c=t.zeros(u,i=s(e)?e[0].length:l),f=0,s(e)){for(;f<i;f++)for(r=0;r<u;r++){for(a=0,o=0;o<l;o++)a+=n[r][o]*e[o][f];c[r][f]=a}return 1===u&&1===f?c[0][0]:c}return t.map(n,(function(t){return t*e}))},outer:function(n,e){return t.multiply(n.map((function(t){return[t]})),[e])},dot:function(n,e){s(n[0])||(n=[n]),s(e[0])||(e=[e]);for(var r,o,i=1===n[0].length&&1!==n.length?t.transpose(n):n,a=1===e[0].length&&1!==e.length?t.transpose(e):e,u=[],l=0,c=i.length,f=i[0].length;l<c;l++){for(u[l]=[],r=0,o=0;o<f;o++)r+=i[l][o]*a[l][o];u[l]=r}return 1===u.length?u[0]:u},pow:function(e,r){return t.map(e,(function(t){return n.pow(t,r)}))},exp:function(e){return t.map(e,(function(t){return n.exp(t)}))},log:function(e){return t.map(e,(function(t){return n.log(t)}))},abs:function(e){return t.map(e,(function(t){return n.abs(t)}))},norm:function(t,e){var r=0,o=0;for(isNaN(e)&&(e=2),s(t[0])&&(t=t[0]);o<t.length;o++)r+=n.pow(n.abs(t[o]),e);return n.pow(r,1/e)},angle:function(e,r){return n.acos(t.dot(e,r)/(t.norm(e)*t.norm(r)))},aug:function(t,n){var e,r=[];for(e=0;e<t.length;e++)r.push(t[e].slice());for(e=0;e<r.length;e++)o.apply(r[e],n[e]);return r},inv:function(n){for(var e,r=n.length,o=n[0].length,i=t.identity(r,o),s=t.gauss_jordan(n,i),a=[],u=0;u<r;u++)for(a[u]=[],e=o;e<s[0].length;e++)a[u][e-o]=s[u][e];return a},det:function t(n){if(2===n.length)return n[0][0]*n[1][1]-n[0][1]*n[1][0];for(var e=0,r=0;r<n.length;r++){for(var o=[],i=1;i<n.length;i++){o[i-1]=[];for(var s=0;s<n.length;s++)s<r?o[i-1][s]=n[i][s]:s>r&&(o[i-1][s-1]=n[i][s])}var a=r%2?-1:1;e+=t(o)*n[0][r]*a}return e},gauss_elimination:function(e,r){var o,i,s,a,u=0,l=0,c=e.length,f=e[0].length,h=1,m=0,d=[];for(o=(e=t.aug(e,r))[0].length,u=0;u<c;u++){for(i=e[u][u],l=u,a=u+1;a<f;a++)i<n.abs(e[a][u])&&(i=e[a][u],l=a);if(l!=u)for(a=0;a<o;a++)s=e[u][a],e[u][a]=e[l][a],e[l][a]=s;for(l=u+1;l<c;l++)for(h=e[l][u]/e[u][u],a=u;a<o;a++)e[l][a]=e[l][a]-h*e[u][a]}for(u=c-1;u>=0;u--){for(m=0,l=u+1;l<=c-1;l++)m+=d[l]*e[u][l];d[u]=(e[u][o-1]-m)/e[u][u]}return d},gauss_jordan:function(e,r){var o,i,s,a=t.aug(e,r),u=a.length,l=a[0].length,c=0;for(i=0;i<u;i++){var f=i;for(s=i+1;s<u;s++)n.abs(a[s][i])>n.abs(a[f][i])&&(f=s);var h=a[i];for(a[i]=a[f],a[f]=h,s=i+1;s<u;s++)for(c=a[s][i]/a[i][i],o=i;o<l;o++)a[s][o]-=a[i][o]*c}for(i=u-1;i>=0;i--){for(c=a[i][i],s=0;s<i;s++)for(o=l-1;o>i-1;o--)a[s][o]-=a[i][o]*a[s][i]/c;for(a[i][i]/=c,o=u;o<l;o++)a[i][o]/=c}return a},triaUpSolve:function(n,e){var r,o=n[0].length,i=t.zeros(1,o)[0],s=!1;return null!=e[0].length&&(e=e.map((function(t){return t[0]})),s=!0),t.arange(o-1,-1,-1).forEach((function(s){r=t.arange(s+1,o).map((function(t){return i[t]*n[s][t]})),i[s]=(e[s]-t.sum(r))/n[s][s]})),s?i.map((function(t){return[t]})):i},triaLowSolve:function(n,e){var r,o=n[0].length,i=t.zeros(1,o)[0],s=!1;return null!=e[0].length&&(e=e.map((function(t){return t[0]})),s=!0),t.arange(o).forEach((function(o){r=t.arange(o).map((function(t){return n[o][t]*i[t]})),i[o]=(e[o]-t.sum(r))/n[o][o]})),s?i.map((function(t){return[t]})):i},lu:function(n){var e,r=n.length,o=t.identity(r),i=t.zeros(n.length,n[0].length);return t.arange(r).forEach((function(t){i[0][t]=n[0][t]})),t.arange(1,r).forEach((function(s){t.arange(s).forEach((function(r){e=t.arange(r).map((function(t){return o[s][t]*i[t][r]})),o[s][r]=(n[s][r]-t.sum(e))/i[r][r]})),t.arange(s,r).forEach((function(r){e=t.arange(s).map((function(t){return o[s][t]*i[t][r]})),i[s][r]=n[e.length][r]-t.sum(e)}))})),[o,i]},cholesky:function(e){var r,o=e.length,i=t.zeros(e.length,e[0].length);return t.arange(o).forEach((function(s){r=t.arange(s).map((function(t){return n.pow(i[s][t],2)})),i[s][s]=n.sqrt(e[s][s]-t.sum(r)),t.arange(s+1,o).forEach((function(n){r=t.arange(s).map((function(t){return i[s][t]*i[n][t]})),i[n][s]=(e[s][n]-t.sum(r))/i[s][s]}))})),i},gauss_jacobi:function(e,r,o,i){for(var s,a,u,l,c=0,f=0,h=e.length,m=[],d=[],p=[];c<h;c++)for(m[c]=[],d[c]=[],p[c]=[],f=0;f<h;f++)c>f?(m[c][f]=e[c][f],d[c][f]=p[c][f]=0):c<f?(d[c][f]=e[c][f],m[c][f]=p[c][f]=0):(p[c][f]=e[c][f],m[c][f]=d[c][f]=0);for(u=t.multiply(t.multiply(t.inv(p),t.add(m,d)),-1),a=t.multiply(t.inv(p),r),s=o,l=t.add(t.multiply(u,o),a),c=2;n.abs(t.norm(t.subtract(l,s)))>i;)s=l,l=t.add(t.multiply(u,s),a),c++;return l},gauss_seidel:function(e,r,o,i){for(var s,a,u,l,c,f=0,h=e.length,m=[],d=[],p=[];f<h;f++)for(m[f]=[],d[f]=[],p[f]=[],s=0;s<h;s++)f>s?(m[f][s]=e[f][s],d[f][s]=p[f][s]=0):f<s?(d[f][s]=e[f][s],m[f][s]=p[f][s]=0):(p[f][s]=e[f][s],m[f][s]=d[f][s]=0);for(l=t.multiply(t.multiply(t.inv(t.add(p,m)),d),-1),u=t.multiply(t.inv(t.add(p,m)),r),a=o,c=t.add(t.multiply(l,o),u),f=2;n.abs(t.norm(t.subtract(c,a)))>i;)a=c,c=t.add(t.multiply(l,a),u),f+=1;return c},SOR:function(e,r,o,i,s){for(var a,u,l,c,f,h=0,m=e.length,d=[],p=[],g=[];h<m;h++)for(d[h]=[],p[h]=[],g[h]=[],a=0;a<m;a++)h>a?(d[h][a]=e[h][a],p[h][a]=g[h][a]=0):h<a?(p[h][a]=e[h][a],d[h][a]=g[h][a]=0):(g[h][a]=e[h][a],d[h][a]=p[h][a]=0);for(c=t.multiply(t.inv(t.add(g,t.multiply(d,s))),t.subtract(t.multiply(g,1-s),t.multiply(p,s))),l=t.multiply(t.multiply(t.inv(t.add(g,t.multiply(d,s))),r),s),u=o,f=t.add(t.multiply(c,o),l),h=2;n.abs(t.norm(t.subtract(f,u)))>i;)u=f,f=t.add(t.multiply(c,u),l),h++;return f},householder:function(e){for(var r,o,i,s,a=e.length,u=e[0].length,l=0,c=[],f=[];l<a-1;l++){for(r=0,s=l+1;s<u;s++)r+=e[s][l]*e[s][l];for(r=(e[l+1][l]>0?-1:1)*n.sqrt(r),o=n.sqrt((r*r-e[l+1][l]*r)/2),(c=t.zeros(a,1))[l+1][0]=(e[l+1][l]-r)/(2*o),i=l+2;i<a;i++)c[i][0]=e[i][l]/(2*o);f=t.subtract(t.identity(a,u),t.multiply(t.multiply(c,t.transpose(c)),2)),e=t.multiply(f,t.multiply(e,f))}return e},QR:(e=t.sum,r=t.arange,function(o){var i,s,a,u=o.length,l=o[0].length,c=t.zeros(l,l);for(o=t.copy(o),s=0;s<l;s++){for(c[s][s]=n.sqrt(e(r(u).map((function(t){return o[t][s]*o[t][s]})))),i=0;i<u;i++)o[i][s]=o[i][s]/c[s][s];for(a=s+1;a<l;a++)for(c[s][a]=e(r(u).map((function(t){return o[t][s]*o[t][a]}))),i=0;i<u;i++)o[i][a]=o[i][a]-o[i][s]*c[s][a]}return[o,c]}),lstsq:function(n,e){var r=!1;void 0===e[0].length&&(e=e.map((function(t){return[t]})),r=!0);var o=t.QR(n),i=o[0],s=o[1],a=n[0].length,u=t.slice(i,{col:{end:a}}),l=function(n){var e=(n=t.copy(n)).length,r=t.identity(e);return t.arange(e-1,-1,-1).forEach((function(e){t.sliceAssign(r,{row:e},t.divide(t.slice(r,{row:e}),n[e][e])),t.sliceAssign(n,{row:e},t.divide(t.slice(n,{row:e}),n[e][e])),t.arange(e).forEach((function(o){var i=t.multiply(n[o][e],-1),s=t.slice(n,{row:o}),a=t.multiply(t.slice(n,{row:e}),i);t.sliceAssign(n,{row:o},t.add(s,a));var u=t.slice(r,{row:o}),l=t.multiply(t.slice(r,{row:e}),i);t.sliceAssign(r,{row:o},t.add(u,l))}))})),r}(t.slice(s,{row:{end:a}})),c=t.transpose(u);void 0===c[0].length&&(c=[c]);var f=t.multiply(t.multiply(l,c),e);return void 0===f.length&&(f=[[f]]),r?f.map((function(t){return t[0]})):f},jacobi:function(e){for(var r,o,i,s,a,u,l,c=1,f=e.length,h=t.identity(f,f),m=[];1===c;){for(a=e[0][1],i=0,s=1,r=0;r<f;r++)for(o=0;o<f;o++)r!=o&&a<n.abs(e[r][o])&&(a=n.abs(e[r][o]),i=r,s=o);for(u=e[i][i]===e[s][s]?e[i][s]>0?n.PI/4:-n.PI/4:n.atan(2*e[i][s]/(e[i][i]-e[s][s]))/2,(l=t.identity(f,f))[i][i]=n.cos(u),l[i][s]=-n.sin(u),l[s][i]=n.sin(u),l[s][s]=n.cos(u),h=t.multiply(h,l),e=t.multiply(t.multiply(t.inv(l),e),l),c=0,r=1;r<f;r++)for(o=1;o<f;o++)r!=o&&n.abs(e[r][o])>.001&&(c=1)}for(r=0;r<f;r++)m.push(e[r][r]);return[h,m]},rungekutta:function(t,n,e,r,o,i){var s,a,u;if(2===i)for(;r<=e;)o+=((s=n*t(r,o))+(a=n*t(r+n,o+s)))/2,r+=n;if(4===i)for(;r<=e;)o+=((s=n*t(r,o))+2*(a=n*t(r+n/2,o+s/2))+2*(u=n*t(r+n/2,o+a/2))+n*t(r+n,o+u))/6,r+=n;return o},romberg:function(t,e,r,o){for(var i,s,a,u,l,c=0,f=(r-e)/2,h=[],m=[],d=[];c<o/2;){for(l=t(e),a=e,u=0;a<=r;a+=f,u++)h[u]=a;for(i=h.length,a=1;a<i-1;a++)l+=(a%2!=0?4:2)*t(h[a]);l=f/3*(l+t(r)),d[c]=l,f/=2,c++}for(s=d.length,i=1;1!==s;){for(a=0;a<s-1;a++)m[a]=(n.pow(4,i)*d[a+1]-d[a])/(n.pow(4,i)-1);s=m.length,d=m,m=[],i++}return d},richardson:function(t,e,r,o){function i(t,n){for(var e,r=0,o=t.length;r<o;r++)t[r]===n&&(e=r);return e}for(var s,a,u,l,c,f=n.abs(r-t[i(t,r)+1]),h=0,m=[],d=[];o>=f;)s=i(t,r+o),a=i(t,r),m[h]=(e[s]-2*e[a]+e[2*a-s])/(o*o),o/=2,h++;for(l=m.length,u=1;1!=l;){for(c=0;c<l-1;c++)d[c]=(n.pow(4,u)*m[c+1]-m[c])/(n.pow(4,u)-1);l=d.length,m=d,d=[],u++}return m},simpson:function(t,n,e,r){for(var o,i=(e-n)/r,s=t(n),a=[],u=n,l=0,c=1;u<=e;u+=i,l++)a[l]=u;for(o=a.length;c<o-1;c++)s+=(c%2!=0?4:2)*t(a[c]);return i/3*(s+t(e))},hermite:function(t,n,e,r){for(var o,i=t.length,s=0,a=0,u=[],l=[],c=[],f=[];a<i;a++){for(u[a]=1,o=0;o<i;o++)a!=o&&(u[a]*=(r-t[o])/(t[a]-t[o]));for(l[a]=0,o=0;o<i;o++)a!=o&&(l[a]+=1/(t[a]-t[o]));c[a]=(1-2*(r-t[a])*l[a])*(u[a]*u[a]),f[a]=(r-t[a])*(u[a]*u[a]),s+=c[a]*n[a]+f[a]*e[a]}return s},lagrange:function(t,n,e){for(var r,o,i=0,s=0,a=t.length;s<a;s++){for(o=n[s],r=0;r<a;r++)s!=r&&(o*=(e-t[r])/(t[s]-t[r]));i+=o}return i},cubic_spline:function(n,e,r){for(var o,i,s=n.length,a=0,u=[],l=[],c=[],f=[],h=[],m=[];a<s-1;a++)f[a]=n[a+1]-n[a];for(c[0]=0,a=1;a<s-1;a++)c[a]=3/f[a]*(e[a+1]-e[a])-3/f[a-1]*(e[a]-e[a-1]);for(a=1;a<s-1;a++)u[a]=[],l[a]=[],u[a][a-1]=f[a-1],u[a][a]=2*(f[a-1]+f[a]),u[a][a+1]=f[a],l[a][0]=c[a];for(i=t.multiply(t.inv(u),l),o=0;o<s-1;o++)h[o]=(e[o+1]-e[o])/f[o]-f[o]*(i[o+1][0]+2*i[o][0])/3,m[o]=(i[o+1][0]-i[o][0])/(3*f[o]);for(o=0;o<s&&!(n[o]>r);o++);return e[o-=1]+(r-n[o])*h[o]+t.sq(r-n[o])*i[o]+(r-n[o])*t.sq(r-n[o])*m[o]},gauss_quadrature:function(){throw new Error("gauss_quadrature not yet implemented")},PCA:function(n){var e,r,o,i,s,a=n.length,u=n[0].length,l=0,c=[],f=[],h=[],m=[],d=[],p=[],g=[];for(l=0;l<a;l++)c[l]=t.sum(n[l])/u;for(l=0;l<u;l++)for(d[l]=[],e=0;e<a;e++)d[l][e]=n[e][l]-c[e];for(d=t.transpose(d),l=0;l<a;l++)for(p[l]=[],e=0;e<a;e++)p[l][e]=t.dot([d[l]],[d[e]])/(u-1);for(s=(o=t.jacobi(p))[0],f=o[1],g=t.transpose(s),l=0;l<f.length;l++)for(e=l;e<f.length;e++)f[l]<f[e]&&(r=f[l],f[l]=f[e],f[e]=r,h=g[l],g[l]=g[e],g[e]=h);for(i=t.transpose(d),l=0;l<a;l++)for(m[l]=[],e=0;e<i.length;e++)m[l][e]=t.dot([g[l]],[i[e]]);return[n,f,g,m]}}),function(n){for(var e=0;e<n.length;e++)!function(n){t.fn[n]=function(e,r){var o=this;return r?(setTimeout((function(){r.call(o,t.fn[n].call(o,e))}),15),this):"number"==typeof t[n](this,e)?t[n](this,e):t(t[n](this,e))}}(n[e])}("add divide multiply subtract dot pow exp log abs norm angle".split(" "))}(n,Math),function(t,n){var e=[].slice,r=t.utils.isNumber,o=t.utils.isArray;function i(t,e,r,o){if(t>1||r>1||t<=0||r<=0)throw new Error("Proportions should be greater than 0 and less than 1");var i=(t*e+r*o)/(e+o);return(t-r)/n.sqrt(i*(1-i)*(1/e+1/o))}t.extend({zscore:function(){var n=e.call(arguments);return r(n[1])?(n[0]-n[1])/n[2]:(n[0]-t.mean(n[1]))/t.stdev(n[1],n[2])},ztest:function(){var r,i=e.call(arguments);return o(i[1])?(r=t.zscore(i[0],i[1],i[3]),1===i[2]?t.normal.cdf(-n.abs(r),0,1):2*t.normal.cdf(-n.abs(r),0,1)):i.length>2?(r=t.zscore(i[0],i[1],i[2]),1===i[3]?t.normal.cdf(-n.abs(r),0,1):2*t.normal.cdf(-n.abs(r),0,1)):(r=i[0],1===i[1]?t.normal.cdf(-n.abs(r),0,1):2*t.normal.cdf(-n.abs(r),0,1))}}),t.extend(t.fn,{zscore:function(t,n){return(t-this.mean())/this.stdev(n)},ztest:function(e,r,o){var i=n.abs(this.zscore(e,o));return 1===r?t.normal.cdf(-i,0,1):2*t.normal.cdf(-i,0,1)}}),t.extend({tscore:function(){var r=e.call(arguments);return 4===r.length?(r[0]-r[1])/(r[2]/n.sqrt(r[3])):(r[0]-t.mean(r[1]))/(t.stdev(r[1],!0)/n.sqrt(r[1].length))},ttest:function(){var o,i=e.call(arguments);return 5===i.length?(o=n.abs(t.tscore(i[0],i[1],i[2],i[3])),1===i[4]?t.studentt.cdf(-o,i[3]-1):2*t.studentt.cdf(-o,i[3]-1)):r(i[1])?(o=n.abs(i[0]),1==i[2]?t.studentt.cdf(-o,i[1]-1):2*t.studentt.cdf(-o,i[1]-1)):(o=n.abs(t.tscore(i[0],i[1])),1==i[2]?t.studentt.cdf(-o,i[1].length-1):2*t.studentt.cdf(-o,i[1].length-1))}}),t.extend(t.fn,{tscore:function(t){return(t-this.mean())/(this.stdev(!0)/n.sqrt(this.cols()))},ttest:function(e,r){return 1===r?1-t.studentt.cdf(n.abs(this.tscore(e)),this.cols()-1):2*t.studentt.cdf(-n.abs(this.tscore(e)),this.cols()-1)}}),t.extend({anovafscore:function(){var r,o,i,s,a,u,l,c,f=e.call(arguments);if(1===f.length){for(a=new Array(f[0].length),l=0;l<f[0].length;l++)a[l]=f[0][l];f=a}for(o=new Array,l=0;l<f.length;l++)o=o.concat(f[l]);for(i=t.mean(o),r=0,l=0;l<f.length;l++)r+=f[l].length*n.pow(t.mean(f[l])-i,2);for(r/=f.length-1,u=0,l=0;l<f.length;l++)for(s=t.mean(f[l]),c=0;c<f[l].length;c++)u+=n.pow(f[l][c]-s,2);return r/(u/(o.length-f.length))},anovaftest:function(){var n,o,i,s,a=e.call(arguments);if(r(a[0]))return 1-t.centralF.cdf(a[0],a[1],a[2]);var u=t.anovafscore(a);for(n=a.length-1,i=0,s=0;s<a.length;s++)i+=a[s].length;return o=i-n-1,1-t.centralF.cdf(u,n,o)},ftest:function(n,e,r){return 1-t.centralF.cdf(n,e,r)}}),t.extend(t.fn,{anovafscore:function(){return t.anovafscore(this.toArray())},anovaftes:function(){var n,e=0;for(n=0;n<this.length;n++)e+=this[n].length;return t.ftest(this.anovafscore(),this.length-1,e-this.length)}}),t.extend({qscore:function(){var o,i,s,a,u,l=e.call(arguments);return r(l[0])?(o=l[0],i=l[1],s=l[2],a=l[3],u=l[4]):(o=t.mean(l[0]),i=t.mean(l[1]),s=l[0].length,a=l[1].length,u=l[2]),n.abs(o-i)/(u*n.sqrt((1/s+1/a)/2))},qtest:function(){var n,r=e.call(arguments);3===r.length?(n=r[0],r=r.slice(1)):7===r.length?(n=t.qscore(r[0],r[1],r[2],r[3],r[4]),r=r.slice(5)):(n=t.qscore(r[0],r[1],r[2]),r=r.slice(3));var o=r[0],i=r[1];return 1-t.tukey.cdf(n,i,o-i)},tukeyhsd:function(n){for(var e=t.pooledstdev(n),r=n.map((function(n){return t.mean(n)})),o=n.reduce((function(t,n){return t+n.length}),0),i=[],s=0;s<n.length;++s)for(var a=s+1;a<n.length;++a){var u=t.qtest(r[s],r[a],n[s].length,n[a].length,e,o,n.length);i.push([[s,a],u])}return i}}),t.extend({normalci:function(){var r,o=e.call(arguments),i=new Array(2);return r=4===o.length?n.abs(t.normal.inv(o[1]/2,0,1)*o[2]/n.sqrt(o[3])):n.abs(t.normal.inv(o[1]/2,0,1)*t.stdev(o[2])/n.sqrt(o[2].length)),i[0]=o[0]-r,i[1]=o[0]+r,i},tci:function(){var r,o=e.call(arguments),i=new Array(2);return r=4===o.length?n.abs(t.studentt.inv(o[1]/2,o[3]-1)*o[2]/n.sqrt(o[3])):n.abs(t.studentt.inv(o[1]/2,o[2].length-1)*t.stdev(o[2],!0)/n.sqrt(o[2].length)),i[0]=o[0]-r,i[1]=o[0]+r,i},significant:function(t,n){return t<n}}),t.extend(t.fn,{normalci:function(n,e){return t.normalci(n,e,this.toArray())},tci:function(n,e){return t.tci(n,e,this.toArray())}}),t.extend(t.fn,{oneSidedDifferenceOfProportions:function(n,e,r,o){var s=i(n,e,r,o);return t.ztest(s,1)},twoSidedDifferenceOfProportions:function(n,e,r,o){var s=i(n,e,r,o);return t.ztest(s,2)}})}(n,Math),n.models=function(){function t(t,e){var r=t.length,o=e[0].length-1,i=r-o-1,s=n.lstsq(e,t),a=n.multiply(e,s.map((function(t){return[t]}))).map((function(t){return t[0]})),u=n.subtract(t,a),l=n.mean(t),c=n.sum(a.map((function(t){return Math.pow(t-l,2)}))),f=n.sum(t.map((function(t,n){return Math.pow(t-a[n],2)}))),h=c+f;return{exog:e,endog:t,nobs:r,df_model:o,df_resid:i,coef:s,predict:a,resid:u,ybar:l,SST:h,SSE:c,SSR:f,R2:c/h}}function e(e){var r,o,i=(r=e.exog,o=r[0].length,n.arange(o).map((function(e){var i=n.arange(o).filter((function(t){return t!==e}));return t(n.col(r,e).map((function(t){return t[0]})),n.col(r,i))}))),s=Math.sqrt(e.SSR/e.df_resid),a=i.map((function(t){var n=t.SST,e=t.R2;return s/Math.sqrt(n*(1-e))})),u=e.coef.map((function(t,n){return(t-0)/a[n]})),l=u.map((function(t){var r=n.studentt.cdf(t,e.df_resid);return 2*(r>.5?1-r:r)})),c=n.studentt.inv(.975,e.df_resid),f=e.coef.map((function(t,n){var e=c*a[n];return[t-e,t+e]}));return{se:a,t:u,p:l,sigmaHat:s,interval95:f}}return{ols:function(r,o){var i=t(r,o),s=e(i),a=function(t){var e,r,o,i=t.R2/t.df_model/((1-t.R2)/t.df_resid);return{F_statistic:i,pvalue:1-(e=i,r=t.df_model,o=t.df_resid,n.beta.cdf(e/(o/r+e),r/2,o/2))}}(i),u=1-(1-i.R2)*((i.nobs-1)/i.df_resid);return i.t=s,i.f=a,i.adjust_R2=u,i}}}(),n.extend({buildxmatrix:function(){for(var t=new Array(arguments.length),e=0;e<arguments.length;e++){t[e]=[1].concat(arguments[e])}return n(t)},builddxmatrix:function(){for(var t=new Array(arguments[0].length),e=0;e<arguments[0].length;e++){t[e]=[1].concat(arguments[0][e])}return n(t)},buildjxmatrix:function(t){for(var e=new Array(t.length),r=0;r<t.length;r++)e[r]=t[r];return n.builddxmatrix(e)},buildymatrix:function(t){return n(t).transpose()},buildjymatrix:function(t){return t.transpose()},matrixmult:function(t,e){var r,o,i,s,a;if(t.cols()==e.rows()){if(e.rows()>1){for(s=[],r=0;r<t.rows();r++)for(s[r]=[],o=0;o<e.cols();o++){for(a=0,i=0;i<t.cols();i++)a+=t.toArray()[r][i]*e.toArray()[i][o];s[r][o]=a}return n(s)}for(s=[],r=0;r<t.rows();r++)for(s[r]=[],o=0;o<e.cols();o++){for(a=0,i=0;i<t.cols();i++)a+=t.toArray()[r][i]*e.toArray()[o];s[r][o]=a}return n(s)}},regress:function(t,e){var r=n.xtranspxinv(t),o=t.transpose(),i=n.matrixmult(n(r),o);return n.matrixmult(i,e)},regresst:function(t,e,r){var o=n.regress(t,e),i={anova:{}},s=n.jMatYBar(t,o);i.yBar=s;var a=e.mean();i.anova.residuals=n.residuals(e,s),i.anova.ssr=n.ssr(s,a),i.anova.msr=i.anova.ssr/(t[0].length-1),i.anova.sse=n.sse(e,s),i.anova.mse=i.anova.sse/(e.length-(t[0].length-1)-1),i.anova.sst=n.sst(e,a),i.anova.mst=i.anova.sst/(e.length-1),i.anova.r2=1-i.anova.sse/i.anova.sst,i.anova.r2<0&&(i.anova.r2=0),i.anova.fratio=i.anova.msr/i.anova.mse,i.anova.pvalue=n.anovaftest(i.anova.fratio,t[0].length-1,e.length-(t[0].length-1)-1),i.anova.rmse=Math.sqrt(i.anova.mse),i.anova.r2adj=1-i.anova.mse/i.anova.mst,i.anova.r2adj<0&&(i.anova.r2adj=0),i.stats=new Array(t[0].length);for(var u,l,c,f=n.xtranspxinv(t),h=0;h<o.length;h++)u=Math.sqrt(i.anova.mse*Math.abs(f[h][h])),l=Math.abs(o[h]/u),c=n.ttest(l,e.length-t[0].length-1,r),i.stats[h]=[o[h],u,l,c];return i.regress=o,i},xtranspx:function(t){return n.matrixmult(t.transpose(),t)},xtranspxinv:function(t){var e=n.matrixmult(t.transpose(),t);return n.inv(e)},jMatYBar:function(t,e){var r=n.matrixmult(t,e);return new n(r)},residuals:function(t,e){return n.matrixsubtract(t,e)},ssr:function(t,n){for(var e=0,r=0;r<t.length;r++)e+=Math.pow(t[r]-n,2);return e},sse:function(t,n){for(var e=0,r=0;r<t.length;r++)e+=Math.pow(t[r]-n[r],2);return e},sst:function(t,n){for(var e=0,r=0;r<t.length;r++)e+=Math.pow(t[r]-n,2);return e},matrixsubtract:function(t,e){for(var r=new Array(t.length),o=0;o<t.length;o++){r[o]=new Array(t[o].length);for(var i=0;i<t[o].length;i++)r[o][i]=t[o][i]-e[o][i]}return n(r)}}),n.jStat=n,n)},5072:t=>{"use strict";var n=[];function e(t){for(var e=-1,r=0;r<n.length;r++)if(n[r].identifier===t){e=r;break}return e}function r(t,r){for(var i={},s=[],a=0;a<t.length;a++){var u=t[a],l=r.base?u[0]+r.base:u[0],c=i[l]||0,f="".concat(l," ").concat(c);i[l]=c+1;var h=e(f),m={css:u[1],media:u[2],sourceMap:u[3],supports:u[4],layer:u[5]};if(-1!==h)n[h].references++,n[h].updater(m);else{var d=o(m,r);r.byIndex=a,n.splice(a,0,{identifier:f,updater:d,references:1})}s.push(f)}return s}function o(t,n){var e=n.domAPI(n);return e.update(t),function(n){if(n){if(n.css===t.css&&n.media===t.media&&n.sourceMap===t.sourceMap&&n.supports===t.supports&&n.layer===t.layer)return;e.update(t=n)}else e.remove()}}t.exports=function(t,o){var i=r(t=t||[],o=o||{});return function(t){t=t||[];for(var s=0;s<i.length;s++){var a=e(i[s]);n[a].references--}for(var u=r(t,o),l=0;l<i.length;l++){var c=e(i[l]);0===n[c].references&&(n[c].updater(),n.splice(c,1))}i=u}}},7659:t=>{"use strict";var n={};t.exports=function(t,e){var r=function(t){if(void 0===n[t]){var e=document.querySelector(t);if(window.HTMLIFrameElement&&e instanceof window.HTMLIFrameElement)try{e=e.contentDocument.head}catch(t){e=null}n[t]=e}return n[t]}(t);if(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(e)}},540:t=>{"use strict";t.exports=function(t){var n=document.createElement("style");return t.setAttributes(n,t.attributes),t.insert(n,t.options),n}},5056:(t,n,e)=>{"use strict";t.exports=function(t){var n=e.nc;n&&t.setAttribute("nonce",n)}},7825:t=>{"use strict";t.exports=function(t){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var n=t.insertStyleElement(t);return{update:function(e){!function(t,n,e){var r="";e.supports&&(r+="@supports (".concat(e.supports,") {")),e.media&&(r+="@media ".concat(e.media," {"));var o=void 0!==e.layer;o&&(r+="@layer".concat(e.layer.length>0?" ".concat(e.layer):""," {")),r+=e.css,o&&(r+="}"),e.media&&(r+="}"),e.supports&&(r+="}");var i=e.sourceMap;i&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(i))))," */")),n.styleTagTransform(r,t,n.options)}(n,t,e)},remove:function(){!function(t){if(null===t.parentNode)return!1;t.parentNode.removeChild(t)}(n)}}}},1113:t=>{"use strict";t.exports=function(t,n){if(n.styleSheet)n.styleSheet.cssText=t;else{for(;n.firstChild;)n.removeChild(n.firstChild);n.appendChild(document.createTextNode(t))}}}},n={};function e(r){var o=n[r];if(void 0!==o)return o.exports;var i=n[r]={id:r,loaded:!1,exports:{}};return t[r].call(i.exports,i,i.exports,e),i.loaded=!0,i.exports}e.m=t,e.amdO={},e.n=t=>{var n=t&&t.__esModule?()=>t.default:()=>t;return e.d(n,{a:n}),n},e.d=(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},e.u=t=>t+".js",e.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),e.hmd=t=>((t=Object.create(t)).children||(t.children=[]),Object.defineProperty(t,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+t.id)}}),t),e.o=(t,n)=>Object.prototype.hasOwnProperty.call(t,n),e.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},(()=>{var t;e.g.importScripts&&(t=e.g.location+"");var n=e.g.document;if(!t&&n&&(n.currentScript&&(t=n.currentScript.src),!t)){var r=n.getElementsByTagName("script");if(r.length)for(var o=r.length-1;o>-1&&(!t||!/^http(s?):/.test(t));)t=r[o--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),e.p=t})(),e.b=document.baseURI||self.location.href,e.nc=void 0;var r={};(()=>{"use strict";e.r(r),e.d(r,{GetMCLEditor:()=>wr,MCL:()=>yr,MCLInitializationFunction:()=>Er,MVA:()=>_r,PCA:()=>mr,PLS:()=>Ar,_package:()=>lr,anova:()=>$r,applyLinearKernelSVM:()=>Sr,applyLinearRegression:()=>jr,applyPLSRegression:()=>ro,applyPolynomialKernelSVM:()=>Ur,applyRBFkernelSVM:()=>Pr,applySigmoidKernelSVM:()=>Gr,applySoftmax:()=>Zr,dbScan:()=>hr,dbscanPostProcessingFunction:()=>dr,demoMultivariateAnalysis:()=>br,info:()=>cr,init:()=>fr,isApplicableLinearKernelSVM:()=>Nr,isApplicableLinearRegression:()=>Xr,isApplicablePLSRegression:()=>oo,isApplicablePolynomialKernelSVM:()=>Dr,isApplicableRBFkernelSVM:()=>Lr,isApplicableSigmoidKernelSVM:()=>qr,isApplicableSoftmax:()=>to,isInteractiveLinearKernelSVM:()=>Mr,isInteractiveLinearRegression:()=>Qr,isInteractivePLSRegression:()=>so,isInteractivePolynomialKernelSVM:()=>Br,isInteractiveRBFkernelSVM:()=>xr,isInteractiveSigmoidKernelSVM:()=>Yr,isInteractiveSoftmax:()=>no,kNNImputation:()=>zr,kNNImputationForTable:()=>Hr,numberPreprocessingFunction:()=>pr,reduceDimensionality:()=>vr,stringPreprocessingFunction:()=>gr,topMenuPLS:()=>Cr,trainLinearKernelSVM:()=>Ir,trainLinearRegression:()=>Kr,trainPLSRegression:()=>eo,trainPolynomialKernelSVM:()=>Fr,trainRBFkernelSVM:()=>Or,trainSigmoidKernelSVM:()=>Vr,trainSoftmax:()=>Jr,visualizeLinearKernelSVM:()=>Tr,visualizePLSRegression:()=>io,visualizePolynomialKernelSVM:()=>kr,visualizeRBFkernelSVM:()=>Rr,visualizeSigmoidKernelSVM:()=>Wr});const t=grok,n=ui,o=DG,i={i32:"HEAP32",f32:"HEAPF32"},s={i32:Int32Array,f32:Float32Array},a={i32:2,f32:2},u={i32:DG.Column.fromInt32Array,f32:DG.Column.fromFloat32Array};class l{constructor(t){this.data=t}complementArrOfParams(t){t.push(this.data)}complementArrOfTypes(t){t.push("number")}allocateMemoryForBuffer(t){}isMemoryForBufferAllocated(){return!0}putDataToBuffer(t){}getDataFromBuffer(t){}freeBuffer(t){}}class c extends l{constructor(t,n,e=!1){super(t),this.type=n,this.toUpdate=e,this.buf=0,this.numOfRows=t.length}complementArrOfParams(t){t.push(this.buf),t.push(this.numOfRows)}complementArrOfTypes(t){t.push("number"),t.push("number")}allocateMemoryForBuffer(t){this.buf=t._malloc(this.numOfRows*s[this.type].BYTES_PER_ELEMENT)}isMemoryForBufferAllocated(){return 0!=this.buf}putDataToBuffer(t){if(this.isMemoryForBufferAllocated()){const n=this.type,e=a[n],r=t[i[n]];let o=null;const u=this.data;o="int"==u.type&&"i32"==n||"double"==u.type&&"f32"==n?u.getRawData():new s[n](u.getRawData()),o&&r.set(o,this.buf>>e)}}getDataFromBuffer(t){if(this.toUpdate&&this.isMemoryForBufferAllocated()){const n=this.type,e=t[i[n]],r=this.buf,o=s[n].BYTES_PER_ELEMENT,a=this.data.getRawData();for(let t=0;t<this.numOfRows;t++)a[t]=e[r/o+t]}}freeBuffer(t){this.isMemoryForBufferAllocated()&&(t._free(this.buf),this.buf=0)}}class f extends c{constructor(t,n){super([],t,!0),this.numOfRows=n}putDataToBuffer(t){}getDataFromBuffer(t){if(this.toUpdate&&this.isMemoryForBufferAllocated()){const n=this.type,e=t[i[n]],r=this.buf,o=u[n],a=new s[n](this.numOfRows);for(let t=0;t<a.length;t++)a[t]=e[r/a.BYTES_PER_ELEMENT+t];this.data=o("name",a)}}}class h extends l{constructor(t,n,e=!1){super(t),this.type=n,this.toUpdate=e,this.buf=0,this.numOfColumns=t.length,this.numOfRows=t[0].length}complementArrOfParams(t){t.push(this.buf),t.push(this.numOfRows),t.push(this.numOfColumns)}complementArrOfTypes(t){t.push("number"),t.push("number"),t.push("number")}allocateMemoryForBuffer(t){this.buf=t._malloc(this.numOfRows*this.numOfColumns*s[this.type].BYTES_PER_ELEMENT)}isMemoryForBufferAllocated(){return 0!=this.buf}putDataToBuffer(t){if(this.isMemoryForBufferAllocated()){const n=this.type,e=a[n],r=t[i[n]],o=s[n].BYTES_PER_ELEMENT;for(let t=0;t<this.numOfColumns;t++){let i=null;const a=this.data[t];i="int"==a.type&&"i32"==n||"double"==a.type&&"f32"==n?a.getRawData():new s[n](a.getRawData()),null!=i&&r.set(i,this.buf+t*this.numOfRows*o>>e)}}}getDataFromBuffer(t){if(this.toUpdate&&this.isMemoryForBufferAllocated()){const n=this.type,e=t[i[n]],r=this.numOfRows,o=this.numOfColumns,a=new s[n](e.buffer,this.buf,r*o);for(let t=0;t<o;t++){const n=this.data[t].getRawData();for(let e=0;e<r;e++)n[e]=a[e+t*r]}}}freeBuffer(t){this.isMemoryForBufferAllocated()&&(t._free(this.buf),this.buf=0)}}class m extends h{constructor(t,n,e){super([[]],t,!0),this.data=[],this.numOfColumns=e,this.numOfRows=n}putDataToBuffer(t){}getDataFromBuffer(t){if(this.toUpdate&&this.isMemoryForBufferAllocated()){const n=this.type,e=t[i[n]],r=this.numOfRows,o=this.numOfColumns,a=s[n].BYTES_PER_ELEMENT,l=u[n],c=this.buf;for(let t=0;t<o;t++){const o=new s[n](r);for(let n=0;n<r;n++)o[n]=e[c/a+n+t*r];this.data.push(l((t+1).toString(),o))}}}}const d={intColumn:t=>new c(t,"i32"),newIntColumn:t=>new f("i32",t),intColumns:t=>new h(t.toList(),"i32"),newIntColumns:(t,n)=>new m("i32",t,n),floatColumn:t=>new c(t,"f32"),newFloatColumn:t=>new f("f32",t),floatColumns:t=>new h(t.toList(),"f32"),newFloatColumns:(t,n)=>new m("f32",t,n),int:t=>new l(t),num:t=>new l(t)},p={tableFromColumns:t=>DG.DataFrame.fromColumns(t.data),num:t=>t,int:t=>t,double:t=>t,column:t=>t.data};function g(t,n,e){const r=t[n],o=r.arguments,i=[];let s=0;for(const t in o){const n=o[t];if("_callResult"!=t){switch(n.type){case"floatColumns":case"int":case"num":case"floatColumn":case"intColumn":case"intColumns":n.data=d[n.type](e[s]),s++;break;case"newFloatColumns":case"newIntColumns":const t=o[n.numOfRows.ref].data[n.numOfRows.value],r=o[n.numOfColumns.ref].data[n.numOfColumns.value];n.data=d[n.type](t,r);break;case"newFloatColumn":case"newIntColumn":const i=o[n.numOfRows.ref].data[n.numOfRows.value];n.data=d[n.type](i)}i.push(o[t].data)}}const a=function(t,n,e,r){let o;for(const n of r)n.allocateMemoryForBuffer(t);let i=!0;for(const t of r)i&=t.isMemoryForBufferAllocated();if(i){const e=[],i=[];for(const n of r)n.complementArrOfParams(e),n.complementArrOfTypes(i),n.putDataToBuffer(t);const s="number";o=t.ccall(n,s,i,e);for(const n of r)n.getDataFromBuffer(t)}for(const n of r)n.freeBuffer(t);if(null!=o)return o}(t,n,0,i);o._callResult=d.num(a);const u=r.output;if("objects"!=u.type)return p[u.type](o[u.source].data);const l=[];for(const t of u.source)l.push(o[t].data.data);return l}const v="num",w="floatColumn",y="intColumn",E="floatColumns",A="newFloatColumns",C="intColumns",_="newIntColumns",b="newFloatColumn",I="newIntColumn",S="column",N="_callResult",M="numOfRows",T="numOfColumns",O="ref",P="value",L="tableFromColumns",x="objects",R="int",F="double",U={intColumn:Int32Array,floatColumn:Float32Array,floatColumns:Float32Array,newFloatColumns:Float32Array,intColumns:Int32Array,newIntColumns:Int32Array,newFloatColumn:Float32Array,newIntColumn:Int32Array};function D(t,n){let e,r=[],o=0;for(const i in t){const s=t[i],a=s.type;if(i!==N){switch(a){case v:case R:case F:s.data=n[o],o++;break;case y:case w:let r,i=n[o];r=i.type===R&&a===y||i.type===F&&a===w?i.getRawData():new U[a](i.getRawData()),s.data={array:r,numOfRows:r.length},o++;break;case I:case b:let u=0;e=s[M][O],u=t[e].type===v?t[e].data:t[e].data[s[M][P]],s.data={numOfRows:u},o++;break;case C:case E:let l=[];for(let t of n[o].toList())t.type===R&&a===y||t.type===F&&a===w?l.push(t.getRawData()):l.push(new U[a](t.getRawData()));s.data={arrays:l,numOfRows:l[0].length,numOfColumns:l.length},o++;break;case _:case A:let c=0,f=0;e=s[M][O],c=t[e].type===v?t[e].data:t[e].data[s[M][P]],e=s[T][O],f=t[e].type===v?t[e].data:t[e].data[s[T][P]],s.data={numOfRows:c,numOfColumns:f},o++;break;default:return}r.push(s)}}return r}function B(t,n){t.arguments._callResult=n.callResult,function(t,n){const e={newFloatColumns:DG.Column.fromFloat32Array,newIntColumns:DG.Column.fromInt32Array,newFloatColumn:DG.Column.fromFloat32Array,newIntColumn:DG.Column.fromInt32Array};let r=0;for(const o in t){const i=t[o];switch(i.type){case v:case R:case F:case y:case w:case E:case C:break;case b:case I:let t;null==i.name?t=(0).toString():a=i.name,i.column=e[i.type](t,n[r].array);break;case _:case A:let o=[],s=n[r].arrays.length,a=[];if(null==i.names)for(let t=1;t<=s;t++)a.push(t.toString());else a=i.names;for(let t=0;t<s;t++)o.push(e[i.type](a[t],n[r].arrays[t]));i.columns=o}r++}}(t.arguments,n.args);let e=function(t){let n=t.output;const e={newFloatColumns:"columns",newIntColumns:"columns",newFloatColumn:"column",newIntColumn:"column"};switch(n.type){case v:case R:case F:return t.arguments[n.source];case S:return t.arguments[n.source].column;case L:return DG.DataFrame.fromColumns(t.arguments[n.source].columns);case x:let r=[];for(let o of n.source){let n=t.arguments[o];r.push(n[e[n.type]])}return r}}(t);return function(t){for(const n in t){const e=t[n];switch(e.type){case v:case R:case F:case y:case w:case C:case E:break;case I:case b:e.column=null;break;case _:case A:e.columns=null}}}(t.arguments),e}const k=1,V=1e8,G="components must be positive.",q="components must not be greater than features count.",Y="dataframe is too big.",W="unsupported column type: ";function $(t){if(t.type!=o.COLUMN_TYPE.FLOAT&&t.type!=o.COLUMN_TYPE.INT)throw new Error(W+t.type)}function z(t){if(t.stats.missingValueCount>0)throw new Error(`The column '${t.name}' has missing values.`)}function H(t,n){if(function(t,n){if(n<k)throw new Error(G);if(n>t.length)throw new Error(q);for(const n of t)$(n),z(n)}(t,n),t.length*t.byIndex(0).length>V)throw new Error(Y)}var K=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};var j=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};const X=0,Q=1,J=2,Z=3,tt=4,nt=0,et=1,rt=2,ot=3,it=4,st=5,at=6,ut=7,lt=0,ct=1,ft=2,ht=3,mt=0,dt=0,pt=1,gt=0,vt=1,wt=0,yt=0,Et=0,At=0,Ct="gamma must be strictly positive.",_t="sigma must be strictly positive.",bt="c must be strictly positive.",It="d must be strictly positive.",St="incorrect kernel.",Nt="labels must be strings of two categories.",Mt="Labels",Tt="predicted",Ot="correctness",Pt="Confusion matrix",Lt="mean",xt="std dev",Rt="alpha",Ft="weight",Ut="Gamma",Dt="Kernel",Bt="Kernel params",kt="Kernel parameter 1",Vt="Kernel parameter 2",Gt="Features count",qt="Train samples count",Yt="Train error, %",Wt=["linear","polynomial","RBF","sigmoid"],$t="Sensitivity",zt="Specificity",Ht="Balanced accuracy",Kt="Positive predicitve value",jt="Negative predicitve value",Xt="prediction",Qt=4,Jt=3,Zt=2,tn=0,nn=1,en=2,rn=0,on=1;function sn(t,n,r){return j(this,void 0,void 0,(function*(){const i=n.columns;if(2!=r.categories.length)throw new Error(Nt);const s=o.Column.float(r.name,r.length);for(let t=0;t<r.length;t++)s.set(t,r.get(t)==r.categories[0]?-1:1,!1);const a=yield function(t,n,r){return j(this,void 0,void 0,(function*(){!function(t){if(t.gamma<=wt)throw new Error(Ct);switch(t.kernel){case X:return;case J:if(t.sigma<=yt)throw new Error(_t);return;case Q:if(t.cParam<=Et)throw new Error(bt);if(t.dParam<=At)throw new Error(It);return;case Z:return;default:throw new Error(St)}}(t);const i=[rn,rn];switch(t.kernel){case X:break;case J:i[mt]=t.sigma;break;case Q:i[dt]=t.cParam,i[pt]=t.dParam;break;case Z:i[gt]=t.kappa,i[vt]=t.theta;break;default:throw new Error(St)}const s=o.Column.fromList("double",Bt,i),a=n.toList(),u=a[0].length+on,l=a.length+on,c=tt;let f;const h=async function(t,n,r,o,i,s,a,u){return new Promise(((l,c)=>{const f=new Worker(new URL(e.p+e.u(656),e.b));f.postMessage(D(EDA.trainAndAnalyzeLSSVM.arguments,[t,n,r,o,i,s,a,u])),f.onmessage=function(t){f.terminate(),l(B(EDA.trainAndAnalyzeLSSVM,t.data))}}))}(t.gamma,t.kernel,s,u,l,c,n,r);yield h.then((t=>{f=t}),(t=>{throw new Error(`Error: ${t}`)})),f[et].name=Lt,f[rt].name=xt,f[ot].name=Rt,f[it].name=Ft,f[st].name=Tt,f[at].name=Ot,f[ut].name=Pt;const m={trainGamma:t.gamma,kernelType:t.kernel,kernelParams:s,trainLabels:r,normalizedTrainData:o.DataFrame.fromColumns(f[nt]),means:f[et],stdDevs:f[rt],modelParams:f[ot],modelWeights:f[it],predictedLabels:f[st],correctness:f[at],confusionMatrix:f[ut],trainError:void 0,featuresCount:a.length,trainSamplesCount:a[0].length};return function(t){const n=t.confusionMatrix.getRawData(),e=n[lt],r=n[ht],o=n[ft],i=n[ct],s=e+i,a=o+r,u=e/s,l=r/a,c=e/(e+o),f=r/(r+i),h=(e+r)/(s+a),m=(u+l)/2;t.sensitivity=u,t.specificity=l,t.balancedAccuracy=m,t.positivePredicitveValue=c,t.negativePredicitveValue=f,t.trainError=100*(1-h)}(m),m}))}(t,i,s);return a.realLabels=r,a}))}function an(t,n){const e=ln(n);return o.Viewer.form(e.modelInfo,{showNavigation:!1}).root}function un(t){const n=t.normalizedTrainData.columns,e=t.trainSamplesCount,r=t.featuresCount,i=o.DataFrame.fromColumns([t.realLabels]).toByteArray(),s=Qt+i.length+4-i.length%4,a=function(t){const n=t.kernelParams.getRawData();return o.DataFrame.fromColumns([o.Column.fromList("double",Ut,[t.trainGamma]),o.Column.fromStrings(Dt,[Wt[t.kernelType]]),o.Column.fromList("double",kt,[n[0]]),o.Column.fromList("double",Vt,[n[1]]),o.Column.fromList("double",Gt,[t.featuresCount]),o.Column.fromList("double",qt,[t.trainSamplesCount]),o.Column.fromList("double",Yt,[t.trainError]),o.Column.fromList("double",Ht,[t.balancedAccuracy]),o.Column.fromList("double",$t,[t.sensitivity]),o.Column.fromList("double",zt,[t.specificity]),o.Column.fromList("double",Kt,[t.positivePredicitveValue]),o.Column.fromList("double",jt,[t.negativePredicitveValue])])}(t).toByteArray(),u=Qt+a.length+4-a.length%4,l=new Uint8Array(Qt*(Jt+Zt+e+r+r+e+on+r+on+r*e)+s+u),c=l.buffer;let f=0,h=new Int32Array(c,f,Jt);h[tn]=t.kernelType,h[nn]=e,h[en]=r,f+=Jt*Qt;let m=new Float32Array(c,f,Zt);m.set(t.kernelParams.getRawData()),f+=Zt*Qt,m=new Float32Array(c,f,e),m.set(t.trainLabels.getRawData()),f+=e*Qt,m=new Float32Array(c,f,r),m.set(t.means.getRawData()),f+=r*Qt,m=new Float32Array(c,f,r),m.set(t.stdDevs.getRawData()),f+=r*Qt,m=new Float32Array(c,f,e+on),m.set(t.modelParams.getRawData()),f+=(e+on)*Qt,m=new Float32Array(c,f,r+on),m.set(t.modelWeights.getRawData()),f+=(r+on)*Qt;for(const t of n)m=new Float32Array(c,f,r),m.set(t.getRawData()),f+=r*Qt;return h=new Int32Array(c,f,1),h[0]=i.length,l.set(i,f+Qt),f+=s,h=new Int32Array(c,f,1),h[0]=a.length,l.set(a,f+Qt),f+=u,l}function ln(t){const n=t.buffer;let e=0;const r=new Int32Array(n,e,Jt);e+=Jt*Qt;const i=r[nn],s=r[en],a=o.Column.fromFloat32Array(Bt,new Float32Array(n,e,Zt));e+=Zt*Qt;const u=o.Column.fromFloat32Array(Mt,new Float32Array(n,e,i));e+=i*Qt;const l=o.Column.fromFloat32Array(Lt,new Float32Array(n,e,s));e+=s*Qt;const c=o.Column.fromFloat32Array(xt,new Float32Array(n,e,s));e+=s*Qt;const f=o.Column.fromFloat32Array(Rt,new Float32Array(n,e,i+on));e+=(i+on)*Qt;const h=o.Column.fromFloat32Array(Ft,new Float32Array(n,e,s+on));e+=(s+on)*Qt;const m=[];for(let t=0;t<i;t++)m.push(o.Column.fromFloat32Array(t.toString(),new Float32Array(n,e,s))),e+=s*Qt;const d=o.DataFrame.fromColumns(m),p=new Int32Array(n,e,1)[0],g=p+4-p%4;e+=Qt;const v=o.DataFrame.fromByteArray(new Uint8Array(n,e,p)).columns.byIndex(0);e+=g;const w=new Int32Array(n,e,1)[0],y=w+4-w%4;e+=Qt;const E=o.DataFrame.fromByteArray(new Uint8Array(n,e,w));return e+=y,{kernelType:r[tn],kernelParams:a,trainLabels:u,realLabels:v,means:l,stdDevs:c,modelParams:f,modelWeights:h,normalizedTrainData:d,modelInfo:E}}function cn(t,n){return j(this,void 0,void 0,(function*(){const r=ln(new Uint8Array(n)),i=yield function(t,n){return j(this,void 0,void 0,(function*(){let r;const o=async function(t,n,r,o,i,s,a,u,l){return new Promise(((c,f)=>{const h=new Worker(new URL(e.p+e.u(763),e.b));h.postMessage(D(EDA.predictByLSSVM.arguments,[t,n,r,o,i,s,a,u,l])),h.onmessage=function(t){h.terminate(),c(B(EDA.predictByLSSVM,t.data))}}))}(t.kernelType,t.kernelParams,t.normalizedTrainData.columns,t.trainLabels,t.means,t.stdDevs,t.modelParams,t.modelWeights,n);return yield o.then((t=>{r=t}),(t=>{throw new Error(`Error: ${t}`)})),r}))}(r,t.columns),s=o.Column.string(Xt,i.length),a=r.realLabels.categories;for(let t=0;t<s.length;t++)s.set(t,-1==i.get(t)?a[0]:a[1]);return o.DataFrame.fromColumns([s])}))}function fn(t,n){const e=t.columns;if(!n.matches("categorical")||n.categories.length>2)return!1;let r=!0;for(let t=0;t<e.length;t++)r=r&&e.byIndex(t).matches("numerical");return r}function hn(t,n){return t.rowCount<=1e3}var mn,dn,pn,gn,vn,wn,yn,En;!function(t){t[t.COMPUTE_COMPONENTS=0]="COMPUTE_COMPONENTS",t[t.PERFORM_MVA=1]="PERFORM_MVA",t[t.DEMO=2]="DEMO"}(mn||(mn={})),function(t){t.NO_DF="No dataframe is opened",t.NO_COLS="No numeric columns without missing values",t.ONE_COL="No columns to be used as features (just one numeric columns without missing values)",t.EMPTY_DF="Dataframe is empty"}(dn||(dn={})),function(t){t.PREDICT="Predict",t.USING="Using",t.COMPONENTS="Components",t.PLS="PLS",t.MVA="Multivariate Analysis (PLS)",t.RUN="RUN",t.NAMES="Names",t.MODEL="Observed vs. Predicted",t.FEATURE="Feature",t.REGR_COEFS="Regression Coefficients",t.XLOADING="x.loading.p",t.LOADINGS="Loadings",t.XSCORE="x.score.t",t.YSCORE="y.score.u",t.SCORES="Scores",t.EXPL_VAR="Explained Variance",t.EXPLORE="Explore",t.FEATURES="Feature names"}(pn||(pn={})),function(t){t.PREDICT="Column with the response variable",t.FEATURES="Predictors (features)",t.COMPONENTS="Number of PLS components",t.PLS="Compute PLS components",t.MVA="Perform multivariate analysis",t.NAMES="Names of data samples"}(gn||(gn={})),function(t){t.PLS="https://datagrok.ai/help/explore/multivariate-analysis/pls#pls-components",t.MVA="https://datagrok.ai/help/explore/multivariate-analysis/pls",t.MODEL="https://datagrok.ai/help/explore/multivariate-analysis/plots/predicted-vs-reference",t.COEFFS="https://datagrok.ai/help/explore/multivariate-analysis/plots/regression-coefficients",t.LOADINGS="https://datagrok.ai/help/explore/multivariate-analysis/plots/loadings",t.EXPL_VARS="https://datagrok.ai/help/explore/multivariate-analysis/plots/explained-variance",t.SCORES="https://datagrok.ai/help/explore/multivariate-analysis/plots/scores"}(vn||(vn={})),function(t){t[t.DEFAULT=3]="DEFAULT",t[t.MIN=1]="MIN"}(wn||(wn={})),function(t){t.PREFIX="PLS",t.SUFFIX="(predicted)",t.COMP="component",t.COMPS="components"}(yn||(yn={})),function(t){t[t.PREDICTION=0]="PREDICTION",t[t.REGR_COEFFS=1]="REGR_COEFFS",t[t.T_SCORES=2]="T_SCORES",t[t.U_SCORES=3]="U_SCORES",t[t.X_LOADINGS=4]="X_LOADINGS",t[t.Y_LOADINGS=5]="Y_LOADINGS"}(En||(En={}));const An="Int",Cn=6,_n=[.49,.79,.99],bn=1,In=200,Sn=200;var Nn;!function(t){t.AXIS="#838383",t.CIRCLE="#0000FF"}(Nn||(Nn={}));const Mn="# Data\nEach car has many features - patterns extraction is complicated.\n\n# Model\nPredict car price by its other features.\n\n# Try\nPress 'RUN' to perform multivariate analysis using partial least squares\n([PLS](https://en.wikipedia.org/wiki/Partial_least_squares_regression)) regression.\n\n# Essence\nThe method finds the latent factors that\n\n* capture the maximum variance in the features\n* maximize correlation with the response variable",Tn=[{caption:pn.MODEL,text:"Closer to the line means better price prediction."},{caption:pn.SCORES,text:"The latent factor values for each data sample reflect the similarities and dissimilarities among observations."},{caption:pn.LOADINGS,text:"The impact of each feature on the latent factors: higher loading means stronger influence."},{caption:pn.REGR_COEFS,text:"Parameters of the obtained linear model: features make different contribution to the prediction."},{caption:pn.EXPL_VAR,text:"How well the latent components fit source data: closer to one means better fit."}],On=Tn.map((t=>`# ${t.caption}\n\n${t.text}`)).join("\n\n")+`\n\n# Learn more\n \n * [Multivariate analysis](${vn.MVA}),\n * [ANOVA](https://datagrok.ai/help/explore/anova)`;var Pn=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};const Ln=Math.min,xn=Math.max;function Rn(t){const n=[],e=(t,e)=>{n.push({type:"line",formula:t,width:bn,visible:!0,title:" ",min:-e,max:e,color:Nn.CIRCLE})};return t.forEach((r=>{const o="${"+r+"}";n.push({type:"line",formula:`${o} = 0`,width:bn,visible:!0,title:" ",color:Nn.AXIS}),t.forEach((t=>{const n="${"+t+"}";_n.forEach((t=>{e(n+` = sqrt(${t*t} - ${o} * ${o})`,t),e(n+` = -sqrt(${t*t} - ${o} * ${o})`,t)}))}))})),n}function Fn(t){return Pn(this,void 0,void 0,(function*(){H(t.features,t.components),$(t.predict),z(t.predict);const n=yield async function(t,n,r,o){return new Promise(((t,i)=>{const s=new Worker(new URL(e.p+e.u(412),e.b));s.postMessage(D(EDA.partialLeastSquareRegression.arguments,[n,r,o])),s.onmessage=function(n){s.terminate(),t(B(EDA.partialLeastSquareRegression,n.data))}}))}(t.table,t.features,t.predict,t.components);return{prediction:n[En.PREDICTION],regressionCoefficients:n[En.REGR_COEFFS],tScores:n[En.T_SCORES],uScores:n[En.U_SCORES],xLoadings:n[En.X_LOADINGS],yLoadings:n[En.Y_LOADINGS]}}))}function Un(e){return Pn(this,void 0,void 0,(function*(){const r=t.shell.t;if(null===r)return void t.shell.warning(dn.NO_DF);if(0===r.rowCount)return void t.shell.warning(dn.EMPTY_DF);const i=[],s=[],a=[],u=t=>(t.type===o.COLUMN_TYPE.INT||t.type===o.COLUMN_TYPE.FLOAT)&&0===t.stats.missingValueCount;if(r.columns.toList().forEach((t=>{u(t)?(i.push(t.name),s.push(t)):t.type===o.COLUMN_TYPE.STRING&&a.push(t)})),0===i.length)return void t.shell.warning(dn.NO_COLS);if(1===i.length)return void t.shell.warning(dn.ONE_COL);let l=s[s.length-1];const c=n.input.column(pn.PREDICT,{table:r,value:l,onValueChanged:()=>{l=c.value,w()},filter:t=>u(t)});let f;c.setTooltip(gn.PREDICT);const h=n.input.columns(pn.USING,{table:r,available:i});h.onInput((()=>w())),h.setTooltip(gn.FEATURES);let m=Ln(i.length-1,wn.DEFAULT);const d=n.input.forProperty(o.Property.fromOptions({name:pn.COMPONENTS,inputType:An,defaultValue:m,showPlusMinus:!0,min:wn.MIN}));let p,g,v;d.onInput((()=>w())),d.setTooltip(gn.COMPONENTS),e===mn.COMPUTE_COMPONENTS?(p=pn.PLS,g=vn.PLS,v=gn.PLS):(p=pn.MVA,g=vn.MVA,v=gn.MVA);const w=()=>{var t;h.value=h.value.filter((t=>t!==l)),f=h.value,d.value=Ln(xn(null!==(t=d.value)&&void 0!==t?t:m,wn.MIN),f.length),m=d.value,A.getButton(pn.RUN).disabled=0===f.length||m<=0};let y=a.length>0?a[0]:void 0;const E=n.input.column(pn.NAMES,{table:r,value:y,onValueChanged:()=>{var t;return y=null!==(t=c.value)&&void 0!==t?t:void 0},filter:t=>t.type===o.COLUMN_TYPE.STRING});E.setTooltip(gn.NAMES),E.root.hidden=0===a.length||e===mn.COMPUTE_COMPONENTS;const A=n.dialog({title:p,helpUrl:g}).add(n.form([c,h,d,E])).addButton(pn.RUN,(()=>Pn(this,void 0,void 0,(function*(){A.close(),yield function(e,r){return Pn(this,void 0,void 0,(function*(){var i,s;const a=yield Fn(e),u=a.tScores,l=e.table.columns,c=e.features.names(),f=r===mn.COMPUTE_COMPONENTS?yn.PREFIX:pn.XSCORE;if(u.forEach(((t,n)=>{t.name=l.getUnusedName(`${f}${n+1}`),l.add(t)})),r===mn.COMPUTE_COMPONENTS)return;const h=t.shell.tableView(e.table.name),m=o.DataFrame.fromColumns([o.Column.fromStrings(pn.FEATURE,c),a.regressionCoefficients]);a.xLoadings.forEach(((t,n)=>{t.name=m.columns.getUnusedName(`${pn.XLOADING}${n+1}`),m.columns.add(t)}));const d=a.prediction;d.name=l.getUnusedName(`${e.predict.name} ${yn.SUFFIX}`),l.add(d);const p=h.addViewer(o.Viewer.scatterPlot(e.table,{title:pn.MODEL,xColumnName:e.predict.name,yColumnName:d.name,showRegressionLine:!0,markerType:o.MARKER_TYPE.CIRCLE,labels:null===(i=e.names)||void 0===i?void 0:i.name,help:vn.MODEL}));a.regressionCoefficients.name=pn.REGR_COEFS;const g=h.addViewer(o.Viewer.barChart(m,{title:pn.REGR_COEFS,splitColumnName:pn.FEATURE,valueColumnName:a.regressionCoefficients.name,valueAggrType:o.AGG.AVG,help:vn.COEFFS,showValueSelector:!1,showStackSelector:!1}));a.xLoadings.forEach(((t,n)=>t.name=`${pn.XLOADING}${n+1}`));const v=h.addViewer(o.Viewer.scatterPlot(m,{title:pn.LOADINGS,xColumnName:`${pn.XLOADING}1`,yColumnName:`${pn.XLOADING}${a.xLoadings.length>1?"2":"1"}`,markerType:o.MARKER_TYPE.CIRCLE,labels:pn.FEATURE,help:vn.LOADINGS})),w=u.map((t=>t.name));a.uScores.forEach(((t,n)=>{t.name=l.getUnusedName(`${pn.YSCORE}${n+1}`),l.add(t),w.push(t.name)}));const y=o.Viewer.scatterPlot(e.table,{title:pn.SCORES,xColumnName:u[0].name,yColumnName:u.length>1?u[1].name:a.uScores[0].name,markerType:o.MARKER_TYPE.CIRCLE,labels:null===(s=e.names)||void 0===s?void 0:s.name,help:vn.SCORES,showViewerFormulaLines:!0});y.meta.formulaLines.addAll(Rn(w)),h.addViewer(y);const E=a.yLoadings.getRawData(),A=a.xLoadings.map((t=>t.getRawData())),C=e.table.rowCount,_=c.length,b=e.components,I=new Float32Array(b),S=[],N=[];for(let t=0;t<_;++t)N.push(new Float32Array(b));I[0]=Math.pow(E[0],2)/C,S.push(`1 ${yn.COMP}`),N.forEach(((t,n)=>{t[0]=Math.pow(A[0][n],2)/C}));for(let t=1;t<b;++t)I[t]=I[t-1]+Math.pow(E[t],2)/C,N.forEach(((n,e)=>n[t]=n[t-1]+Math.pow(A[t][e],2)/C)),S.push(`${t+1} ${yn.COMPS}`);const M=o.DataFrame.fromColumns([o.Column.fromStrings(pn.COMPONENTS,S),o.Column.fromFloat32Array(e.predict.name,I)]);N.forEach(((t,n)=>M.columns.add(o.Column.fromFloat32Array(c[n],t))));const T=h.addViewer(o.Viewer.barChart(M,{title:pn.EXPL_VAR,splitColumnName:pn.COMPONENTS,valueColumnName:e.predict.name,valueAggrType:o.AGG.AVG,help:vn.EXPL_VARS,showCategorySelector:!1,showStackSelector:!1}));if(r===mn.DEMO){const e=[p,y,v,g,T].map(((t,n)=>({text:Tn[n].text,showNextTo:t.root})));n.hints.addTextHint({title:pn.EXPLORE,pages:e}).helpUrl=vn.MVA,t.shell.windows.help.showHelp(n.markdown(On))}}))}({table:r,features:o.DataFrame.fromColumns(f).columns,predict:l,components:m,names:y},e)}))),void 0,v).show({x:In,y:Sn});setTimeout((()=>{h.value=s.filter((t=>t!==l)),f=h.value}),Cn),t.shell.v.append(A.root)}))}var Dn,Bn=e(6572);function kn(t){if(t<=0||t>=1)throw new Error(Dn.INCORRECT_SIGNIFICANCE_LEVEL)}function Vn(t){const n=t.size;if(n<=0)throw new Error(Dn.INCORRECT_SAMPLE_SIZE);return 1===n?0:(t.sumOfSquares-Math.pow(t.sum,2)/n)/(n-1)}function Gn(t,n,e=.05){kn(e);const r=Vn(t),o=Vn(n);return 0===o?r===o:r/o<Bn.centralF.inv(1-e,t.size-1,n.size-1)}!function(t){t.NON_EQUAL_FACTORS_VALUES_SIZE="non-equal sizes of factor and values arrays. INPUT ERROR.",t.INCORRECT_SIGNIFICANCE_LEVEL="incorrect significance level. It must be from the interval (0, 1). INPUT ERROR.",t.INCORRECT_SAMPLE_SIZE="incorrect size of sample. DATA FACTORIZAING ERROR.",t.NON_EQUAL_VARIANCES="variances are not equal.",t.NON_NORMAL_DISTRIB="non-normal distribution.",t.UNSUPPORTED_COLUMN_TYPE="unsupported column type.",t.INCORRECT_CATEGORIES_COL_TYPE="incorrect categories column type.",t.ANOVA_FAILED_JUST_ONE_CAT="ANOVA filed: there should be at least 2 categories."}(Dn||(Dn={}));class qn{constructor(t,n,e=!1,r=.05){if(this.isNormDistrib=void 0,this.categories=[],t.type!==o.COLUMN_TYPE.STRING)throw new Error;if(t.length!==n.length)throw new Error(Dn.NON_EQUAL_FACTORS_VALUES_SIZE);this.setStats(t,n,e,r)}isNormal(){return!0}areVarsEqual(t=.05){const n=this.catCount;if(1===n)return!0;const e={sum:this.sums[0],sumOfSquares:this.sumsOfSquares[0],size:this.subSampleSizes[0]};for(let r=1;r<n;++r)if(!Gn(e,{sum:this.sums[r],sumOfSquares:this.sumsOfSquares[r],size:this.subSampleSizes[r]},t))return!1;return!0}getOneWayAnova(){const t=this.catCount;if(1===t)throw new Error(Dn.ANOVA_FAILED_JUST_ONE_CAT);let n=0,e=0;const r=this.size;let o=0;for(let r=0;r<t;++r)n+=this.sums[r],e+=this.sumsOfSquares[r],o+=Math.pow(this.sums[r],2)/this.subSampleSizes[r];const i=e-Math.pow(n,2)/r,s=o-Math.pow(n,2)/r,a=i-s,u=t-1,l=r-t,c=s/u,f=a/l,h=c/f;return{ssBn:s,ssWn:a,ssTot:i,dfBn:u,dfWn:l,dfTot:r-1,msBn:c,msWn:f,fStat:h,pValue:1-Bn.centralF.cdf(h,u,l)}}setStats(t,n,e=!1,r=.05){const i=n.type,s=n.length;switch(i){case o.COLUMN_TYPE.INT:case o.COLUMN_TYPE.FLOAT:this.categories=t.categories;const e=this.categories.length;this.catCount=e,this.size=s;const r=n.getRawData(),i=t.getRawData(),a=new Float64Array(e).fill(0),u=new Float64Array(e).fill(0),l=new Int32Array(e).fill(0);for(let t=0;t<s;++t){const n=i[t];a[n]+=r[t],u[n]+=Math.pow(r[t],2),++l[n]}this.sums=a,this.sumsOfSquares=u,this.subSampleSizes=l;break;default:throw new Error(Dn.UNSUPPORTED_COLUMN_TYPE)}}}var Yn=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};function Wn(t,n,r,o){return Yn(this,void 0,void 0,(function*(){return new Promise((function(i,s){const a=new Worker(new URL(e.p+e.u(682),e.b));a.postMessage({embedX:t,embedY:n,minPts:o,epsilon:r}),a.onmessage=({data:{error:t,clusters:n}})=>{a.terminate(),t?s(t):i(n)}}))}))}e(5540);let $n=null;function zn(){return t=this,n=void 0,r=function*(){if(!$n&&($n=yield navigator.gpu.requestAdapter(),null==$n))return null;const t=yield $n.requestAdapterInfo();return t?Hn(t.description,Hn(t.vendor,"No GPU description available")):null},new((e=void 0)||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}));var t,n,e,r}function Hn(t,n){return t&&""!=t?t:n}var Kn,jn,Xn,Qn,Jn,Zn,te,ne,ee;(jn=Kn||(Kn={})).EUCLIDEAN="EUCLIDEAN",jn.MANHATTAN="MANHATTAN",Kn.EUCLIDEAN,Kn.MANHATTAN,(Qn=Xn||(Xn={})).HAMMING="Hamming",Qn.EUCLIDEAN="Euclidean",Qn.MANHATTAN="Manhattan",Qn.TANIMOTO="Tanimoto",Qn.LEVENSTEIN="Levenshtein",Qn.NEEDLEMAN_WUNSCH="Needlemann-Wunsch",Qn.MONOMER_CHEMICAL_DISTANCE="Monomer chemical distance",Qn.SOKAL="Sokal",Qn.COSINE="Cosine",Qn.ASYMMETRIC="Asymmetric",Qn.Difference="Difference",Qn.OneHot="One-Hot",Xn.HAMMING,Xn.EUCLIDEAN,Xn.MANHATTAN,Xn.TANIMOTO,Xn.LEVENSTEIN,Xn.NEEDLEMAN_WUNSCH,Xn.MONOMER_CHEMICAL_DISTANCE,Xn.SOKAL,Xn.COSINE,Xn.ASYMMETRIC,Xn.Difference,Xn.OneHot,Xn.HAMMING,Xn.EUCLIDEAN,Xn.MANHATTAN,Xn.TANIMOTO,Xn.SOKAL,Xn.COSINE,Xn.ASYMMETRIC,Xn.LEVENSTEIN,Xn.NEEDLEMAN_WUNSCH,Xn.MONOMER_CHEMICAL_DISTANCE,Xn.Difference,Xn.OneHot,new Set([Xn.HAMMING,Xn.LEVENSTEIN,Xn.NEEDLEMAN_WUNSCH,Xn.MONOMER_CHEMICAL_DISTANCE,Xn.OneHot]),new Set([Xn.HAMMING,Xn.EUCLIDEAN,Xn.MANHATTAN,Xn.MONOMER_CHEMICAL_DISTANCE,Xn.LEVENSTEIN,Xn.NEEDLEMAN_WUNSCH,Xn.TANIMOTO,Xn.COSINE,Xn.SOKAL,Xn.ASYMMETRIC,Xn.OneHot,Xn.Difference]),new Set([Xn.EUCLIDEAN,Xn.MANHATTAN,Xn.OneHot,Xn.Difference]),new Set([Xn.EUCLIDEAN,Xn.MANHATTAN,Xn.Difference]),new Set([Xn.EUCLIDEAN,Xn.MANHATTAN,Xn.Difference]),new Set([Xn.TANIMOTO,Xn.COSINE,Xn.SOKAL,Xn.ASYMMETRIC]),function(t){t.ADD="ADD",t.SUB="SUB",t.MULT="MULT"}(Jn||(Jn={})),function(t){t.SQUARE="SQUARE",t.INVERSE="INVERSE",t.TRANSPOSE="TRANSPOSE",t.NORM="NORM",t.COLUMN_NORM="COLUMN_NORM"}(Zn||(Zn={})),function(t){t.SCALARMULT="SCALARMULT",t.SCALARADD="SCALARADD",t.SCALARPOW="SCALARPOW"}(te||(te={})),Object.prototype.toString,(ee=ne||(ne={})).UMAP="UMAP",ee.T_SNE="t-SNE";const re=2,oe="MCL_OPTIONS";o.SEMTYPE.MOLECULE,o.SEMTYPE.MACROMOLECULE;class ie{constructor(){this.epsilon={uiName:"Epsilon",value:.01,tooltip:"Minimum distance between cluster points",min:0,max:2,step:.005},this.minPts={uiName:"Minimum points",value:4,tooltip:"Minimum number of points in cluster",min:1,max:1e3,step:1}}}const se="bypassLargeDataWarning",ae="show-scatterplot-progress";var ue,le;(le=ue||(ue={})).EUCLIDEAN="EUCLIDEAN",le.MANHATTAN="MANHATTAN";const ce=rxjs;var fe=e(5072),he=e.n(fe),me=e(7825),de=e.n(me),pe=e(7659),ge=e.n(pe),ve=e(5056),we=e.n(ve),ye=e(540),Ee=e.n(ye),Ae=e(1113),Ce=e.n(Ae),_e=e(7939),be={};be.styleTagTransform=Ce(),be.setAttributes=we(),be.insert=ge().bind(null,"head"),be.domAPI=de(),be.insertStyleElement=Ee(),he()(_e.A,be),_e.A&&_e.A.locals&&_e.A.locals;class Ie{constructor(){this.learningRate={uiName:"Learninig rate",value:1,tooltip:"The initial learning rate for the embedding optimization"},this.nEpochs={uiName:"Epochs",value:0,tooltip:"The number of epochs to optimize embeddings via SGD. Computed automatically if set to 0"},this.nNeighbors={uiName:"Neighbors",value:15,tooltip:"The number of nearest neighbors to construct the fuzzy manifold"},this.spread={uiName:"Spread",value:1,tooltip:"The effective scale of embedded points, used with min distance to control \n the clumped/dispersed nature of the embedding"},this.minDist={uiName:"Min distance",value:.1,tooltip:"The effective minimum distance between embedded points, \n used with spread to control the clumped/dispersed nature of the embedding"},this.randomSeed={uiName:"Random seed",value:null,tooltip:"Random seed",type:"string"},this.useWebGPU={uiName:"Use WebGPU",value:!1,tooltip:"Use WebGPU for KNN computations",type:"boolean",disableTooltip:"WebGPU is not available"},zn().then((t=>{t?this.useWebGPU.tooltip+=` (${t})`:(this.useWebGPU.value=!1,this.useWebGPU.disable=!0)}))}}class Se{constructor(){this.epsilon={uiName:"Epsilon",value:10,tooltip:"Epsilon is learning rate"},this.perplexity={uiName:"Perplexity",value:30,tooltip:"Roughly how many neighbors each point influences"}}}class Ne{constructor(e={}){this.editorSettings={},this.columnOptEditors=[],this.columnOptEditorsRoot=n.div(),this.columnParamsEditorRoot=n.div(),this.weightsEditorRoot=n.div(),this.columnFunctionsMap={},this.methodsParams={[ne.UMAP]:new Ie,[ne.T_SNE]:new Se},this.dbScanParams=new ie,this.methodSettingsDivs=[],this.supportedFunctions={},this.methodSettingsAnchor=n.div(),this.plotEmbeddingsInput=n.boolInput("Plot embeddings",!0),this.aggregationMethodInput=n.choiceInput("Aggregation",ue.EUCLIDEAN,[ue.EUCLIDEAN,ue.MANHATTAN]),this.aggregationMethodInput.setTooltip("Aggregation method for combining distances between columns"),this.onColumnsChanged=new ce.Subject,this.editorSettings=e,this.columnParamsEditorAccordion=n.accordion(),o.Func.find({tags:["dim-red-preprocessing-function"]}).forEach((t=>{const n=t.options.get("supportedSemTypes")??"",e=t.friendlyName??t.name,r=t.options.get("supportedTypes")??"",o=t.options.get("supportedUnits")??"",i=t.options.get("supportedDistanceFunctions")??"";this.editorSettings.semtype&&!n.includes(this.editorSettings.semtype)||this.editorSettings.type&&!r.includes(this.editorSettings.type)||this.editorSettings.units&&!o.includes(this.editorSettings.units)||(this.supportedFunctions[e]={func:t,semTypes:n?n.split(","):[],types:r?r.split(","):[],units:o?o.split(","):[],distanceFunctions:i?i.split(","):[]})})),this.postProcessingEditor=new Oe,this.tableInput=n.tableInput("Table",t.shell.tv.dataFrame,t.shell.tables,(()=>{this.onTableInputChanged()})),this.onTableInputChanged();let r=!1;this.methodInput=n.choiceInput("Method",ne.UMAP,[ne.UMAP,ne.T_SNE],(()=>{r&&this.createAlgorithmSettingsDiv(this.methodsParams[this.methodInput.value])})),this.methodSettingsIcon=n.icons.settings((()=>{r=!r,r?this.createAlgorithmSettingsDiv(this.methodsParams[this.methodInput.value]):(this.methodSettingsDivs.forEach((t=>t.remove())),this.methodSettingsDivs=[])}),"Modify methods parameters"),this.methodInput.root.classList.add("ml-dim-reduction-settings-input"),this.methodInput.root.prepend(this.methodSettingsIcon),this.columnParamsEditorAccordion.addPane("Column options",(()=>this.columnOptEditorsRoot),!0,null,!1),this.columnParamsEditorAccordion.root.style.display="none",this.columnParamsEditorRoot.appendChild(this.columnParamsEditorAccordion.root),this.columnParamsEditorRoot.appendChild(this.weightsEditorRoot)}onTableInputChanged(){const t=this.tableInput.value;if(!t)return;n.empty(this.columnOptEditorsRoot),n.empty(this.weightsEditorRoot),this.columnFunctionsMap={},t.columns.toList().forEach((t=>{Object.keys(this.supportedFunctions).forEach((n=>{const e=this.supportedFunctions[n].semTypes,r=this.supportedFunctions[n].types,i=this.supportedFunctions[n].units,s=!e.length||t.semType&&e.includes(t.semType),a=!r.length||r.includes(t.type),u=!i.length||t.getTag(o.TAGS.UNITS)&&i.includes(t.getTag(o.TAGS.UNITS));s&&a&&u&&(this.columnFunctionsMap[t.name]||(this.columnFunctionsMap[t.name]=[]),this.columnFunctionsMap[t.name].push(n))}))}));const e=Object.keys(this.columnFunctionsMap),r=n.columnsInput("Columns",t,(()=>{this.onColumnsChanged.next(),n.empty(this.columnOptEditorsRoot),n.empty(this.weightsEditorRoot);const t=r.value;if(this.aggregationMethodInput.root.style.display=!t||t?.length<2?"none":"flex",!t||0===t.length)return void(this.columnParamsEditorAccordion.root.style.display="none");this.columnOptEditors=t.map((t=>new Me(t,this.columnFunctionsMap[t.name].map((t=>this.supportedFunctions[t])))));const e=n.divV([],{style:{maxHeight:"400px",overflow:"auto"}});this.columnOptEditors.forEach((t=>{e.appendChild(t.accordionDiv)}));const o=new Array(2*this.columnOptEditors.length).fill(null).map(((t,n)=>n%2==0?this.columnOptEditors[n/2].colOptEditors:[]));let i=0;const s=n.table(o,(t=>(i++,t&&t.length>0?t:[this.columnOptEditors[Math.floor((i-1)/2)].preprocessingFuncSettingsDiv=n.div([]),n.div(),n.div(),n.div()])),["Column","Encoding function","Similarity metric","Weight"]);this.columnOptEditors.forEach((t=>{t.preprocessingFuncSettingsDiv?.parentElement?.setAttribute("colspan","4"),t.preprocessingFuncSettingsDiv?.parentElement?.parentElement?.style?.setProperty("height","unset")})),this.columnOptEditors.length>0&&(this.columnParamsEditorAccordion.root.style.display="flex"),s.classList.add("ml-dim-reduction-column-editor-table-root"),this.columnOptEditorsRoot.appendChild(s)}),{available:e});r.fireChanged(),this.columnsInputRoot?(n.empty(this.columnsInputRoot),this.columnsInput=r,Array.from(this.columnsInput.root.children).forEach((t=>this.columnsInputRoot.appendChild(t)))):(this.columnsInputRoot=r.root,this.columnsInput=r)}createAlgorithmSettingsDiv(t){this.methodSettingsDivs.forEach((t=>t.remove())),this.methodSettingsDivs=[];const e=this.methodSettingsAnchor,r=e.parentElement;r&&Object.keys(t).forEach((o=>{const i=t[o],s="string"===i.type?n.stringInput(i.uiName,i.value??"",(()=>{i.value=s.value})):"boolean"===i.type?n.boolInput(i.uiName,i.value??!1,(()=>{i.value=s.value})):n.floatInput(i.uiName,i.value,(()=>{i.value=s.value}));i.disable?(s.enabled=!1,n.tooltip.bind(s.input??s.root,i.disableTooltip??"")):n.tooltip.bind(s.input??s.root,i.tooltip),r.insertBefore(s.root,e),this.methodSettingsDivs.push(s.root)}))}get algorithmOptions(){const t=this.methodsParams[this.methodInput.value],n={};return Object.keys(t).forEach((e=>{null!=t[e].value&&(n[e]=t[e].value)})),n}get dbScanOptions(){return{dbScanEpsilon:this.dbScanParams.epsilon.value??.01,dbScanMinPts:this.dbScanParams.minPts.value??4}}getEditor(){return n.div([this.tableInput.root,this.columnsInputRoot,this.columnParamsEditorRoot,this.aggregationMethodInput.root,this.methodInput.root,this.methodSettingsAnchor,this.plotEmbeddingsInput,this.postProcessingEditor.root],{style:{minWidth:"420px"},classes:"dim-reduction-dialog-form"})}getParams(){return{table:this.tableInput.value,columns:this.columnsInput.value,methodName:this.methodInput.value,preprocessingFunctions:this.columnOptEditors.map((t=>t.preProcessingFunction)),distanceMetrics:this.columnOptEditors.map((t=>t.similarityMetricInput.value)),weights:this.columnOptEditors.map((t=>t.weight??1)),options:{...this.algorithmOptions,...this.dbScanOptions,preprocessingFuncArgs:this.columnOptEditors.map((t=>t.preprocessingFunctionSettings))},plotEmbeddings:this.plotEmbeddingsInput.value,clusterEmbeddings:!1,postProcessingFunction:this.postProcessingEditor.postProcessingFunction,postProcessingFunctionArgs:this.postProcessingEditor.args,aggreaggregationMethod:this.aggregationMethodInput.value}}}class Me{constructor(t,e){this.preprocessingFuncSettingsDiv=n.div([]),this.preprocessingFunctionSettings={},this.editorDiv=n.div([]),this.hasExtraSettings=!0,this.functionsMap={},this.needsConfiguration=!1,this.weight=1,this.colOptEditors=[],this.weightInput=n.floatInput("Weight",1,(()=>{this.weight=this.weightInput.value??1})),this.column=t,this.supportedFunctions=e.sort(((t,n)=>0!==t.units.length&&0!==n.units.length||t.units.length===n.units.length?t.units.length!==n.units.length?t.units.length-n.units.length:0===t.semTypes.length||0===n.semTypes.length?n.semTypes.length-t.semTypes.length:t.semTypes.length!==n.semTypes.length?t.semTypes.length-n.semTypes.length:t.types.length-n.types.length:n.units.length-t.units.length)),this.supportedFunctions.forEach((t=>{this.functionsMap[Te(t.func)]=t.func})),this.preprocessingFunctionInput=n.choiceInput("Encoding function",Te(this.supportedFunctions[0].func),this.supportedFunctions.map((t=>Te(t.func))),(()=>{const t=this.preprocessingFunctionInput.value,e=this.functionsMap[t];this.preprocessingFunctionSettings={},this.hasExtraSettings=e.inputs.length>2;const o=this.supportedFunctions.find((n=>Te(n.func)===t));this.getSimilarityMetricInput(o),n.empty(this.preprocessingFuncSettingsDiv),r=!1,this.hasExtraSettings?this.preprocessingFuncSettingsIcon.style.display="flex":this.preprocessingFuncSettingsIcon.style.display="none"})),this.preprocessingFunctionInput.root.style.display="flex",this.createSettingsDiv(this.preprocessingFuncSettingsDiv,this.supportedFunctions[0].func).then((()=>{n.empty(this.preprocessingFuncSettingsDiv)})),this.getSimilarityMetricInput(this.supportedFunctions[0]),this.hasExtraSettings=this.supportedFunctions[0].func.inputs.length>2;let r=!1;this.preprocessingFuncSettingsIcon=n.icons.settings((async()=>{r=!r,r?await this.createSettingsDiv(this.preprocessingFuncSettingsDiv,this.functionsMap[this.preprocessingFunctionInput.value]):n.empty(this.preprocessingFuncSettingsDiv)}),"Modify encoding function parameters"),this.preprocessingFunctionInput.root.classList.add("ml-dim-reduction-settings-input"),this.preprocessingFunctionInput.root.prepend(this.preprocessingFuncSettingsIcon),this.hasExtraSettings?this.preprocessingFuncSettingsIcon.style.display="flex":this.preprocessingFuncSettingsIcon.style.display="none",this.needsConfiguration=!(e.length<2&&!this.hasExtraSettings&&e[0].distanceFunctions.length<2);const o=n.h3(this.column.name,{classes:"ml-dim-reduction-column-editor-column-title"});this.colOptEditors=[o,this.preprocessingFunctionInput.root,this.similarityMetricInputRoot,this.weightInput.root],n.tooltip.bind(o,this.column.name),this.colOptEditors.forEach((t=>t.classList.add("ml-dim-reduction-column-editor-input-root")));const i=n.divH(this.colOptEditors,{classes:"ml-dim-reduction-column-editor-root"});this.accordionDiv=n.divV([]),this.editorDiv.appendChild(i),this.editorDiv.appendChild(this.preprocessingFuncSettingsDiv),this.accordionDiv.appendChild(this.editorDiv)}getSimilarityMetricInput(t){const e=n.choiceInput("Similarity metric",t.distanceFunctions[0],t.distanceFunctions);this.similarityMetricInputRoot?(n.empty(this.similarityMetricInputRoot),this.similarityMetricInput=e,Array.from(this.similarityMetricInput.root.children).forEach((t=>this.similarityMetricInputRoot.appendChild(t)))):(this.similarityMetricInputRoot=e.root,this.similarityMetricInput=e)}get preProcessingFunction(){return this.functionsMap[this.preprocessingFunctionInput.value]}async createSettingsDiv(t,e){if(n.empty(t),e.inputs.length<3)return n.div();const r=e.prepare(),o=await r.buildEditor(n.div());for(let n=2;n<e.inputs.length;n++){const i=e.inputs[n],s=this.preprocessingFunctionSettings[i.name]||r.inputParams[e.inputs[n].name].value||i.defaultValue;s&&(this.preprocessingFunctionSettings[i.name]=s);const a=o.find((t=>t.property.name===i.name));a&&(null!==this.preprocessingFunctionSettings[i.name]&&void 0!==this.preprocessingFunctionSettings[i.name]&&(a.value=this.preprocessingFunctionSettings[i.name]),a.onChanged((()=>{this.preprocessingFunctionSettings[i.name]=a.value})),t.append(a.root))}return t.style.marginBottom="10px",t}}function Te(t){return t.friendlyName??t.name}class Oe{constructor(){this.postProcessingFunctionsMap={},this._root=n.div([]),this._postProcessingArgs={},this._argsElement=n.div([]),this._settingsOpened=!1,this._settingsIcon=n.icons.settings((async()=>{this._settingsOpened=!this._settingsOpened,this._settingsOpened?this._argsElement.style.display="block":this._argsElement.style.display="none"})),this._argsElement.style.display="none",o.Func.find({tags:["dim-red-postprocessing-function"]}).filter((t=>t.inputs.length>=2)).forEach((t=>{const n=t.friendlyName??t.name;this.postProcessingFunctionsMap[n]=t})),this.postProcessingFunctionsMap.None=null;const t=Object.keys(this.postProcessingFunctionsMap).find((t=>!!this.postProcessingFunctionsMap[t]?.options?.defaultPostProcessingFunction))??"None";this.postProcessingFunctionInput=n.choiceInput("Postprocessing",t,Object.keys(this.postProcessingFunctionsMap),(async()=>{await this.onFunctionChanged()}),{nullable:!1}),this.onFunctionChanged(),this.postProcessingFunctionInput.nullable=!1,this.postProcessingFunctionInput.classList.add("ml-dim-reduction-settings-input"),this.postProcessingFunctionInput.root.prepend(this._settingsIcon),this._root.appendChild(this.postProcessingFunctionInput.root),this._root.appendChild(this._argsElement)}get postProcessingFunction(){return this.postProcessingFunctionInput.value?this.postProcessingFunctionsMap[this.postProcessingFunctionInput.value]:null}async onFunctionChanged(){const t=this.postProcessingFunction;if(n.empty(this._argsElement),this._postProcessingArgs={},!t||t.inputs.length<3)return void(this._settingsIcon.style.display="none");this._settingsIcon.style.display="flex";const e=t.prepare(),r=await e.buildEditor(n.div());for(let n=2;n<t.inputs.length;n++){const o=t.inputs[n],i=this._postProcessingArgs[o.name]||e.inputParams[t.inputs[n].name].value||o.defaultValue;i&&(this._postProcessingArgs[o.name]=i);const s=r.find((t=>t.property.name===o.name));s&&(s.onChanged((()=>{this._postProcessingArgs[o.name]=s.value})),this._argsElement.append(s.root))}}get root(){return this._root}get args(){return this._postProcessingArgs}}const Pe="dimensionality-reducer-terminate-event",Le=t=>null==t;function xe(t,n){return`${n} (${t.length>4?`${t.length} columns`:t.map((t=>t.name)).join(", ")})`}var Re;!function(t){t.NO_DATAFRAME="No dataframe is opened",t.NO_MISSING_VALUES="No missing values",t.ONE_AVAILABLE_FEATURE="Not enough of feature columns to apply imputation using the KNN method",t.ONE_FEATURE_SELECTED="Imputation cannot be applied to",t.UNSUPPORTED_COLUMN_TYPE="Unsupported column type",t.UNSUPPORTED_IMPUTATION_STRATEGY="Unsupported imputation strategy",t.KNN_CANNOT_BE_APPLIED="KNN imputer cannot be applied: no columns to be used as features",t.KNN_NO_TARGET_COLUMNS="KNN imputer cannot be applied: no columns with missing values",t.KNN_NO_FEATURE_COLUMNS="KNN imputer cannot be applied: no feature columns",t.KNN_NOT_ENOUGH_OF_ROWS="KNN imputer cannot be applied: not enough of rows",t.KNN_IMPOSSIBLE_IMPUTATION="Imputation is impossible, no features can be used",t.INCORRECT_NEIGHBORS="Incorrect number of neighbors",t.KNN_FAILS="KNN IMPUTATION FAILS",t.CORE_ISSUE="Core issue",t.FAILED_TO_IMPUTE="Failed to impute",t.UNSUPPORTED_FILL_VALUE_TYPE="Unsupported fill value type",t.EMPTY_COLUMN="Column contains just null values",t.FAILS_TO_PREDICT_IMPUTATION_FAILS="Failed to predict imputation fails",t.WRONG_PREDICTIONS="wrong evaluation of KNN imputation fails"}(Re||(Re={}));const Fe="copy";var Ue;!function(t){t.KNN_IMPUTER="Impute",t.TABLE="Table",t.IN_PLACE="In-place",t.COLUMNS="Impute",t.FEATURES="Using",t.CANCEL="CANCEL",t.RUN="RUN",t.OK="OK",t.NEIGHBORS="Neighbors",t.DISTANCE="Distance",t.FILL="Fill",t.MARK="Mark",t.SIMPLE_IMPUTER="Simple impute",t.SETTINGS="Settings",t.KEEP_EMPTY="Keep empty"}(Ue||(Ue={}));const De="/help/transform/missing-values-imputation";var Be;!function(t){t.TARGET="Columns with missing values that must be filled",t.FEATURES="Columns with features to be used for determining the 'nearest' elements in the KNN method",t.IN_PLACE="Defines whether to use in-place imputation or add a new column without missing values",t.METRIC="Type of metric between the feature values",t.WEIGHT="Weight",t.NEIGHBORS="Neighbors count used in the KNN method",t.DISTANCE="Type of distance between elements with the specified features",t.METRIC_SETTINGS="Show additional options",t.FILL_FAILED_ITEMS="Impute missing values using a simple approach: mean, median or most frequent",t.MARK_FAILED_ITEMS="Mark missing values cells with a color",t.FILL_VALUE="Fill value",t.IMPUTATION_SETTINGS="Simple imputation settings",t.KEEP_EMPTY="Defines whether to keep empty missing values failed to be imputed OR fill them using simple imputation"}(Be||(Be={}));const ke=[o.COLUMN_TYPE.INT,o.COLUMN_TYPE.FLOAT,o.COLUMN_TYPE.STRING,o.COLUMN_TYPE.DATE_TIME,o.COLUMN_TYPE.QNUM];function Ve(t){switch(t.type){case o.COLUMN_TYPE.INT:return o.INT_NULL;case o.COLUMN_TYPE.FLOAT:case o.COLUMN_TYPE.QNUM:case o.COLUMN_TYPE.DATE_TIME:return o.FLOAT_NULL;case o.COLUMN_TYPE.STRING:return t.max;default:throw new Error(Re.UNSUPPORTED_COLUMN_TYPE)}}var Ge,qe,Ye;!function(t){t.ONE_HOT="One-hot",t.DIFFERENCE="Difference"}(Ge||(Ge={})),function(t){t.EUCLIDEAN="Euclidean",t.MANHATTAN="Manhattan"}(qe||(qe={})),function(t){t[t.WEIGHT=1]="WEIGHT",t[t.NEIGHBORS=4]="NEIGHBORS",t[t.IN_PLACE=1]="IN_PLACE",t[t.SELECTED=1]="SELECTED",t[t.KEEP_EMPTY=0]="KEEP_EMPTY"}(Ye||(Ye={}));const We=1;function $e(t,n,e){for(const t of n)if(!e.has(t))return!1;for(const r of t){const t=e.get(r);if(void 0===t)throw new Error(Re.FAILS_TO_PREDICT_IMPUTATION_FAILS);for(const r of t){let t=!0;for(const o of n){const n=e.get(o);if(void 0===n)throw new Error(Re.FAILS_TO_PREDICT_IMPUTATION_FAILS);if(!n.includes(r)){t=!1;break}}if(t)return!0}}return!1}var ze,He=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};function Ke(e){return He(this,void 0,void 0,(function*(){if(null!=e||(e=t.shell.t),null===e)return void t.shell.warning(Re.NO_DATAFRAME);const r=[],i=[],s=[];e.columns.toList().filter((t=>ke.includes(t.type))).forEach((t=>{s.push(t.name),t.stats.missingValueCount>0&&(r.push(t),i.push(t.name))}));const a=function(t){const n=new Map;for(const e of t){if(!ke.includes(e.type))throw new Error(Re.UNSUPPORTED_COLUMN_TYPE);if(0===e.stats.missingValueCount)continue;const t=[],r=Ve(e);e.getRawData().forEach(((n,e)=>{n===r&&t.push(e)})),n.set(e.name,t)}return n}(r);if(0===r.length)return void t.shell.info(Re.NO_MISSING_VALUES);if(1===s.length)return void t.shell.error(Re.ONE_AVAILABLE_FEATURE);let u=Ye.IN_PLACE>0;const l=n.input.bool(Ue.IN_PLACE,{value:u,onValueChanged:()=>{var t;u=null!==(t=l.value)&&void 0!==t&&t}});l.setTooltip(Be.IN_PLACE);let c=Ye.KEEP_EMPTY>0;const f=n.input.bool(Ue.KEEP_EMPTY,{value:c,onValueChanged:()=>{var t;c=null!==(t=f.value)&&void 0!==t&&t}});f.setTooltip(Be.KEEP_EMPTY);let h=Ye.NEIGHBORS;const m=n.input.int(Ue.NEIGHBORS,{value:h,onValueChanged:()=>{const t=m.value;null===t?m.value=h:t>=We?h=t:m.value=h}});m.setTooltip(Be.NEIGHBORS);let d=qe.EUCLIDEAN;const p=n.input.choice(Ue.DISTANCE,{value:d,items:[qe.EUCLIDEAN,qe.MANHATTAN],onValueChanged:()=>{var t;return d=null!==(t=p.value)&&void 0!==t?t:qe.EUCLIDEAN}});p.setTooltip(Be.DISTANCE);let g=r.map((t=>t.name));const v=n.input.columns(Ue.COLUMNS,{table:e,onValueChanged:()=>{g=v.value.map((t=>t.name)),A()},available:i,checked:i});v.setTooltip(Be.TARGET);let w=s;const y=n.input.columns(Ue.FEATURES,{table:e,onValueChanged:()=>{w=y.value.map((t=>t.name)),w.length>0?(A(),_.forEach(((t,n)=>t.hidden=!w.includes(n)))):E()},available:s,checked:s});y.setTooltip(Be.FEATURES);const E=()=>{I.getButton(Ue.RUN).disabled=!0,l.root.hidden=!0,f.root.hidden=!0,m.root.hidden=!0,N.hidden=!0,b.hidden=!0},A=()=>{I.getButton(Ue.RUN).disabled=!1,N.hidden=!1,l.root.hidden=!1,m.root.hidden=!1,p.root.hidden=!1,f.root.hidden=!$e(g,w,a),1===w.length&&g.forEach((n=>{w[0]===n&&(E(),t.shell.warning(`${Re.ONE_FEATURE_SELECTED} the column '${n}'`))}))},C=new Map,_=new Map,b=n.divV([]);b.style.overflow="auto",s.forEach((t=>{const r=function(t){switch(t){case o.COLUMN_TYPE.STRING:case o.COLUMN_TYPE.DATE_TIME:return{defaultWeight:Ye.WEIGHT,defaultMetric:Ge.ONE_HOT,availableMetrics:[Ge.ONE_HOT]};case o.COLUMN_TYPE.INT:case o.COLUMN_TYPE.FLOAT:case o.COLUMN_TYPE.QNUM:return{defaultWeight:Ye.WEIGHT,defaultMetric:Ge.DIFFERENCE,availableMetrics:[Ge.DIFFERENCE,Ge.ONE_HOT]};default:throw new Error(Re.UNSUPPORTED_COLUMN_TYPE)}}(e.col(t).type);C.set(t,{weight:r.defaultWeight,type:r.defaultMetric});const i=n.input.choice(t,{value:r.defaultMetric,items:r.availableMetrics,onValueChanged:()=>{var n,e;const o=null!==(n=C.get(t))&&void 0!==n?n:{weight:r.defaultWeight,type:r.defaultMetric};o.type=null!==(e=i.value)&&void 0!==e?e:r.defaultMetric,C.set(t,o)}});i.root.style.width="50%",i.setTooltip(Be.METRIC),i.root.hidden=!0;const s=o.Property.fromOptions({name:t,inputType:"Float",min:0,max:10,showSlider:!0,step:1}),a=n.input.forProperty(s);a.value=r.defaultWeight,a.onChanged((()=>{var n,e;const o=null!==(n=C.get(t))&&void 0!==n?n:{weight:r.defaultWeight,type:r.defaultMetric};o.weight=null!==(e=a.value)&&void 0!==e?e:r.defaultWeight,C.set(t,o)})),a.setTooltip(Be.WEIGHT);const u=n.divH([i.root,a.root]);_.set(t,u),b.append(u)}));const I=n.dialog({title:Ue.KNN_IMPUTER,helpUrl:De});t.shell.v.root.appendChild(I.root),b.hidden=!0,f.root.hidden=!$e(g,w,a);const S=n.icons.settings((()=>{b.hidden=!b.hidden}),Be.METRIC_SETTINGS),N=n.divH([p.root,S]);let M,T,O=!1;const P=new Promise(((t,n)=>{M=t,T=n}));return I.add(v).add(y).add(N).add(b).add(m).add(l).add(f).show().onOK((()=>{O=!0,I.close(),s.filter((t=>!w.includes(t))).forEach((t=>C.delete(t)));try{const n=function(n,e,r,i,s,a,u){if(a<We)throw new Error(Re.INCORRECT_NEIGHBORS);if(n.rowCount<2)throw new Error(Re.KNN_NOT_ENOUGH_OF_ROWS);if(0===e.length)throw new Error(Re.KNN_NO_TARGET_COLUMNS);if(0===r.size)throw new Error(Re.KNN_NO_FEATURE_COLUMNS);1===r.size&&e.forEach((t=>{if(r.has(t))throw new Error(`${Re.KNN_NO_FEATURE_COLUMNS} can be used for the column '${t}'`)})),e.forEach((t=>{if(!i.has(t))throw new Error(`${Re.KNN_FAILS}: ${Re.WRONG_PREDICTIONS}`)}));const l=n.columns;e.forEach((t=>{if(!ke.includes(l.byName(t).type))throw new Error(Re.UNSUPPORTED_COLUMN_TYPE)})),r.forEach(((t,e)=>{if(!ke.includes(n.getCol(e).type))throw new Error(Re.UNSUPPORTED_COLUMN_TYPE)}));const c=new Map;return e.forEach((e=>{const f=l.byName(e),h=Ve(f),m=f.length,d=f.getRawData(),p=new Uint16Array(f.categories.length),g=[],v=[],w=[],y=[];r.forEach(((t,n)=>{if(n!==f.name){const e=l.byName(n);switch(g.push(e.getRawData()),v.push(Ve(e)),t.type){case Ge.DIFFERENCE:w.push(((n,e)=>t.weight*Math.abs(n-e)));break;case Ge.ONE_HOT:w.push(((n,e)=>t.weight*(n===e?0:1)))}}}));const E=g.length,A=new Uint32Array(g.length),C=new Float32Array(g.length);let _=0;const b=new Array(a);let I=0,S=0,N=0,M=0,T=0;const O=(t,n)=>{A.forEach(((e,r)=>{C[r]=w[e](g[e][t],g[e][n])}))},P=s===qe.EUCLIDEAN?()=>{let t=0;for(let n=0;n<_;++n)t+=C[n]*C[n];return Math.sqrt(t)}:()=>{let t=0;for(let n=0;n<_;++n)t+=Math.abs(C[n]);return Math.sqrt(t)},L=t=>{if(d[t]===h)return!1;for(let n=0;n<_;++n)if(g[A[n]][t]===v[A[n]])return!1;return!0},x=t=>{if((t=>{_=0;for(let n=0;n<E;++n)g[n][t]!==v[n]&&(A[_]=n,++_)})(t),0===_)throw new Error(`${Re.KNN_IMPOSSIBLE_IMPUTATION}: the column "${f.name}", row ${t+1}`);I=0;for(let n=0;n<m;++n)if(L(n)&&n!==t){O(t,n);const e=P();if(I<a)b[I]={index:n,dist:e},++I;else{S=0,N=b[0].dist;for(let t=1;t<I;++t)N<b[t].dist&&(N=b[t].dist,S=t);e<N&&(b[S]={index:n,dist:e})}}if(0===I)throw new Error(`${Re.KNN_IMPOSSIBLE_IMPUTATION}: the column "${f.name}", row ${t+1}`);if(f.type===o.COLUMN_TYPE.STRING)return(()=>{p.forEach(((t,n,e)=>e[n]=0));let t=0;for(t=0;t<I;++t)++p[d[b[t].index]];let n=p[0],e=0;return p.forEach(((t,r)=>{t>n&&(n=t,e=r)})),e})();M=0;for(let t=0;t<I;++t)M+=d[b[t].index];return T=M/I,f.type===o.COLUMN_TYPE.INT?Math.round(T):T};if(u){for(const n of i.get(e))try{d[n]=x(n)}catch(e){y.push(n),e instanceof Error||t.shell.error(Re.CORE_ISSUE)}y.length>0&&c.set(e,y),f.set(0,f.get(0))}else{const r=f.clone();let o=1,s=`${e}(${Fe})`;for(;n.columns.contains(s);)s=`${e}(${Fe} ${o})`,++o;r.name=s;const a=r.getRawData();for(const n of i.get(e))try{a[n]=x(n)}catch(e){y.push(n),e instanceof Error||t.shell.error(Re.CORE_ISSUE)}y.length>0&&c.set(s,y),r.set(0,r.get(0)),n.columns.add(r)}})),c}(e,g,C,a,d,h,u);c||function(t,n){n.forEach(((n,e)=>{const r=t.col(e);if(null!==r){if(!ke.includes(r.type))throw new Error(Re.UNSUPPORTED_COLUMN_TYPE);const t=function(t){switch(t.type){case o.COLUMN_TYPE.STRING:case o.COLUMN_TYPE.DATE_TIME:return function(t){const n=Ve(t),e=t.getRawData(),r=e.length;for(let o=0;o<r;++o)if(e[o]!==n)return t.get(o);throw new Error(Re.EMPTY_COLUMN)}(t);case o.COLUMN_TYPE.INT:case o.COLUMN_TYPE.FLOAT:case o.COLUMN_TYPE.QNUM:return t.stats.avg;default:throw new Error(Re.UNSUPPORTED_COLUMN_TYPE)}}(r);n.forEach((n=>r.set(n,t)))}}))}(e,n),M()}catch(n){n instanceof Error?t.shell.error(`${Re.KNN_FAILS}: ${n.message}`):t.shell.error(`${Re.KNN_FAILS}: ${Re.CORE_ISSUE}`),T(n)}})).onClose.subscribe((()=>!O&&T())),P}))}class je extends Ne{constructor(t={}){super(t),this.similarityThresholdInput=n.intInput("Similarity Threshold",80),this.maxIterationsInput=n.intInput("Max Iterations",5),this.useWebGPUInput=n.boolInput("Use WebGPU",!1),this.inflateInput=n.floatInput("Inflation Factor",re),zn().then((t=>{t?this.useWebGPUInput.setTooltip(`Use webGPU for MCL calculation (${t})`):(this.useWebGPUInput.value=!1,this.useWebGPUInput.setTooltip("WebGPU is not available"),this.useWebGPUInput.enabled=!1)}))}getEditor(){return n.div([this.tableInput.root,this.columnsInputRoot,this.columnParamsEditorRoot,this.aggregationMethodInput.root,this.similarityThresholdInput.root,this.inflateInput.root,this.maxIterationsInput.root,this.useWebGPUInput.root],{style:{minWidth:"420px"},classes:"ui-form"})}get params(){return{table:this.tableInput.value,columns:this.columnsInput.value,methodName:this.methodInput.value,preprocessingFunctions:this.columnOptEditors.map((t=>t.preProcessingFunction)),distanceMetrics:this.columnOptEditors.map((t=>t.similarityMetricInput.value)),weights:this.columnOptEditors.map((t=>t.weight)),preprocessingFuncArgs:this.columnOptEditors.map((t=>t.preprocessingFunctionSettings)),aggreaggregationMethod:this.aggregationMethodInput.value,threshold:this.similarityThresholdInput.value,maxIterations:this.maxIterationsInput.value??5,useWebGPU:this.useWebGPUInput.value??!1,inflateFactor:this.inflateInput.value??re}}}class Xe{constructor(t,n=!1){if(this._length=0,this._version=0,this._updateLevel=0,this._selectedCount=0,this._selectedCountVersion=-1,this._selectedIndexesVersion=-1,this._versionedName="",this._versionedNameVersion=-1,this.SHRINK_THRESHOLD=256,"number"==typeof t){const e=t,r=Xe._createBuffer(e);if(n)for(let t=0;t<r.length;t++)r[t]=-1;this._data=r,this._length=e}else{if(!(t instanceof Uint32Array))throw new Error("Invalid constructor");this._data=t,this._length=n}}getRawData(){return this._data}assureGoez(t,n){if(t<0)throw new Error(`${n} should be greater than zero`)}assureInRange(t,n,e,r){if(t<n||t>e)throw new Error(`Argument ${r} (${t}) out of range (${n}, ${e})`)}copy(t,n,e){for(let r=0;r<e;r++)n[r]=t[r]}copyFrom(t){if(this._length!=t._length)throw new Error(`Lengths differ (${this._length} != ${t._length})`);this.copy(t._data,this._data,this.lengthInInts),this._version++}get length(){return this._length}get buffer(){return this._data}set buffer(t){this._data=t,this._version++}get version(){return this._version}set version(t){this._version=t}incrementVersion(t=!0){this._version++}get lengthInInts(){return Math.floor((this._length+31)/32)}get versionedName(){return this._version==this._versionedNameVersion?this._versionedName:""}set versionedName(t){this._versionedName=t,this._versionedNameVersion=this._version}get self(){return this}setLength(t){if(t<0)throw new Error("should be >= 0");if(t==this._length)return;const n=Math.floor((t+31)/32);if(n>this._data.length||n+this.SHRINK_THRESHOLD<this._data.length){const t=new Uint32Array(n);this.copy(this._data,t,n>this._data.length?this._data.length:n),this._data=t}t>this._length&&(this._length%32>0&&(this._data[this.lengthInInts-1]&=(1<<(this._length%32&31))-1),this._data.fill(0,this.lengthInInts,n)),this._length=t,this._version++}static fromAnd(t,n){if(t._length!=n._length)throw new Error(`Lengths differ (${t._length} != ${n._length})`);const e=new Xe(t._length);e._length=t._length,e._data=Xe._createBuffer(e._length),e._version=0;const r=t.lengthInInts;for(let o=0;o<r;o++)e._data[o]=t._data[o]&n._data[o];return e}static _createBuffer(t){return new Uint32Array(Math.floor((t+31)/32))}static fromValues(t){const n=new Xe(t.length);n._version=0;for(let e=0;e<n._length;e++)t[e]&&(n._data[Math.floor(e/32)]|=1<<(e%32&31));return n}static fromSeq(t,n){const e=new Xe(t);for(let r=0;r<t;++r)e.setBit(r,n(r));return e._version=0,e}static fromString(t){return Xe.fromSeq(t.length,(n=>"1"==t.charAt(n)))}static fromUint32Array(t,n){const e=new Xe(t);return e._data=n,e}static fromBytes(t){const n=t.length,e=new Xe(8*n);e._data=new Uint32Array(Math.floor((n+3)/4)),e._length=8*n;let r=0,o=0;for(;n-o>=4;)e._data[r++]=255&t[o]|(255&t[o+1])<<8|(255&t[o+2])<<16|(255&t[o+3])<<24,o+=4;return n-o==3&&(e._data[r]=(255&t[o+2])<<16),n-o==2&&(e._data[r]|=(255&t[o+1])<<8),n-o==1&&(e._data[r]|=255&t[o]),e._version=0,e}toString(){return`${this._length} bits, ${this.countBits(!0)} set`}equals(t){if(this==t)return!0;if(null==t)return!1;if(this._length!=t._length)return!1;if(0==this._length)return!0;for(let n=0;n<this._data.length-1;n++)if(this._data[n]!=t._data[n])return!1;for(let n=8*(this._data.length-1);n<this._length;n++)if(this.getBit(n)!=t.getBit(n))return!1;return!0}clone(){const t=new Xe(0,!1);return t._data=Uint32Array.from(this._data),t._length=this._length,t._version=this._version,t}init(t,n){this.setAll(!1,!1);for(let n=0;n<this._length;n++)t(n)&&(this._data[Math.floor(n/32)]|=1<<(n%32&31));return this.incrementVersion(n),this}invert(t=!0){for(let t=0;t<this._data.length;t++)this._data[t]^=-1;this.incrementVersion(t)}setAll(t,n=!1){const e=t?-1:0,r=this.lengthInInts;for(let t=0;t<r;t++)this._data[t]=e;this.incrementVersion(n)}setIndexes(t,n=!0,e=!0,r=!0){e&&this.setAll(!n,!1);for(const e of t)this.setFast(e,n);this.incrementVersion(r)}everyIndex(t,n=!0){for(const e of t)if(this.getBit(e)!=n)return!1;return!0}anyIndex(t,n=!0){for(const e of t)if(this.getBit(e)==n)return!0;return!1}setWhere(t,n=!0,e=!0,r=!0,o=!0){if(e&&o&&this.setAll(!n,!1),o)for(let e=0;e<this._length;e++)t(e)&&this.setFast(e,n);else for(let e=0;e<this._length;e++)this.setFast(e,t(e)?n:!n);this.incrementVersion(r)}getRange(t,n){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(n,0,this._length,"to");const e=[];for(let r=t;r<n;++r)e.push(this.getBit(r));return Xe.fromValues(e)}getRangeAsList(t,n){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(n,0,this._length,"to");const e=[];for(let r=t;r<n;++r)e.push(this.getBit(r));return e}setRange(t,n,e,r=!0){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(n,0,this._length-1,"to");const o=Math.min(t,n),i=Math.max(t,n);if(e)for(let t=o;t<=i;t++)this.setTrue(t);else for(let t=o;t<=i;t++)this.setFalse(t);return this.incrementVersion(r),this}setRandom(t,n,e=!0){if(t<0||t>this._length)throw new Error("n must be >= 0 && <= Count");t>this._length/2&&this.setRandom(this._length-t,!n),this.setAll(!n);for(let e=0;e<t;){const t=Math.floor(Math.random()*this._length);this.getBit(t)!=n&&(this.setFast(t,n),e++)}this.incrementVersion(e)}and(t,n=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let n=0,e=this.lengthInInts;n<e;n++)this._data[n]&=t._data[n];return this.incrementVersion(n),this}andNot(t,n=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");const e=this.lengthInInts;for(let n=0;n<e;n++)this._data[n]&=~t._data[n];return this.incrementVersion(n),this}notAnd(t,n=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let n=0,e=this.lengthInInts;n<e;n++)this._data[n]=~this._data[n]&t._data[n];return this.incrementVersion(n),this}not(t=!0){for(let t=0,n=this.lengthInInts;t<n;t++)this._data[t]=~this._data[t];return this.incrementVersion(t),this}or(t,n=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let n=0,e=this.lengthInInts;n<e;n++)this._data[n]|=t._data[n];return this.incrementVersion(n),this}xor(t,n=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let n=0,e=this.lengthInInts;n<e;n++)this._data[n]^=t._data[n];return this.incrementVersion(n),this}insertAt(t,n,e=!1){if(this.assureInRange(t,0,this._length,"pos"),0==n)return;const r=this._length;this.setLength(this._length+n);for(let e=r-1;e>=t;e--)this.setBit(e+n,this.getBit(e));for(let r=t;r<t+n;r++)this.setBit(r,e)}removeAt(t,n=1){if(n<0)throw new Error("n cannot be negative");if(this.assureInRange(t,0,this._length-n,"pos"),this.contains(!0))for(let e=t;e<this._length-n;e++)this.setBit(e,this.getBit(e+n));this.setLength(this._length-n)}removeByMask(t,n=!0){if(this._length!=t.length)throw new Error("length != mask.length");if(t==this)this.setLength(t.countBits(!n)),this.setAll(!n);else{let e=0;for(let r=-1;-1!=(r=t.findNext(r,!n));)this.setFast(e++,this.getBit(r));this._length=e,this._version++}return this}getBit(t){return!!(this._data[Math.floor(t/32)]&1<<(31&t))}setBit(t,n,e=!0){this.setFast(t,n),this._version++}setFast(t,n){n?this._data[Math.floor(t/32)]|=1<<(31&t):this._data[Math.floor(t/32)]&=~(1<<(31&t))}setTrue(t){this._data[Math.floor(t/32)]|=1<<(31&t)}setFalse(t){this._data[Math.floor(t/32)]&=~(1<<(31&t))}trueCount(){return this.countBits(!0)}falseCount(){return this.countBits(!1)}countBits(t){if(0==this._length)return 0;if(this._selectedCountVersion!=this._version){this._selectedCount=0;const t=this.lengthInInts;let n=0;for(;n<t-1;n++)for(let t=this._data[n];0!=t;t>>>=8)this._selectedCount+=Xe._onBitCount[255&t];let e=this._data[n];const r=31&this._length;for(0!=r&&(e&=~(4294967295<<r));0!=e;e>>>=8)this._selectedCount+=Xe._onBitCount[255&e];this._selectedCountVersion=this._version}return t?this._selectedCount:this._length-this._selectedCount}countWhere(t){let n=0;if(this.trueCount()==this._length)for(let e=0;e<this._length;e++)n+=t(e)?1:0;else for(let e=-1;-1!=(e=this.findNext(e,!0));)n+=t(e)?1:0;return n}andWithCountBits(t,n){if(0==this._length)return 0;let e=0;const r=this.lengthInInts;let o=0;for(;o<r-1;o++)for(let n=this._data[o]&t._data[o];0!=n;n>>>=8)e+=Xe._onBitCount[255&n];let i=this._data[o]&t._data[o];const s=31&this._length;for(0!=s&&(i&=~(4294967295<<s));0!=i;i>>>=8)e+=Xe._onBitCount[255&i];return n?e:this._length-e}clear(){this.setLength(0)}contains(t){return this.findNext(-1,t)>=0}get allTrue(){return this.countBits(!0)==this._length}get allFalse(){return this.countBits(!1)==this._length}get anyTrue(){return this.countBits(!0)>0}get anyFalse(){return this.countBits(!1)>0}findNext(t,n=!0){if(this.assureInRange(t,-1,this._length,"index"),t>=this._length-1)return-1;let e=31&(t=t<0?0:t+1);const r=this.lengthInInts;for(let o=Math.floor(t/32);o<r;o++){let r=n?this._data[o]:~this._data[o];if(0!=e)r&=4294967295<<e&4294967295,e=0;else if(!n&&-4294967296==r)continue;for(let n=0;0!=r;n+=8,r>>>=8){const e=Xe._firstOnBit[255&r];if(e>=0)return(t=e+32*o+n)>=this._length?-1:t}}return-1}findPrev(t,n=!0){if(0==t)return-1;this.assureInRange(t,-1,this._length,"index");let e=1+(t=t<0?this._length-1:t-1)&31;for(let r=Math.floor(t/32);r>=0;r--){let t=n?this._data[r]:~this._data[r];0!=e&&(t&=~(4294967295<<e),e=0);for(let n=24;0!=t;n-=8,t<<=8){const e=Xe._lastOnBit[t>>>24];if(e>=0)return e+32*r+n}}return-1}}Xe._onBitCount=Int8Array.from([0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8]),Xe._firstOnBit=Int8Array.from([-1,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0]),Xe._lastOnBit=Int8Array.from([-1,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]),function(t){t.none="none",t.bold="bold",t.dashed="dashed"}(ze||(ze={}));class Qe{get currentLineId(){return this._currentLineIdx}set currentLineId(t){t!==this._currentLineIdx&&(this._currentLineIdx=t,this.sp.render(this.ctx))}set linesToRender(t){this.updateLines(t),this.sp.render(this.ctx)}set linesVisibility(t){this.visibility=t,this.sp.render(this.ctx)}constructor(t,n,e,r,o=ze.none){var i;this._currentLineIdx=-1,this.lineClicked=new ce.Subject,this.lineHover=new ce.Subject,this.mouseOverLineId=-1,this.arrowWidth=15,this.sp=t,this.xAxisCol=this.sp.dataFrame.columns.byName(n),this.yAxisCol=this.sp.dataFrame.columns.byName(e),this.canvas=this.sp.getInfo().canvas,this.ctx=this.canvas.getContext("2d"),this.currentLineStyle=o,this.updateLines(r),this.visibility=null!==(i=r.visibility)&&void 0!==i?i:new Xe(this.lines.from.length),r.visibility||this.visibility.setAll(!0,!1),r.arrowSize&&(this.arrowWidth=r.arrowSize),this.canvas.onmousedown=t=>{-1!==this.mouseOverLineId&&this.lineClicked.next({x:t.clientX,y:t.clientY,id:this.mouseOverLineId,event:t})},this.canvas.onmousemove=t=>{this.mouseOverLineId=this.checkCoordsOnLine(t.offsetX,t.offsetY),-1!==this.mouseOverLineId&&this.lineHover.next({x:t.clientX,y:t.clientY,id:this.mouseOverLineId,event:t})},t.onEvent("d4-before-draw-scene").subscribe((t=>{this.renderLines()}))}updateLines(t){this.lines=t,this.multipleLinesCounts=new Uint8Array(this.lines.from.length),t.skipMultiLineCalculation?this.multipleLinesCounts.fill(0):this.createMultiLinesIndices()}renderLines(){var t,n,e,r,o,i,s,a,u,l,c,f,h;const m=this.sp.getOptions().look,d=this.lines.colors||this.lines.width||this.lines.opacities||this.lines.drawArrowsArr;d||(this.ctx.lineWidth=null!==(t=this.lines.width)&&void 0!==t?t:1,this.ctx.strokeStyle=`rgba(${null!==(n=this.lines.color)&&void 0!==n?n:"0,128,0"},${null!==(e=this.lines.opacity)&&void 0!==e?e:1})`);const p=m.sizeColumnName?this.sp.dataFrame.col(m.sizeColumnName):null,g=this.sp.dataFrame.filter;for(let t=0;t<this.lines.from.length;t++)if(g.get(this.lines.from[t])&&g.get(this.lines.to[t])&&this.visibility.getBit(t)){let n=0;const{sizeFrom:e,sizeTo:g}=this.getMarkersSizes(m,p,t),v=this.sp.worldToScreen(this.xAxisCol.get(this.lines.from[t]),this.yAxisCol.get(this.lines.from[t]));let w=null==v?void 0:v.x,y=null==v?void 0:v.y;const E=this.sp.worldToScreen(this.xAxisCol.get(this.lines.to[t]),this.yAxisCol.get(this.lines.to[t]));let A=null==E?void 0:E.x,C=null==E?void 0:E.y;const _=Math.min(this.sp.viewBox.width,this.sp.viewBox.height);if(this.ctx.beginPath(),w&&y&&A&&C&&Math.hypot(A-w,C-y)/_>.01){if(d){const n=(null===(r=this.lines.colors)||void 0===r?void 0:r[t])?null===(o=this.lines.colors)||void 0===o?void 0:o[t]:"0,128,0",e=(null===(i=this.lines.opacities)||void 0===i?void 0:i[t])?null===(s=this.lines.opacities)||void 0===s?void 0:s[t]:1;this.ctx.strokeStyle=`rgba(${n},${e})`,this.ctx.lineWidth=(null===(a=this.lines.widths)||void 0===a?void 0:a[t])?null===(u=this.lines.widths)||void 0===u?void 0:u[t]:1}t===this._currentLineIdx&&this.toggleCurrentLineStyle(!0);const m=this.multipleLinesCounts[t];let p=null;if(m){n=this.getLineLength(w,y,A,C);const r=this.getPointOnDistance(w,y,A,C,g,n),o=this.getPointOnDistance(A,C,w,y,e,n);w=r.x,y=r.y,A=o.x,C=o.y,p=this.lines.from[t]>this.lines.to[t]?this.findControlPoint(m,w,y,A,C,t):this.findControlPoint(m,A,C,w,y,t),this.ctx.moveTo(w,y),this.ctx.quadraticCurveTo(p.x,p.y,A,C)}else this.ctx.moveTo(w,y),this.ctx.lineTo(A,C);if((null!==(l=this.lines.drawArrows)&&void 0!==l?l:null===(c=this.lines.drawArrowsArr)||void 0===c?void 0:c.getBit(t))&&(n||(n=this.getLineLength(w,y,A,C)),n>this.arrowWidth)){const t=m?null:this.getPointOnDistance(w,y,A,C,g,n),e=m?p.x:w,r=m?p.y:y;this.canvasArrow(this.ctx,null!==(f=null==t?void 0:t.x)&&void 0!==f?f:w,null!==(h=null==t?void 0:t.y)&&void 0!==h?h:y,e,r)}this.ctx.stroke(),this.ctx.closePath(),t===this._currentLineIdx&&this.toggleCurrentLineStyle(!1)}}this.fillLeftBottomRect()}toggleCurrentLineStyle(t){switch(this.currentLineStyle){case ze.bold:t?this.ctx.lineWidth+=2:this.ctx.lineWidth-=2;break;case ze.dashed:t?this.ctx.setLineDash([5,5]):this.ctx.setLineDash([]);break;default:return}}getMarkersSizes(t,n,e){let r=3,o=3;return n?(r=(t.markerMinSize+(t.markerMaxSize-t.markerMinSize)*n.scale(this.lines.from[e]))/2,o=(t.markerMinSize+(t.markerMaxSize-t.markerMinSize)*n.scale(this.lines.to[e]))/2):t.markerDefaultSize&&(r=t.markerDefaultSize/2,o=t.markerDefaultSize/2),{sizeFrom:r,sizeTo:o}}fillLeftBottomRect(){const t=new Path2D;t.rect(this.sp.yAxisBox.minX,this.sp.yAxisBox.maxY,this.sp.yAxisBox.width,this.sp.xAxisBox.height),this.ctx.fillStyle="white",this.ctx.beginPath(),this.ctx.fill(t),this.ctx.closePath()}createMultiLinesIndices(){const t=new Xe(this.lines.from.length);t.setAll(!0);for(let n=-1;-1!==(n=t.findNext(n));){const e=n,r=this.lines.from[e],o=this.lines.to[e];let i=1;for(let e=n;-1!==(e=t.findNext(e));){const n=this.lines.from[e],s=this.lines.to[e];(n===r&&s===o||s===r&&n===o)&&(this.multipleLinesCounts[e]=++i,t.setBit(e,!1,!1))}i>1&&(this.multipleLinesCounts[e]=1),t.setBit(n,!1,!1)}}checkCoordsOnLine(t,n){let e=-1,r=null,o=null;const i=this.sp.getOptions().look,s=i.sizeColumnName?this.sp.dataFrame.col(i.sizeColumnName):null,a=this.sp.dataFrame.filter;for(let u=0;u<this.lines.from.length;u++)if(a.get(this.lines.from[u])&&a.get(this.lines.to[u])&&this.visibility.getBit(u)){const{sizeFrom:a,sizeTo:l}=this.getMarkersSizes(i,s,u),c=this.sp.worldToScreen(this.xAxisCol.get(this.lines.from[u]),this.yAxisCol.get(this.lines.from[u])),f=this.sp.worldToScreen(this.xAxisCol.get(this.lines.to[u]),this.yAxisCol.get(this.lines.to[u]));if(this.multipleLinesCounts[u]){const e=this.getLineLength(c.x,c.y,f.x,f.y),r=this.getPointOnDistance(c.x,c.y,f.x,f.y,l,e),i=this.getPointOnDistance(f.x,f.y,null==c?void 0:c.x,null==c?void 0:c.y,a,e),s=this.lines.from[u]>this.lines.to[u]?this.findControlPoint(this.multipleLinesCounts[u],r.x,r.y,i.x,i.y,u):this.findControlPoint(this.multipleLinesCounts[u],i.x,i.y,r.x,r.y,u);o=this.calculateDistToCurveLine(u,t,n,r,i,s)}else o=this.calculateDistToStraightLine(t,n,c,f);(!r&&null!==o&&o<5||r&&null!==o&&o<r)&&(r=o,e=u)}return e}calculateDistToStraightLine(t,n,e,r){const o=Math.min(e.x,r.x),i=Math.max(e.x,r.x),s=Math.min(e.y,r.y),a=Math.max(e.y,r.y);return t>=o-2&&t<=i+2&&n>=s-2&&n<=a+2?this.distToStraightLineSegment(t,n,e,r):null}distToStraightLineSegment(t,n,e,r){const o=(t,n,e,r)=>Math.pow(t-e,2)+Math.pow(n-r,2),i=o(e.x,e.y,r.x,r.y);if(0==i)return o(t,n,e.x,e.y);let s=((t-e.x)*(r.x-e.x)+(n-e.y)*(r.y-e.y))/i;return s=Math.max(0,Math.min(1,s)),o(t,n,e.x+s*(r.x-e.x),e.y+s*(r.y-e.y))}calculateDistToCurveLine(t,n,e,r,o,i){const s=Math.min(r.x,o.x,i.x),a=Math.max(r.x,o.x,i.x),u=Math.min(r.y,o.y,i.y),l=Math.max(r.y,o.y,i.y);if(n>=s-2&&n<=a+2&&e>=u-2&&e<=l+2){const t=a-s,c=l-u;return this.calculateDistToCurveInRect(n,e,r,i,o,t,c)}return null}calculateDistToCurveInRect(t,n,e,r,o,i,s){const a=Math.floor((i+s)/3),u=1/a,l=new Uint32Array(a),c=new Uint32Array(a),f=new Uint32Array(a);let h=null;const m=new Xe(a);for(let i=0;i<l.length;i++){const s=i*u,a=Math.pow(1-s,2)*e.x+2*s*(1-s)*r.x+Math.pow(s,2)*o.x,m=Math.pow(1-s,2)*e.y+2*s*(1-s)*r.y+Math.pow(s,2)*o.y,d=Math.abs(t-a),p=Math.abs(n-m),g=d+p;(!h||h>g)&&(h=g),f[i]=Math.max(d,p),l[i]=a,c[i]=m}for(let t=0;t<l.length;t++)f[t]<h&&m.setBit(t,!0,!1);let d=null;for(let e=-1;-1!==(e=m.findNext(e));){const r=Math.hypot(l[e]-t,c[e]-n);(!d||d>r)&&(d=r)}return d}getLineLength(t,n,e,r){return Math.sqrt(Math.pow(e-t,2)+Math.pow(r-n,2))}getPointOnDistance(t,n,e,r,i,s){const a=e-i*((e-t)/s),u=r-i*((r-n)/s);return new o.Point(a,u)}findControlPoint(t,n,e,r,i,s){const a=n+(r-n)/2,u=e+(i-e)/2;let l=a-n,c=u-e;const f=Math.sqrt(l*l+c*c);l/=f,c/=f;const h=50*Math.ceil(t/2);return t%2==0?new o.Point(a+h/2*c,u-h/2*l):new o.Point(a-h/2*c,u+h/2*l)}canvasArrow(t,n,e,r,o){const i=Math.atan2(r-n,o-e)+Math.PI;t.moveTo(n-this.arrowWidth*Math.sin(i-Math.PI/10),e-this.arrowWidth*Math.cos(i-Math.PI/10)),t.lineTo(n,e),t.lineTo(n-this.arrowWidth*Math.sin(i+Math.PI/10),e-this.arrowWidth*Math.cos(i+Math.PI/10))}}var Je=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};function Ze(t,n){const e=t.length;if(e!==n.length-1)throw new Error("Incorrect parameters count");const r=t.byIndex(0),i=r.length,s=new Float32Array(i);let a=r.getRawData();const u=n[e];let l=n[0];for(let t=0;t<i;++t)s[t]=u+l*a[t];for(let r=1;r<e;++r){a=t.byIndex(r).getRawData(),l=n[r];for(let t=0;t<i;++t)s[t]+=l*a[t]}return o.Column.fromFloat32Array(t.getUnusedName("prediction"),s,i)}const tr=(t,n)=>((t,n)=>8*n*(t+1)>=268435456)(t,n)||t>=1e3?{toApplyPLS:!0,components:10}:n>=1e6?{toApplyPLS:!0,components:Math.min(10,t)}:n<=t?{toApplyPLS:!0,components:Math.min(10,n)}:{toApplyPLS:!1,components:10};var nr;!function(t){t[t.MAX_SAMLPES=1e5]="MAX_SAMLPES",t[t.MAX_FEATURES=1e3]="MAX_FEATURES"}(nr||(nr={}));class er{static isApplicable(t,n){for(const n of t)if(!n.matches("numerical"))return!1;return!!n.matches("numerical")}static isInteractive(t,n){return t.length<=nr.MAX_FEATURES&&n.length<=nr.MAX_SAMLPES}constructor(t){if(this.specn=null,t)try{const n=new Uint32Array(t.buffer,0,2),e=n[0],r=n[1],i=new Uint8Array(t.buffer,8,e),s=o.DataFrame.fromByteArray(i),a=s.rowCount,u=s.columns,l=u.length,c=new Uint8Array(t.buffer,8+e,r),f=o.DataFrame.fromByteArray(c);if(l<3)throw new Error("incorrect columns count");const h=u.byName(pn.FEATURES).toList(),m=new Float32Array(a);m.set(u.byName(pn.REGR_COEFS).getRawData());const d=l-2,p=new Array(d);for(let t=0;t<d;++t)p[t]=new Float32Array(a),p[t].set(u.byIndex(t+2).getRawData());this.specn={params:m,loadings:p,names:h,dim:a-1,components:l-2,scores:f}}catch(t){throw new Error(`Failed to load model: ${t instanceof Error?t.message:"the platform issue"}`)}}fit(t,n,e){return r=this,i=void 0,a=function*(){const r=yield Fn({table:o.DataFrame.fromColumns([n]),features:t,predict:n,components:e,names:void 0}),i=t.names();i.push("_");const s=this.getRegrCoeffs(t,n,r.regressionCoefficients),a=this.getLoadings(e,r.xLoadings);this.specn={names:i,params:s,loadings:a,components:e,dim:t.length,scores:this.getScoresDf(r)},this.computeExplVars(n.length,e,r.yLoadings)},new((s=void 0)||(s=Promise))((function(t,n){function e(t){try{u(a.next(t))}catch(t){n(t)}}function o(t){try{u(a.throw(t))}catch(t){n(t)}}function u(n){var r;n.done?t(n.value):(r=n.value,r instanceof s?r:new s((function(t){t(r)}))).then(e,o)}u((a=a.apply(r,i||[])).next())}));var r,i,s,a}getLoadings(t,n){const e=Array(t),r=n[0].length+1;for(let o=0;o<t;++o)e[o]=new Float32Array(r),e[o].set(n[o].getRawData());return e}getRegrCoeffs(t,n,e){const r=t.length,o=new Float32Array(r+1),i=e.getRawData();let s=0;for(let n=0;n<r;++n)o[n]=i[n],s+=i[n]*t.byIndex(n).stats.avg;return o[r]=n.stats.avg-s,o}computeExplVars(t,n,e){if(null===this.specn)throw new Error("Failed to compute explained variances");const r=e.getRawData(),o=this.specn.loadings[0].length-1;let i=Math.pow(r[0],2)/t;this.specn.loadings[0][o]=i;for(let e=1;e<n;++e)i+=Math.pow(r[e],2)/t,this.specn.loadings[e][o]=i}toBytes(){if(null===this.specn)throw new Error("Failed to pack untrained model");const t=o.DataFrame.fromColumns([o.Column.fromStrings(pn.FEATURES,this.specn.names),o.Column.fromFloat32Array(pn.REGR_COEFS,this.specn.params)]);this.specn.loadings.forEach(((n,e)=>t.columns.add(o.Column.fromFloat32Array(`${pn.XLOADING}${e+1}`,n))));const n=t.toByteArray(),e=n.length,r=this.specn.scores.toByteArray(),i=r.length,s=e+i+8,a=new Uint8Array(64*(Math.ceil(s/64)+1)),u=new Uint32Array(a.buffer,0,2);return u[0]=e,u[1]=i,a.set(n,8),a.set(r,8+e),a}predict(t){if(null===this.specn)throw new Error("Predicting failed: model is not trained");return Ze(t,this.specn.params)}loadingsParamsViewers(){if(null===this.specn)throw new Error("Failed to create loadings and parameters viewers: untrained model");const t=[],n=this.specn.dim,e=o.DataFrame.fromColumns([o.Column.fromStrings(pn.FEATURES,this.specn.names.slice(0,-1)),o.Column.fromFloat32Array(pn.REGR_COEFS,this.specn.params,n)]),r=e.columns,i=r.length,s=this.specn.components;return this.specn.loadings.forEach(((t,r)=>e.columns.add(o.Column.fromFloat32Array(`${pn.XLOADING}${r+1}`,t,n)))),t.push(o.Viewer.scatterPlot(e,{title:pn.LOADINGS,xColumnName:r.byIndex(i).name,yColumnName:r.byIndex(i+(s>1?1:0)).name,markerType:o.MARKER_TYPE.CIRCLE,labels:pn.FEATURES,help:vn.LOADINGS})),t.push(o.Viewer.barChart(e,{title:pn.REGR_COEFS,splitColumnName:pn.FEATURES,valueColumnName:pn.REGR_COEFS,valueAggrType:o.AGG.AVG,help:vn.COEFFS,showValueSelector:!1,showStackSelector:!1})),t}explVarsViewer(){if(null===this.specn)throw new Error("Failed to create exaplained variances viewer: untrained model");const t=this.specn.components,n=this.specn.dim,e=new Array(t),r=new Float32Array(t);e[0]=`${yn.COMP} 1`,r[0]=this.specn.loadings[0][n];for(let o=1;o<t;++o)e[o]=`${yn.COMPS} ${o+1}`,r[o]=this.specn.loadings[o][n];return o.Viewer.barChart(o.DataFrame.fromColumns([o.Column.fromStrings(yn.COMPS,e),o.Column.fromFloat32Array(pn.EXPL_VAR,r)]),{title:pn.EXPL_VAR,splitColumnName:yn.COMPS,valueColumnName:pn.EXPL_VAR,valueAggrType:o.AGG.AVG,help:vn.EXPL_VARS,showCategorySelector:!1,showStackSelector:!1,showValueSelector:!1})}viewers(){if(null===this.specn)throw new Error("Failed to create viewers: untrained model");const t=this.loadingsParamsViewers();return t.push(this.explVarsViewer(),this.getScoresScatter()),t}getScoresDf(t){const n=t.tScores,e=t.uScores;return n.forEach(((t,n)=>t.name=`${pn.XSCORE}${n+1}`)),e.forEach(((t,n)=>t.name=`${pn.YSCORE}${n+1}`)),o.DataFrame.fromColumns(n.concat(e))}getScoresScatter(){if(null===this.specn)throw new Error("Failed to create scores scatter: untrained model");const t=this.specn.scores.columns.names(),n=o.Viewer.scatterPlot(this.specn.scores,{title:pn.SCORES,xColumnName:t[0],yColumnName:t[1],markerType:o.MARKER_TYPE.CIRCLE,help:vn.SCORES,showViewerFormulaLines:!0});return n.meta.formulaLines.addAll(Rn(t)),n}}var rr=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};const or="Avg-s",ir="Stddev-s";var sr;!function(t){t[t.MAX_SAMLPES=5e4]="MAX_SAMLPES",t[t.MAX_FEATURES=100]="MAX_FEATURES"}(sr||(sr={}));class ar{static isApplicable(t,n){for(const n of t)if(!n.matches("numerical"))return!1;return n.type===o.COLUMN_TYPE.STRING}static isInteractive(t,n){return t.length<=sr.MAX_FEATURES&&n.length<=sr.MAX_SAMLPES}constructor(t,n){if(this.params=void 0,this.classesCount=1,this.featuresCount=1,void 0!==t){const n=t.featuresCount,e=t.classesCount;if(n<1)throw new Error("Incorrect features count");if(e<1)throw new Error("Incorrect classes count");const r=n+1;this.avgs=new Float32Array(r),this.stdevs=new Float32Array(r),this.categories=new Array(r),this.featuresCount=n,this.classesCount=e}else{if(void 0===n)throw new Error("Softmax classifier not initialized");try{const t=new Uint32Array(n.buffer,0,1)[0],e=new Uint8Array(n.buffer,4,t),r=o.DataFrame.fromByteArray(e),i=r.columns,s=i.length;if(s<3)throw new Error("incorrect columns count");this.classesCount=s-2,this.featuresCount=r.rowCount-1;const a=this.classesCount;this.params=new Array(a),this.categories=new Array(r.rowCount);for(let t=0;t<a;++t){const n=i.byIndex(t);if(this.categories[t]=n.name,n.type!==o.COLUMN_TYPE.FLOAT)throw new Error(`Incorrect input column type. Expected: float, passed: ${n.type}`);this.params[t]=n.getRawData()}const u=i.byName(or);if(u.type!==o.COLUMN_TYPE.FLOAT)throw new Error("incorrect average values column type");this.avgs=u.getRawData();const l=i.byName(ir);if(l.type!==o.COLUMN_TYPE.FLOAT)throw new Error("incorrect standard deviations column type");this.stdevs=l.getRawData()}catch(t){throw new Error(`Failed to load model: ${t instanceof Error?t.message:"the platform issue"}`)}}}toBytes(){if(void 0===this.params)throw new Error("Non-trained model");const t=this.classesCount,n=new Array(t+2);for(let e=0;e<t;++e)n[e]=o.Column.fromFloat32Array(this.categories[e],this.params[e]);n[t]=o.Column.fromFloat32Array(or,this.avgs),n[t+1]=o.Column.fromFloat32Array(ir,this.stdevs);const e=o.DataFrame.fromColumns(n).toByteArray(),r=e.length,i=new Uint8Array(r+4);return new Uint32Array(i.buffer,0,1)[0]=r,i.set(e,4),i}fit(t,n){return rr(this,arguments,void 0,(function*(t,n,e=1,r=100,i=.1,s=.001){if(t.length!==this.featuresCount)throw new Error("Training failes - incorrect features count");if(e<=0||r<1||i<=0||s<=0)throw new Error("Training failes - incorrect fitting hyperparameters");this.extractStats(t);const a=n.length,u=n.categories.length,l=n.categories;for(let t=0;t<u;++t)this.categories[t]=l[t];try{const l=function(t,n,e,r,o,i,s,a,u,l,c){return g(EDA,"fitSoftmax",[t,n,e,r,o,i,s,a,u,l,c])}(t,o.Column.fromFloat32Array("avgs",this.avgs,this.featuresCount),o.Column.fromFloat32Array("stdevs",this.stdevs,this.featuresCount),o.Column.fromInt32Array("targets",n.getRawData(),a),u,r,e,i,s,this.featuresCount+1,u).columns;this.params=new Array(u);for(let t=0;t<u;++t)this.params[t]=l.byIndex(t).getRawData()}catch(o){try{this.params=yield this.fitSoftmaxParams(t,n,r,e,i,s)}catch(t){throw new Error("Training failes")}}if(void 0===this.params)throw new Error("Training failes")}))}extractStats(t){let n=0;for(const e of t){if(e.type!==o.COLUMN_TYPE.INT&&e.type!==o.COLUMN_TYPE.FLOAT)throw new Error("Training failes - incorrect features type");this.avgs[n]=e.stats.avg,this.stdevs[n]=e.stats.stdev,++n}}normalized(t){const n=t.byIndex(0).length,e=new Array(n);for(let t=0;t<n;++t)e[t]=new Float32Array(this.featuresCount);let r=0;for(const i of t){if(i.type!==o.COLUMN_TYPE.INT&&i.type!==o.COLUMN_TYPE.FLOAT)throw new Error("Training failes - incorrect features type");const t=i.getRawData(),s=this.avgs[r],a=this.stdevs[r];if(a>0)for(let o=0;o<n;++o)e[o][r]=(t[o]-s)/a;else for(let t=0;t<n;++t)e[t][r]=0;++r}return e}transposed(t){const n=t.byIndex(0).length,e=this.featuresCount,r=new Array(e);for(let t=0;t<e;++t)r[t]=new Float32Array(n);let i=0;for(const e of t){if(e.type!==o.COLUMN_TYPE.INT&&e.type!==o.COLUMN_TYPE.FLOAT)throw new Error("Training failes - incorrect features type");const t=e.getRawData(),s=this.avgs[i],a=this.stdevs[i];if(a>0)for(let e=0;e<n;++e)r[i][e]=(t[e]-s)/a;else for(let t=0;t<n;++t)r[i][t]=0;++i}return r}preprocessedTargets(t){if(t.type!==o.COLUMN_TYPE.STRING)throw new Error("Training failes - incorrect target type");const n=this.classesCount,e=t.length,r=t.getRawData(),i=new Array(e),s=new Uint32Array(n).fill(0);for(let t=0;t<e;++t)i[t]=new Uint8Array(n).fill(0);for(let t=0;t<e;++t)i[t][r[t]]=1,++s[r[t]];return{oneHot:i,weights:s}}predict(t){if(void 0===this.params)throw new Error("Non-trained model");if(t.length!==this.featuresCount)throw new Error("Predcition fails: incorrect features count");const n=this.normalized(t),e=n.length,r=this.featuresCount,i=this.classesCount;let s,a;const u=new Float32Array(i);let l,c,f;const h=new Array(e);for(let t=0;t<e;++t){s=n[t],l=0;for(let t=0;t<i;++t){a=this.params[t],l=a[r];for(let t=0;t<r;++t)l+=a[t]*s[t];u[t]=Math.exp(l)}c=u[0],f=0;for(let t=1;t<i;++t)c<u[t]&&(c=u[t],f=t);h[t]=this.categories[f]}return o.Column.fromStrings("predicted",h)}fitSoftmaxParams(t,n,r,o,i,s){return rr(this,void 0,void 0,(function*(){const a=this.preprocessedTargets(n);return new Promise(((u,l)=>{const c=new Worker(new URL(e.p+e.u(501),e.b));c.postMessage({features:this.normalized(t),transposed:this.transposed(t),oneHot:a.oneHot,classesWeights:a.weights,targetRaw:n.getRawData(),iterations:r,rate:o,penalty:i,tolerance:s}),c.onmessage=function(t){c.terminate(),u(t.data.params),console.log(`Loss: ${t.data.loss}`)}}))}))}}var ur=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};const lr=new o.Package;function cr(){t.shell.info(lr.webRoot)}function fr(){return ur(this,void 0,void 0,(function*(){yield async function(){await initEDA()}()}))}function hr(t,n,e,r,i){return ur(this,void 0,void 0,(function*(){const s=n.getRawData(),a=e.getRawData(),u=yield Wn(s,a,r,i),l=t.columns.getUnusedName("Cluster (DBSCAN)"),c=o.Column.fromInt32Array(l,u);return t.columns.add(c),c}))}function mr(n,r,o,i,s){return ur(this,void 0,void 0,(function*(){const a=yield function(t,n,r,o,i){return K(this,void 0,void 0,(function*(){H(n,r);const t=o?1:0,s=i?1:0;return yield async function(t,n,r,o,i){return new Promise(((t,s)=>{const a=new Worker(new URL(e.p+e.u(91),e.b));a.postMessage(D(EDA.principalComponentAnalysis.arguments,[n,r,o,i])),a.onmessage=function(n){a.terminate(),t(B(EDA.principalComponentAnalysis,n.data))}}))}(0,n,r,t,s)}))}(0,r,o,i,s);if(function(t,n){for(const t of n.toList())t.name="PC"+t.name}(0,a.columns),null===n.id)t.shell.addTableView(a);else{const t=n.columns;for(const n of a.columns)n.name=t.getUnusedName(n.name),t.add(n)}}))}function dr(n,e,r,i){return ur(this,void 0,void 0,(function*(){const s=n.dataFrame;if(null===s)return;const a=yield hr(s,n,e,r,i);s.changeColumnType(a,"string");const u=[n.name,e.name],l=t.shell.tableView(s.name);if(l)for(const t of l.viewers)if(t instanceof o.ScatterPlotViewer&&u.includes(t.props.xColumnName)&&u.includes(t.props.yColumnName))return void(t.props.colorColumnName=a.name)}))}function pr(t,n){const e=t.stats.max-t.stats.min;return{entries:t.toList(),options:{range:e}}}function gr(t,n){return{entries:t.toList(),options:{}}}function vr(){return ur(this,void 0,void 0,(function*(){const r=new Ne,i=n.dialog("Dimensionality reduction").add(r.getEditor()).onOK((()=>ur(this,void 0,void 0,(function*(){const i=r.getParams();0!==i.columns.length&&(yield async function(r,i,s,a,u,l,c,f=!0,h=!1,m={preprocessingFuncArgs:[]},d={},p=null,g={}){const v={showXAxis:!1,showYAxis:!1,showXSelector:!1,showYSelector:!1};if(i.length!==a.length||i.length!==l.length||i.length!==u.length||i.length!==m.preprocessingFuncArgs.length)throw new Error("columns, metrics and preprocessing functions, weights and function argumentsmust have the same length");const w=f?t.shell.tableView(r.name)??t.shell.addTableView(r):null,y=async()=>{const y=o.TaskBarProgressIndicator.create(`Initializing ${d.scatterPlotName??"dimensionality reduction"} ...`);let E;try{const A=function(t){const n=["Embed_X","Embed_Y"],e=t.columns.names().filter((t=>t.includes(n[0]))).length+1;return n.map((t=>`${t}_${e}`))}(r);function C(t,e,a){let u=null,l=null;r.columns.names().includes(A[0])?(u=r.columns.byName(A[0]),l=r.columns.byName(A[1])):(u=r.columns.add(o.Column.float(A[0],r.rowCount)),l=r.columns.add(o.Column.float(A[1],r.rowCount)),f&&!E&&(E=w.scatterPlot({...v,x:A[0],y:A[1],title:d.scatterPlotName??xe(i,s)}))),d[ae]&&(E?.root&&n.setUpdateIndicator(E.root,!1),u.init((t=>a[0]?a[0][t]:void 0)),l.init((t=>a[1]?a[1][t]:void 0)));const c=t/e*100;y.update(c,`Running ${d.scatterPlotName??"dimensionality reduction"}... ${c.toFixed(0)}%`)}async function _(){r.columns.add(o.Column.float(A[0],r.rowCount)),r.columns.add(o.Column.float(A[1],r.rowCount));let h=null;f&&(E=w.scatterPlot({...v,x:A[0],y:A[1],title:d.scatterPlotName??xe(i,s)}),n.setUpdateIndicator(E.root,!0));const p=t.events.onViewerClosed.subscribe((n=>{const e=n.args.viewer;e?.getOptions()?.look?.title&&E?.getOptions()?.look?.title&&e?.getOptions()?.look?.title===E?.getOptions()?.look?.title&&(t.events.fireCustomEvent(Pe,{}),p.unsubscribe(),h?.(),y.close())})),g=new Promise((async(n,r)=>{try{h=n;const r=[];for(let t=0;t<l.length;++t){const n=l[t];if(m.distanceFnArgs||(m.distanceFnArgs=[]),n){const e=n.inputs[0].name,o=n.inputs[1].name,{entries:s,options:u}=await n.apply({[e]:i[t],[o]:a[t],...m.preprocessingFuncArgs[t]??{}});r.push({entries:s,options:u}),m.distanceFnArgs.push(u)}else{const n=i[t].toList(),e={};r.push({entries:n,options:e}),m.distanceFnArgs.push(e)}}n(await async function(n,r,o,i,s,a,u){let l=await async function(n,r,o,i,s,a,u){if(!a.distanceFnArgs)throw new Error("options.distanceFnArgs must be defined");if(n.length!==r.length||n.length!==a.distanceFnArgs.length||n.length!==i.length)throw new Error("data, metrics and options and weights must have the same length");return new Promise((function(l,c){const f=new Worker(new URL(e.p+e.u(234),e.b));f.postMessage({columnsData:n,distanceMetrics:r,method:o,options:a,weights:i,aggregationMethod:s});const h=t.events.onCustomEvent(Pe).subscribe((()=>{try{f?.terminate()}finally{h.unsubscribe()}}));f.onmessage=({data:{error:t,embedding:n,epochNum:e,epochsLength:r}})=>{Le(e)||Le(r)?(h.unsubscribe(),t?c(t):l(n),setTimeout((()=>f.terminate()),100)):u&&u(e,r,n)}}))}(n,o,r,i,s,a,u);return l=l.map((t=>function(t){const n=t.length;let e=0,r=0;for(let o=0;o<n;++o)e+=t[o],r+=Math.pow(t[o],2);const o=e/n,i=1/Math.sqrt(r/n-Math.pow(o,2));for(let e=0;e<n;++e)t[e]=(t[e]-o)*i;return t}(t))),l}(r.map((t=>t.entries)),s,a,u,c,m,d[se]?void 0:C))}catch(t){r(t)}})),_=await g;return y.close(),p.unsubscribe(),_}const b=await _();if(h&&b){const I=o.TaskBarProgressIndicator.create("Clustering embeddings ...");try{const S=await Wn(b[0],b[1],m.dbScanEpsilon??.01,m.dbScanMinPts??4),N=r.columns.getUnusedName("Cluster (DBSCAN)");r.columns.addNewString(N).init((t=>S[t].toString())),E&&(E.props.colorColumnName=N)}catch(M){t.shell.error("Clustering embeddings failed"),console.error(M)}finally{I.close()}}if(b){const T=r.columns.byName(A[0]),O=r.columns.byName(A[1]);if(T.init((t=>b[0][t])),O.init((t=>b[1][t])),p)try{const P=p.inputs[0].name,L=p.inputs[1].name;await p.prepare({[P]:T,[L]:O,...g}).call(!0)}catch(x){t.shell.error("Post-processing failed"),console.error(x)}if(E)return n.setUpdateIndicator(E.root,!1),E.helpUrl="/help/compute/sequence-space",E}}catch(R){t.shell.error("Dimensionality reduction failed"),console.error(R),y.close(),E&&n.setUpdateIndicator(E.root,!1)}};return new Promise((async(t,e)=>{try{if(d.fastRowCount&&r.rowCount>d.fastRowCount&&!d[se])n.dialog().add(n.divText("Analysis might take several minutes. Do you want to continue?")).onOK((async()=>{try{const n=await y();t(n)}catch(t){e(t)}})).onCancel((()=>t(void 0))).show();else{const n=await y();t(n)}}catch(t){e(t)}}))}(i.table,i.columns,i.methodName,i.distanceMetrics,i.weights,i.preprocessingFunctions,i.aggreaggregationMethod,!!i.plotEmbeddings,!!i.clusterEmbeddings,i.options,{fastRowCount:1e4},i.postProcessingFunction,i.postProcessingFunctionArgs))})))).show();i.helpUrl="https://datagrok.ai/help/explore/dim-reduction.md";const s=()=>{const t=r.columnsInput.value,n=i.getButton("OK");n&&(t&&0!==t.length?n.classList.remove("disabled"):n.classList.add("disabled"))};r.onColumnsChanged.subscribe((()=>{try{s()}catch(t){console.error(t)}})),s()}))}function wr(e){try{const t=new je;n.dialog("Markov clustering").add(t.getEditor()).onOK((()=>ur(this,void 0,void 0,(function*(){const n=t.params;return e.func.prepare({df:n.table,cols:n.columns,metrics:n.distanceMetrics,weights:n.weights,aggregationMethod:n.aggreaggregationMethod,preprocessingFuncs:n.preprocessingFunctions,preprocessingFuncArgs:n.preprocessingFuncArgs,threshold:n.threshold,maxIterations:n.maxIterations,useWebGPU:n.useWebGPU,inflate:n.inflateFactor}).call(!0)})))).show()}catch(n){const e=n instanceof Error?n.message:n.toString(),r=n instanceof Error?n.stack:void 0;t.shell.error(`Get region editor error: ${e}`),lr.logger.error(e,void 0,r)}}function yr(n,e,r,i,s,a,u){return ur(this,arguments,void 0,(function*(n,e,r,i,s,a,u,l=80,c=10,f=!1,h=0){var m;const d=null!==(m=t.shell.tableView(n.name))&&void 0!==m?m:t.shell.addTableView(n),p=JSON.stringify({cols:e.map((t=>t.name)),metrics:r,weights:i,aggregationMethod:s,preprocessingFuncs:a.map((t=>{var n;return null!==(n=null==t?void 0:t.name)&&void 0!==n?n:null})),preprocessingFuncArgs:u,threshold:l,maxIterations:c,useWebGPU:f,inflate:h});return n.setTag(oe,p),d.addViewer(o.VIEWER.SCATTER_PLOT,{title:"MCL",initializationFunction:"EDA:MCLInitializationFunction"})}))}function Er(r){return ur(this,void 0,void 0,(function*(){const i=r.dataFrame;if(null===i)throw new Error("Data frame of the scatter plot is null");const s=i.getTag(oe);if(!s)throw new Error("MCL options tag on the dataFrame is not found");const a=JSON.parse(s),u=a.cols.map((t=>i.columns.byName(t))),l=a.preprocessingFuncs.map((t=>t?o.Func.byName(t):null)),c=yield async function(r,o,i,s,a,u,l,c=80,f=10,h=!1,m=2,d){const p=t.shell.tableView(r.name)??t.shell.addTableView(r),g=d??p.scatterPlot({showXAxis:!1,showYAxis:!1,showXSelector:!1,showYSelector:!1,title:"MCL"});n.setUpdateIndicator(g.root,!0);const v=[],w=[];for(let t=0;t<u.length;++t){const n=u[t];if(n){const e=n.inputs[0].name,r=n.inputs[1].name,{entries:s,options:a}=await n.apply({[e]:o[t],[r]:i[t],...l[t]??{}});w.push({entries:s,options:a}),v.push(a??{})}else{const n=o[t].toList(),e={};w.push({entries:n,options:e}),v.push(e)}}const y=function(t,n,r,o,i,s,a=10,u=!1,l=2){const c=new Worker(new URL(e.p+e.u(317),e.b));let f;return c.postMessage({data:t,threshold:n,weights:r,aggregationMethod:o,distanceFns:i,distanceFnArgs:s,maxIterations:a,useWebGPU:u,inflate:l}),{promise:new Promise(((t,n)=>{f=t,c.onmessage=n=>{setTimeout((()=>c.terminate()),100),t(n.data.res)},c.onerror=t=>{setTimeout((()=>c.terminate()),100),n(t)}})),terminate:()=>{try{f(null),c.terminate()}catch(t){console.error(t)}}}}(w.map((t=>t.entries)),c,s,a,i,v,f,h,m),E=t.events.onViewerClosed.subscribe((t=>{t.args.viewer?.props?.title===g.props.title&&g.type===t.args?.viewer?.type&&(E.unsubscribe(),y.terminate())})),A=await y.promise;if(!A)return;const C=r.columns.getUnusedName("Cluster (MCL)"),_=r.columns.getUnusedName("EmbedX (MCL)"),b=r.columns.getUnusedName("EmbedY (MCL)"),I={};A.clusters.forEach((t=>{I[t]||(I[t]=0),I[t]++}));const S=new Uint32Array(A.embedX.length);for(let t=0;t<A.is.length;t++)S[A.is[t]]++,S[A.js[t]]++;const N=r.columns.getUnusedName("Cluster size (MCL)"),M=r.columns.getUnusedName("Connectivity (MCL)"),T=r.columns.addNewFloat(_);T.init((t=>A.embedX[t]));const O=r.columns.addNewFloat(b);O.init((t=>A.embedY[t]));const P=r.columns.addNewString(C);P.init((t=>A.clusters[t].toString()));const L=r.columns.addNewInt(N);L.init((t=>I[A.clusters[t]]));const x=r.columns.addNewInt(M);return x.init((t=>S[t])),g.props.xColumnName=_,g.props.yColumnName=b,g.props.colorColumnName=C,g.props.markerDefaultSize=5,E.unsubscribe(),new Qe(g,_,b,{from:A.is,to:A.js,drawArrows:!1,opacity:.3,skipMultiLineCalculation:!0},ze.none),n.setUpdateIndicator(g.root,!1),{sc:g,embedXCol:T,embedYCol:O,clusterCol:P,clusterCounterCol:L,connectivityCol:x}}(i,u,a.metrics,a.weights,a.aggregationMethod,l,a.preprocessingFuncArgs,a.threshold,a.maxIterations,a.useWebGPU,a.inflate,r);return null==c?void 0:c.sc}))}function Ar(t,n,e,r,o){return ur(this,void 0,void 0,(function*(){return yield Fn({table:t,features:n,predict:e,components:r,names:o})}))}function Cr(){return ur(this,void 0,void 0,(function*(){yield Un(mn.COMPUTE_COMPONENTS)}))}function _r(){return ur(this,void 0,void 0,(function*(){yield Un(mn.PERFORM_MVA)}))}function br(){return ur(this,void 0,void 0,(function*(){!function(){Pn(this,void 0,void 0,(function*(){t.shell.addTableView(o.DataFrame.fromColumns([o.Column.fromStrings("model",["alfaromeo","audi","bmw","chevrolet","dodge1","dodge2","honda1","honda2","isuzu","jaguar","mazda","mercedes","mercury","mitsubishi","nissan1","nissan2","peugot","plymouth","porsche","saab","subaru","toyota1","toyota2","toyota3","toyota4","volkswagen1","volkswagen2","volvo1","volvo2","volvo3"]),o.Column.fromInt32Array("diesel",new Int32Array([0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1,1,0,0,0,1])),o.Column.fromInt32Array("turbo",new Int32Array([0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,1])),o.Column.fromInt32Array("two.doors",new Int32Array([1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,1,0,1,0,1,0,0,0,0])),o.Column.fromInt32Array("hatchback",new Int32Array([1,0,0,0,1,1,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0])),o.Column.fromFloat32Array("wheel.base",new Float32Array([94.5,105.80000305175781,101.19999694824219,94.5,93.69999694824219,93.69999694824219,93.69999694824219,96.5,94.30000305175781,113,93.0999984741211,115.5999984741211,102.69999694824219,93.69999694824219,94.5,94.5,93.69999694824219,114.19999694824219,89.5,99.0999984741211,97.19999694824219,95.69999694824219,95.69999694824219,98.4000015258789,102.4000015258789,97.30000305175781,100.4000015258789,104.30000305175781,109.0999984741211,109.0999984741211])),o.Column.fromFloat32Array("length",new Float32Array([171.1999969482422,192.6999969482422,176.8000030517578,158.8000030517578,157.3000030517578,157.3000030517578,150,175.39999389648438,170.6999969482422,199.60000610351562,166.8000030517578,202.60000610351562,178.39999389648438,157.3000030517578,170.1999969482422,165.3000030517578,157.3000030517578,198.89999389648438,168.89999389648438,186.60000610351562,172,158.6999969482422,166.3000030517578,176.1999969482422,175.60000610351562,171.6999969482422,180.1999969482422,188.8000030517578,188.8000030517578,188.8000030517578])),o.Column.fromFloat32Array("width",new Float32Array([65.5,71.4000015258789,64.80000305175781,63.599998474121094,63.79999923706055,63.79999923706055,64,65.19999694824219,61.79999923706055,69.5999984741211,64.19999694824219,71.69999694824219,68,64.4000015258789,63.79999923706055,63.79999923706055,63.79999923706055,68.4000015258789,65,66.5,65.4000015258789,63.599998474121094,64.4000015258789,65.5999984741211,66.5,65.5,66.9000015258789,67.19999694824219,68.80000305175781,68.9000015258789])),o.Column.fromFloat32Array("height",new Float32Array([52.400001525878906,55.70000076293945,54.29999923706055,52,50.79999923706055,50.599998474121094,52.599998474121094,54.099998474121094,53.5,52.79999923706055,54.099998474121094,56.29999923706055,54.79999923706055,50.79999923706055,53.5,54.5,50.599998474121094,58.70000076293945,51.599998474121094,56.099998474121094,52.5,54.5,53,52,54.900001525878906,55.70000076293945,55.099998474121094,56.20000076293945,55.5,55.5])),o.Column.fromInt32Array("curb.weight",new Int32Array([2823,2844,2395,1909,2128,1967,1956,2304,2337,4066,1950,3770,2910,1918,2024,1951,1967,3430,2800,2695,2190,1985,2275,2551,2480,2261,2661,2912,3049,3217])),o.Column.fromInt32Array("eng.size",new Int32Array([152,136,108,90,98,90,92,110,111,258,91,183,140,92,97,97,90,152,194,121,108,92,110,146,110,97,136,141,141,145])),o.Column.fromInt32Array("horsepower",new Int32Array([154,110,101,70,102,68,76,86,78,176,68,123,175,68,69,69,68,95,207,110,82,62,56,116,73,52,110,114,160,106])),o.Column.fromInt32Array("peak.rpm",new Int32Array([5e3,5500,5800,5400,5500,5500,6e3,5800,4800,4750,5e3,4350,5e3,5500,5200,5200,5500,4150,5900,5250,4400,4800,4500,4800,4500,4800,5500,5400,5300,4800])),o.Column.fromInt32Array("symbol",new Int32Array([1,1,2,0,1,1,1,0,0,0,1,-1,1,2,1,1,1,0,3,2,0,1,0,2,-1,2,0,-2,-1,-1])),o.Column.fromInt32Array("city.mpg",new Int32Array([19,19,23,38,24,31,30,27,24,15,31,22,19,37,31,31,31,25,17,21,28,35,34,24,30,37,19,23,19,26])),o.Column.fromInt32Array("highway.mpg",new Int32Array([26,25,29,43,30,38,34,33,29,19,38,25,24,41,37,37,38,25,25,28,33,39,36,30,33,46,24,28,25,27])),o.Column.fromInt32Array("price",new Int32Array([16500,17710,16430,6575,7957,6229,7129,8845,6785,35550,7395,31600,16503,5389,7349,7299,6229,13860,37028,12170,7775,5348,7898,9989,10698,7775,13295,12940,19045,22470]))])),t.shell.windows.help.visible=!0,t.shell.windows.help.showHelp(n.markdown(Mn)),t.shell.windows.showContextPanel=!1,t.shell.windows.showProperties=!1,yield Un(mn.DEMO)}))}()}))}function Ir(t,n,e){return ur(this,void 0,void 0,(function*(){return un(yield sn({gamma:e,kernel:X},t,n))}))}function Sr(t,n){return ur(this,void 0,void 0,(function*(){return yield cn(t,n)}))}function Nr(t,n){return ur(this,void 0,void 0,(function*(){return fn(t,n)}))}function Mr(t,n){return ur(this,void 0,void 0,(function*(){return hn(t)}))}function Tr(t,n,e,r){return ur(this,void 0,void 0,(function*(){return an(0,r)}))}function Or(t,n,e,r){return ur(this,void 0,void 0,(function*(){return un(yield sn({gamma:e,kernel:J,sigma:r},t,n))}))}function Pr(t,n){return ur(this,void 0,void 0,(function*(){return yield cn(t,n)}))}function Lr(t,n){return ur(this,void 0,void 0,(function*(){return fn(t,n)}))}function xr(t,n){return ur(this,void 0,void 0,(function*(){return hn(t)}))}function Rr(t,n,e,r){return ur(this,void 0,void 0,(function*(){return an(0,r)}))}function Fr(t,n,e,r,o){return ur(this,void 0,void 0,(function*(){return un(yield sn({gamma:e,kernel:Q,cParam:r,dParam:o},t,n))}))}function Ur(t,n){return ur(this,void 0,void 0,(function*(){return yield cn(t,n)}))}function Dr(t,n){return ur(this,void 0,void 0,(function*(){return fn(t,n)}))}function Br(t,n){return ur(this,void 0,void 0,(function*(){return hn(t)}))}function kr(t,n,e,r){return ur(this,void 0,void 0,(function*(){return an(0,r)}))}function Vr(t,n,e,r,o){return ur(this,void 0,void 0,(function*(){return un(yield sn({gamma:e,kernel:Z,kappa:r,theta:o},t,n))}))}function Gr(t,n){return ur(this,void 0,void 0,(function*(){return yield cn(t,n)}))}function qr(t,n){return ur(this,void 0,void 0,(function*(){return fn(t,n)}))}function Yr(t,n){return ur(this,void 0,void 0,(function*(){return hn(t)}))}function Wr(t,n,e,r){return ur(this,void 0,void 0,(function*(){return an(0,r)}))}function $r(n,e,r,i,s){!function(n,e,r,i){const s=t.shell.getTableView(n.name);s.addViewer(o.Viewer.boxPlot(o.DataFrame.fromColumns([e,r]))),s.addViewer(o.Viewer.grid(i))}(n,e,r,function(t,n,e=.05,r=!1){kn(e);const i=new qn(t,n,r,e);if(r){if(!i.areVarsEqual(e))throw new Error(Dn.NON_EQUAL_VARIANCES);if(!i.isNormal())throw new Error(Dn.NON_NORMAL_DISTRIB)}const s=i.getOneWayAnova(),a=Bn.centralF.inv(1-e,s.dfBn,s.dfWn);return function(t,n,e,r,i){return o.DataFrame.fromColumns([o.Column.fromStrings("Source of variance",["Between groups","Within groups","Total","",r,"",i]),o.Column.fromList(o.COLUMN_TYPE.FLOAT,"Sum of squares",[t.ssBn,t.ssWn,t.ssTot,null,null,null,null]),o.Column.fromList(o.COLUMN_TYPE.INT,"Degrees of freedom",[t.dfBn,t.dfWn,t.dfTot,null,null,null,null]),o.Column.fromList(o.COLUMN_TYPE.FLOAT,"Mean square",[t.msBn,t.msWn,null,null,null,null,null]),o.Column.fromList(o.COLUMN_TYPE.FLOAT,"F-statistics",[t.fStat,null,null,null,null,null,null]),o.Column.fromList(o.COLUMN_TYPE.FLOAT,"p-value",[t.pValue,null,null,null,null,null,null]),o.Column.fromList(o.COLUMN_TYPE.FLOAT,`${n}-critical value`,[e,null,null,null,null,null,null])])}(s,e,a,`THE NULL HYPOTHESIS: the "${t.name}" \n factor does not produce a significant difference in the "${n.name}" feature.`,"Test result: "+(s.fStat>a?"REJECTED.":"FAILED TO REJECT."))}(e,r,i,s))}function zr(){Ke()}function Hr(t){return ur(this,void 0,void 0,(function*(){yield Ke(t)}))}function Kr(n,e){return ur(this,void 0,void 0,(function*(){const r=n.columns,i=yield function(n,e){return Je(this,void 0,void 0,(function*(){const r=n.length,i=e.length,s=e.stats.avg,a=e.stats.stdev,u=new Float32Array(r+1).fill(0);if(u[r]=s,0===a||1===i)return u;try{const t=tr(r,i);if(t.toApplyPLS){const i=yield function(t,n,e){return Je(this,void 0,void 0,(function*(){return(yield Fn({table:o.DataFrame.fromColumns([n]),features:t,predict:n,components:e,names:void 0})).regressionCoefficients.getRawData()}))}(n,e,t.components);let s=0;for(let t=0;t<r;++t)u[t]=i[t],s+=i[t]*n.byIndex(t).stats.avg;return u[r]-=s,u}const l=[],c=[],f=new Float32Array(r),h=new Float32Array(r);let m=0,d=0;for(const t of n){const n=t.stats;n.stdev>0&&(l.push(m),c.push(t),f[d]=n.avg,h[d]=n.stdev,++d),++m}if(0===d)return u;const p=function(t,n,e,r,o,i,s){return g(EDA,"fitLinearRegressionParamsWithDataNormalizing",[t,n,e,r,o,i,s])}(o.DataFrame.fromColumns(c).columns,o.Column.fromFloat32Array("xAvgs",f,d),o.Column.fromFloat32Array("xStdevs",h,d),e,s,a,d+1).getRawData();for(let t=0;t<d;++t)u[l[t]]=p[t];u[r]=p[d]}catch(n){t.shell.error(`Fitted the trivial model: ${n instanceof Error?n.message:"due to the platform issue"}`)}return u}))}(r,e);return new Uint8Array(i.buffer)}))}function jr(t,n){const e=t.columns,r=new Float32Array(n.buffer);return o.DataFrame.fromColumns([Ze(e,r)])}function Xr(t,n){for(const n of t.columns)if(!n.matches("numerical"))return!1;return n.matches("numerical")}function Qr(t,n){return t.rowCount<=1e5}function Jr(t,n,e,r,o,i){return ur(this,void 0,void 0,(function*(){const s=t.columns,a=new ar({classesCount:n.categories.length,featuresCount:s.length});return yield a.fit(s,n,e,r,o,i),a.toBytes()}))}function Zr(t,n){const e=t.columns,r=new ar(void 0,n);return o.DataFrame.fromColumns([r.predict(e)])}function to(t,n){return ar.isApplicable(t.columns,n)}function no(t,n){return ar.isInteractive(t.columns,n)}function eo(t,n,e){return ur(this,void 0,void 0,(function*(){const r=t.columns;if(e>r.length)throw new Error("Number of components is greater than features count");const o=new er;return yield o.fit(r,n,e),o.toBytes()}))}function ro(t,n){const e=new er(n);return o.DataFrame.fromColumns([e.predict(t.columns)])}function oo(t,n){return er.isApplicable(t.columns,n)}function io(t,n,e,r){return ur(this,void 0,void 0,(function*(){return new er(r).viewers().map((t=>t.root))}))}function so(t,n){return er.isInteractive(t.columns,n)}})(),eda=r})();
2
2
  //# sourceMappingURL=package.js.map