@datagrok/eda 1.5.0 → 1.5.1

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.
@@ -1,2 +1,2 @@
1
- var eda_test;(()=>{var t,e,n,o,r={5540(t,e,n){"use strict";t=n.hmd(t);var o,r=(o="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0,function(t={}){var e,n,r=void 0!==t?t:{};r.ready=new Promise(function(t,o){e=t,n=o});var i,s=Object.assign({},r),a="object"==typeof window,l="function"==typeof importScripts,u=("object"==typeof process&&"object"==typeof process.versions&&process.versions.node,"");(a||l)&&(l?u=self.location.href:"undefined"!=typeof document&&document.currentScript&&(u=document.currentScript.src),o&&(u=o),u=0!==u.indexOf("blob:")?u.substr(0,u.replace(/[?#].*/,"").lastIndexOf("/")+1):"",l&&(i=t=>{var e=new XMLHttpRequest;return e.open("GET",t,!1),e.responseType="arraybuffer",e.send(null),new Uint8Array(e.response)})),r.print||console.log.bind(console);var c,f,d=r.printErr||console.warn.bind(console);Object.assign(r,s),s=null,r.arguments&&r.arguments,r.thisProgram&&r.thisProgram,r.quit&&r.quit,r.wasmBinary&&(c=r.wasmBinary),r.noExitRuntime,"object"!=typeof WebAssembly&&T("no native wasm support detected");var h,m,p,g=!1;function v(){var t=f.buffer;r.HEAP8=h=new Int8Array(t),r.HEAP16=new Int16Array(t),r.HEAP32=new Int32Array(t),r.HEAPU8=m=new Uint8Array(t),r.HEAPU16=new Uint16Array(t),r.HEAPU32=p=new Uint32Array(t),r.HEAPF32=new Float32Array(t),r.HEAPF64=new Float64Array(t)}var y=[],A=[],w=[];function C(t){y.unshift(t)}function E(t){w.unshift(t)}var b,x,_=0,N=null,M=null;function T(t){r.onAbort&&r.onAbort(t),d(t="Aborted("+t+")"),g=!0,t+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(t);throw n(e),e}function S(t){return t.startsWith("data:application/octet-stream;base64,")}function O(t){try{if(t==b&&c)return new Uint8Array(c);if(i)return i(t);throw"both async and sync fetching of the wasm failed"}catch(t){T(t)}}function I(t,e,n){return function(t){return c||!a&&!l||"function"!=typeof fetch?Promise.resolve().then(function(){return O(t)}):fetch(t,{credentials:"same-origin"}).then(function(e){if(!e.ok)throw"failed to load wasm binary file at '"+t+"'";return e.arrayBuffer()}).catch(function(){return O(t)})}(t).then(function(t){return WebAssembly.instantiate(t,e)}).then(function(t){return t}).then(n,function(t){d("failed to asynchronously prepare wasm: "+t),T(t)})}function L(t){for(;t.length>0;)t.shift()(r)}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,h[this.ptr+12|0]=t},this.get_caught=function(){return 0!=h[this.ptr+12|0]},this.set_rethrown=function(t){t=t?1:0,h[this.ptr+13|0]=t},this.get_rethrown=function(){return 0!=h[this.ptr+13|0]},this.init=function(t,e){this.set_adjusted_ptr(0),this.set_type(t),this.set_destructor(e)},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(H(this.get_type()))return p[this.excPtr>>2];var t=this.get_adjusted_ptr();return 0!==t?t:this.excPtr}}function R(t){var e=f.buffer;try{return f.grow(t-e.byteLength+65535>>>16),v(),1}catch(t){}}function F(t){return r["_"+t]}S(b="wasmDbscan.wasm")||(x=b,b=r.locateFile?r.locateFile(x,u):u+x);var D="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function B(t,e,n,o,r){var i={string:t=>{var e=0;return null!=t&&0!==t&&(e=function(t){var e=function(t){for(var e=0,n=0;n<t.length;++n){var o=t.charCodeAt(n);o<=127?e++:o<=2047?e+=2:o>=55296&&o<=57343?(e+=4,++n):e+=3}return e}(t)+1,n=$(e);return function(t,e,n){!function(t,e,n,o){if(!(o>0))return 0;for(var r=n+o-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(n>=r)break;e[n++]=s}else if(s<=2047){if(n+1>=r)break;e[n++]=192|s>>6,e[n++]=128|63&s}else if(s<=65535){if(n+2>=r)break;e[n++]=224|s>>12,e[n++]=128|s>>6&63,e[n++]=128|63&s}else{if(n+3>=r)break;e[n++]=240|s>>18,e[n++]=128|s>>12&63,e[n++]=128|s>>6&63,e[n++]=128|63&s}}e[n]=0}(t,m,e,n)}(t,n,e),n}(t)),e},array:t=>{var e,n,o=$(t.length);return e=t,n=o,h.set(e,n),o}},s=F(t),a=[],l=0;if(o)for(var u=0;u<o.length;u++){var c=i[n[u]];c?(0===l&&(l=V()),a[u]=c(o[u])):a[u]=o[u]}var f=s.apply(null,a);return function(t){return 0!==l&&G(l),function(t){return"string"===e?(n=t)?function(t,e,n){for(var o=e+n,r=e;t[r]&&!(r>=o);)++r;if(r-e>16&&t.buffer&&D)return D.decode(t.subarray(e,r));for(var i="";e<r;){var s=t[e++];if(128&s){var a=63&t[e++];if(192!=(224&s)){var l=63&t[e++];if((s=224==(240&s)?(15&s)<<12|a<<6|l:(7&s)<<18|a<<12|l<<6|63&t[e++])<65536)i+=String.fromCharCode(s);else{var u=s-65536;i+=String.fromCharCode(55296|u>>10,56320|1023&u)}}else i+=String.fromCharCode((31&s)<<6|a)}else i+=String.fromCharCode(s)}return i}(m,n,o):"":"boolean"===e?Boolean(t):t;var n,o}(t)}(f)}var k,U={__cxa_throw:function(t,e,n){throw new P(t).init(e,n),t},abort:function(){T("")},emscripten_memcpy_big:function(t,e,n){m.copyWithin(t,e,e+n)},emscripten_resize_heap:function(t){var e=m.length,n=2147483648;if((t>>>=0)>n)return!1;let o=(t,e)=>t+(e-t%e)%e;for(var r=1;r<=4;r*=2){var i=e*(1+.2/r);if(i=Math.min(i,t+100663296),R(Math.min(n,o(Math.max(t,i),65536))))return!0}return!1}},V=(function(){var t,e,o,i,s={env:U,wasi_snapshot_preview1:U};function a(t,e){var n,o=t.exports;return r.asm=o,f=r.asm.memory,v(),r.asm.__indirect_function_table,n=r.asm.__wasm_call_ctors,A.unshift(n),function(){if(_--,r.monitorRunDependencies&&r.monitorRunDependencies(_),0==_&&(null!==N&&(clearInterval(N),N=null),M)){var t=M;M=null,t()}}(),o}if(_++,r.monitorRunDependencies&&r.monitorRunDependencies(_),r.instantiateWasm)try{return r.instantiateWasm(s,a)}catch(t){d("Module.instantiateWasm callback failed with error: "+t),n(t)}(t=c,e=b,o=s,i=function(t){a(t.instance)},t||"function"!=typeof WebAssembly.instantiateStreaming||S(e)||"function"!=typeof fetch?I(e,o,i):fetch(e,{credentials:"same-origin"}).then(function(t){return WebAssembly.instantiateStreaming(t,o).then(i,function(t){return d("wasm streaming compile failed: "+t),d("falling back to ArrayBuffer instantiation"),I(e,o,i)})})).catch(n)}(),r._dbscan=function(){return(r._dbscan=r.asm.dbscan).apply(null,arguments)},r._malloc=function(){return(r._malloc=r.asm.malloc).apply(null,arguments)},r._free=function(){return(r._free=r.asm.free).apply(null,arguments)},function(){return(V=r.asm.stackSave).apply(null,arguments)}),G=function(){return(G=r.asm.stackRestore).apply(null,arguments)},$=function(){return($=r.asm.stackAlloc).apply(null,arguments)},H=function(){return(H=r.asm.__cxa_is_pointer_type).apply(null,arguments)};function q(){function t(){k||(k=!0,r.calledRun=!0,g||(L(A),e(r),r.onRuntimeInitialized&&r.onRuntimeInitialized(),function(){if(r.postRun)for("function"==typeof r.postRun&&(r.postRun=[r.postRun]);r.postRun.length;)E(r.postRun.shift());L(w)}()))}_>0||(function(){if(r.preRun)for("function"==typeof r.preRun&&(r.preRun=[r.preRun]);r.preRun.length;)C(r.preRun.shift());L(y)}(),_>0||(r.setStatus?(r.setStatus("Running..."),setTimeout(function(){setTimeout(function(){r.setStatus("")},1),t()},1)):t()))}if(r.ccall=B,r.cwrap=function(t,e,n,o){var r=!n||n.every(t=>"number"===t||"boolean"===t);return"string"!==e&&r&&!o?F(t):function(){return B(t,e,n,arguments)}},M=function t(){k||q(),k||(M=t)},r.preInit)for("function"==typeof r.preInit&&(r.preInit=[r.preInit]);r.preInit.length>0;)r.preInit.pop()();return q(),t.ready});"object"==typeof exports?t.exports=r:"function"==typeof define&&n.amdO?define([],function(){return r}):"object"==typeof exports&&(exports.exportCppDbscanLib=r)},4884(t,e,n){"use strict";n.d(e,{A:()=>a});var o=n(1354),r=n.n(o),i=n(6314),s=n.n(i)()(r());s.push([t.id,".eda-pmpo-tooltip-line {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-left: 6px;\n}\n\n.eda-pmpo-box {\n width: 10px;\n height: 10px;\n}\n\n.eda-pmpo-input-form {\n padding-left: 10px;\n padding-right: 5px;\n}\n\n.eda-pmpo-title {\n font-size: 14.5px;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n pointer-events: none;\n white-space: nowrap;\n}\n\n.eda-pmpo-centered-text {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n width: 100%;\n text-align: center;\n}","",{version:3,sources:["webpack://./css/pmpo.css"],names:[],mappings:"AAAA;EACE,aAAa;EACb,mBAAmB;EACnB,QAAQ;EACR,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,YAAY;AACd;;AAEA;EACE,kBAAkB;EAClB,kBAAkB;AACpB;;AAEA;EACE,iBAAiB;EACjB,kBAAkB;EAClB,QAAQ;EACR,SAAS;EACT,gCAAgC;EAChC,oBAAoB;EACpB,mBAAmB;AACrB;;AAEA;EACE,aAAa;EACb,uBAAuB;EACvB,mBAAmB;EACnB,YAAY;EACZ,WAAW;EACX,kBAAkB;AACpB",sourcesContent:[".eda-pmpo-tooltip-line {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-left: 6px;\n}\n\n.eda-pmpo-box {\n width: 10px;\n height: 10px;\n}\n\n.eda-pmpo-input-form {\n padding-left: 10px;\n padding-right: 5px;\n}\n\n.eda-pmpo-title {\n font-size: 14.5px;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n pointer-events: none;\n white-space: nowrap;\n}\n\n.eda-pmpo-centered-text {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n width: 100%;\n text-align: center;\n}"],sourceRoot:""}]);const a=s},6801(t,e,n){"use strict";n.d(e,{A:()=>a});var o=n(1354),r=n.n(o),i=n(6314),s=n.n(i)()(r());s.push([t.id,".statistics-mpo-header {\n margin-top: 10px;\n padding-bottom: 5px;\n border-bottom: 1px solid var(--grey-2);\n gap: 10px;\n}\n\n.statistics-mpo-header > * {\n font-weight: bold;\n}\n\n.statistics-mpo-header > *:first-child {\n width: 130px;\n}\n\n.statistics-mpo-header > *:nth-child(2) {\n width: 120px;\n min-width: 60px;\n}\n\n.statistics-mpo-header > *:nth-child(3) {\n flex-grow: 1;\n}\n\n.statistics-mpo-property-cell {\n width: 130px;\n max-width: 130px;\n align-self: flex-end;\n margin-bottom: 20px !important;\n}\n\n.ui-form .statistics-mpo-property-cell > div:first-child {\n padding-left: 4px;\n}\n\n.statistics-mpo-property-cell > div:first-child {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.statistics-mpo-weight-input {\n width: 100px;\n}\n\n.statistics-mpo-weight-cell {\n align-self: flex-end;\n margin-bottom: 20px !important;\n align-items: center;\n gap: 4px;\n}\n\n.statistics-mpo-control-buttons {\n gap: 10px;\n margin-left: 10px;\n color: var(--blue-1);\n visibility: hidden;\n white-space: nowrap;\n flex-shrink: 0;\n}\n\n.statistics-mpo-row:hover .statistics-mpo-control-buttons,\n.statistics-mpo-cat-row:hover .statistics-mpo-control-buttons {\n visibility: visible;\n}\n\n.statistics-mpo-range-input {\n width: 70px;\n}\n\n.statistics-mpo-row {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n padding: 8px 0;\n min-height: 70px;\n gap: 10px;\n\n flex-wrap: wrap;\n}\n\n.statistics-mpo-row > * {\n flex: 0 0 auto;\n}\n\n\n.statistics-mpo-row .ui-input-choice .ui-input-editor {\n width: 100px !important;\n max-width: none !important;\n}\n\n.ui-form .statistics-mpo-row .ui-input-root {\n margin-bottom: 0 !important;\n padding: 0 !important;\n}\n\n.statistics-mpo-cat-editor {\n width: 280px;\n margin-left: 30px;\n}\n\n.statistics-mpo-cat-row {\n display: flex;\n align-items: center;\n gap: 4px;\n margin-bottom: 2px;\n}\n\n.statistics-mpo-cat-name {\n width: 120px;\n}\n\n.statistics-mpo-cat-col-header {\n font-size: 11px;\n color: var(--grey-3);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.statistics-mpo-desirability-dialog .statistics-mpo-cat-editor {\n width: auto;\n margin-left: 0;\n}\n\n.statistics-mpo-desirability-dialog .statistics-mpo-cat-name {\n flex: 1;\n width: auto;\n}\n\n.statistics-mpo-cat-desirability {\n width: 70px;\n}\n\n.statistics-mpo-weight-toggle {\n cursor: pointer;\n color: var(--grey-3);\n font-size: 12px;\n}\n\n.statistics-mpo-weight-toggle:hover {\n color: var(--grey-5);\n}\n\n.statistics-mpo-weight-toggle-active {\n color: var(--blue-1);\n}\n\n.statistics-mpo-weight-toggle-active:hover {\n color: var(--blue-2);\n}\n\n.statistics-mpo-hidden {\n display: none !important;\n}\n\n.statistics-mpo-empty-state {\n text-align: center;\n padding: 48px 24px;\n color: var(--grey-4);\n border: 1px dashed var(--grey-2);\n border-radius: 8px;\n margin: 16px 12px;\n}\n\n.statistics-mpo-empty-state i {\n font-size: 48px;\n margin-bottom: 16px;\n display: block;\n color: var(--blue-1);\n opacity: 0.3;\n cursor: default;\n pointer-events: none;\n}\n\n.statistics-mpo-empty-state h3 {\n color: var(--grey-5);\n}\n\n.statistics-mpo-empty-state p {\n color: var(--grey-3);\n max-width: 360px;\n margin-inline: auto;\n}\n\n.statistics-mpo-dialog-header-row {\n gap: 12px;\n align-items: flex-end;\n margin-bottom: 8px;\n}\n\n.statistics-mpo-dialog-header-row .ui-input-root {\n flex: 0 1 auto;\n}\n\n.statistics-mpo-section-header {\n font-size: 11px;\n text-transform: uppercase;\n color: var(--blue-1);\n letter-spacing: 0.5px;\n border-bottom: 1px solid var(--grey-2);\n padding-bottom: 4px;\n margin: 12px 0 8px;\n}\n\n.statistics-mpo-param-grid.ui-form {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 0 8px;\n}\n\n.statistics-mpo-desirability-dialog .statistics-mpo-plot {\n margin: 0 auto;\n}\n\n@media (max-width: 500px) {\n .statistics-mpo-row {\n flex-direction: column;\n align-items: flex-start;\n }\n\n .statistics-mpo-row > * {\n width: 100% !important;\n margin-bottom: 5px;\n }\n\n .statistics-mpo-weight-cell {\n margin-top: 0 !important;\n }\n}\n","",{version:3,sources:["webpack://./node_modules/@datagrok-libraries/statistics/css/styles.css"],names:[],mappings:"AAAA;EACE,gBAAgB;EAChB,mBAAmB;EACnB,sCAAsC;EACtC,SAAS;AACX;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,YAAY;EACZ,eAAe;AACjB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,YAAY;EACZ,gBAAgB;EAChB,oBAAoB;EACpB,8BAA8B;AAChC;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,gBAAgB;EAChB,uBAAuB;EACvB,mBAAmB;AACrB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,oBAAoB;EACpB,8BAA8B;EAC9B,mBAAmB;EACnB,QAAQ;AACV;;AAEA;EACE,SAAS;EACT,iBAAiB;EACjB,oBAAoB;EACpB,kBAAkB;EAClB,mBAAmB;EACnB,cAAc;AAChB;;AAEA;;EAEE,mBAAmB;AACrB;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,2BAA2B;EAC3B,cAAc;EACd,gBAAgB;EAChB,SAAS;;EAET,eAAe;AACjB;;AAEA;EACE,cAAc;AAChB;;;AAGA;EACE,uBAAuB;EACvB,0BAA0B;AAC5B;;AAEA;EACE,2BAA2B;EAC3B,qBAAqB;AACvB;;AAEA;EACE,YAAY;EACZ,iBAAiB;AACnB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,QAAQ;EACR,kBAAkB;AACpB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,eAAe;EACf,oBAAoB;EACpB,yBAAyB;EACzB,qBAAqB;AACvB;;AAEA;EACE,WAAW;EACX,cAAc;AAChB;;AAEA;EACE,OAAO;EACP,WAAW;AACb;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,eAAe;EACf,oBAAoB;EACpB,eAAe;AACjB;;AAEA;EACE,oBAAoB;AACtB;;AAEA;EACE,oBAAoB;AACtB;;AAEA;EACE,oBAAoB;AACtB;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,kBAAkB;EAClB,kBAAkB;EAClB,oBAAoB;EACpB,gCAAgC;EAChC,kBAAkB;EAClB,iBAAiB;AACnB;;AAEA;EACE,eAAe;EACf,mBAAmB;EACnB,cAAc;EACd,oBAAoB;EACpB,YAAY;EACZ,eAAe;EACf,oBAAoB;AACtB;;AAEA;EACE,oBAAoB;AACtB;;AAEA;EACE,oBAAoB;EACpB,gBAAgB;EAChB,mBAAmB;AACrB;;AAEA;EACE,SAAS;EACT,qBAAqB;EACrB,kBAAkB;AACpB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,eAAe;EACf,yBAAyB;EACzB,oBAAoB;EACpB,qBAAqB;EACrB,sCAAsC;EACtC,mBAAmB;EACnB,kBAAkB;AACpB;;AAEA;EACE,aAAa;EACb,8BAA8B;EAC9B,UAAU;AACZ;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE;IACE,sBAAsB;IACtB,uBAAuB;EACzB;;EAEA;IACE,sBAAsB;IACtB,kBAAkB;EACpB;;EAEA;IACE,wBAAwB;EAC1B;AACF",sourcesContent:[".statistics-mpo-header {\n margin-top: 10px;\n padding-bottom: 5px;\n border-bottom: 1px solid var(--grey-2);\n gap: 10px;\n}\n\n.statistics-mpo-header > * {\n font-weight: bold;\n}\n\n.statistics-mpo-header > *:first-child {\n width: 130px;\n}\n\n.statistics-mpo-header > *:nth-child(2) {\n width: 120px;\n min-width: 60px;\n}\n\n.statistics-mpo-header > *:nth-child(3) {\n flex-grow: 1;\n}\n\n.statistics-mpo-property-cell {\n width: 130px;\n max-width: 130px;\n align-self: flex-end;\n margin-bottom: 20px !important;\n}\n\n.ui-form .statistics-mpo-property-cell > div:first-child {\n padding-left: 4px;\n}\n\n.statistics-mpo-property-cell > div:first-child {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.statistics-mpo-weight-input {\n width: 100px;\n}\n\n.statistics-mpo-weight-cell {\n align-self: flex-end;\n margin-bottom: 20px !important;\n align-items: center;\n gap: 4px;\n}\n\n.statistics-mpo-control-buttons {\n gap: 10px;\n margin-left: 10px;\n color: var(--blue-1);\n visibility: hidden;\n white-space: nowrap;\n flex-shrink: 0;\n}\n\n.statistics-mpo-row:hover .statistics-mpo-control-buttons,\n.statistics-mpo-cat-row:hover .statistics-mpo-control-buttons {\n visibility: visible;\n}\n\n.statistics-mpo-range-input {\n width: 70px;\n}\n\n.statistics-mpo-row {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n padding: 8px 0;\n min-height: 70px;\n gap: 10px;\n\n flex-wrap: wrap;\n}\n\n.statistics-mpo-row > * {\n flex: 0 0 auto;\n}\n\n\n.statistics-mpo-row .ui-input-choice .ui-input-editor {\n width: 100px !important;\n max-width: none !important;\n}\n\n.ui-form .statistics-mpo-row .ui-input-root {\n margin-bottom: 0 !important;\n padding: 0 !important;\n}\n\n.statistics-mpo-cat-editor {\n width: 280px;\n margin-left: 30px;\n}\n\n.statistics-mpo-cat-row {\n display: flex;\n align-items: center;\n gap: 4px;\n margin-bottom: 2px;\n}\n\n.statistics-mpo-cat-name {\n width: 120px;\n}\n\n.statistics-mpo-cat-col-header {\n font-size: 11px;\n color: var(--grey-3);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.statistics-mpo-desirability-dialog .statistics-mpo-cat-editor {\n width: auto;\n margin-left: 0;\n}\n\n.statistics-mpo-desirability-dialog .statistics-mpo-cat-name {\n flex: 1;\n width: auto;\n}\n\n.statistics-mpo-cat-desirability {\n width: 70px;\n}\n\n.statistics-mpo-weight-toggle {\n cursor: pointer;\n color: var(--grey-3);\n font-size: 12px;\n}\n\n.statistics-mpo-weight-toggle:hover {\n color: var(--grey-5);\n}\n\n.statistics-mpo-weight-toggle-active {\n color: var(--blue-1);\n}\n\n.statistics-mpo-weight-toggle-active:hover {\n color: var(--blue-2);\n}\n\n.statistics-mpo-hidden {\n display: none !important;\n}\n\n.statistics-mpo-empty-state {\n text-align: center;\n padding: 48px 24px;\n color: var(--grey-4);\n border: 1px dashed var(--grey-2);\n border-radius: 8px;\n margin: 16px 12px;\n}\n\n.statistics-mpo-empty-state i {\n font-size: 48px;\n margin-bottom: 16px;\n display: block;\n color: var(--blue-1);\n opacity: 0.3;\n cursor: default;\n pointer-events: none;\n}\n\n.statistics-mpo-empty-state h3 {\n color: var(--grey-5);\n}\n\n.statistics-mpo-empty-state p {\n color: var(--grey-3);\n max-width: 360px;\n margin-inline: auto;\n}\n\n.statistics-mpo-dialog-header-row {\n gap: 12px;\n align-items: flex-end;\n margin-bottom: 8px;\n}\n\n.statistics-mpo-dialog-header-row .ui-input-root {\n flex: 0 1 auto;\n}\n\n.statistics-mpo-section-header {\n font-size: 11px;\n text-transform: uppercase;\n color: var(--blue-1);\n letter-spacing: 0.5px;\n border-bottom: 1px solid var(--grey-2);\n padding-bottom: 4px;\n margin: 12px 0 8px;\n}\n\n.statistics-mpo-param-grid.ui-form {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 0 8px;\n}\n\n.statistics-mpo-desirability-dialog .statistics-mpo-plot {\n margin: 0 auto;\n}\n\n@media (max-width: 500px) {\n .statistics-mpo-row {\n flex-direction: column;\n align-items: flex-start;\n }\n\n .statistics-mpo-row > * {\n width: 100% !important;\n margin-bottom: 5px;\n }\n\n .statistics-mpo-weight-cell {\n margin-top: 0 !important;\n }\n}\n"],sourceRoot:""}]);const a=s},6314(t){"use strict";t.exports=function(t){var e=[];return e.toString=function(){return this.map(function(e){var n="",o=void 0!==e[5];return e[4]&&(n+="@supports (".concat(e[4],") {")),e[2]&&(n+="@media ".concat(e[2]," {")),o&&(n+="@layer".concat(e[5].length>0?" ".concat(e[5]):""," {")),n+=t(e),o&&(n+="}"),e[2]&&(n+="}"),e[4]&&(n+="}"),n}).join("")},e.i=function(t,n,o,r,i){"string"==typeof t&&(t=[[null,t,void 0]]);var s={};if(o)for(var a=0;a<this.length;a++){var l=this[a][0];null!=l&&(s[l]=!0)}for(var u=0;u<t.length;u++){var c=[].concat(t[u]);o&&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),n&&(c[2]?(c[1]="@media ".concat(c[2]," {").concat(c[1],"}"),c[2]=n):c[2]=n),r&&(c[4]?(c[1]="@supports (".concat(c[4],") {").concat(c[1],"}"),c[4]=r):c[4]="".concat(r)),e.push(c))}},e}},1354(t){"use strict";t.exports=function(t){var e=t[1],n=t[3];if(!n)return e;if("function"==typeof btoa){var o=btoa(unescape(encodeURIComponent(JSON.stringify(n)))),r="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(o),i="/*# ".concat(r," */");return[e].concat([i]).join("\n")}return[e].join("\n")}},9982(t,e,n){var o;!function(){var e={};!function(t){"use strict";t.__esModule=!0,t.digestLength=32,t.blockSize=64;var e=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]);function n(t,n,o,r,i){for(var s,a,l,u,c,f,d,h,m,p,g,v,y;i>=64;){for(s=n[0],a=n[1],l=n[2],u=n[3],c=n[4],f=n[5],d=n[6],h=n[7],p=0;p<16;p++)g=r+4*p,t[p]=(255&o[g])<<24|(255&o[g+1])<<16|(255&o[g+2])<<8|255&o[g+3];for(p=16;p<64;p++)v=((m=t[p-2])>>>17|m<<15)^(m>>>19|m<<13)^m>>>10,y=((m=t[p-15])>>>7|m<<25)^(m>>>18|m<<14)^m>>>3,t[p]=(v+t[p-7]|0)+(y+t[p-16]|0);for(p=0;p<64;p++)v=(((c>>>6|c<<26)^(c>>>11|c<<21)^(c>>>25|c<<7))+(c&f^~c&d)|0)+(h+(e[p]+t[p]|0)|0)|0,y=((s>>>2|s<<30)^(s>>>13|s<<19)^(s>>>22|s<<10))+(s&a^s&l^a&l)|0,h=d,d=f,f=c,c=u+v|0,u=l,l=a,a=s,s=v+y|0;n[0]+=s,n[1]+=a,n[2]+=l,n[3]+=u,n[4]+=c,n[5]+=f,n[6]+=d,n[7]+=h,r+=64,i-=64}return r}var o=function(){function e(){this.digestLength=t.digestLength,this.blockSize=t.blockSize,this.state=new Int32Array(8),this.temp=new Int32Array(64),this.buffer=new Uint8Array(128),this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this.reset()}return e.prototype.reset=function(){return this.state[0]=1779033703,this.state[1]=3144134277,this.state[2]=1013904242,this.state[3]=2773480762,this.state[4]=1359893119,this.state[5]=2600822924,this.state[6]=528734635,this.state[7]=1541459225,this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this},e.prototype.clean=function(){for(var t=0;t<this.buffer.length;t++)this.buffer[t]=0;for(t=0;t<this.temp.length;t++)this.temp[t]=0;this.reset()},e.prototype.update=function(t,e){if(void 0===e&&(e=t.length),this.finished)throw new Error("SHA256: can't update because hash was finished.");var o=0;if(this.bytesHashed+=e,this.bufferLength>0){for(;this.bufferLength<64&&e>0;)this.buffer[this.bufferLength++]=t[o++],e--;64===this.bufferLength&&(n(this.temp,this.state,this.buffer,0,64),this.bufferLength=0)}for(e>=64&&(o=n(this.temp,this.state,t,o,e),e%=64);e>0;)this.buffer[this.bufferLength++]=t[o++],e--;return this},e.prototype.finish=function(t){if(!this.finished){var e=this.bytesHashed,o=this.bufferLength,r=e/536870912|0,i=e<<3,s=e%64<56?64:128;this.buffer[o]=128;for(var a=o+1;a<s-8;a++)this.buffer[a]=0;this.buffer[s-8]=r>>>24&255,this.buffer[s-7]=r>>>16&255,this.buffer[s-6]=r>>>8&255,this.buffer[s-5]=r>>>0&255,this.buffer[s-4]=i>>>24&255,this.buffer[s-3]=i>>>16&255,this.buffer[s-2]=i>>>8&255,this.buffer[s-1]=i>>>0&255,n(this.temp,this.state,this.buffer,0,s),this.finished=!0}for(a=0;a<8;a++)t[4*a+0]=this.state[a]>>>24&255,t[4*a+1]=this.state[a]>>>16&255,t[4*a+2]=this.state[a]>>>8&255,t[4*a+3]=this.state[a]>>>0&255;return this},e.prototype.digest=function(){var t=new Uint8Array(this.digestLength);return this.finish(t),t},e.prototype._saveState=function(t){for(var e=0;e<this.state.length;e++)t[e]=this.state[e]},e.prototype._restoreState=function(t,e){for(var n=0;n<this.state.length;n++)this.state[n]=t[n];this.bytesHashed=e,this.finished=!1,this.bufferLength=0},e}();t.Hash=o;var r=function(){function t(t){this.inner=new o,this.outer=new o,this.blockSize=this.inner.blockSize,this.digestLength=this.inner.digestLength;var e=new Uint8Array(this.blockSize);if(t.length>this.blockSize)(new o).update(t).finish(e).clean();else for(var n=0;n<t.length;n++)e[n]=t[n];for(n=0;n<e.length;n++)e[n]^=54;for(this.inner.update(e),n=0;n<e.length;n++)e[n]^=106;for(this.outer.update(e),this.istate=new Uint32Array(8),this.ostate=new Uint32Array(8),this.inner._saveState(this.istate),this.outer._saveState(this.ostate),n=0;n<e.length;n++)e[n]=0}return t.prototype.reset=function(){return this.inner._restoreState(this.istate,this.inner.blockSize),this.outer._restoreState(this.ostate,this.outer.blockSize),this},t.prototype.clean=function(){for(var t=0;t<this.istate.length;t++)this.ostate[t]=this.istate[t]=0;this.inner.clean(),this.outer.clean()},t.prototype.update=function(t){return this.inner.update(t),this},t.prototype.finish=function(t){return this.outer.finished?this.outer.finish(t):(this.inner.finish(t),this.outer.update(t,this.digestLength).finish(t)),this},t.prototype.digest=function(){var t=new Uint8Array(this.digestLength);return this.finish(t),t},t}();function i(t){var e=(new o).update(t),n=e.digest();return e.clean(),n}function s(t,e){var n=new r(t).update(e),o=n.digest();return n.clean(),o}function a(t,e,n,o){var r=o[0];if(0===r)throw new Error("hkdf: cannot expand more");e.reset(),r>1&&e.update(t),n&&e.update(n),e.update(o),e.finish(t),o[0]++}t.HMAC=r,t.hash=i,t.default=i,t.hmac=s;var l=new Uint8Array(t.digestLength);t.hkdf=function(t,e,n,o){void 0===e&&(e=l),void 0===o&&(o=32);for(var i=new Uint8Array([1]),u=s(e,t),c=new r(u),f=new Uint8Array(c.digestLength),d=f.length,h=new Uint8Array(o),m=0;m<o;m++)d===f.length&&(a(f,c,n,i),d=0),h[m]=f[d++];return c.clean(),f.fill(0),i.fill(0),h},t.pbkdf2=function(t,e,n,o){for(var i=new r(t),s=i.digestLength,a=new Uint8Array(4),l=new Uint8Array(s),u=new Uint8Array(s),c=new Uint8Array(o),f=0;f*s<o;f++){var d=f+1;a[0]=d>>>24&255,a[1]=d>>>16&255,a[2]=d>>>8&255,a[3]=d>>>0&255,i.reset(),i.update(e),i.update(a),i.finish(u);for(var h=0;h<s;h++)l[h]=u[h];for(h=2;h<=n;h++){i.reset(),i.update(u).finish(u);for(var m=0;m<s;m++)l[m]^=u[m]}for(h=0;h<s&&f*s+h<o;h++)c[f*s+h]=l[h]}for(f=0;f<s;f++)l[f]=u[f]=0;for(f=0;f<4;f++)a[f]=0;return i.clean(),c}}(e);var r=e.default;for(var i in e)r[i]=e[i];"object"==typeof t.exports?t.exports=r:void 0===(o=function(){return r}.call(e,n,e,t))||(t.exports=o)}()},944(t,e){"use strict";e.Vb=void 0,e.Vb=function(t,e,n){var o=function(t,e,n){if(0===t.length||0===e.length)return 0;if(n&&!n.caseSensitive&&(t=t.toUpperCase(),e=e.toUpperCase()),t===e)return 1;for(var o=0,r=t.length,i=e.length,s=Math.floor(Math.max(r,i)/2)-1,a=new Array(r),l=new Array(i),u=0;u<r;u++)for(var c=Math.max(0,u-s);c<=Math.min(i,u+s+1);c++)if(!a[u]&&!l[c]&&t[u]===e[c]){++o,a[u]=l[c]=!0;break}if(0===o)return 0;var f=0,d=0;for(u=0;u<r;u++)if(a[u]){for(;!l[d];)d++;t.charAt(u)!==e.charAt(d++)&&f++}return(o/r+o/i+(o-(f/=2))/o)/3}(t,e,n),r=0;if(o>.7){for(var i=Math.min(t.length,e.length),s=0;t[s]===e[s]&&s<4&&s<i;)++r,s++;o+=.1*r*(1-o)}return o}},6572(t){var e;t.exports=(e=function(t,e){var n=Array.prototype.concat,o=Array.prototype.slice,r=Object.prototype.toString;function i(e,n){var o=e>n?e:n;return t.pow(10,17-~~(t.log(o>0?o:-o)*t.LOG10E))}var s=Array.isArray||function(t){return"[object Array]"===r.call(t)};function a(t){return"[object Function]"===r.call(t)}function l(t){return"number"==typeof t&&t-t===0}function u(){return new u._init(arguments)}function c(){return 0}function f(){return 1}function d(t,e){return t===e?1:0}u.fn=u.prototype,u._init=function(t){if(s(t[0]))if(s(t[0][0])){a(t[1])&&(t[0]=u.map(t[0],t[1]));for(var e=0;e<t[0].length;e++)this[e]=t[0][e];this.length=t[0].length}else this[0]=a(t[1])?u.map(t[0],t[1]):t[0],this.length=1;else if(l(t[0]))this[0]=u.seq.apply(null,t),this.length=1;else{if(t[0]instanceof u)return u(t[0].toArray());this[0]=[],this.length=1}return this},u._init.prototype=u.prototype,u._init.constructor=u,u.utils={calcRdx:i,isArray:s,isFunction:a,isNumber:l,toVector:function(t){return n.apply([],t)}},u._random_fn=t.random,u.setRandom=function(t){if("function"!=typeof t)throw new TypeError("fn is not a function");u._random_fn=t},u.extend=function(t){var e,n;if(1===arguments.length){for(n in t)u[n]=t[n];return this}for(e=1;e<arguments.length;e++)for(n in arguments[e])t[n]=arguments[e][n];return t},u.rows=function(t){return t.length||1},u.cols=function(t){return t[0].length||1},u.dimensions=function(t){return{rows:u.rows(t),cols:u.cols(t)}},u.row=function(t,e){return s(e)?e.map(function(e){return u.row(t,e)}):t[e]},u.rowa=function(t,e){return u.row(t,e)},u.col=function(t,e){if(s(e)){var n=u.arange(t.length).map(function(){return new Array(e.length)});return e.forEach(function(e,o){u.arange(t.length).forEach(function(r){n[r][o]=t[r][e]})}),n}for(var o=new Array(t.length),r=0;r<t.length;r++)o[r]=[t[r][e]];return o},u.cola=function(t,e){return u.col(t,e).map(function(t){return t[0]})},u.diag=function(t){for(var e=u.rows(t),n=new Array(e),o=0;o<e;o++)n[o]=[t[o][o]];return n},u.antidiag=function(t){for(var e=u.rows(t)-1,n=new Array(e),o=0;e>=0;e--,o++)n[o]=[t[o][e]];return n},u.transpose=function(t){var e,n,o,r,i,a=[];for(s(t[0])||(t=[t]),n=t.length,o=t[0].length,i=0;i<o;i++){for(e=new Array(n),r=0;r<n;r++)e[r]=t[r][i];a.push(e)}return 1===a.length?a[0]:a},u.map=function(t,e,n){var o,r,i,a,l;for(s(t[0])||(t=[t]),r=t.length,i=t[0].length,a=n?t:new Array(r),o=0;o<r;o++)for(a[o]||(a[o]=new Array(i)),l=0;l<i;l++)a[o][l]=e(t[o][l],o,l);return 1===a.length?a[0]:a},u.cumreduce=function(t,e,n){var o,r,i,a,l;for(s(t[0])||(t=[t]),r=t.length,i=t[0].length,a=n?t:new Array(r),o=0;o<r;o++)for(a[o]||(a[o]=new Array(i)),i>0&&(a[o][0]=t[o][0]),l=1;l<i;l++)a[o][l]=e(a[o][l-1],t[o][l]);return 1===a.length?a[0]:a},u.alter=function(t,e){return u.map(t,e,!0)},u.create=function(t,e,n){var o,r,i=new Array(t);for(a(e)&&(n=e,e=t),o=0;o<t;o++)for(i[o]=new Array(e),r=0;r<e;r++)i[o][r]=n(o,r);return i},u.zeros=function(t,e){return l(e)||(e=t),u.create(t,e,c)},u.ones=function(t,e){return l(e)||(e=t),u.create(t,e,f)},u.rand=function(t,e){return l(e)||(e=t),u.create(t,e,u._random_fn)},u.identity=function(t,e){return l(e)||(e=t),u.create(t,e,d)},u.symmetric=function(t){var e,n,o=t.length;if(t.length!==t[0].length)return!1;for(e=0;e<o;e++)for(n=0;n<o;n++)if(t[n][e]!==t[e][n])return!1;return!0},u.clear=function(t){return u.alter(t,c)},u.seq=function(t,e,n,o){a(o)||(o=!1);var r,s=[],l=i(t,e),u=(e*l-t*l)/((n-1)*l),c=t;for(r=0;c<=e&&r<n;c=(t*l+u*l*++r)/l)s.push(o?o(c,r):c);return s},u.arange=function(t,n,o){var r,i=[];if(o=o||1,n===e&&(n=t,t=0),t===n||0===o)return[];if(t<n&&o<0)return[];if(t>n&&o>0)return[];if(o>0)for(r=t;r<n;r+=o)i.push(r);else for(r=t;r>n;r+=o)i.push(r);return i},u.slice=function(){function t(t,n,o,r){var i,s=[],a=t.length;if(n===e&&o===e&&r===e)return u.copy(t);if(r=r||1,(n=(n=n||0)>=0?n:a+n)===(o=(o=o||t.length)>=0?o:a+o)||0===r)return[];if(n<o&&r<0)return[];if(n>o&&r>0)return[];if(r>0)for(i=n;i<o;i+=r)s.push(t[i]);else for(i=n;i>o;i+=r)s.push(t[i]);return s}return function(e,n){var o,r;return l((n=n||{}).row)?l(n.col)?e[n.row][n.col]:t(u.rowa(e,n.row),(o=n.col||{}).start,o.end,o.step):l(n.col)?t(u.cola(e,n.col),(r=n.row||{}).start,r.end,r.step):(r=n.row||{},o=n.col||{},t(e,r.start,r.end,r.step).map(function(e){return t(e,o.start,o.end,o.step)}))}}(),u.sliceAssign=function(n,o,r){var i,s;if(l(o.row)){if(l(o.col))return n[o.row][o.col]=r;o.col=o.col||{},o.col.start=o.col.start||0,o.col.end=o.col.end||n[0].length,o.col.step=o.col.step||1,i=u.arange(o.col.start,t.min(n.length,o.col.end),o.col.step);var a=o.row;return i.forEach(function(t,e){n[a][t]=r[e]}),n}if(l(o.col)){o.row=o.row||{},o.row.start=o.row.start||0,o.row.end=o.row.end||n.length,o.row.step=o.row.step||1,s=u.arange(o.row.start,t.min(n[0].length,o.row.end),o.row.step);var c=o.col;return s.forEach(function(t,e){n[t][c]=r[e]}),n}return r[0].length===e&&(r=[r]),o.row.start=o.row.start||0,o.row.end=o.row.end||n.length,o.row.step=o.row.step||1,o.col.start=o.col.start||0,o.col.end=o.col.end||n[0].length,o.col.step=o.col.step||1,s=u.arange(o.row.start,t.min(n.length,o.row.end),o.row.step),i=u.arange(o.col.start,t.min(n[0].length,o.col.end),o.col.step),s.forEach(function(t,e){i.forEach(function(o,i){n[t][o]=r[e][i]})}),n},u.diagonal=function(t){var e=u.zeros(t.length,t.length);return t.forEach(function(t,n){e[n][n]=t}),e},u.copy=function(t){return t.map(function(t){return l(t)?t:t.map(function(t){return t})})};var h=u.prototype;return h.length=0,h.push=Array.prototype.push,h.sort=Array.prototype.sort,h.splice=Array.prototype.splice,h.slice=Array.prototype.slice,h.toArray=function(){return this.length>1?o.call(this):o.call(this)[0]},h.map=function(t,e){return u(u.map(this,t,e))},h.cumreduce=function(t,e){return u(u.cumreduce(this,t,e))},h.alter=function(t){return u.alter(this,t),this},function(t){for(var e=0;e<t.length;e++)(function(t){h[t]=function(e){var n,o=this;return e?(setTimeout(function(){e.call(o,h[t].call(o))}),this):(n=u[t](this),s(n)?u(n):n)}})(t[e])}("transpose clear symmetric rows cols dimensions diag antidiag".split(" ")),function(t){for(var e=0;e<t.length;e++)(function(t){h[t]=function(e,n){var o=this;return n?(setTimeout(function(){n.call(o,h[t].call(o,e))}),this):u(u[t](this,e))}})(t[e])}("row col".split(" ")),function(t){for(var e=0;e<t.length;e++)(function(t){h[t]=function(){return u(u[t].apply(null,arguments))}})(t[e])}("create zeros ones rand identity".split(" ")),u}(Math),function(t,e){var n=t.utils.isFunction;function o(t,e){return t-e}function r(t,n,o){return e.max(n,e.min(t,o))}t.sum=function(t){for(var e=0,n=t.length;--n>=0;)e+=t[n];return e},t.sumsqrd=function(t){for(var e=0,n=t.length;--n>=0;)e+=t[n]*t[n];return e},t.sumsqerr=function(e){for(var n,o=t.mean(e),r=0,i=e.length;--i>=0;)r+=(n=e[i]-o)*n;return r},t.sumrow=function(t){for(var e=0,n=t.length;--n>=0;)e+=t[n];return e},t.product=function(t){for(var e=1,n=t.length;--n>=0;)e*=t[n];return e},t.min=function(t){for(var e=t[0],n=0;++n<t.length;)t[n]<e&&(e=t[n]);return e},t.max=function(t){for(var e=t[0],n=0;++n<t.length;)t[n]>e&&(e=t[n]);return e},t.unique=function(t){for(var e={},n=[],o=0;o<t.length;o++)e[t[o]]||(e[t[o]]=!0,n.push(t[o]));return n},t.mean=function(e){return t.sum(e)/e.length},t.meansqerr=function(e){return t.sumsqerr(e)/e.length},t.geomean=function(n){var o=n.map(e.log),r=t.mean(o);return e.exp(r)},t.median=function(t){var e=t.length,n=t.slice().sort(o);return 1&e?n[e/2|0]:(n[e/2-1]+n[e/2])/2},t.cumsum=function(e){return t.cumreduce(e,function(t,e){return t+e})},t.cumprod=function(e){return t.cumreduce(e,function(t,e){return t*e})},t.diff=function(t){var e,n=[],o=t.length;for(e=1;e<o;e++)n.push(t[e]-t[e-1]);return n},t.rank=function(t){var e,n=[],r={};for(e=0;e<t.length;e++)r[l=t[e]]?r[l]++:(r[l]=1,n.push(l));var i=n.sort(o),s={},a=1;for(e=0;e<i.length;e++){var l,u=r[l=i[e]],c=(a+(a+u-1))/2;s[l]=c,a+=u}return t.map(function(t){return s[t]})},t.mode=function(t){var e,n=t.length,r=t.slice().sort(o),i=1,s=0,a=0,l=[];for(e=0;e<n;e++)r[e]===r[e+1]?i++:(i>s?(l=[r[e]],s=i,a=0):i===s&&(l.push(r[e]),a++),i=1);return 0===a?l[0]:l},t.range=function(e){return t.max(e)-t.min(e)},t.variance=function(e,n){return t.sumsqerr(e)/(e.length-(n?1:0))},t.pooledvariance=function(e){return e.reduce(function(e,n){return e+t.sumsqerr(n)},0)/(e.reduce(function(t,e){return t+e.length},0)-e.length)},t.deviation=function(e){for(var n=t.mean(e),o=e.length,r=new Array(o),i=0;i<o;i++)r[i]=e[i]-n;return r},t.stdev=function(n,o){return e.sqrt(t.variance(n,o))},t.pooledstdev=function(n){return e.sqrt(t.pooledvariance(n))},t.meandev=function(n){for(var o=t.mean(n),r=[],i=n.length-1;i>=0;i--)r.push(e.abs(n[i]-o));return t.mean(r)},t.meddev=function(n){for(var o=t.median(n),r=[],i=n.length-1;i>=0;i--)r.push(e.abs(n[i]-o));return t.median(r)},t.coeffvar=function(e){return t.stdev(e)/t.mean(e)},t.quartiles=function(t){var n=t.length,r=t.slice().sort(o);return[r[e.round(n/4)-1],r[e.round(n/2)-1],r[e.round(3*n/4)-1]]},t.quantiles=function(t,n,i,s){var a,l,u,c,f,d=t.slice().sort(o),h=[n.length],m=t.length;for(void 0===i&&(i=3/8),void 0===s&&(s=3/8),a=0;a<n.length;a++)u=m*(l=n[a])+(i+l*(1-i-s)),c=e.floor(r(u,1,m-1)),f=r(u-c,0,1),h[a]=(1-f)*d[c-1]+f*d[c];return h},t.percentile=function(t,e,n){var r=t.slice().sort(o),i=e*(r.length+(n?1:-1))+(n?0:1),s=parseInt(i),a=i-s;return s+1<r.length?r[s-1]+a*(r[s]-r[s-1]):r[s-1]},t.percentileOfScore=function(t,e,n){var o,r,i=0,s=t.length,a=!1;for("strict"===n&&(a=!0),r=0;r<s;r++)o=t[r],(a&&o<e||!a&&o<=e)&&i++;return i/s},t.histogram=function(n,o){o=o||4;var r,i=t.min(n),s=(t.max(n)-i)/o,a=n.length,l=[];for(r=0;r<o;r++)l[r]=0;for(r=0;r<a;r++)l[e.min(e.floor((n[r]-i)/s),o-1)]+=1;return l},t.covariance=function(e,n){var o,r=t.mean(e),i=t.mean(n),s=e.length,a=new Array(s);for(o=0;o<s;o++)a[o]=(e[o]-r)*(n[o]-i);return t.sum(a)/(s-1)},t.corrcoeff=function(e,n){return t.covariance(e,n)/t.stdev(e,1)/t.stdev(n,1)},t.spearmancoeff=function(e,n){return e=t.rank(e),n=t.rank(n),t.corrcoeff(e,n)},t.stanMoment=function(n,o){for(var r=t.mean(n),i=t.stdev(n),s=n.length,a=0,l=0;l<s;l++)a+=e.pow((n[l]-r)/i,o);return a/n.length},t.skewness=function(e){return t.stanMoment(e,3)},t.kurtosis=function(e){return t.stanMoment(e,4)-3};var i=t.prototype;!function(e){for(var o=0;o<e.length;o++)(function(e){i[e]=function(o,r){var s=[],a=0,l=this;if(n(o)&&(r=o,o=!1),r)return setTimeout(function(){r.call(l,i[e].call(l,o))}),this;if(this.length>1){for(l=!0===o?this:this.transpose();a<l.length;a++)s[a]=t[e](l[a]);return s}return t[e](this[0],o)}})(e[o])}("cumsum cumprod".split(" ")),function(e){for(var o=0;o<e.length;o++)(function(e){i[e]=function(o,r){var s=[],a=0,l=this;if(n(o)&&(r=o,o=!1),r)return setTimeout(function(){r.call(l,i[e].call(l,o))}),this;if(this.length>1){for("sumrow"!==e&&(l=!0===o?this:this.transpose());a<l.length;a++)s[a]=t[e](l[a]);return!0===o?t[e](t.utils.toVector(s)):s}return t[e](this[0],o)}})(e[o])}("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(e){for(var o=0;o<e.length;o++)(function(e){i[e]=function(){var o,r=[],s=0,a=this,l=Array.prototype.slice.call(arguments);if(n(l[l.length-1])){o=l[l.length-1];var u=l.slice(0,l.length-1);return setTimeout(function(){o.call(a,i[e].apply(a,u))}),this}o=void 0;var c=function(n){return t[e].apply(a,[n].concat(l))};if(this.length>1){for(a=a.transpose();s<a.length;s++)r[s]=c(a[s]);return r}return c(this[0])}})(e[o])}("quantiles percentileOfScore".split(" "))}(e,Math),function(t,e){t.gammaln=function(t){var n,o,r,i=0,s=[76.18009172947146,-86.50532032941678,24.01409824083091,-1.231739572450155,.001208650973866179,-5395239384953e-18],a=1.000000000190015;for(r=(o=n=t)+5.5,r-=(n+.5)*e.log(r);i<6;i++)a+=s[i]/++o;return e.log(2.5066282746310007*a/n)-r},t.loggam=function(t){var n,o,r,i,s,a,l,u=[.08333333333333333,-.002777777777777778,.0007936507936507937,-.0005952380952380952,.0008417508417508418,-.001917526917526918,.00641025641025641,-.02955065359477124,.1796443723688307,-1.3924322169059];if(n=t,l=0,1==t||2==t)return 0;for(t<=7&&(n=t+(l=e.floor(7-t))),o=1/(n*n),r=2*e.PI,s=u[9],a=8;a>=0;a--)s*=o,s+=u[a];if(i=s/n+.5*e.log(r)+(n-.5)*e.log(n)-n,t<=7)for(a=1;a<=l;a++)i-=e.log(n-1),n-=1;return i},t.gammafn=function(t){var n,o,r,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],l=!1,u=0,c=0,f=0,d=t;if(t>171.6243769536076)return 1/0;if(d<=0){if(!(i=d%1+36e-17))return 1/0;l=(1&d?-1:1)*e.PI/e.sin(e.PI*i),d=1-d}for(r=d,o=d<1?d++:(d-=u=(0|d)-1)-1,n=0;n<8;++n)f=(f+s[n])*o,c=c*o+a[n];if(i=f/c+1,r<d)i/=r;else if(r>d)for(n=0;n<u;++n)i*=d,d++;return l&&(i=l/i),i},t.gammap=function(e,n){return t.lowRegGamma(e,n)*t.gammafn(e)},t.lowRegGamma=function(n,o){var r,i=t.gammaln(n),s=n,a=1/n,l=a,u=o+1-n,c=1/1e-30,f=1/u,d=f,h=1,m=-~(8.5*e.log(n>=1?n:1/n)+.4*n+17);if(o<0||n<=0)return NaN;if(o<n+1){for(;h<=m;h++)a+=l*=o/++s;return a*e.exp(-o+n*e.log(o)-i)}for(;h<=m;h++)d*=(f=1/(f=(r=-h*(h-n))*f+(u+=2)))*(c=u+r/c);return 1-d*e.exp(-o+n*e.log(o)-i)},t.factorialln=function(e){return e<0?NaN:t.gammaln(e+1)},t.factorial=function(e){return e<0?NaN:t.gammafn(e+1)},t.combination=function(n,o){return n>170||o>170?e.exp(t.combinationln(n,o)):t.factorial(n)/t.factorial(o)/t.factorial(n-o)},t.combinationln=function(e,n){return t.factorialln(e)-t.factorialln(n)-t.factorialln(e-n)},t.permutation=function(e,n){return t.factorial(e)/t.factorial(e-n)},t.betafn=function(n,o){if(!(n<=0||o<=0))return n+o>170?e.exp(t.betaln(n,o)):t.gammafn(n)*t.gammafn(o)/t.gammafn(n+o)},t.betaln=function(e,n){return t.gammaln(e)+t.gammaln(n)-t.gammaln(e+n)},t.betacf=function(t,n,o){var r,i,s,a,l=1e-30,u=1,c=n+o,f=n+1,d=n-1,h=1,m=1-c*t/f;for(e.abs(m)<l&&(m=l),a=m=1/m;u<=100&&(m=1+(i=u*(o-u)*t/((d+(r=2*u))*(n+r)))*m,e.abs(m)<l&&(m=l),h=1+i/h,e.abs(h)<l&&(h=l),a*=(m=1/m)*h,m=1+(i=-(n+u)*(c+u)*t/((n+r)*(f+r)))*m,e.abs(m)<l&&(m=l),h=1+i/h,e.abs(h)<l&&(h=l),a*=s=(m=1/m)*h,!(e.abs(s-1)<3e-7));u++);return a},t.gammapinv=function(n,o){var r,i,s,a,l,u,c=0,f=o-1,d=t.gammaln(o);if(n>=1)return e.max(100,o+100*e.sqrt(o));if(n<=0)return 0;for(o>1?(l=e.log(f),u=e.exp(f*(l-1)-d),a=n<.5?n:1-n,r=(2.30753+.27061*(i=e.sqrt(-2*e.log(a))))/(1+i*(.99229+.04481*i))-i,n<.5&&(r=-r),r=e.max(.001,o*e.pow(1-1/(9*o)-r/(3*e.sqrt(o)),3))):r=n<(i=1-o*(.253+.12*o))?e.pow(n/i,1/o):1-e.log(1-(n-i)/(1-i));c<12;c++){if(r<=0)return 0;if((r-=i=(s=(t.lowRegGamma(o,r)-n)/(i=o>1?u*e.exp(-(r-f)+f*(e.log(r)-l)):e.exp(-r+f*e.log(r)-d)))/(1-.5*e.min(1,s*((o-1)/r-1))))<=0&&(r=.5*(r+i)),e.abs(i)<1e-8*r)break}return r},t.erf=function(t){var n,o,r,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,l=!1,u=0,c=0;for(t<0&&(t=-t,l=!0),o=4*(n=2/(2+t))-2;a>0;a--)r=u,u=o*u-c+s[a],c=r;return i=n*e.exp(-t*t+.5*(s[0]+o*u)-c),l?i-1:1-i},t.erfc=function(e){return 1-t.erf(e)},t.erfcinv=function(n){var o,r,i,s,a=0;if(n>=2)return-100;if(n<=0)return 100;for(s=n<1?n:2-n,o=-.70711*((2.30753+.27061*(i=e.sqrt(-2*e.log(s/2))))/(1+i*(.99229+.04481*i))-i);a<2;a++)o+=(r=t.erfc(o)-s)/(1.1283791670955126*e.exp(-o*o)-o*r);return n<1?o:-o},t.ibetainv=function(n,o,r){var i,s,a,l,u,c,f,d,h,m,p=o-1,g=r-1,v=0;if(n<=0)return 0;if(n>=1)return 1;for(o>=1&&r>=1?(a=n<.5?n:1-n,c=(2.30753+.27061*(l=e.sqrt(-2*e.log(a))))/(1+l*(.99229+.04481*l))-l,n<.5&&(c=-c),f=(c*c-3)/6,d=2/(1/(2*o-1)+1/(2*r-1)),h=c*e.sqrt(f+d)/d-(1/(2*r-1)-1/(2*o-1))*(f+5/6-2/(3*d)),c=o/(o+r*e.exp(2*h))):(i=e.log(o/(o+r)),s=e.log(r/(o+r)),c=n<(l=e.exp(o*i)/o)/(h=l+(u=e.exp(r*s)/r))?e.pow(o*h*n,1/o):1-e.pow(r*h*(1-n),1/r)),m=-t.gammaln(o)-t.gammaln(r)+t.gammaln(o+r);v<10;v++){if(0===c||1===c)return c;if((c-=l=(u=(t.ibeta(c,o,r)-n)/(l=e.exp(p*e.log(c)+g*e.log(1-c)+m)))/(1-.5*e.min(1,u*(p/c-g/(1-c)))))<=0&&(c=.5*(c+l)),c>=1&&(c=.5*(c+l+1)),e.abs(l)<1e-8*c&&v>0)break}return c},t.ibeta=function(n,o,r){var i=0===n||1===n?0:e.exp(t.gammaln(o+r)-t.gammaln(o)-t.gammaln(r)+o*e.log(n)+r*e.log(1-n));return!(n<0||n>1)&&(n<(o+1)/(o+r+2)?i*t.betacf(n,o,r)/o:1-i*t.betacf(1-n,r,o)/r)},t.randn=function(n,o){var r,i,s,a,l;if(o||(o=n),n)return t.create(n,o,function(){return t.randn()});do{r=t._random_fn(),i=1.7156*(t._random_fn()-.5),l=(s=r-.449871)*s+(a=e.abs(i)+.386595)*(.196*a-.25472*s)}while(l>.27597&&(l>.27846||i*i>-4*e.log(r)*r*r));return i/r},t.randg=function(n,o,r){var i,s,a,l,u,c,f=n;if(r||(r=o),n||(n=1),o)return(c=t.zeros(o,r)).alter(function(){return t.randg(n)}),c;n<1&&(n+=1),i=n-1/3,s=1/e.sqrt(9*i);do{do{l=1+s*(u=t.randn())}while(l<=0);l*=l*l,a=t._random_fn()}while(a>1-.331*e.pow(u,4)&&e.log(a)>.5*u*u+i*(1-l+e.log(l)));if(n==f)return i*l;do{a=t._random_fn()}while(0===a);return e.pow(a,1/f)*i*l},function(e){for(var n=0;n<e.length;n++)(function(e){t.fn[e]=function(){return t(t.map(this,function(n){return t[e](n)}))}})(e[n])}("gammaln gammafn factorial factorialln".split(" ")),function(e){for(var n=0;n<e.length;n++)(function(e){t.fn[e]=function(){return t(t[e].apply(null,arguments))}})(e[n])}("randn".split(" "))}(e,Math),function(t,e){function n(t,n,o,r){for(var i,s=0,a=1,l=1,u=1,c=0,f=0;e.abs((l-f)/l)>r;)f=l,a=u+(i=-(n+c)*(n+o+c)*t/(n+2*c)/(n+2*c+1))*a,l=(s=l+i*s)+(i=(c+=1)*(o-c)*t/(n+2*c-1)/(n+2*c))*l,s/=u=a+i*u,a/=u,l/=u,u=1;return l/n}function o(n,o,r){var i=[.9815606342467192,.9041172563704749,.7699026741943047,.5873179542866175,.3678314989981802,.1252334085114689],s=[.04717533638651183,.10693932599531843,.16007832854334622,.20316742672306592,.2334925365383548,.24914704581340277],a=.5*n;if(a>=8)return 1;var l,u=2*t.normal.cdf(a,0,1,1,0)-1;u=u>=e.exp(-50/r)?e.pow(u,r):0;for(var c=a,f=(8-a)/(l=n>3?2:3),d=c+f,h=0,m=r-1,p=1;p<=l;p++){for(var g=0,v=.5*(d+c),y=.5*(d-c),A=1;A<=12;A++){var w,C=v+y*(6<A?i[(w=12-A+1)-1]:-i[(w=A)-1]),E=C*C;if(E>60)break;var b=2*t.normal.cdf(C,0,1,1,0)*.5-2*t.normal.cdf(C,n,1,1,0)*.5;b>=e.exp(-30/m)&&(g+=b=s[w-1]*e.exp(-.5*E)*e.pow(b,m))}h+=g*=2*y*r/e.sqrt(2*e.PI),c=d,d+=f}return(u+=h)<=e.exp(-30/o)?0:(u=e.pow(u,o))>=1?1:u}!function(e){for(var n=0;n<e.length;n++)(function(e){t[e]=function t(e,n,o){return this instanceof t?(this._a=e,this._b=n,this._c=o,this):new t(e,n,o)},t.fn[e]=function(n,o,r){var i=t[e](n,o,r);return i.data=this,i},t[e].prototype.sample=function(n){var o=this._a,r=this._b,i=this._c;return n?t.alter(n,function(){return t[e].sample(o,r,i)}):t[e].sample(o,r,i)},function(n){for(var o=0;o<n.length;o++)(function(n){t[e].prototype[n]=function(o){var r=this._a,i=this._b,s=this._c;return o||0===o||(o=this.data),"number"!=typeof o?t.fn.map.call(o,function(o){return t[e][n](o,r,i,s)}):t[e][n](o,r,i,s)}})(n[o])}("pdf cdf inv".split(" ")),function(n){for(var o=0;o<n.length;o++)(function(n){t[e].prototype[n]=function(){return t[e][n](this._a,this._b,this._c)}})(n[o])}("mean median mode variance".split(" "))})(e[n])}("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(n,o,r){return n>1||n<0?0:1==o&&1==r?1:o<512&&r<512?e.pow(n,o-1)*e.pow(1-n,r-1)/t.betafn(o,r):e.exp((o-1)*e.log(n)+(r-1)*e.log(1-n)-t.betaln(o,r))},cdf:function(e,n,o){return e>1||e<0?1*(e>1):t.ibeta(e,n,o)},inv:function(e,n,o){return t.ibetainv(e,n,o)},mean:function(t,e){return t/(t+e)},median:function(e,n){return t.ibetainv(.5,e,n)},mode:function(t,e){return(t-1)/(t+e-2)},sample:function(e,n){var o=t.randg(e);return o/(o+t.randg(n))},variance:function(t,n){return t*n/(e.pow(t+n,2)*(t+n+1))}}),t.extend(t.centralF,{pdf:function(n,o,r){var i;return n<0?0:o<=2?0===n&&o<2?1/0:0===n&&2===o?1:1/t.betafn(o/2,r/2)*e.pow(o/r,o/2)*e.pow(n,o/2-1)*e.pow(1+o/r*n,-(o+r)/2):(i=o*n/(r+n*o),o*(r/(r+n*o))/2*t.binomial.pdf((o-2)/2,(o+r-2)/2,i))},cdf:function(e,n,o){return e<0?0:t.ibeta(n*e/(n*e+o),n/2,o/2)},inv:function(e,n,o){return o/(n*(1/t.ibetainv(e,n/2,o/2)-1))},mean:function(t,e){return e>2?e/(e-2):void 0},mode:function(t,e){return t>2?e*(t-2)/(t*(e+2)):void 0},sample:function(e,n){return 2*t.randg(e/2)/e/(2*t.randg(n/2)/n)},variance:function(t,e){if(!(e<=4))return 2*e*e*(t+e-2)/(t*(e-2)*(e-2)*(e-4))}}),t.extend(t.cauchy,{pdf:function(t,n,o){return o<0?0:o/(e.pow(t-n,2)+e.pow(o,2))/e.PI},cdf:function(t,n,o){return e.atan((t-n)/o)/e.PI+.5},inv:function(t,n,o){return n+o*e.tan(e.PI*(t-.5))},median:function(t){return t},mode:function(t){return t},sample:function(n,o){return t.randn()*e.sqrt(1/(2*t.randg(.5)))*o+n}}),t.extend(t.chisquare,{pdf:function(n,o){return n<0?0:0===n&&2===o?.5:e.exp((o/2-1)*e.log(n)-n/2-o/2*e.log(2)-t.gammaln(o/2))},cdf:function(e,n){return e<0?0:t.lowRegGamma(n/2,e/2)},inv:function(e,n){return 2*t.gammapinv(e,.5*n)},mean:function(t){return t},median:function(t){return t*e.pow(1-2/(9*t),3)},mode:function(t){return t-2>0?t-2:0},sample:function(e){return 2*t.randg(e/2)},variance:function(t){return 2*t}}),t.extend(t.exponential,{pdf:function(t,n){return t<0?0:n*e.exp(-n*t)},cdf:function(t,n){return t<0?0:1-e.exp(-n*t)},inv:function(t,n){return-e.log(1-t)/n},mean:function(t){return 1/t},median:function(t){return 1/t*e.log(2)},mode:function(){return 0},sample:function(n){return-1/n*e.log(t._random_fn())},variance:function(t){return e.pow(t,-2)}}),t.extend(t.gamma,{pdf:function(n,o,r){return n<0?0:0===n&&1===o?1/r:e.exp((o-1)*e.log(n)-n/r-t.gammaln(o)-o*e.log(r))},cdf:function(e,n,o){return e<0?0:t.lowRegGamma(n,e/o)},inv:function(e,n,o){return t.gammapinv(e,n)*o},mean:function(t,e){return t*e},mode:function(t,e){if(t>1)return(t-1)*e},sample:function(e,n){return t.randg(e)*n},variance:function(t,e){return t*e*e}}),t.extend(t.invgamma,{pdf:function(n,o,r){return n<=0?0:e.exp(-(o+1)*e.log(n)-r/n-t.gammaln(o)+o*e.log(r))},cdf:function(e,n,o){return e<=0?0:1-t.lowRegGamma(n,o/e)},inv:function(e,n,o){return o/t.gammapinv(1-e,n)},mean:function(t,e){return t>1?e/(t-1):void 0},mode:function(t,e){return e/(t+1)},sample:function(e,n){return n/t.randg(e)},variance:function(t,e){if(!(t<=2))return e*e/((t-1)*(t-1)*(t-2))}}),t.extend(t.kumaraswamy,{pdf:function(t,n,o){return 0===t&&1===n?o:1===t&&1===o?n:e.exp(e.log(n)+e.log(o)+(n-1)*e.log(t)+(o-1)*e.log(1-e.pow(t,n)))},cdf:function(t,n,o){return t<0?0:t>1?1:1-e.pow(1-e.pow(t,n),o)},inv:function(t,n,o){return e.pow(1-e.pow(1-t,1/o),1/n)},mean:function(e,n){return n*t.gammafn(1+1/e)*t.gammafn(n)/t.gammafn(1+1/e+n)},median:function(t,n){return e.pow(1-e.pow(2,-1/n),1/t)},mode:function(t,n){if(t>=1&&n>=1&&1!==t&&1!==n)return e.pow((t-1)/(t*n-1),1/t)},variance:function(){throw new Error("variance not yet implemented")}}),t.extend(t.lognormal,{pdf:function(t,n,o){return t<=0?0:e.exp(-e.log(t)-.5*e.log(2*e.PI)-e.log(o)-e.pow(e.log(t)-n,2)/(2*o*o))},cdf:function(n,o,r){return n<0?0:.5+.5*t.erf((e.log(n)-o)/e.sqrt(2*r*r))},inv:function(n,o,r){return e.exp(-1.4142135623730951*r*t.erfcinv(2*n)+o)},mean:function(t,n){return e.exp(t+n*n/2)},median:function(t){return e.exp(t)},mode:function(t,n){return e.exp(t-n*n)},sample:function(n,o){return e.exp(t.randn()*o+n)},variance:function(t,n){return(e.exp(n*n)-1)*e.exp(2*t+n*n)}}),t.extend(t.noncentralt,{pdf:function(n,o,r){return e.abs(r)<1e-14?t.studentt.pdf(n,o):e.abs(n)<1e-14?e.exp(t.gammaln((o+1)/2)-r*r/2-.5*e.log(e.PI*o)-t.gammaln(o/2)):o/n*(t.noncentralt.cdf(n*e.sqrt(1+2/o),o+2,r)-t.noncentralt.cdf(n,o,r))},cdf:function(n,o,r){var i=1e-14;if(e.abs(r)<i)return t.studentt.cdf(n,o);var s=!1;n<0&&(s=!0,r=-r);for(var a=t.normal.cdf(-r,0,1),l=i+1,u=l,c=n*n/(n*n+o),f=0,d=e.exp(-r*r/2),h=e.exp(-r*r/2-.5*e.log(2)-t.gammaln(1.5))*r;f<200||u>i||l>i;)u=l,f>0&&(d*=r*r/(2*f),h*=r*r/(2*(f+.5))),a+=.5*(l=d*t.beta.cdf(c,f+.5,o/2)+h*t.beta.cdf(c,f+1,o/2)),f++;return s?1-a:a}}),t.extend(t.normal,{pdf:function(t,n,o){return e.exp(-.5*e.log(2*e.PI)-e.log(o)-e.pow(t-n,2)/(2*o*o))},cdf:function(n,o,r){return.5*(1+t.erf((n-o)/e.sqrt(2*r*r)))},inv:function(e,n,o){return-1.4142135623730951*o*t.erfcinv(2*e)+n},mean:function(t){return t},median:function(t){return t},mode:function(t){return t},sample:function(e,n){return t.randn()*n+e},variance:function(t,e){return e*e}}),t.extend(t.pareto,{pdf:function(t,n,o){return t<n?0:o*e.pow(n,o)/e.pow(t,o+1)},cdf:function(t,n,o){return t<n?0:1-e.pow(n/t,o)},inv:function(t,n,o){return n/e.pow(1-t,1/o)},mean:function(t,n){if(!(n<=1))return n*e.pow(t,n)/(n-1)},median:function(t,n){return t*(n*e.SQRT2)},mode:function(t){return t},variance:function(t,n){if(!(n<=2))return t*t*n/(e.pow(n-1,2)*(n-2))}}),t.extend(t.studentt,{pdf:function(n,o){return o=o>1e100?1e100:o,1/(e.sqrt(o)*t.betafn(.5,o/2))*e.pow(1+n*n/o,-(o+1)/2)},cdf:function(n,o){var r=o/2;return t.ibeta((n+e.sqrt(n*n+o))/(2*e.sqrt(n*n+o)),r,r)},inv:function(n,o){var r=t.ibetainv(2*e.min(n,1-n),.5*o,.5);return r=e.sqrt(o*(1-r)/r),n>.5?r:-r},mean:function(t){return t>1?0:void 0},median:function(){return 0},mode:function(){return 0},sample:function(n){return t.randn()*e.sqrt(n/(2*t.randg(n/2)))},variance:function(t){return t>2?t/(t-2):t>1?1/0:void 0}}),t.extend(t.weibull,{pdf:function(t,n,o){return t<0||n<0||o<0?0:o/n*e.pow(t/n,o-1)*e.exp(-e.pow(t/n,o))},cdf:function(t,n,o){return t<0?0:1-e.exp(-e.pow(t/n,o))},inv:function(t,n,o){return n*e.pow(-e.log(1-t),1/o)},mean:function(e,n){return e*t.gammafn(1+1/n)},median:function(t,n){return t*e.pow(e.log(2),1/n)},mode:function(t,n){return n<=1?0:t*e.pow((n-1)/n,1/n)},sample:function(n,o){return n*e.pow(-e.log(t._random_fn()),1/o)},variance:function(n,o){return n*n*t.gammafn(1+2/o)-e.pow(t.weibull.mean(n,o),2)}}),t.extend(t.uniform,{pdf:function(t,e,n){return t<e||t>n?0:1/(n-e)},cdf:function(t,e,n){return t<e?0:t<n?(t-e)/(n-e):1},inv:function(t,e,n){return e+t*(n-e)},mean:function(t,e){return.5*(t+e)},median:function(e,n){return t.mean(e,n)},mode:function(){throw new Error("mode is not yet implemented")},sample:function(e,n){return e/2+n/2+(n/2-e/2)*(2*t._random_fn()-1)},variance:function(t,n){return e.pow(n-t,2)/12}}),t.extend(t.binomial,{pdf:function(n,o,r){return 0===r||1===r?o*r===n?1:0:t.combination(o,n)*e.pow(r,n)*e.pow(1-r,o-n)},cdf:function(o,r,i){var s,a=1e-10;if(o<0)return 0;if(o>=r)return 1;if(i<0||i>1||r<=0)return NaN;var l=i,u=(o=e.floor(o))+1,c=r-o,f=u+c,d=e.exp(t.gammaln(f)-t.gammaln(c)-t.gammaln(u)+u*e.log(l)+c*e.log(1-l));return s=l<(u+1)/(f+2)?d*n(l,u,c,a):1-d*n(1-l,c,u,a),e.round(1/a*(1-s))/(1/a)}}),t.extend(t.negbin,{pdf:function(n,o,r){return n===n>>>0&&(n<0?0:t.combination(n+o-1,o-1)*e.pow(1-r,n)*e.pow(r,o))},cdf:function(e,n,o){var r=0,i=0;if(e<0)return 0;for(;i<=e;i++)r+=t.negbin.pdf(i,n,o);return r}}),t.extend(t.hypgeom,{pdf:function(n,o,r,i){if(n!=n|0)return!1;if(n<0||n<r-(o-i))return 0;if(n>i||n>r)return 0;if(2*r>o)return 2*i>o?t.hypgeom.pdf(o-r-i+n,o,o-r,o-i):t.hypgeom.pdf(i-n,o,o-r,i);if(2*i>o)return t.hypgeom.pdf(r-n,o,r,o-i);if(r<i)return t.hypgeom.pdf(n,o,i,r);for(var s=1,a=0,l=0;l<n;l++){for(;s>1&&a<i;)s*=1-r/(o-a),a++;s*=(i-l)*(r-l)/((l+1)*(o-r-i+l+1))}for(;a<i;a++)s*=1-r/(o-a);return e.min(1,e.max(0,s))},cdf:function(n,o,r,i){if(n<0||n<r-(o-i))return 0;if(n>=i||n>=r)return 1;if(2*r>o)return 2*i>o?t.hypgeom.cdf(o-r-i+n,o,o-r,o-i):1-t.hypgeom.cdf(i-n-1,o,o-r,i);if(2*i>o)return 1-t.hypgeom.cdf(r-n-1,o,r,o-i);if(r<i)return t.hypgeom.cdf(n,o,i,r);for(var s=1,a=1,l=0,u=0;u<n;u++){for(;s>1&&l<i;){var c=1-r/(o-l);a*=c,s*=c,l++}s+=a*=(i-u)*(r-u)/((u+1)*(o-r-i+u+1))}for(;l<i;l++)s*=1-r/(o-l);return e.min(1,e.max(0,s))}}),t.extend(t.poisson,{pdf:function(n,o){return o<0||n%1!=0||n<0?0:e.pow(o,n)*e.exp(-o)/t.factorial(n)},cdf:function(e,n){var o=[],r=0;if(e<0)return 0;for(;r<=e;r++)o.push(t.poisson.pdf(r,n));return t.sum(o)},mean:function(t){return t},variance:function(t){return t},sampleSmall:function(n){var o=1,r=0,i=e.exp(-n);do{r++,o*=t._random_fn()}while(o>i);return r-1},sampleLarge:function(n){var o,r,i,s,a,l,u,c,f,d,h=n;for(s=e.sqrt(h),a=e.log(h),l=.02483*(u=.931+2.53*s)-.059,c=1.1239+1.1328/(u-3.4),f=.9277-3.6224/(u-2);;){if(r=e.random()-.5,i=e.random(),d=.5-e.abs(r),o=e.floor((2*l/d+u)*r+h+.43),d>=.07&&i<=f)return o;if(!(o<0||d<.013&&i>d)&&e.log(i)+e.log(c)-e.log(l/(d*d)+u)<=o*a-h-t.loggam(o+1))return o}},sample:function(t){return t<10?this.sampleSmall(t):this.sampleLarge(t)}}),t.extend(t.triangular,{pdf:function(t,e,n,o){return n<=e||o<e||o>n?NaN:t<e||t>n?0:t<o?2*(t-e)/((n-e)*(o-e)):t===o?2/(n-e):2*(n-t)/((n-e)*(n-o))},cdf:function(t,n,o,r){return o<=n||r<n||r>o?NaN:t<=n?0:t>=o?1:t<=r?e.pow(t-n,2)/((o-n)*(r-n)):1-e.pow(o-t,2)/((o-n)*(o-r))},inv:function(t,n,o,r){return o<=n||r<n||r>o?NaN:t<=(r-n)/(o-n)?n+(o-n)*e.sqrt(t*((r-n)/(o-n))):n+(o-n)*(1-e.sqrt((1-t)*(1-(r-n)/(o-n))))},mean:function(t,e,n){return(t+e+n)/3},median:function(t,n,o){return o<=(t+n)/2?n-e.sqrt((n-t)*(n-o))/e.sqrt(2):o>(t+n)/2?t+e.sqrt((n-t)*(o-t))/e.sqrt(2):void 0},mode:function(t,e,n){return n},sample:function(n,o,r){var i=t._random_fn();return i<(r-n)/(o-n)?n+e.sqrt(i*(o-n)*(r-n)):o-e.sqrt((1-i)*(o-n)*(o-r))},variance:function(t,e,n){return(t*t+e*e+n*n-t*e-t*n-e*n)/18}}),t.extend(t.arcsine,{pdf:function(t,n,o){return o<=n?NaN:t<=n||t>=o?0:2/e.PI*e.pow(e.pow(o-n,2)-e.pow(2*t-n-o,2),-.5)},cdf:function(t,n,o){return t<n?0:t<o?2/e.PI*e.asin(e.sqrt((t-n)/(o-n))):1},inv:function(t,n,o){return n+(.5-.5*e.cos(e.PI*t))*(o-n)},mean:function(t,e){return e<=t?NaN:(t+e)/2},median:function(t,e){return e<=t?NaN:(t+e)/2},mode:function(){throw new Error("mode is not yet implemented")},sample:function(n,o){return(n+o)/2+(o-n)/2*e.sin(2*e.PI*t.uniform.sample(0,1))},variance:function(t,n){return n<=t?NaN:e.pow(n-t,2)/8}}),t.extend(t.laplace,{pdf:function(t,n,o){return o<=0?0:e.exp(-e.abs(t-n)/o)/(2*o)},cdf:function(t,n,o){return o<=0?0:t<n?.5*e.exp((t-n)/o):1-.5*e.exp(-(t-n)/o)},mean:function(t){return t},median:function(t){return t},mode:function(t){return t},variance:function(t,e){return 2*e*e},sample:function(n,o){var r,i=t._random_fn()-.5;return n-o*((r=i)/e.abs(r))*e.log(1-2*e.abs(i))}}),t.extend(t.tukey,{cdf:function(n,r,i){var s=r,a=[.9894009349916499,.9445750230732326,.8656312023878318,.755404408355003,.6178762444026438,.45801677765722737,.2816035507792589,.09501250983763744],l=[.027152459411754096,.062253523938647894,.09515851168249279,.12462897125553388,.14959598881657674,.16915651939500254,.18260341504492358,.1894506104550685];if(n<=0)return 0;if(i<2||s<2)return NaN;if(!Number.isFinite(n))return 1;if(i>25e3)return o(n,1,s);var u,c=.5*i,f=c*e.log(i)-i*e.log(2)-t.gammaln(c),d=c-1,h=.25*i;u=i<=100?1:i<=800?.5:i<=5e3?.25:.125,f+=e.log(u);for(var m=0,p=1;p<=50;p++){for(var g=0,v=(2*p-1)*u,y=1;y<=16;y++){var A,w;8<y?(A=y-8-1,w=f+d*e.log(v+a[A]*u)-(a[A]*u+v)*h):(A=y-1,w=f+d*e.log(v-a[A]*u)+(a[A]*u-v)*h),w>=-30&&(g+=o(8<y?n*e.sqrt(.5*(a[A]*u+v)):n*e.sqrt(.5*(-a[A]*u+v)),1,s)*l[A]*e.exp(w))}if(p*u>=1&&g<=1e-14)break;m+=g}if(g>1e-14)throw new Error("tukey.cdf failed to converge");return m>1&&(m=1),m},inv:function(n,o,r){if(r<2||o<2)return NaN;if(n<0||n>1)return NaN;if(0===n)return 0;if(1===n)return 1/0;var i,s=function(t,n,o){var r=.5-.5*t,i=e.sqrt(e.log(1/(r*r))),s=i+((((-453642210148e-16*i-.204231210125)*i-.342242088547)*i-1)*i+.322232421088)/((((.0038560700634*i+.10353775285)*i+.531103462366)*i+.588581570495)*i+.099348462606);o<120&&(s+=(s*s*s+s)/o/4);var a=.8832-.2368*s;return o<120&&(a+=-1.214/o+1.208*s/o),s*(a*e.log(n-1)+1.4142)}(n,o,r),a=t.tukey.cdf(s,o,r)-n;i=a>0?e.max(0,s-1):s+1;for(var l,u=t.tukey.cdf(i,o,r)-n,c=1;c<50;c++)if(l=i-u*(i-s)/(u-a),a=u,s=i,l<0&&(l=0,u=-n),u=t.tukey.cdf(l,o,r)-n,i=l,e.abs(i-s)<1e-4)return l;throw new Error("tukey.inv failed to converge")}})}(e,Math),function(t,e){var n,o,r=Array.prototype.push,i=t.utils.isArray;function s(e){return i(e)||e instanceof t}t.extend({add:function(e,n){return s(n)?(s(n[0])||(n=[n]),t.map(e,function(t,e,o){return t+n[e][o]})):t.map(e,function(t){return t+n})},subtract:function(e,n){return s(n)?(s(n[0])||(n=[n]),t.map(e,function(t,e,o){return t-n[e][o]||0})):t.map(e,function(t){return t-n})},divide:function(e,n){return s(n)?(s(n[0])||(n=[n]),t.multiply(e,t.inv(n))):t.map(e,function(t){return t/n})},multiply:function(e,n){var o,r,i,a,l,u,c,f;if(void 0===e.length&&void 0===n.length)return e*n;if(l=e.length,u=e[0].length,c=t.zeros(l,i=s(n)?n[0].length:u),f=0,s(n)){for(;f<i;f++)for(o=0;o<l;o++){for(a=0,r=0;r<u;r++)a+=e[o][r]*n[r][f];c[o][f]=a}return 1===l&&1===f?c[0][0]:c}return t.map(e,function(t){return t*n})},outer:function(e,n){return t.multiply(e.map(function(t){return[t]}),[n])},dot:function(e,n){s(e[0])||(e=[e]),s(n[0])||(n=[n]);for(var o,r,i=1===e[0].length&&1!==e.length?t.transpose(e):e,a=1===n[0].length&&1!==n.length?t.transpose(n):n,l=[],u=0,c=i.length,f=i[0].length;u<c;u++){for(l[u]=[],o=0,r=0;r<f;r++)o+=i[u][r]*a[u][r];l[u]=o}return 1===l.length?l[0]:l},pow:function(n,o){return t.map(n,function(t){return e.pow(t,o)})},exp:function(n){return t.map(n,function(t){return e.exp(t)})},log:function(n){return t.map(n,function(t){return e.log(t)})},abs:function(n){return t.map(n,function(t){return e.abs(t)})},norm:function(t,n){var o=0,r=0;for(isNaN(n)&&(n=2),s(t[0])&&(t=t[0]);r<t.length;r++)o+=e.pow(e.abs(t[r]),n);return e.pow(o,1/n)},angle:function(n,o){return e.acos(t.dot(n,o)/(t.norm(n)*t.norm(o)))},aug:function(t,e){var n,o=[];for(n=0;n<t.length;n++)o.push(t[n].slice());for(n=0;n<o.length;n++)r.apply(o[n],e[n]);return o},inv:function(e){for(var n,o=e.length,r=e[0].length,i=t.identity(o,r),s=t.gauss_jordan(e,i),a=[],l=0;l<o;l++)for(a[l]=[],n=r;n<s[0].length;n++)a[l][n-r]=s[l][n];return a},det:function t(e){if(2===e.length)return e[0][0]*e[1][1]-e[0][1]*e[1][0];for(var n=0,o=0;o<e.length;o++){for(var r=[],i=1;i<e.length;i++){r[i-1]=[];for(var s=0;s<e.length;s++)s<o?r[i-1][s]=e[i][s]:s>o&&(r[i-1][s-1]=e[i][s])}var a=o%2?-1:1;n+=t(r)*e[0][o]*a}return n},gauss_elimination:function(n,o){var r,i,s,a,l=0,u=0,c=n.length,f=n[0].length,d=1,h=0,m=[];for(r=(n=t.aug(n,o))[0].length,l=0;l<c;l++){for(i=n[l][l],u=l,a=l+1;a<f;a++)i<e.abs(n[a][l])&&(i=n[a][l],u=a);if(u!=l)for(a=0;a<r;a++)s=n[l][a],n[l][a]=n[u][a],n[u][a]=s;for(u=l+1;u<c;u++)for(d=n[u][l]/n[l][l],a=l;a<r;a++)n[u][a]=n[u][a]-d*n[l][a]}for(l=c-1;l>=0;l--){for(h=0,u=l+1;u<=c-1;u++)h+=m[u]*n[l][u];m[l]=(n[l][r-1]-h)/n[l][l]}return m},gauss_jordan:function(n,o){var r,i,s,a=t.aug(n,o),l=a.length,u=a[0].length,c=0;for(i=0;i<l;i++){var f=i;for(s=i+1;s<l;s++)e.abs(a[s][i])>e.abs(a[f][i])&&(f=s);var d=a[i];for(a[i]=a[f],a[f]=d,s=i+1;s<l;s++)for(c=a[s][i]/a[i][i],r=i;r<u;r++)a[s][r]-=a[i][r]*c}for(i=l-1;i>=0;i--){for(c=a[i][i],s=0;s<i;s++)for(r=u-1;r>i-1;r--)a[s][r]-=a[i][r]*a[s][i]/c;for(a[i][i]/=c,r=l;r<u;r++)a[i][r]/=c}return a},triaUpSolve:function(e,n){var o,r=e[0].length,i=t.zeros(1,r)[0],s=!1;return null!=n[0].length&&(n=n.map(function(t){return t[0]}),s=!0),t.arange(r-1,-1,-1).forEach(function(s){o=t.arange(s+1,r).map(function(t){return i[t]*e[s][t]}),i[s]=(n[s]-t.sum(o))/e[s][s]}),s?i.map(function(t){return[t]}):i},triaLowSolve:function(e,n){var o,r=e[0].length,i=t.zeros(1,r)[0],s=!1;return null!=n[0].length&&(n=n.map(function(t){return t[0]}),s=!0),t.arange(r).forEach(function(r){o=t.arange(r).map(function(t){return e[r][t]*i[t]}),i[r]=(n[r]-t.sum(o))/e[r][r]}),s?i.map(function(t){return[t]}):i},lu:function(e){var n,o=e.length,r=t.identity(o),i=t.zeros(e.length,e[0].length);return t.arange(o).forEach(function(t){i[0][t]=e[0][t]}),t.arange(1,o).forEach(function(s){t.arange(s).forEach(function(o){n=t.arange(o).map(function(t){return r[s][t]*i[t][o]}),r[s][o]=(e[s][o]-t.sum(n))/i[o][o]}),t.arange(s,o).forEach(function(o){n=t.arange(s).map(function(t){return r[s][t]*i[t][o]}),i[s][o]=e[n.length][o]-t.sum(n)})}),[r,i]},cholesky:function(n){var o,r=n.length,i=t.zeros(n.length,n[0].length);return t.arange(r).forEach(function(s){o=t.arange(s).map(function(t){return e.pow(i[s][t],2)}),i[s][s]=e.sqrt(n[s][s]-t.sum(o)),t.arange(s+1,r).forEach(function(e){o=t.arange(s).map(function(t){return i[s][t]*i[e][t]}),i[e][s]=(n[s][e]-t.sum(o))/i[s][s]})}),i},gauss_jacobi:function(n,o,r,i){for(var s,a,l,u,c=0,f=0,d=n.length,h=[],m=[],p=[];c<d;c++)for(h[c]=[],m[c]=[],p[c]=[],f=0;f<d;f++)c>f?(h[c][f]=n[c][f],m[c][f]=p[c][f]=0):c<f?(m[c][f]=n[c][f],h[c][f]=p[c][f]=0):(p[c][f]=n[c][f],h[c][f]=m[c][f]=0);for(l=t.multiply(t.multiply(t.inv(p),t.add(h,m)),-1),a=t.multiply(t.inv(p),o),s=r,u=t.add(t.multiply(l,r),a),c=2;e.abs(t.norm(t.subtract(u,s)))>i;)s=u,u=t.add(t.multiply(l,s),a),c++;return u},gauss_seidel:function(n,o,r,i){for(var s,a,l,u,c,f=0,d=n.length,h=[],m=[],p=[];f<d;f++)for(h[f]=[],m[f]=[],p[f]=[],s=0;s<d;s++)f>s?(h[f][s]=n[f][s],m[f][s]=p[f][s]=0):f<s?(m[f][s]=n[f][s],h[f][s]=p[f][s]=0):(p[f][s]=n[f][s],h[f][s]=m[f][s]=0);for(u=t.multiply(t.multiply(t.inv(t.add(p,h)),m),-1),l=t.multiply(t.inv(t.add(p,h)),o),a=r,c=t.add(t.multiply(u,r),l),f=2;e.abs(t.norm(t.subtract(c,a)))>i;)a=c,c=t.add(t.multiply(u,a),l),f+=1;return c},SOR:function(n,o,r,i,s){for(var a,l,u,c,f,d=0,h=n.length,m=[],p=[],g=[];d<h;d++)for(m[d]=[],p[d]=[],g[d]=[],a=0;a<h;a++)d>a?(m[d][a]=n[d][a],p[d][a]=g[d][a]=0):d<a?(p[d][a]=n[d][a],m[d][a]=g[d][a]=0):(g[d][a]=n[d][a],m[d][a]=p[d][a]=0);for(c=t.multiply(t.inv(t.add(g,t.multiply(m,s))),t.subtract(t.multiply(g,1-s),t.multiply(p,s))),u=t.multiply(t.multiply(t.inv(t.add(g,t.multiply(m,s))),o),s),l=r,f=t.add(t.multiply(c,r),u),d=2;e.abs(t.norm(t.subtract(f,l)))>i;)l=f,f=t.add(t.multiply(c,l),u),d++;return f},householder:function(n){for(var o,r,i,s,a=n.length,l=n[0].length,u=0,c=[],f=[];u<a-1;u++){for(o=0,s=u+1;s<l;s++)o+=n[s][u]*n[s][u];for(o=(n[u+1][u]>0?-1:1)*e.sqrt(o),r=e.sqrt((o*o-n[u+1][u]*o)/2),(c=t.zeros(a,1))[u+1][0]=(n[u+1][u]-o)/(2*r),i=u+2;i<a;i++)c[i][0]=n[i][u]/(2*r);f=t.subtract(t.identity(a,l),t.multiply(t.multiply(c,t.transpose(c)),2)),n=t.multiply(f,t.multiply(n,f))}return n},QR:(n=t.sum,o=t.arange,function(r){var i,s,a,l=r.length,u=r[0].length,c=t.zeros(u,u);for(r=t.copy(r),s=0;s<u;s++){for(c[s][s]=e.sqrt(n(o(l).map(function(t){return r[t][s]*r[t][s]}))),i=0;i<l;i++)r[i][s]=r[i][s]/c[s][s];for(a=s+1;a<u;a++)for(c[s][a]=n(o(l).map(function(t){return r[t][s]*r[t][a]})),i=0;i<l;i++)r[i][a]=r[i][a]-r[i][s]*c[s][a]}return[r,c]}),lstsq:function(e,n){var o=!1;void 0===n[0].length&&(n=n.map(function(t){return[t]}),o=!0);var r=t.QR(e),i=r[0],s=r[1],a=e[0].length,l=t.slice(i,{col:{end:a}}),u=function(e){var n=(e=t.copy(e)).length,o=t.identity(n);return t.arange(n-1,-1,-1).forEach(function(n){t.sliceAssign(o,{row:n},t.divide(t.slice(o,{row:n}),e[n][n])),t.sliceAssign(e,{row:n},t.divide(t.slice(e,{row:n}),e[n][n])),t.arange(n).forEach(function(r){var i=t.multiply(e[r][n],-1),s=t.slice(e,{row:r}),a=t.multiply(t.slice(e,{row:n}),i);t.sliceAssign(e,{row:r},t.add(s,a));var l=t.slice(o,{row:r}),u=t.multiply(t.slice(o,{row:n}),i);t.sliceAssign(o,{row:r},t.add(l,u))})}),o}(t.slice(s,{row:{end:a}})),c=t.transpose(l);void 0===c[0].length&&(c=[c]);var f=t.multiply(t.multiply(u,c),n);return void 0===f.length&&(f=[[f]]),o?f.map(function(t){return t[0]}):f},jacobi:function(n){for(var o,r,i,s,a,l,u,c=1,f=n.length,d=t.identity(f,f),h=[];1===c;){for(a=n[0][1],i=0,s=1,o=0;o<f;o++)for(r=0;r<f;r++)o!=r&&a<e.abs(n[o][r])&&(a=e.abs(n[o][r]),i=o,s=r);for(l=n[i][i]===n[s][s]?n[i][s]>0?e.PI/4:-e.PI/4:e.atan(2*n[i][s]/(n[i][i]-n[s][s]))/2,(u=t.identity(f,f))[i][i]=e.cos(l),u[i][s]=-e.sin(l),u[s][i]=e.sin(l),u[s][s]=e.cos(l),d=t.multiply(d,u),n=t.multiply(t.multiply(t.inv(u),n),u),c=0,o=1;o<f;o++)for(r=1;r<f;r++)o!=r&&e.abs(n[o][r])>.001&&(c=1)}for(o=0;o<f;o++)h.push(n[o][o]);return[d,h]},rungekutta:function(t,e,n,o,r,i){var s,a,l;if(2===i)for(;o<=n;)r+=((s=e*t(o,r))+(a=e*t(o+e,r+s)))/2,o+=e;if(4===i)for(;o<=n;)r+=((s=e*t(o,r))+2*(a=e*t(o+e/2,r+s/2))+2*(l=e*t(o+e/2,r+a/2))+e*t(o+e,r+l))/6,o+=e;return r},romberg:function(t,n,o,r){for(var i,s,a,l,u,c=0,f=(o-n)/2,d=[],h=[],m=[];c<r/2;){for(u=t(n),a=n,l=0;a<=o;a+=f,l++)d[l]=a;for(i=d.length,a=1;a<i-1;a++)u+=(a%2!=0?4:2)*t(d[a]);u=f/3*(u+t(o)),m[c]=u,f/=2,c++}for(s=m.length,i=1;1!==s;){for(a=0;a<s-1;a++)h[a]=(e.pow(4,i)*m[a+1]-m[a])/(e.pow(4,i)-1);s=h.length,m=h,h=[],i++}return m},richardson:function(t,n,o,r){function i(t,e){for(var n,o=0,r=t.length;o<r;o++)t[o]===e&&(n=o);return n}for(var s,a,l,u,c,f=e.abs(o-t[i(t,o)+1]),d=0,h=[],m=[];r>=f;)s=i(t,o+r),a=i(t,o),h[d]=(n[s]-2*n[a]+n[2*a-s])/(r*r),r/=2,d++;for(u=h.length,l=1;1!=u;){for(c=0;c<u-1;c++)m[c]=(e.pow(4,l)*h[c+1]-h[c])/(e.pow(4,l)-1);u=m.length,h=m,m=[],l++}return h},simpson:function(t,e,n,o){for(var r,i=(n-e)/o,s=t(e),a=[],l=e,u=0,c=1;l<=n;l+=i,u++)a[u]=l;for(r=a.length;c<r-1;c++)s+=(c%2!=0?4:2)*t(a[c]);return i/3*(s+t(n))},hermite:function(t,e,n,o){for(var r,i=t.length,s=0,a=0,l=[],u=[],c=[],f=[];a<i;a++){for(l[a]=1,r=0;r<i;r++)a!=r&&(l[a]*=(o-t[r])/(t[a]-t[r]));for(u[a]=0,r=0;r<i;r++)a!=r&&(u[a]+=1/(t[a]-t[r]));c[a]=(1-2*(o-t[a])*u[a])*(l[a]*l[a]),f[a]=(o-t[a])*(l[a]*l[a]),s+=c[a]*e[a]+f[a]*n[a]}return s},lagrange:function(t,e,n){for(var o,r,i=0,s=0,a=t.length;s<a;s++){for(r=e[s],o=0;o<a;o++)s!=o&&(r*=(n-t[o])/(t[s]-t[o]));i+=r}return i},cubic_spline:function(e,n,o){for(var r,i,s=e.length,a=0,l=[],u=[],c=[],f=[],d=[],h=[];a<s-1;a++)f[a]=e[a+1]-e[a];for(c[0]=0,a=1;a<s-1;a++)c[a]=3/f[a]*(n[a+1]-n[a])-3/f[a-1]*(n[a]-n[a-1]);for(a=1;a<s-1;a++)l[a]=[],u[a]=[],l[a][a-1]=f[a-1],l[a][a]=2*(f[a-1]+f[a]),l[a][a+1]=f[a],u[a][0]=c[a];for(i=t.multiply(t.inv(l),u),r=0;r<s-1;r++)d[r]=(n[r+1]-n[r])/f[r]-f[r]*(i[r+1][0]+2*i[r][0])/3,h[r]=(i[r+1][0]-i[r][0])/(3*f[r]);for(r=0;r<s&&!(e[r]>o);r++);return n[r-=1]+(o-e[r])*d[r]+t.sq(o-e[r])*i[r]+(o-e[r])*t.sq(o-e[r])*h[r]},gauss_quadrature:function(){throw new Error("gauss_quadrature not yet implemented")},PCA:function(e){var n,o,r,i,s,a=e.length,l=e[0].length,u=0,c=[],f=[],d=[],h=[],m=[],p=[],g=[];for(u=0;u<a;u++)c[u]=t.sum(e[u])/l;for(u=0;u<l;u++)for(m[u]=[],n=0;n<a;n++)m[u][n]=e[n][u]-c[n];for(m=t.transpose(m),u=0;u<a;u++)for(p[u]=[],n=0;n<a;n++)p[u][n]=t.dot([m[u]],[m[n]])/(l-1);for(s=(r=t.jacobi(p))[0],f=r[1],g=t.transpose(s),u=0;u<f.length;u++)for(n=u;n<f.length;n++)f[u]<f[n]&&(o=f[u],f[u]=f[n],f[n]=o,d=g[u],g[u]=g[n],g[n]=d);for(i=t.transpose(m),u=0;u<a;u++)for(h[u]=[],n=0;n<i.length;n++)h[u][n]=t.dot([g[u]],[i[n]]);return[e,f,g,h]}}),function(e){for(var n=0;n<e.length;n++)(function(e){t.fn[e]=function(n,o){var r=this;return o?(setTimeout(function(){o.call(r,t.fn[e].call(r,n))},15),this):"number"==typeof t[e](this,n)?t[e](this,n):t(t[e](this,n))}})(e[n])}("add divide multiply subtract dot pow exp log abs norm angle".split(" "))}(e,Math),function(t,e){var n=[].slice,o=t.utils.isNumber,r=t.utils.isArray;function i(t,n,o,r){if(t>1||o>1||t<=0||o<=0)throw new Error("Proportions should be greater than 0 and less than 1");var i=(t*n+o*r)/(n+r);return(t-o)/e.sqrt(i*(1-i)*(1/n+1/r))}t.extend({zscore:function(){var e=n.call(arguments);return o(e[1])?(e[0]-e[1])/e[2]:(e[0]-t.mean(e[1]))/t.stdev(e[1],e[2])},ztest:function(){var o,i=n.call(arguments);return r(i[1])?(o=t.zscore(i[0],i[1],i[3]),1===i[2]?t.normal.cdf(-e.abs(o),0,1):2*t.normal.cdf(-e.abs(o),0,1)):i.length>2?(o=t.zscore(i[0],i[1],i[2]),1===i[3]?t.normal.cdf(-e.abs(o),0,1):2*t.normal.cdf(-e.abs(o),0,1)):(o=i[0],1===i[1]?t.normal.cdf(-e.abs(o),0,1):2*t.normal.cdf(-e.abs(o),0,1))}}),t.extend(t.fn,{zscore:function(t,e){return(t-this.mean())/this.stdev(e)},ztest:function(n,o,r){var i=e.abs(this.zscore(n,r));return 1===o?t.normal.cdf(-i,0,1):2*t.normal.cdf(-i,0,1)}}),t.extend({tscore:function(){var o=n.call(arguments);return 4===o.length?(o[0]-o[1])/(o[2]/e.sqrt(o[3])):(o[0]-t.mean(o[1]))/(t.stdev(o[1],!0)/e.sqrt(o[1].length))},ttest:function(){var r,i=n.call(arguments);return 5===i.length?(r=e.abs(t.tscore(i[0],i[1],i[2],i[3])),1===i[4]?t.studentt.cdf(-r,i[3]-1):2*t.studentt.cdf(-r,i[3]-1)):o(i[1])?(r=e.abs(i[0]),1==i[2]?t.studentt.cdf(-r,i[1]-1):2*t.studentt.cdf(-r,i[1]-1)):(r=e.abs(t.tscore(i[0],i[1])),1==i[2]?t.studentt.cdf(-r,i[1].length-1):2*t.studentt.cdf(-r,i[1].length-1))}}),t.extend(t.fn,{tscore:function(t){return(t-this.mean())/(this.stdev(!0)/e.sqrt(this.cols()))},ttest:function(n,o){return 1===o?1-t.studentt.cdf(e.abs(this.tscore(n)),this.cols()-1):2*t.studentt.cdf(-e.abs(this.tscore(n)),this.cols()-1)}}),t.extend({anovafscore:function(){var o,r,i,s,a,l,u,c,f=n.call(arguments);if(1===f.length){for(a=new Array(f[0].length),u=0;u<f[0].length;u++)a[u]=f[0][u];f=a}for(r=new Array,u=0;u<f.length;u++)r=r.concat(f[u]);for(i=t.mean(r),o=0,u=0;u<f.length;u++)o+=f[u].length*e.pow(t.mean(f[u])-i,2);for(o/=f.length-1,l=0,u=0;u<f.length;u++)for(s=t.mean(f[u]),c=0;c<f[u].length;c++)l+=e.pow(f[u][c]-s,2);return o/(l/(r.length-f.length))},anovaftest:function(){var e,r,i,s,a=n.call(arguments);if(o(a[0]))return 1-t.centralF.cdf(a[0],a[1],a[2]);var l=t.anovafscore(a);for(e=a.length-1,i=0,s=0;s<a.length;s++)i+=a[s].length;return r=i-e-1,1-t.centralF.cdf(l,e,r)},ftest:function(e,n,o){return 1-t.centralF.cdf(e,n,o)}}),t.extend(t.fn,{anovafscore:function(){return t.anovafscore(this.toArray())},anovaftes:function(){var e,n=0;for(e=0;e<this.length;e++)n+=this[e].length;return t.ftest(this.anovafscore(),this.length-1,n-this.length)}}),t.extend({qscore:function(){var r,i,s,a,l,u=n.call(arguments);return o(u[0])?(r=u[0],i=u[1],s=u[2],a=u[3],l=u[4]):(r=t.mean(u[0]),i=t.mean(u[1]),s=u[0].length,a=u[1].length,l=u[2]),e.abs(r-i)/(l*e.sqrt((1/s+1/a)/2))},qtest:function(){var e,o=n.call(arguments);3===o.length?(e=o[0],o=o.slice(1)):7===o.length?(e=t.qscore(o[0],o[1],o[2],o[3],o[4]),o=o.slice(5)):(e=t.qscore(o[0],o[1],o[2]),o=o.slice(3));var r=o[0],i=o[1];return 1-t.tukey.cdf(e,i,r-i)},tukeyhsd:function(e){for(var n=t.pooledstdev(e),o=e.map(function(e){return t.mean(e)}),r=e.reduce(function(t,e){return t+e.length},0),i=[],s=0;s<e.length;++s)for(var a=s+1;a<e.length;++a){var l=t.qtest(o[s],o[a],e[s].length,e[a].length,n,r,e.length);i.push([[s,a],l])}return i}}),t.extend({normalci:function(){var o,r=n.call(arguments),i=new Array(2);return o=4===r.length?e.abs(t.normal.inv(r[1]/2,0,1)*r[2]/e.sqrt(r[3])):e.abs(t.normal.inv(r[1]/2,0,1)*t.stdev(r[2])/e.sqrt(r[2].length)),i[0]=r[0]-o,i[1]=r[0]+o,i},tci:function(){var o,r=n.call(arguments),i=new Array(2);return o=4===r.length?e.abs(t.studentt.inv(r[1]/2,r[3]-1)*r[2]/e.sqrt(r[3])):e.abs(t.studentt.inv(r[1]/2,r[2].length-1)*t.stdev(r[2],!0)/e.sqrt(r[2].length)),i[0]=r[0]-o,i[1]=r[0]+o,i},significant:function(t,e){return t<e}}),t.extend(t.fn,{normalci:function(e,n){return t.normalci(e,n,this.toArray())},tci:function(e,n){return t.tci(e,n,this.toArray())}}),t.extend(t.fn,{oneSidedDifferenceOfProportions:function(e,n,o,r){var s=i(e,n,o,r);return t.ztest(s,1)},twoSidedDifferenceOfProportions:function(e,n,o,r){var s=i(e,n,o,r);return t.ztest(s,2)}})}(e,Math),e.models=function(){function t(t,n){var o=t.length,r=n[0].length-1,i=o-r-1,s=e.lstsq(n,t),a=e.multiply(n,s.map(function(t){return[t]})).map(function(t){return t[0]}),l=e.subtract(t,a),u=e.mean(t),c=e.sum(a.map(function(t){return Math.pow(t-u,2)})),f=e.sum(t.map(function(t,e){return Math.pow(t-a[e],2)})),d=c+f;return{exog:n,endog:t,nobs:o,df_model:r,df_resid:i,coef:s,predict:a,resid:l,ybar:u,SST:d,SSE:c,SSR:f,R2:c/d}}function n(n){var o,r,i=(o=n.exog,r=o[0].length,e.arange(r).map(function(n){var i=e.arange(r).filter(function(t){return t!==n});return t(e.col(o,n).map(function(t){return t[0]}),e.col(o,i))})),s=Math.sqrt(n.SSR/n.df_resid),a=i.map(function(t){var e=t.SST,n=t.R2;return s/Math.sqrt(e*(1-n))}),l=n.coef.map(function(t,e){return(t-0)/a[e]}),u=l.map(function(t){var o=e.studentt.cdf(t,n.df_resid);return 2*(o>.5?1-o:o)}),c=e.studentt.inv(.975,n.df_resid),f=n.coef.map(function(t,e){var n=c*a[e];return[t-n,t+n]});return{se:a,t:l,p:u,sigmaHat:s,interval95:f}}return{ols:function(o,r){var i=t(o,r),s=n(i),a=function(t){var n,o,r,i=t.R2/t.df_model/((1-t.R2)/t.df_resid);return{F_statistic:i,pvalue:1-(n=i,o=t.df_model,r=t.df_resid,e.beta.cdf(n/(r/o+n),o/2,r/2))}}(i),l=1-(1-i.R2)*((i.nobs-1)/i.df_resid);return i.t=s,i.f=a,i.adjust_R2=l,i}}}(),e.extend({buildxmatrix:function(){for(var t=new Array(arguments.length),n=0;n<arguments.length;n++){t[n]=[1].concat(arguments[n])}return e(t)},builddxmatrix:function(){for(var t=new Array(arguments[0].length),n=0;n<arguments[0].length;n++){t[n]=[1].concat(arguments[0][n])}return e(t)},buildjxmatrix:function(t){for(var n=new Array(t.length),o=0;o<t.length;o++)n[o]=t[o];return e.builddxmatrix(n)},buildymatrix:function(t){return e(t).transpose()},buildjymatrix:function(t){return t.transpose()},matrixmult:function(t,n){var o,r,i,s,a;if(t.cols()==n.rows()){if(n.rows()>1){for(s=[],o=0;o<t.rows();o++)for(s[o]=[],r=0;r<n.cols();r++){for(a=0,i=0;i<t.cols();i++)a+=t.toArray()[o][i]*n.toArray()[i][r];s[o][r]=a}return e(s)}for(s=[],o=0;o<t.rows();o++)for(s[o]=[],r=0;r<n.cols();r++){for(a=0,i=0;i<t.cols();i++)a+=t.toArray()[o][i]*n.toArray()[r];s[o][r]=a}return e(s)}},regress:function(t,n){var o=e.xtranspxinv(t),r=t.transpose(),i=e.matrixmult(e(o),r);return e.matrixmult(i,n)},regresst:function(t,n,o){var r=e.regress(t,n),i={anova:{}},s=e.jMatYBar(t,r);i.yBar=s;var a=n.mean();i.anova.residuals=e.residuals(n,s),i.anova.ssr=e.ssr(s,a),i.anova.msr=i.anova.ssr/(t[0].length-1),i.anova.sse=e.sse(n,s),i.anova.mse=i.anova.sse/(n.length-(t[0].length-1)-1),i.anova.sst=e.sst(n,a),i.anova.mst=i.anova.sst/(n.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=e.anovaftest(i.anova.fratio,t[0].length-1,n.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 l,u,c,f=e.xtranspxinv(t),d=0;d<r.length;d++)l=Math.sqrt(i.anova.mse*Math.abs(f[d][d])),u=Math.abs(r[d]/l),c=e.ttest(u,n.length-t[0].length-1,o),i.stats[d]=[r[d],l,u,c];return i.regress=r,i},xtranspx:function(t){return e.matrixmult(t.transpose(),t)},xtranspxinv:function(t){var n=e.matrixmult(t.transpose(),t);return e.inv(n)},jMatYBar:function(t,n){var o=e.matrixmult(t,n);return new e(o)},residuals:function(t,n){return e.matrixsubtract(t,n)},ssr:function(t,e){for(var n=0,o=0;o<t.length;o++)n+=Math.pow(t[o]-e,2);return n},sse:function(t,e){for(var n=0,o=0;o<t.length;o++)n+=Math.pow(t[o]-e[o],2);return n},sst:function(t,e){for(var n=0,o=0;o<t.length;o++)n+=Math.pow(t[o]-e,2);return n},matrixsubtract:function(t,n){for(var o=new Array(t.length),r=0;r<t.length;r++){o[r]=new Array(t[r].length);for(var i=0;i<t[r].length;i++)o[r][i]=t[r][i]-n[r][i]}return e(o)}}),e.jStat=e,e)},5072(t){"use strict";var e=[];function n(t){for(var n=-1,o=0;o<e.length;o++)if(e[o].identifier===t){n=o;break}return n}function o(t,o){for(var i={},s=[],a=0;a<t.length;a++){var l=t[a],u=o.base?l[0]+o.base:l[0],c=i[u]||0,f="".concat(u," ").concat(c);i[u]=c+1;var d=n(f),h={css:l[1],media:l[2],sourceMap:l[3],supports:l[4],layer:l[5]};if(-1!==d)e[d].references++,e[d].updater(h);else{var m=r(h,o);o.byIndex=a,e.splice(a,0,{identifier:f,updater:m,references:1})}s.push(f)}return s}function r(t,e){var n=e.domAPI(e);return n.update(t),function(e){if(e){if(e.css===t.css&&e.media===t.media&&e.sourceMap===t.sourceMap&&e.supports===t.supports&&e.layer===t.layer)return;n.update(t=e)}else n.remove()}}t.exports=function(t,r){var i=o(t=t||[],r=r||{});return function(t){t=t||[];for(var s=0;s<i.length;s++){var a=n(i[s]);e[a].references--}for(var l=o(t,r),u=0;u<i.length;u++){var c=n(i[u]);0===e[c].references&&(e[c].updater(),e.splice(c,1))}i=l}}},7659(t){"use strict";var e={};t.exports=function(t,n){var o=function(t){if(void 0===e[t]){var n=document.querySelector(t);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(t){n=null}e[t]=n}return e[t]}(t);if(!o)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");o.appendChild(n)}},540(t){"use strict";t.exports=function(t){var e=document.createElement("style");return t.setAttributes(e,t.attributes),t.insert(e,t.options),e}},5056(t,e,n){"use strict";t.exports=function(t){var e=n.nc;e&&t.setAttribute("nonce",e)}},7825(t){"use strict";t.exports=function(t){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var e=t.insertStyleElement(t);return{update:function(n){!function(t,e,n){var o="";n.supports&&(o+="@supports (".concat(n.supports,") {")),n.media&&(o+="@media ".concat(n.media," {"));var r=void 0!==n.layer;r&&(o+="@layer".concat(n.layer.length>0?" ".concat(n.layer):""," {")),o+=n.css,r&&(o+="}"),n.media&&(o+="}"),n.supports&&(o+="}");var i=n.sourceMap;i&&"undefined"!=typeof btoa&&(o+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(i))))," */")),e.styleTagTransform(o,t,e.options)}(e,t,n)},remove:function(){!function(t){if(null===t.parentNode)return!1;t.parentNode.removeChild(t)}(e)}}}},1113(t){"use strict";t.exports=function(t,e){if(e.styleSheet)e.styleSheet.cssText=t;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(t))}}}},i={};function s(t){var e=i[t];if(void 0!==e)return e.exports;var n=i[t]={id:t,loaded:!1,exports:{}};return r[t].call(n.exports,n,n.exports,s),n.loaded=!0,n.exports}s.m=r,s.amdO={},s.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return s.d(e,{a:e}),e},e=Object.getPrototypeOf?t=>Object.getPrototypeOf(t):t=>t.__proto__,s.t=function(n,o){if(1&o&&(n=this(n)),8&o)return n;if("object"==typeof n&&n){if(4&o&&n.__esModule)return n;if(16&o&&"function"==typeof n.then)return n}var r=Object.create(null);s.r(r);var i={};t=t||[null,e({}),e([]),e(e)];for(var a=2&o&&n;("object"==typeof a||"function"==typeof a)&&!~t.indexOf(a);a=e(a))Object.getOwnPropertyNames(a).forEach(t=>i[t]=()=>n[t]);return i.default=()=>n,s.d(r,i),r},s.d=(t,e)=>{for(var n in e)s.o(e,n)&&!s.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},s.f={},s.e=t=>Promise.all(Object.keys(s.f).reduce((e,n)=>(s.f[n](t,e),e),[])),s.u=t=>t+".js",s.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),s.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),s.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n={},o="eda:",s.l=(t,e,r,i)=>{if(n[t])n[t].push(e);else{var a,l;if(void 0!==r)for(var u=document.getElementsByTagName("script"),c=0;c<u.length;c++){var f=u[c];if(f.getAttribute("src")==t||f.getAttribute("data-webpack")==o+r){a=f;break}}a||(l=!0,(a=document.createElement("script")).charset="utf-8",s.nc&&a.setAttribute("nonce",s.nc),a.setAttribute("data-webpack",o+r),a.src=t),n[t]=[e];var d=(e,o)=>{a.onerror=a.onload=null,clearTimeout(h);var r=n[t];if(delete n[t],a.parentNode&&a.parentNode.removeChild(a),r&&r.forEach(t=>t(o)),e)return e(o)},h=setTimeout(d.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=d.bind(null,a.onerror),a.onload=d.bind(null,a.onload),l&&document.head.appendChild(a)}},s.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},(()=>{var t;s.g.importScripts&&(t=s.g.location+"");var e=s.g.document;if(!t&&e&&(e.currentScript&&"SCRIPT"===e.currentScript.tagName.toUpperCase()&&(t=e.currentScript.src),!t)){var n=e.getElementsByTagName("script");if(n.length)for(var o=n.length-1;o>-1&&(!t||!/^http(s?):/.test(t));)t=n[o--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),s.p=t})(),(()=>{s.b="undefined"!=typeof document&&document.baseURI||self.location.href;var t={255:0};s.f.j=(e,n)=>{var o=s.o(t,e)?t[e]:void 0;if(0!==o)if(o)n.push(o[2]);else{var r=new Promise((n,r)=>o=t[e]=[n,r]);n.push(o[2]=r);var i=s.p+s.u(e),a=new Error;s.l(i,n=>{if(s.o(t,e)&&(0!==(o=t[e])&&(t[e]=void 0),o)){var r=n&&("load"===n.type?"missing":n.type),i=n&&n.target&&n.target.src;a.message="Loading chunk "+e+" failed.\n("+r+": "+i+")",a.name="ChunkLoadError",a.type=r,a.request=i,o[1](a)}},"chunk-"+e,e)}};var e=(e,n)=>{var o,r,[i,a,l]=n,u=0;if(i.some(e=>0!==t[e])){for(o in a)s.o(a,o)&&(s.m[o]=a[o]);l&&l(s)}for(e&&e(n);u<i.length;u++)r=i[u],s.o(t,r)&&t[r]&&t[r][0](),t[r]=0},n=self.webpackChunkeda=self.webpackChunkeda||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))})(),s.nc=void 0;var a={};(()=>{"use strict";s.r(a),s.d(a,{_package:()=>Br,initAutoTests:()=>Ur,test:()=>kr,tests:()=>f});const t=DG;s(9982);const e=DG.DataFrame.fromCsv('countries,fasta,smiles,molregno,LON,Zip Code,Street Address Line 1,ImageUrl,user_id,error_message,xray,flag,magnitude,CS-id,pdb_id,accel_a,time_offset,chart,fit,Questions,empty_number,empty_string\nBelgium,MSNFHNEHVMQFYRNNLKTKGVFGRQ,CC(C(=O)OCCCc1cccnc1)c2cccc(c2)C(=O)c3ccccc3,1480014,36.276729583740234,995042300,14016 ROUTE 31W,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,"COMPND \nATOM \nEND",flag,1,1,1QBS,1,1.23,<chart></chart>,"{""series"":[{""name"":""Run:2023-08-08"",""fitFunction"":""sigmoid"",""fitLineColor"":""#1f77b4"",""pointColor"":""#1f77b4"",""showPoints"":""points"",""parameters"":[2.497360340644872, 1.7058694986686864, 5.278052678195135, 0.16000320889028383],""points"":[{""x"":0.10000000149011612,""y"":2.374499797821045},{""x"":0.6000000238418579,""y"":2.6242473125457764},{""x"":1.100000023841858,""y"":2.367267608642578},{""x"":1.600000023841858,""y"":2.6723148822784424},{""x"":2.0999999046325684,""y"":2.6537344455718994},{""x"":2.5999999046325684,""y"":2.3651671409606934},{""x"":3.0999999046325684,""y"":2.5654284954071045},{""x"":3.5999999046325684,""y"":2.4160959720611572},{""x"":4.099999904632568,""y"":2.286726713180542},{""x"":4.599999904632568,""y"":2.5100042819976807},{""x"":5.099999904632568,""y"":1.6676985025405884},{""x"":5.599999904632568,""y"":0.680136501789093},{""x"":6.099999904632568,""y"":0.3391543924808502},{""x"":6.599999904632568,""y"":0.09038983285427094},{""x"":7.099999904632568,""y"":0.19802775979042053}]},{""name"":""Run:2023-08-08"",""fitLineColor"":""#ffbb78"",""pointColor"":""#ffbb78"",""showPoints"":""points"",""parameters"":[7.525235855508179, 1.3186911876809984, 5.335672608564294, 0.7860743343958098],""points"":[{""x"":0.10000000149011612,""y"":7.988070487976074},{""x"":0.6000000238418579,""y"":7.018453121185303},{""x"":1.100000023841858,""y"":8.115279197692871},{""x"":1.600000023841858,""y"":7.486658096313477},{""x"":2.0999999046325684,""y"":7.396438121795654},{""x"":2.5999999046325684,""y"":7.477052211761475},{""x"":3.0999999046325684,""y"":6.913095474243164},{""x"":3.5999999046325684,""y"":8.01385498046875},{""x"":4.099999904632568,""y"":6.985900402069092},{""x"":4.599999904632568,""y"":6.970335960388184},{""x"":5.099999904632568,""y"":5.448817253112793},{""x"":5.599999904632568,""y"":2.5534818172454834},{""x"":6.099999904632568,""y"":1.893947958946228},{""x"":6.599999904632568,""y"":0.6340042352676392},{""x"":7.099999904632568,""y"":0.8403874039649963}]}],""chartOptions"":{""xAxisName"":""Conc."",""yAxisName"":""Activity"",""title"":""Dose-Response curves""}}",text,100,abc\nBurundi,MDYKETLLMPKTDFPMRGGLPNKEPQIQEKW,COc1ccc2cc(ccc2c1)C(C)C(=O)Oc3ccc(C)cc3OC,1480015,36.276729583740234,995073444,80 STATE HIGHWAY 310,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,"COMPND \nATOM \nEND",flag,2,2,1ZP8,2,1.23,<chart></chart>,"{""series"":[{""name"":""Run:2023-08-08"",""fitFunction"":""sigmoid"",""fitLineColor"":""#1f77b4"",""pointColor"":""#1f77b4"",""showPoints"":""points"",""parameters"":[4.431460753103398, 2.1691498799246745, 5.266445597102774, 0.7825762827017926],""points"":[{""x"":0.10000000149011612,""y"":4.751083850860596},{""x"":0.6000000238418579,""y"":4.203000068664551},{""x"":1.100000023841858,""y"":4.415858745574951},{""x"":1.600000023841858,""y"":4.68414306640625},{""x"":2.0999999046325684,""y"":4.198400974273682},{""x"":2.5999999046325684,""y"":4.179222106933594},{""x"":3.0999999046325684,""y"":4.638473987579346},{""x"":3.5999999046325684,""y"":4.708553314208984},{""x"":4.099999904632568,""y"":4.291589260101318},{""x"":4.599999904632568,""y"":4.038082599639893},{""x"":5.099999904632568,""y"":3.4349939823150635},{""x"":5.599999904632568,""y"":1.2194708585739136},{""x"":6.099999904632568,""y"":1.1920831203460693},{""x"":6.599999904632568,""y"":0.5352635979652405},{""x"":7.099999904632568,""y"":0.3346920311450958}]},{""name"":""Run:2023-08-08"",""fitLineColor"":""#ffbb78"",""pointColor"":""#ffbb78"",""showPoints"":""points"",""parameters"":[2.339458017970126, -1.0734184310171178, 4.746332950550934, 0.2482416857595658],""points"":[{""x"":0.10000000149011612,""y"":0.2139337658882141},{""x"":0.6000000238418579,""y"":0.4269562065601349},{""x"":1.100000023841858,""y"":0.2441573292016983},{""x"":1.600000023841858,""y"":0.146635964512825},{""x"":2.0999999046325684,""y"":0.08818462491035461},{""x"":2.5999999046325684,""y"":0.2560656666755676},{""x"":3.0999999046325684,""y"":0.42434045672416687},{""x"":3.5999999046325684,""y"":0.37111231684684753},{""x"":4.099999904632568,""y"":0.5581737160682678},{""x"":4.599999904632568,""y"":1.183590054512024},{""x"":5.099999904632568,""y"":1.5629843473434448},{""x"":5.599999904632568,""y"":2.3211288452148438},{""x"":6.099999904632568,""y"":2.229961633682251},{""x"":6.599999904632568,""y"":2.2560226917266846},{""x"":7.099999904632568,""y"":2.2142398357391357}]}],""chartOptions"":{""xAxisName"":""Conc."",""yAxisName"":""Activity"",""title"":""Dose-Response curves""}}",text,,\nCameroon,MIEVFLFGIVLGLIPITLAGLFVTAYLQYRRGDQLDL,COc1ccc2cc(ccc2c1)C(C)C(=O)OCCCc3cccnc3,1480016,36.26095962524414,995153596,30-56 WHITESTONE EXPY,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,"COMPND \nATOM \nEND",flag,3,3,2BDJ,3,1.23,<chart></chart>,"{""series"":[{""name"":""Run:2023-08-08"",""fitFunction"":""sigmoid"",""fitLineColor"":""#1f77b4"",""pointColor"":""#1f77b4"",""showPoints"":""points"",""parameters"":[4.6760652578642325, 0.9046956320756703, 5.651408971856738, 0.07738846012184185],""points"":[{""x"":0.10000000149011612,""y"":4.32425594329834},{""x"":0.6000000238418579,""y"":4.668442249298096},{""x"":1.100000023841858,""y"":4.379785060882568},{""x"":1.600000023841858,""y"":5.0345139503479},{""x"":2.0999999046325684,""y"":4.878653526306152},{""x"":2.5999999046325684,""y"":4.3451313972473145},{""x"":3.0999999046325684,""y"":4.336992263793945},{""x"":3.5999999046325684,""y"":5.037430286407471},{""x"":4.099999904632568,""y"":5.0092692375183105},{""x"":4.599999904632568,""y"":4.151902675628662},{""x"":5.099999904632568,""y"":3.4066951274871826},{""x"":5.599999904632568,""y"":2.3732759952545166},{""x"":6.099999904632568,""y"":1.673728108406067},{""x"":6.599999904632568,""y"":0.48574790358543396},{""x"":7.099999904632568,""y"":0.2783052325248718}]},{""name"":""Run:2023-08-08"",""fitLineColor"":""#ffbb78"",""pointColor"":""#ffbb78"",""showPoints"":""points"",""parameters"":[2.938395863010111, -1.4658480661392117, 5.462702751996584, 0.3473139023615039],""points"":[{""x"":0.10000000149011612,""y"":0.4941710829734802},{""x"":0.6000000238418579,""y"":0.15323974192142487},{""x"":1.100000023841858,""y"":0.46373432874679565},{""x"":1.600000023841858,""y"":0.3370431363582611},{""x"":2.0999999046325684,""y"":0.5179030299186707},{""x"":2.5999999046325684,""y"":0.27899765968322754},{""x"":3.0999999046325684,""y"":0.22075064480304718},{""x"":3.5999999046325684,""y"":0.5789918899536133},{""x"":4.099999904632568,""y"":0.21169911324977875},{""x"":4.599999904632568,""y"":0.27857646346092224},{""x"":5.099999904632568,""y"":1.0906332731246948},{""x"":5.599999904632568,""y"":1.8520300388336182},{""x"":6.099999904632568,""y"":2.7177059650421143},{""x"":6.599999904632568,""y"":2.8680918216705322},{""x"":7.099999904632568,""y"":3.2413077354431152}]}],""chartOptions"":{""xAxisName"":""Conc."",""yAxisName"":""Activity"",""title"":""Dose-Response curves""}}",text,,\nCanada,MMELVLKTIIGPIVVGVVLRIVDKWLNKDK,CC(C(=O)NCCS)c1cccc(c1)C(=O)c2ccccc2,1480017,36.26095962524414,99515,30-56 WHITESTONE EXPY,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,"COMPND \nATOM \nEND",flag,4,4,1IAN,4,1.23,<chart></chart>,"{""series"":[{""name"":""Run:2023-08-08"",""fitFunction"":""sigmoid"",""fitLineColor"":""#1f77b4"",""pointColor"":""#1f77b4"",""showPoints"":""points"",""parameters"":[0.8597390975430008, 1.0957625732481946, 5.260537067987958, 0.07974187998177736],""points"":[{""x"":0.10000000149011612,""y"":0.8190152645111084},{""x"":0.6000000238418579,""y"":0.8421689867973328},{""x"":1.100000023841858,""y"":0.8740922212600708},{""x"":1.600000023841858,""y"":0.8924275040626526},{""x"":2.0999999046325684,""y"":0.8249067664146423},{""x"":2.5999999046325684,""y"":0.9327669143676758},{""x"":3.0999999046325684,""y"":0.8522974252700806},{""x"":3.5999999046325684,""y"":0.8174492716789246},{""x"":4.099999904632568,""y"":0.8394647240638733},{""x"":4.599999904632568,""y"":0.7139387726783752},{""x"":5.099999904632568,""y"":0.5561167597770691},{""x"":5.599999904632568,""y"":0.3276226818561554},{""x"":6.099999904632568,""y"":0.12479474395513535},{""x"":6.599999904632568,""y"":0.13006797432899475},{""x"":7.099999904632568,""y"":0.059702079743146896}]},{""name"":""Run:2023-08-08"",""fitLineColor"":""#ffbb78"",""pointColor"":""#ffbb78"",""showPoints"":""points"",""parameters"":[5.760930219582546, 1.6591793293833013, 4.667155929720851, 0.7858109544121652],""points"":[{""x"":0.10000000149011612,""y"":6.156993389129639},{""x"":0.6000000238418579,""y"":5.236701965332031},{""x"":1.100000023841858,""y"":6.010560512542725},{""x"":1.600000023841858,""y"":5.495512962341309},{""x"":2.0999999046325684,""y"":6.087770462036133},{""x"":2.5999999046325684,""y"":5.79986572265625},{""x"":3.0999999046325684,""y"":5.597546577453613},{""x"":3.5999999046325684,""y"":5.520902156829834},{""x"":4.099999904632568,""y"":5.360654354095459},{""x"":4.599999904632568,""y"":3.5539746284484863},{""x"":5.099999904632568,""y"":1.577236294746399},{""x"":5.599999904632568,""y"":1.0001264810562134},{""x"":6.099999904632568,""y"":0.9305797815322876},{""x"":6.599999904632568,""y"":0.6033638715744019},{""x"":7.099999904632568,""y"":0.4203685522079468}]}],""chartOptions"":{""xAxisName"":""Conc."",""yAxisName"":""Activity"",""title"":""Dose-Response curves""}}",text,,\nColombia,MDRTDEVSNHTHDKPTLTWFEEIFEEYHSPFHN,FC(F)(F)c1ccc(OC2CCNCC2)cc1,1480029,36.3309440612793,995152050,1 COURT HOUSE SQUARE,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,"COMPND \nATOM \nEND",flag,5,5,4UJ1,5,1.23,<chart></chart>,"{""series"":[{""name"":""Run:2023-08-08"",""fitFunction"":""sigmoid"",""fitLineColor"":""#1f77b4"",""pointColor"":""#1f77b4"",""showPoints"":""points"",""parameters"":[6.4995088314153655, 2.4270351004539914, 5.178659535348579, 0.625653346241577],""points"":[{""x"":0.10000000149011612,""y"":6.496231555938721},{""x"":0.6000000238418579,""y"":6.42543363571167},{""x"":1.100000023841858,""y"":7.040063858032227},{""x"":1.600000023841858,""y"":6.1115403175354},{""x"":2.0999999046325684,""y"":6.680728435516357},{""x"":2.5999999046325684,""y"":6.406774520874023},{""x"":3.0999999046325684,""y"":6.611269474029541},{""x"":3.5999999046325684,""y"":5.889094352722168},{""x"":4.099999904632568,""y"":6.75344705581665},{""x"":4.599999904632568,""y"":6.361435890197754},{""x"":5.099999904632568,""y"":4.1666975021362305},{""x"":5.599999904632568,""y"":1.172118902206421},{""x"":6.099999904632568,""y"":0.801048994064331},{""x"":6.599999904632568,""y"":0.4640021026134491},{""x"":7.099999904632568,""y"":0.0010357667924836278}]},{""name"":""Run:2023-08-08"",""fitLineColor"":""#ffbb78"",""pointColor"":""#ffbb78"",""showPoints"":""points"",""parameters"":[1.4734381347446401, 1.1649805188074196, 4.82958608866421, 0.09500545496710007],""points"":[{""x"":0.10000000149011612,""y"":1.5279096364974976},{""x"":0.6000000238418579,""y"":1.3559974431991577},{""x"":1.100000023841858,""y"":1.5246378183364868},{""x"":1.600000023841858,""y"":1.5567657947540283},{""x"":2.0999999046325684,""y"":1.4114240407943726},{""x"":2.5999999046325684,""y"":1.4045010805130005},{""x"":3.0999999046325684,""y"":1.4769829511642456},{""x"":3.5999999046325684,""y"":1.4875500202178955},{""x"":4.099999904632568,""y"":1.2991987466812134},{""x"":4.599999904632568,""y"":0.922961413860321},{""x"":5.099999904632568,""y"":0.6520044803619385},{""x"":5.599999904632568,""y"":0.15350978076457977},{""x"":6.099999904632568,""y"":0.1078903079032898},{""x"":6.599999904632568,""y"":0.17276449501514435},{""x"":7.099999904632568,""y"":0.14066608250141144}]}],""chartOptions"":{""xAxisName"":""Conc."",""yAxisName"":""Activity"",""title"":""Dose-Response curves""}}",text,,\nCosta Rica,MKSTKEEIQTIKTLLKDSRTAKYHKRLQIVL,CC(C)Cc1ccc(cc1)C(C)C(=O)N2CCCC2C(=O)OCCCc3ccccc3,1480018,36.3309440612793,995084218,4041 SOUTHWESTERN BLVD,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,"COMPND \nATOM \nEND",flag,6,6,2BPW,6,1.23,<chart></chart>,"{""series"":[{""name"":""Run:2023-08-08"",""fitFunction"":""sigmoid"",""fitLineColor"":""#1f77b4"",""pointColor"":""#1f77b4"",""showPoints"":""points"",""parameters"":[2.4833641843311227, -1.8945978742090062, 4.671127708092568, 0.24159861311815153],""points"":[{""x"":0.10000000149011612,""y"":0.0969524160027504},{""x"":0.6000000238418579,""y"":0.028483040630817413},{""x"":1.100000023841858,""y"":0.22087176144123077},{""x"":1.600000023841858,""y"":0.0068915546871721745},{""x"":2.0999999046325684,""y"":0.4305879771709442},{""x"":2.5999999046325684,""y"":0.44774115085601807},{""x"":3.0999999046325684,""y"":0.45346319675445557},{""x"":3.5999999046325684,""y"":0.2370593100786209},{""x"":4.099999904632568,""y"":0.4657953977584839},{""x"":4.599999904632568,""y"":1.155200719833374},{""x"":5.099999904632568,""y"":2.2294070720672607},{""x"":5.599999904632568,""y"":2.4311530590057373},{""x"":6.099999904632568,""y"":2.33846116065979},{""x"":6.599999904632568,""y"":2.608201026916504},{""x"":7.099999904632568,""y"":2.8136143684387207}]},{""name"":""Run:2023-08-08"",""fitLineColor"":""#ffbb78"",""pointColor"":""#ffbb78"",""showPoints"":""points"",""parameters"":[5.224573521642033, 1.4454033924198528, 5.6014197746076535, 0.2823216054197577],""points"":[{""x"":0.10000000149011612,""y"":4.95027494430542},{""x"":0.6000000238418579,""y"":5.1754679679870605},{""x"":1.100000023841858,""y"":5.276752948760986},{""x"":1.600000023841858,""y"":5.589294910430908},{""x"":2.0999999046325684,""y"":5.616994857788086},{""x"":2.5999999046325684,""y"":5.120813846588135},{""x"":3.0999999046325684,""y"":5.340766906738281},{""x"":3.5999999046325684,""y"":4.876471042633057},{""x"":4.099999904632568,""y"":4.94999361038208},{""x"":4.599999904632568,""y"":5.162564754486084},{""x"":5.099999904632568,""y"":4.399557590484619},{""x"":5.599999904632568,""y"":2.7977969646453857},{""x"":6.099999904632568,""y"":1.0229872465133667},{""x"":6.599999904632568,""y"":0.48275601863861084},{""x"":7.099999904632568,""y"":0.10408931970596313}]}],""chartOptions"":{""xAxisName"":""Conc."",""yAxisName"":""Activity"",""title"":""Dose-Response curves""}}",text,,\nCuba,MHAILRYFIRRLFYHIFYKIYSLISKKHQSLPSDVRQF,COc1ccc2c(c1)c(CC(=O)N3CCCC3C(=O)Oc4ccc(C)cc4OC)c(C)n2C(=O)c5ccc(Cl)cc5,1480019,36.33115768432617,995081928,1227 US HIGHWAY 11,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,"COMPND \nATOM \nEND",flag,7,7,1QBS,7,1.23,<chart></chart>,"{""series"":[{""name"":""Run:2023-08-08"",""fitFunction"":""sigmoid"",""fitLineColor"":""#1f77b4"",""pointColor"":""#1f77b4"",""showPoints"":""points"",""parameters"":[3.320838679713925, -1.2421619987316728, 4.831325425225256, 0.3236011098403072],""points"":[{""x"":0.10000000149011612,""y"":0.3727470338344574},{""x"":0.6000000238418579,""y"":0.12365014106035233},{""x"":1.100000023841858,""y"":0.48422467708587646},{""x"":1.600000023841858,""y"":0.2264465093612671},{""x"":2.0999999046325684,""y"":0.16821794211864471},{""x"":2.5999999046325684,""y"":0.3879014551639557},{""x"":3.0999999046325684,""y"":0.5470244884490967},{""x"":3.5999999046325684,""y"":0.3419053554534912},{""x"":4.099999904632568,""y"":0.7655120491981506},{""x"":4.599999904632568,""y"":1.2346516847610474},{""x"":5.099999904632568,""y"":2.453336715698242},{""x"":5.599999904632568,""y"":2.9565491676330566},{""x"":6.099999904632568,""y"":3.335299491882324},{""x"":6.599999904632568,""y"":3.240290880203247},{""x"":7.099999904632568,""y"":3.1107218265533447}]},{""name"":""Run:2023-08-08"",""fitLineColor"":""#ffbb78"",""pointColor"":""#ffbb78"",""showPoints"":""points"",""parameters"":[3.6401853521511094, 1.26211588875013, 5.399028074402744, 0.5089580830068091],""points"":[{""x"":0.10000000149011612,""y"":3.8585598468780518},{""x"":0.6000000238418579,""y"":3.6077206134796143},{""x"":1.100000023841858,""y"":3.855252265930176},{""x"":1.600000023841858,""y"":3.619039297103882},{""x"":2.0999999046325684,""y"":3.839388370513916},{""x"":2.5999999046325684,""y"":3.335283041000366},{""x"":3.0999999046325684,""y"":3.571141481399536},{""x"":3.5999999046325684,""y"":3.4155046939849854},{""x"":4.099999904632568,""y"":3.7316646575927734},{""x"":4.599999904632568,""y"":3.0680155754089355},{""x"":5.099999904632568,""y"":2.891066551208496},{""x"":5.599999904632568,""y"":1.6022753715515137},{""x"":6.099999904632568,""y"":0.7652576565742493},{""x"":6.599999904632568,""y"":0.6875326037406921},{""x"":7.099999904632568,""y"":0.5828871726989746}]}],""chartOptions"":{""xAxisName"":""Conc."",""yAxisName"":""Activity"",""title"":""Dose-Response curves""}}",text,,\nItaly,MSNFHNEHVMQFYRNNLKTKGVFGRQ,CC(C)Cc1ccc(cc1)C(C)C(=O)N2CCCC2C(=O)OCCO[N+](=O)[O-],1480020,36.33115768432617,99502,"168-46 91ST AVE., 2ND FLR",https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,"COMPND \nATOM \nEND",flag,8,8,1ZP8,8,1.23,<chart></chart>,"{""series"":[{""name"":""Run:2023-08-08"",""fitFunction"":""sigmoid"",""fitLineColor"":""#1f77b4"",""pointColor"":""#1f77b4"",""showPoints"":""points"",""parameters"":[2.293592105923809, 1.3781586549141835, 5.1025898038676605, 0.03493851245291291],""points"":[{""x"":0.10000000149011612,""y"":2.1287283897399902},{""x"":0.6000000238418579,""y"":2.267972230911255},{""x"":1.100000023841858,""y"":2.398442506790161},{""x"":1.600000023841858,""y"":2.5130622386932373},{""x"":2.0999999046325684,""y"":2.3255116939544678},{""x"":2.5999999046325684,""y"":2.127340793609619},{""x"":3.0999999046325684,""y"":2.47259783744812},{""x"":3.5999999046325684,""y"":2.131181478500366},{""x"":4.099999904632568,""y"":2.090421438217163},{""x"":4.599999904632568,""y"":2.02299165725708},{""x"":5.099999904632568,""y"":1.1105059385299683},{""x"":5.599999904632568,""y"":0.4494485855102539},{""x"":6.099999904632568,""y"":0.1375635862350464},{""x"":6.599999904632568,""y"":0.036351121962070465},{""x"":7.099999904632568,""y"":0.1619771122932434}]},{""name"":""Run:2023-08-08"",""fitLineColor"":""#ffbb78"",""pointColor"":""#ffbb78"",""showPoints"":""points"",""parameters"":[5.953125499439879, 1.2528620255306528, 5.187637440149802, 0.3110348753260886],""points"":[{""x"":0.10000000149011612,""y"":5.6585283279418945},{""x"":0.6000000238418579,""y"":5.911152362823486},{""x"":1.100000023841858,""y"":5.924920082092285},{""x"":1.600000023841858,""y"":5.8469438552856445},{""x"":2.0999999046325684,""y"":5.929472923278809},{""x"":2.5999999046325684,""y"":6.190037727355957},{""x"":3.0999999046325684,""y"":6.236179828643799},{""x"":3.5999999046325684,""y"":6.141019344329834},{""x"":4.099999904632568,""y"":5.295210838317871},{""x"":4.599999904632568,""y"":5.265801906585693},{""x"":5.099999904632568,""y"":3.3722851276397705},{""x"":5.599999904632568,""y"":1.8299226760864258},{""x"":6.099999904632568,""y"":0.32690900564193726},{""x"":6.599999904632568,""y"":0.6274543404579163},{""x"":7.099999904632568,""y"":0.8441857099533081}]}],""chartOptions"":{""xAxisName"":""Conc."",""yAxisName"":""Activity"",""title"":""Dose-Response curves""}}",text,,\nRwanda,MPNSEPASLLELFNSIATQGELVRSLKAGNASK,CC(C)Cc1ccc(cc1)C(C)C(=O)N2CCCC2C(=O)OCCO,1480021,36.33137130737305,995037247,"168-46 91ST AVE., 2ND FLR",https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,"COMPND \nATOM \nEND",flag,9,9,2BDJ,9,1.23,<chart></chart>,"{""series"":[{""name"":""Run:2023-08-08"",""fitFunction"":""sigmoid"",""fitLineColor"":""#1f77b4"",""pointColor"":""#1f77b4"",""showPoints"":""points"",""parameters"":[3.8209972202654474, 1.3779216716448506, 5.299882228439686, 0.06040645519069608],""points"":[{""x"":0.10000000149011612,""y"":3.7821109294891357},{""x"":0.6000000238418579,""y"":3.542433023452759},{""x"":1.100000023841858,""y"":3.7008674144744873},{""x"":1.600000023841858,""y"":3.717301607131958},{""x"":2.0999999046325684,""y"":4.024452209472656},{""x"":2.5999999046325684,""y"":4.013899326324463},{""x"":3.0999999046325684,""y"":3.945094347000122},{""x"":3.5999999046325684,""y"":3.866621971130371},{""x"":4.099999904632568,""y"":3.7461626529693604},{""x"":4.599999904632568,""y"":3.3454740047454834},{""x"":5.099999904632568,""y"":2.61944317817688},{""x"":5.599999904632568,""y"":0.999405026435852},{""x"":6.099999904632568,""y"":0.46259793639183044},{""x"":6.599999904632568,""y"":0.054134611040353775},{""x"":7.099999904632568,""y"":0.05711187422275543}]},{""name"":""Run:2023-08-08"",""fitLineColor"":""#ffbb78"",""pointColor"":""#ffbb78"",""showPoints"":""points"",""parameters"":[5.6318079657726035, 1.8495493770000595, 5.391793312471116, 0.17060707587348442],""points"":[{""x"":0.10000000149011612,""y"":5.458079814910889},{""x"":0.6000000238418579,""y"":5.554427146911621},{""x"":1.100000023841858,""y"":5.799983024597168},{""x"":1.600000023841858,""y"":5.364140033721924},{""x"":2.0999999046325684,""y"":5.864485740661621},{""x"":2.5999999046325684,""y"":5.4509806632995605},{""x"":3.0999999046325684,""y"":5.702574729919434},{""x"":3.5999999046325684,""y"":5.7314534187316895},{""x"":4.099999904632568,""y"":5.5123443603515625},{""x"":4.599999904632568,""y"":5.724395751953125},{""x"":5.099999904632568,""y"":4.354506969451904},{""x"":5.599999904632568,""y"":1.7307666540145874},{""x"":6.099999904632568,""y"":0.6305936574935913},{""x"":6.599999904632568,""y"":0.035183437168598175},{""x"":7.099999904632568,""y"":0.7575169205665588}]}],""chartOptions"":{""xAxisName"":""Conc."",""yAxisName"":""Activity"",""title"":""Dose-Response curves""}}",text,,\nSwitzerland,IRVVGRYLIEVWKAAGMDMDKVLFLWSSDEI,CN1CCC(CC1)Oc2ccc(cc2)C(F)(F)F,1480028,36.33137130737305,99504,92-11 179TH PLACE,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,"COMPND \nATOM \nEND",flag,9,10,1IAN,10,1.23,<chart></chart>,"{""series"":[{""name"":""Run:2023-08-08"",""fitFunction"":""sigmoid"",""fitLineColor"":""#1f77b4"",""pointColor"":""#1f77b4"",""showPoints"":""points"",""parameters"":[1.1190255865097471, 2.3163895161544437, 5.4968866182279195, 0.2035204047289052],""points"":[{""x"":0.10000000149011612,""y"":1.1057683229446411},{""x"":0.6000000238418579,""y"":1.1019697189331055},{""x"":1.100000023841858,""y"":1.0818607807159424},{""x"":1.600000023841858,""y"":1.062997817993164},{""x"":2.0999999046325684,""y"":1.046447515487671},{""x"":2.5999999046325684,""y"":1.1217249631881714},{""x"":3.0999999046325684,""y"":1.2166996002197266},{""x"":3.5999999046325684,""y"":1.215477705001831},{""x"":4.099999904632568,""y"":1.0581893920898438},{""x"":4.599999904632568,""y"":1.1747995615005493},{""x"":5.099999904632568,""y"":1.0181127786636353},{""x"":5.599999904632568,""y"":0.5344523191452026},{""x"":6.099999904632568,""y"":0.2569526433944702},{""x"":6.599999904632568,""y"":0.1912207305431366},{""x"":7.099999904632568,""y"":0.15060538053512573}]},{""name"":""Run:2023-08-08"",""fitLineColor"":""#ffbb78"",""pointColor"":""#ffbb78"",""showPoints"":""points"",""parameters"":[3.1038581025805785, 2.0032224204185245, 5.087602825989163, 0.13277988512492753],""points"":[{""x"":0.10000000149011612,""y"":3.0498509407043457},{""x"":0.6000000238418579,""y"":2.805217742919922},{""x"":1.100000023841858,""y"":3.3415253162384033},{""x"":1.600000023841858,""y"":3.0549843311309814},{""x"":2.0999999046325684,""y"":3.250074863433838},{""x"":2.5999999046325684,""y"":3.0432586669921875},{""x"":3.0999999046325684,""y"":3.265852451324463},{""x"":3.5999999046325684,""y"":2.9475724697113037},{""x"":4.099999904632568,""y"":3.1929898262023926},{""x"":4.599999904632568,""y"":2.7460060119628906},{""x"":5.099999904632568,""y"":1.6175861358642578},{""x"":5.599999904632568,""y"":0.3006608486175537},{""x"":6.099999904632568,""y"":0.3444803059101105},{""x"":6.599999904632568,""y"":0.015537971630692482},{""x"":7.099999904632568,""y"":0.5527358055114746}]}],""chartOptions"":{""xAxisName"":""Conc."",""yAxisName"":""Activity"",""title"":""Dose-Response curves""}}",text,,\n,,,,,,,,,,,,,,,,,,,,,');e.columns.add(DG.Column.fromList(DG.TYPE.BYTE_ARRAY,"BinaryImage",Array.from(new Uint8Array(11))));var n=function(t,e,n,o){return new(n||(n=Promise))(function(r,i){function s(t){try{l(o.next(t))}catch(t){i(t)}}function a(t){try{l(o.throw(t))}catch(t){i(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((o=o.apply(t,e||[])).next())})};const o=3e4,r=108e5,i=console.log.bind(console),l=console.info.bind(console),u=console.warn.bind(console),c=console.error.bind(console),f={},d="Auto Tests",h="Demo",m="Detectors",p="Core",g={};let v;var y;!function(t){t.notNull=function(t,e){if(null==t)throw new Error(`${null==e?"Value":e} not defined`)}}(y||(y={}));class A{constructor(t,e,n){this.catchUnhandled=!0,this.report=!1,this.returnOnFail=!1,void 0!==t&&(this.catchUnhandled=t),void 0!==e&&(this.report=e),void 0!==n&&(this.returnOnFail=n)}}class w{constructor(t,e,r,i){var s;this.category=t,this.name=e,null!=i||(i={}),null!==(s=i.timeout)&&void 0!==s||(i.timeout=o),this.options=i,this.test=()=>n(this,void 0,void 0,function*(){return new Promise((t,e)=>n(this,void 0,void 0,function*(){var n;let o="";try{DG.Test.isInDebug;let t=yield r();try{o=null!==(n=null==t?void 0:t.toString())&&void 0!==n?n:""}catch(t){o="Can't convert test's result to string",console.error(`Can't convert test's result to string in the ${this.category}:${this.name} test`)}}catch(t){e(t)}t(o)}))})}}function C(t,e,n){null==f[v]&&(f[v]={}),null==f[v].tests&&(f[v].tests=[]),f[v].tests.push(new w(v,t,e,n))}function E(t,e=!0,n){if(n=n?`${n}, `:"",t!==e)throw new Error(`${n}Expected "${e}", got "${t}"`)}function b(t,e,n){var o;v=t,e(),f[v]&&(f[v].clear=null===(o=null==n?void 0:n.clear)||void 0===o||o,f[v].timeout=null==n?void 0:n.timeout,f[v].benchmarks=null==n?void 0:n.benchmarks,f[v].stressTests=null==n?void 0:n.stressTests,f[v].owner=null==n?void 0:n.owner)}function x(t,e){return t.replace(new RegExp(e.name,"gi"),e.nqName)}function _(t,i){var s,a,l,u,c,v,y,A,C,b;return n(this,void 0,void 0,function*(){const _=t.id;if(g[_])return;const N=i?i.tests:f;if("DevTools"===t.name||i&&"DevTools"===i._package.name)for(const t of window.dartTests){const e=t.name.split(/\s*\|\s*!/g);let n=null!==(s=e.pop())&&void 0!==s?s:t.name,r=e.length?p+": "+e.join(": "):p,i=n.split(" | ");n=i[i.length-1],i.unshift(r),i.pop(),r=i.join(": "),void 0===N[r]&&(N[r]={tests:[],clear:!0}),N[r].tests.push(new w(r,n,t.test,{isAggregated:!1,timeout:null!==(l=null===(a=t.options)||void 0===a?void 0:a.timeout)&&void 0!==l?l:o,skipReason:null===(u=t.options)||void 0===u?void 0:u.skipReason,owner:null===(c=t.options)||void 0===c?void 0:c.owner,benchmark:null!==(y=null===(v=t.options)||void 0===v?void 0:v.benchmark)&&void 0!==y&&y}))}const M=[],T=[],O=[],I=yield grok.dapi.functions.filter(`package.id = "${_}"`).list(),L=new RegExp(/skip:\s*([^,\s]+)|wait:\s*(\d+)|cat:\s*([^,\s]+)|timeout:\s*(\d+)/g);for(const i of I){const s=i.options.test,a=i.options.demoPath;if(s&&Array.isArray(s)&&s.length)for(let t=0;t<s.length;t++){const e=s[t].matchAll(L),a={};Array.from(e).forEach(t=>{t[0].startsWith("skip")?a.skip=t[1]:t[0].startsWith("wait")?a.wait=parseInt(t[2]):t[0].startsWith("cat")?a.cat=t[3]:t[0].startsWith("timeout")&&(a.timeout=parseInt(t[4]))});const l=new w(null!==(A=a.cat)&&void 0!==A?A:d,1===s.length?i.name:`${i.name} ${t+1}`,()=>n(this,void 0,void 0,function*(){const e=yield grok.functions.eval(x(s[t],i));if(a.wait&&(yield S(a.wait)),"boolean"==typeof e&&!e)throw`Failed: ${s[t]}, expected true, got ${e}`}),{skipReason:a.skip,timeout:DG.Test.isInBenchmark?null!==(C=a.benchmarkTimeout)&&void 0!==C?C:r:null!==(b=a.timeout)&&void 0!==b?b:o});if(a.cat){const t=a.cat;void 0===N[t]&&(N[t]={tests:[],clear:!0}),N[t].tests||(N[t].tests=[]),N[t].tests.push(l)}else M.push(l)}if(a){const t=i.options.demoWait?parseInt(i.options.demoWait):void 0,e=new w(h,i.friendlyName,()=>n(this,void 0,void 0,function*(){yield S(300),grok.shell.clearLastError(),yield i.apply(),yield S(t||2e3);const e=yield grok.shell.lastError;if(e)throw new Error(e)}),{skipReason:i.options.demoSkip});T.push(e)}if(i.hasTag("semTypeDetector")){let o=e;i.options.testData&&(o=yield grok.data.files.openTable(`System:AppData/${t.nqName}/${i.options.testData}`));const r=new w(m,i.friendlyName,()=>n(this,void 0,void 0,function*(){const e=[];console.log(`System:AppData/${t.nqName}/${i.options.testData}`);for(const t of o.clone().columns){const n=yield i.apply([t]);e.push(n||t.semType)}const n=e.filter(t=>t);E(n.length,1),i.options.testDataColumnName&&E(n[0],i.options.testDataColumnName)}),{skipReason:i.options.skipTest});O.push(r)}}g[_]=!0,M.length>0&&(N[d]={tests:M,clear:!0}),T.length>0&&(N[h]={tests:T,clear:!0}),O.length>0&&(N[m]={tests:O,clear:!1})})}function N(t){return n(this,void 0,void 0,function*(){return`${t.toString()}\n${t.stack?yield DG.Logger.translateStackTrace(t.stack):""}`})}function M(t,e,r,s,a,l){var u,f,d,h,m,p,g,v,y,A,w,C,E,b;return n(this,void 0,void 0,function*(){let n;r.length=0;const x=null!=e&&t.name.toLowerCase()!==e.toLowerCase();let _=(null===(u=t.options)||void 0===u?void 0:u.skipReason)||x,M=x?"skipped":null===(f=t.options)||void 0===f?void 0:f.skipReason;if(DG.Test.isInBenchmark&&!(null===(d=t.options)||void 0===d?void 0:d.benchmark))return void i(`Package testing: Skipped {{${t.category}}} {{${t.name}}} doesnt available in benchmark mode`);_&&!DG.Test.isInBenchmark&&i(`Package testing: Skipped {{${t.category}}} {{${t.name}}}`),_||i(`Package testing: Started {{${t.category}}} {{${t.name}}}`);const T=Date.now(),S=new Date(T).toISOString();try{if(_)n={name:t.name,owner:null!==(m=null===(h=t.options)||void 0===h?void 0:h.owner)&&void 0!==m?m:"",category:t.category,logs:"",date:S,success:!0,result:M,ms:0,skipped:!0,package:null!=a?a:"",flaking:DG.Test.isReproducing};else{let e=null!=s?s:o;DG.Test.isProfiling&&console.profile(`${t.category}: ${t.name}`),n={name:t.name,owner:null!==(g=null===(p=t.options)||void 0===p?void 0:p.owner)&&void 0!==g?g:"",category:t.category,logs:"",date:S,success:!0,result:null!==(v=(yield O(t.test,e)).toString())&&void 0!==v?v:"OK",ms:0,skipped:!1,package:null!=a?a:"",flaking:DG.Test.isReproducing},DG.Test.isProfiling&&(console.profileEnd(`${t.category}: ${t.name}`),grok.shell.info(`Profiling of ${t.category}: ${t.name} finished \n Please ensure that you have opened DevTools (F12) / Performance panel before test starts.`))}}catch(e){c(e),n={name:t.name,owner:null!==(A=null===(y=t.options)||void 0===y?void 0:y.owner)&&void 0!==A?A:"",category:t.category,logs:"",date:S,success:!1,result:yield N(e),ms:0,skipped:!1,package:null!=a?a:"",flaking:!1}}if((null===(w=t.options)||void 0===w?void 0:w.isAggregated)&&n.result.constructor===DG.DataFrame){const t=n.result.col("success");if(t&&(n.success=t.stats.sum===t.length),!l){const t=n.result;t.columns.remove("stack"),t.rows.removeWhere(t=>t.get("success")),n.result=t}n.result=n.result.toCsv()}if(n.logs=r.join("\n"),n.ms=Date.now()-T,_||i(`Package testing: Finished {{${t.category}}} {{${t.name}}} with {{${n.success?"success":"error"}}} for ${n.ms} ms`),n.success||i(`Package testing: Result for {{${t.category}}} {{${t.name}}}: ${n.result}`),n.category=t.category,n.name=t.name,n.owner=null!==(E=null===(C=t.options)||void 0===C?void 0:C.owner)&&void 0!==E?E:"",!x){let e={success:n.success,result:n.result,ms:n.ms,date:n.date,skipped:n.skipped,category:t.category,name:t.name,logs:n.logs,owner:n.owner,flaking:DG.Test.isReproducing&&n.success,package:n.package};if(n.result.constructor==Object){const t=Object.keys(n.result).reduce((t,e)=>Object.assign(Object.assign({},t),{["result."+e]:n.result[e]}),{});e=Object.assign(Object.assign({},e),t)}e.result instanceof DG.DataFrame&&(e.result=JSON.stringify(null===(b=e.result)||void 0===b?void 0:b.toJson())||""),yield grok.shell.reportTest("package",e)}return n})}function T(t){const e=t.slice();return e.sort(()=>Math.random()-.5),e}function S(t){return n(this,void 0,void 0,function*(){yield new Promise(e=>setTimeout(e,t))})}function O(t,e,o="EXECUTION TIMEOUT"){return n(this,void 0,void 0,function*(){let n=null;const r=new Promise((t,r)=>{n=setTimeout(()=>{r(o)},e)});try{return yield Promise.race([t(),r])}finally{n&&clearTimeout(n)}})}DG.DataFrame.fromColumns([DG.Column.fromStrings("col",["val1","val2","val3"])]);const I=grok;var L,P,R,F,D,B,k,U;!function(t){t.UMAP="UMAP",t.T_SNE="t-SNE"}(L||(L={})),function(t){t.Levenshtein="Levenshtein",t.JaroWinkler="Jaro-Winkler",t.Manhattan="Manhattan String",t.Onehot="One-Hot"}(P||(P={})),function(t){t.Euclidean="Euclidean",t.Manhattan="Manhattan",t.Cosine="Vector Cosine"}(R||(R={})),function(t){t.Tanimoto="Tanimoto",t.Dice="Dice",t.Asymmetric="Asymmetric",t.BraunBlanquet="Braun-Blanquet",t.Cosine="Cosine",t.Kulczynski="Kulczynski",t.McConnaughey="Mc-Connaughey",t.RogotGoldberg="Rogot-Goldberg",t.Russel="Russel",t.Sokal="Sokal",t.Hamming="Hamming",t.Euclidean="Euclidean BitArray"}(F||(F={})),function(t){t.TanimotoIntArray="TanimotoIntArray"}(D||(D={})),function(t){t.Vector="Vector",t.String="String",t.BitArray="BitArray",t.MacroMolecule="MacroMolecule",t.Number="Number",t.IntArray="IntArray",t.NumberArray="NumberArray"}(B||(B={})),function(t){t.Difference="Difference"}(k||(k={})),function(t){t.CommonItems="Common Items"}(U||(U={}));const V=new Uint32Array(65536),G=(t,e)=>{if(t.length<e.length){const n=e;e=t,t=n}return 0===e.length?t.length:t.length<=32?((t,e)=>{const n=t.length,o=e.length,r=1<<n-1;let i=-1,s=0,a=n,l=n;for(;l--;)V[t.charCodeAt(l)]|=1<<l;for(l=0;l<o;l++){let t=V[e.charCodeAt(l)];const n=t|s;t|=(t&i)+i^i,s|=~(t|i),i&=t,s&r&&a++,i&r&&a--,s=s<<1|1,i=i<<1|~(n|s),s&=n}for(l=n;l--;)V[t.charCodeAt(l)]=0;return a})(t,e):((t,e)=>{const n=e.length,o=t.length,r=[],i=[],s=Math.ceil(n/32),a=Math.ceil(o/32);for(let t=0;t<s;t++)i[t]=-1,r[t]=0;let l=0;for(;l<a-1;l++){let s=0,a=-1;const u=32*l,c=Math.min(32,o)+u;for(let e=u;e<c;e++)V[t.charCodeAt(e)]|=1<<e;for(let t=0;t<n;t++){const n=V[e.charCodeAt(t)],o=i[t/32|0]>>>t&1,l=r[t/32|0]>>>t&1,u=n|s,c=((n|l)&a)+a^a|n|l;let f=s|~(c|a),d=a&c;f>>>31^o&&(i[t/32|0]^=1<<t),d>>>31^l&&(r[t/32|0]^=1<<t),f=f<<1|o,d=d<<1|l,a=d|~(u|f),s=f&u}for(let e=u;e<c;e++)V[t.charCodeAt(e)]=0}let u=0,c=-1;const f=32*l,d=Math.min(32,o-f)+f;for(let e=f;e<d;e++)V[t.charCodeAt(e)]|=1<<e;let h=o;for(let t=0;t<n;t++){const n=V[e.charCodeAt(t)],s=i[t/32|0]>>>t&1,a=r[t/32|0]>>>t&1,l=n|u,f=((n|a)&c)+c^c|n|a;let d=u|~(f|c),m=c&f;h+=d>>>o-1&1,h-=m>>>o-1&1,d>>>31^s&&(i[t/32|0]^=1<<t),m>>>31^a&&(r[t/32|0]^=1<<t),d=d<<1|s,m=m<<1|a,c=m|~(l|d),u=d&l}for(let e=f;e<d;e++)V[t.charCodeAt(e)]=0;return h})(t,e)};var $=s(944);class H{constructor(t,e=!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 n=t,o=H._createBuffer(n);if(e)for(let t=0;t<o.length;t++)o[t]=-1;this._data=o,this._length=n}else{if(!(t instanceof Uint32Array))throw new Error("Invalid constructor");this._data=t,this._length=e}}getRawData(){return this._data}assureGoez(t,e){if(t<0)throw new Error(`${e} should be greater than zero`)}assureInRange(t,e,n,o){if(t<e||t>n)throw new Error(`Argument ${o} (${t}) out of range (${e}, ${n})`)}copy(t,e,n){for(let o=0;o<n;o++)e[o]=t[o]}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 e=Math.floor((t+31)/32);if(e>this._data.length||e+this.SHRINK_THRESHOLD<this._data.length){const t=new Uint32Array(e);this.copy(this._data,t,e>this._data.length?this._data.length:e),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,e)),this._length=t,this._version++}static fromAnd(t,e){if(t._length!=e._length)throw new Error(`Lengths differ (${t._length} != ${e._length})`);const n=new H(t._length);n._length=t._length,n._data=H._createBuffer(n._length),n._version=0;const o=t.lengthInInts;for(let r=0;r<o;r++)n._data[r]=t._data[r]&e._data[r];return n}static _createBuffer(t){return new Uint32Array(Math.floor((t+31)/32))}static fromValues(t){const e=new H(t.length);e._version=0;for(let n=0;n<e._length;n++)t[n]&&(e._data[Math.floor(n/32)]|=1<<(n%32&31));return e}static fromSeq(t,e){const n=new H(t);for(let o=0;o<t;++o)n.setBit(o,e(o));return n._version=0,n}static fromString(t){return H.fromSeq(t.length,e=>"1"==t.charAt(e))}static fromUint32Array(t,e){const n=new H(t);return n._data=e,n}static fromBytes(t){const e=t.length,n=new H(8*e);n._data=new Uint32Array(Math.floor((e+3)/4)),n._length=8*e;let o=0,r=0;for(;e-r>=4;)n._data[o++]=255&t[r]|(255&t[r+1])<<8|(255&t[r+2])<<16|(255&t[r+3])<<24,r+=4;return e-r==3&&(n._data[o]=(255&t[r+2])<<16),e-r==2&&(n._data[o]|=(255&t[r+1])<<8),e-r==1&&(n._data[o]|=255&t[r]),n._version=0,n}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 e=0;e<this._data.length-1;e++)if(this._data[e]!=t._data[e])return!1;for(let e=8*(this._data.length-1);e<this._length;e++)if(this.getBit(e)!=t.getBit(e))return!1;return!0}clone(){const t=new H(0,!1);return t._data=Uint32Array.from(this._data),t._length=this._length,t._version=this._version,t}init(t,e){this.setAll(!1,!1);for(let e=0;e<this._length;e++)t(e)&&(this._data[Math.floor(e/32)]|=1<<(e%32&31));return this.incrementVersion(e),this}invert(t=!0){for(let t=0;t<this._data.length;t++)this._data[t]^=-1;this.incrementVersion(t)}setAll(t,e=!1){const n=t?-1:0,o=this.lengthInInts;for(let t=0;t<o;t++)this._data[t]=n;this.incrementVersion(e)}setIndexes(t,e=!0,n=!0,o=!0){n&&this.setAll(!e,!1);for(const n of t)this.setFast(n,e);this.incrementVersion(o)}everyIndex(t,e=!0){for(const n of t)if(this.getBit(n)!=e)return!1;return!0}anyIndex(t,e=!0){for(const n of t)if(this.getBit(n)==e)return!0;return!1}setWhere(t,e=!0,n=!0,o=!0,r=!0){if(n&&r&&this.setAll(!e,!1),r)for(let n=0;n<this._length;n++)t(n)&&this.setFast(n,e);else for(let n=0;n<this._length;n++)this.setFast(n,t(n)?e:!e);this.incrementVersion(o)}getRange(t,e){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(e,0,this._length,"to");const n=[];for(let o=t;o<e;++o)n.push(this.getBit(o));return H.fromValues(n)}getRangeAsList(t,e){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(e,0,this._length,"to");const n=[];for(let o=t;o<e;++o)n.push(this.getBit(o));return n}setRange(t,e,n,o=!0){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(e,0,this._length-1,"to");const r=Math.min(t,e),i=Math.max(t,e);if(n)for(let t=r;t<=i;t++)this.setTrue(t);else for(let t=r;t<=i;t++)this.setFalse(t);return this.incrementVersion(o),this}setRandom(t,e,n=!0){if(t<0||t>this._length)throw new Error("n must be >= 0 && <= Count");t>this._length/2&&this.setRandom(this._length-t,!e),this.setAll(!e);for(let n=0;n<t;){const t=Math.floor(Math.random()*this._length);this.getBit(t)!=e&&(this.setFast(t,e),n++)}this.incrementVersion(n)}and(t,e=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let e=0,n=this.lengthInInts;e<n;e++)this._data[e]&=t._data[e];return this.incrementVersion(e),this}andNot(t,e=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");const n=this.lengthInInts;for(let e=0;e<n;e++)this._data[e]&=~t._data[e];return this.incrementVersion(e),this}notAnd(t,e=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let e=0,n=this.lengthInInts;e<n;e++)this._data[e]=~this._data[e]&t._data[e];return this.incrementVersion(e),this}not(t=!0){for(let t=0,e=this.lengthInInts;t<e;t++)this._data[t]=~this._data[t];return this.incrementVersion(t),this}or(t,e=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let e=0,n=this.lengthInInts;e<n;e++)this._data[e]|=t._data[e];return this.incrementVersion(e),this}xor(t,e=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let e=0,n=this.lengthInInts;e<n;e++)this._data[e]^=t._data[e];return this.incrementVersion(e),this}insertAt(t,e,n=!1){if(this.assureInRange(t,0,this._length,"pos"),0==e)return;const o=this._length;this.setLength(this._length+e);for(let n=o-1;n>=t;n--)this.setBit(n+e,this.getBit(n));for(let o=t;o<t+e;o++)this.setBit(o,n)}removeAt(t,e=1){if(e<0)throw new Error("n cannot be negative");if(this.assureInRange(t,0,this._length-e,"pos"),this.contains(!0))for(let n=t;n<this._length-e;n++)this.setBit(n,this.getBit(n+e));this.setLength(this._length-e)}removeByMask(t,e=!0){if(this._length!=t.length)throw new Error("length != mask.length");if(t==this)this.setLength(t.countBits(!e)),this.setAll(!e);else{let n=0;for(let o=-1;-1!=(o=t.findNext(o,!e));)this.setFast(n++,this.getBit(o));this._length=n,this._version++}return this}getBit(t){return!!(this._data[Math.floor(t/32)]&1<<(31&t))}setBit(t,e,n=!0){this.setFast(t,e),this._version++}setFast(t,e){e?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 e=0;for(;e<t-1;e++)for(let t=this._data[e];0!=t;t>>>=8)this._selectedCount+=H._onBitCount[255&t];let n=this._data[e];const o=31&this._length;for(0!=o&&(n&=~(4294967295<<o));0!=n;n>>>=8)this._selectedCount+=H._onBitCount[255&n];this._selectedCountVersion=this._version}return t?this._selectedCount:this._length-this._selectedCount}countWhere(t){let e=0;if(this.trueCount()==this._length)for(let n=0;n<this._length;n++)e+=t(n)?1:0;else for(let n=-1;-1!=(n=this.findNext(n,!0));)e+=t(n)?1:0;return e}andWithCountBits(t,e){if(0==this._length)return 0;let n=0;const o=this.lengthInInts;let r=0;for(;r<o-1;r++)for(let e=this._data[r]&t._data[r];0!=e;e>>>=8)n+=H._onBitCount[255&e];let i=this._data[r]&t._data[r];const s=31&this._length;for(0!=s&&(i&=~(4294967295<<s));0!=i;i>>>=8)n+=H._onBitCount[255&i];return e?n:this._length-n}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,e=!0){if(this.assureInRange(t,-1,this._length,"index"),t>=this._length-1)return-1;let n=31&(t=t<0?0:t+1);const o=this.lengthInInts;for(let r=Math.floor(t/32);r<o;r++){let o=e?this._data[r]:~this._data[r];if(0!=n)o&=4294967295<<n&4294967295,n=0;else if(!e&&-4294967296==o)continue;for(let e=0;0!=o;e+=8,o>>>=8){const n=H._firstOnBit[255&o];if(n>=0)return(t=n+32*r+e)>=this._length?-1:t}}return-1}findPrev(t,e=!0){if(0==t)return-1;this.assureInRange(t,-1,this._length,"index");let n=1+(t=t<0?this._length-1:t-1)&31;for(let o=Math.floor(t/32);o>=0;o--){let t=e?this._data[o]:~this._data[o];0!=n&&(t&=~(4294967295<<n),n=0);for(let e=24;0!=t;e-=8,t<<=8){const n=H._lastOnBit[t>>>24];if(n>=0)return n+32*o+e}}return-1}}function q(t={}){const e=function(){if(!t||!t.scoringMatrix||!t.alphabetIndexes)return(t,e)=>t===e?0:1;if(t.scoringMatrix.length!==Object.keys(t.alphabetIndexes).length)throw new Error("Scoring matrix and alphabet indexes should have the same length");const e=t.alphabetIndexes,n=t.scoringMatrix,o=Math.min(...Object.keys(e).map(t=>t.charCodeAt(0)))+1,r=new Float32Array((n.length+o)*(n.length+o));return Object.entries(e).forEach(([t,o])=>{const i=n[o];Object.entries(e).forEach(([e,o])=>{r[t.charCodeAt(0)*n.length+e.charCodeAt(0)]=i[o]})}),(t,e)=>1-r[t.charCodeAt(0)*n.length+e.charCodeAt(0)]}(),n=t?.threshold??0;return(t,o)=>{let r=0;const i=t.length,s=o.length,a=Math.ceil(Math.max(i,s)*(1-n));i!==s&&(r=Math.abs(i-s));let l=0;for(let n=0;n<Math.min(i,s);n++)if(t[n]!==o[n]&&(l+=e(t[n],o[n]),l>a))return 1;return l+=r,l/=Math.max(i,s),l}}H._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]),H._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]),H._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]);const Y={gapOpen:1,gapExtend:.6,scoringMatrix:[[4,-1,-2,-2,0,-1,-1,0,-2,-1,-1,-1,-1,-2,-1,1,0,-3,-2,0,-2,-1,0,-4],[-1,5,0,-2,-3,1,0,-2,0,-3,-2,2,-1,-3,-2,-1,-1,-3,-2,-3,-1,0,-1,-4],[-2,0,6,1,-3,0,0,0,1,-3,-3,0,-2,-3,-2,1,0,-4,-2,-3,3,0,-1,-4],[-2,-2,1,6,-3,0,2,-1,-1,-3,-4,-1,-3,-3,-1,0,-1,-4,-3,-3,4,1,-1,-4],[0,-3,-3,-3,9,-3,-4,-3,-3,-1,-1,-3,-1,-2,-3,-1,-1,-2,-2,-1,-3,-3,-2,-4],[-1,1,0,0,-3,5,2,-2,0,-3,-2,1,0,-3,-1,0,-1,-2,-1,-2,0,3,-1,-4],[-1,0,0,2,-4,2,5,-2,0,-3,-3,1,-2,-3,-1,0,-1,-3,-2,-2,1,4,-1,-4],[0,-2,0,-1,-3,-2,-2,6,-2,-4,-4,-2,-3,-3,-2,0,-2,-2,-3,-3,-1,-2,-1,-4],[-2,0,1,-1,-3,0,0,-2,8,-3,-3,-1,-2,-1,-2,-1,-2,-2,2,-3,0,0,-1,-4],[-1,-3,-3,-3,-1,-3,-3,-4,-3,4,2,-3,1,0,-3,-2,-1,-3,-1,3,-3,-3,-1,-4],[-1,-2,-3,-4,-1,-2,-3,-4,-3,2,4,-2,2,0,-3,-2,-1,-2,-1,1,-4,-3,-1,-4],[-1,2,0,-1,-3,1,1,-2,-1,-3,-2,5,-1,-3,-1,0,-1,-3,-2,-2,0,1,-1,-4],[-1,-1,-2,-3,-1,0,-2,-3,-2,1,2,-1,5,0,-2,-1,-1,-1,-1,1,-3,-1,-1,-4],[-2,-3,-3,-3,-2,-3,-3,-3,-1,0,0,-3,0,6,-4,-2,-2,1,3,-1,-3,-3,-1,-4],[-1,-2,-2,-1,-3,-1,-1,-2,-2,-3,-3,-1,-2,-4,7,-1,-1,-4,-3,-2,-2,-1,-2,-4],[1,-1,1,0,-1,0,0,0,-1,-2,-2,0,-1,-2,-1,4,1,-3,-2,-2,0,0,0,-4],[0,-1,0,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-2,-1,1,5,-2,-2,0,-1,-1,0,-4],[-3,-3,-4,-4,-2,-2,-3,-2,-2,-3,-2,-3,-1,1,-4,-3,-2,11,2,-3,-4,-3,-2,-4],[-2,-2,-2,-3,-2,-1,-2,-3,2,-1,-1,-2,-1,3,-3,-2,-2,2,7,-1,-3,-2,-1,-4],[0,-3,-3,-3,-1,-2,-2,-3,-3,3,1,-2,1,-1,-2,-2,0,-3,-1,4,-3,-2,-1,-4],[-2,-1,3,4,-3,0,1,-1,0,-3,-4,0,-3,-3,-2,0,-1,-4,-3,-3,4,1,-1,-4],[-1,0,0,1,-3,3,4,-2,0,-3,-3,1,-1,-3,-1,0,-1,-3,-2,-2,1,4,-1,-4],[0,-1,-1,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-2,0,0,-2,-1,-1,-1,-1,-1,-4],[-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,1]],alphabetIndexes:{A:0,R:1,N:2,D:3,C:4,Q:5,E:6,G:7,H:8,I:9,L:10,K:11,M:12,F:13,P:14,S:15,T:16,W:17,Y:18,V:19,B:20,Z:21,X:22,"*":23}};var W;!function(t){t.HAMMING="Hamming",t.LEVENSHTEIN="Levenshtein",t.NEEDLEMANN_WUNSCH="Needlemann-Wunsch",t.MONOMER_CHEMICAL_DISTANCE="Monomer chemical distance"}(W||(W={}));const j={[W.HAMMING]:q,[W.LEVENSHTEIN]:function(){return(t,e)=>G(t,e)/Math.max(t.length,e.length)},[W.NEEDLEMANN_WUNSCH]:function(t){const e=new Uint16Array(65536),{gapOpen:n,gapExtend:o,scoringMatrix:r,alphabetIndexes:i}={...Y,...t};Object.entries(i).forEach(([t,n])=>e[t.charCodeAt(0)]=n);const s=[new Float32Array(1e4),new Float32Array(1e4)];return(t,i)=>{const a=new Array(t.length+1).fill(!1),l=new Array(t.length+1).fill(!1);let u=0,c=1;for(let e=1;e<t.length+1;e++)s[0][e]=-o-(e-1)*o,s[1][e]=0;s[0][0]=0;for(let f=1;f<i.length+1;f++){s[c][0]=-o-(f-1)*o;for(let d=1;d<t.length+1;d++){const h=s[u][d-1]+r[e[t.charCodeAt(d-1)]][e[i.charCodeAt(f-1)]],m=s[u][d]-(a[d]||1===f||f===i.length?o:n),p=s[c][d-1]-(l[d-1]||1===d||d===t.length?o:n);s[c][d]=Math.max(h,p,m),s[c][d]===h?(a[d]=!1,l[d]=!1):s[c][d]===p?(a[d]=!1,l[d]=!0):(a[d]=!0,l[d]=!1)}u=c,c=(c+1)%2}const f=Math.min(t.length,i.length);return(f-s[u][t.length])/f}},[W.MONOMER_CHEMICAL_DISTANCE]:q};function X(t,e){const n=t.trueCount()+e.trueCount();if(0==n)return 1;const o=t.andWithCountBits(e,!0);return o/(n-o)}function K(t){return t<=0?3402823e32:1/t-1}F.Tanimoto,F.Dice,F.Asymmetric,F.BraunBlanquet,F.Cosine,F.Kulczynski,F.McConnaughey,F.RogotGoldberg,F.Russel,F.Sokal,F.Hamming,F.Euclidean,F.Tanimoto,F.Dice,F.Asymmetric,F.BraunBlanquet,F.Cosine,F.Kulczynski,F.McConnaughey,F.RogotGoldberg,F.Russel,F.Sokal,F.Hamming,F.Euclidean,F.Tanimoto,F.Dice,F.Cosine,F.Tanimoto,F.Asymmetric,F.Cosine,F.Sokal,W.HAMMING,W.LEVENSHTEIN,W.MONOMER_CHEMICAL_DISTANCE,W.NEEDLEMANN_WUNSCH;const z={[R.Euclidean]:function(t,e){let n=0;for(let o=0;o<t.length;o++)n+=Math.pow(t[o]-e[o],2);return Math.sqrt(n)},[R.Manhattan]:function(t,e){let n=0;for(let o=0;o<t.length;o++)n+=Math.abs(t[o]-e[o]);return n},[R.Cosine]:function(t,e){let n=0,o=0,r=0;for(let i=0;i<t.length;i++)n+=t[i]*e[i],o+=t[i]*t[i],r+=e[i]*e[i];return(1-n/(Math.sqrt(o)*Math.sqrt(r)))/2}},Q={[P.Levenshtein]:G,[P.JaroWinkler]:$.Vb,[P.Manhattan]:function(t,e){if(t.length!==e.length)return 1;{let n=0;for(let o=1;o<t.length;o++)n+=t[o]==e[o]?0:1;return n/t.length}},[P.Onehot]:function(t,e){return t===e?0:1}},Z={[F.Tanimoto]:function(t,e){return 1-X(t,e)},[F.Dice]:function(t,e){return 1-function(t,e){const n=t.trueCount()+e.trueCount();return 0==n?0:2*t.andWithCountBits(e,!0)/n}(t,e)},[F.Asymmetric]:function(t,e){return 1-function(t,e){const n=Math.min(t.trueCount(),e.trueCount());return 0==n?0:t.andWithCountBits(e,!0)/n}(t,e)},[F.BraunBlanquet]:function(t,e){return K(function(t,e){const n=Math.max(t.trueCount(),e.trueCount());return 0==n?0:t.andWithCountBits(e,!0)/n}(t,e))},[F.Cosine]:function(t,e){return 1-function(t,e){const n=t.trueCount()*e.trueCount();return 0==n?0:t.andWithCountBits(e,!0)/Math.sqrt(n)}(t,e)},[F.Kulczynski]:function(t,e){return K(function(t,e){const n=t.trueCount()+e.trueCount(),o=t.trueCount()*e.trueCount();return 0==o?0:t.andWithCountBits(e,!0)*n/(2*o)}(t,e))},[F.McConnaughey]:function(t,e){return K(function(t,e){const n=t.trueCount()+e.trueCount(),o=t.trueCount()*e.trueCount();return 0==o?0:(t.andWithCountBits(e,!0)*n-o)/o}(t,e))},[F.RogotGoldberg]:function(t,e){return K(function(t,e){const n=t.andWithCountBits(e,!0),o=t.countBits(!0)+e.countBits(!0),r=t.length,i=r-o+n;return n==r||i==r?1:n/o+i/(2*r-o)}(t,e))},[F.Russel]:function(t,e){return K(function(t,e){return 0==t.length?0:t.andWithCountBits(e,!0)/t.length}(t,e))},[F.Sokal]:function(t,e){return 1-function(t,e){const n=t.trueCount()+e.trueCount(),o=t.andWithCountBits(e,!0);return o/(2*n-3*o)}(t,e)},[F.Hamming]:function(t,e){return t.trueCount()+e.trueCount()-2*t.andWithCountBits(e,!0)},[F.Euclidean]:function(t,e){return Math.sqrt(t.trueCount()+e.trueCount()-2*t.andWithCountBits(e,!0))}},J={[D.TanimotoIntArray]:function(t,e){return K(X(new H(t,32*t.length),new H(e,32*e.length)))}},tt={[k.Difference]:function(t){if(t&&null!=t.range&&t.range>0){const e=t.range;return(t,n)=>Math.abs(t-n)/e}return(t,e)=>Math.abs(t-e)}},et={[U.CommonItems]:function(t){const e=function(t){const e=t?.mostCommon??new Set;return(t,n)=>{const o=t.length,r=n.length;let i=0,s=0,a=0;for(;s<o&&a<r;)t[s]===n[a]?(e?.has(t[s])||++i,++s,++a):t[s]<n[a]?++s:++a;return i}}(t);return(t,n)=>0===n.length||0===t.length?1e4:Math.min(t.length,n.length)/(e(t,n)+1e-4)}},nt={[B.Vector]:{[R.Euclidean]:z[R.Euclidean],[R.Manhattan]:z[R.Manhattan],[R.Cosine]:z[R.Cosine]},[B.String]:{[P.Levenshtein]:Q[P.Levenshtein],[P.JaroWinkler]:Q[P.JaroWinkler],[P.Manhattan]:Q[P.Manhattan],[P.Onehot]:Q[P.Onehot]},[B.BitArray]:{[F.Tanimoto]:Z[F.Tanimoto],[F.Dice]:Z[F.Dice],[F.Asymmetric]:Z[F.Asymmetric],[F.BraunBlanquet]:Z[F.BraunBlanquet],[F.Cosine]:Z[F.Cosine],[F.Kulczynski]:Z[F.Kulczynski],[F.McConnaughey]:Z[F.McConnaughey],[F.RogotGoldberg]:Z[F.RogotGoldberg],[F.Russel]:Z[F.Russel],[F.Sokal]:Z[F.Sokal]},[B.MacroMolecule]:{[W.HAMMING]:j[W.HAMMING],[W.LEVENSHTEIN]:j[W.LEVENSHTEIN],[W.NEEDLEMANN_WUNSCH]:j[W.NEEDLEMANN_WUNSCH],[W.MONOMER_CHEMICAL_DISTANCE]:j[W.MONOMER_CHEMICAL_DISTANCE]},[B.Number]:{[k.Difference]:tt[k.Difference]},[B.IntArray]:{[D.TanimotoIntArray]:J[D.TanimotoIntArray]},[B.NumberArray]:{[U.CommonItems]:et[U.CommonItems]}};Object.keys(nt).reduce((t,e)=>{for(const n of Object.keys(nt[e]))t[n]=e;return t},{});const ot=ui,rt="bypassLargeDataWarning";var it,st,at,lt,ut;s(5540),function(t){t.EUCLIDEAN="EUCLIDEAN",t.MANHATTAN="MANHATTAN"}(it||(it={})),it.EUCLIDEAN,it.MANHATTAN,function(t){t.HAMMING="Hamming",t.EUCLIDEAN="Euclidean",t.VECTOR_COSINE="Vector Cosine",t.MANHATTAN="Manhattan",t.TANIMOTO="Tanimoto",t.LEVENSTEIN="Levenshtein",t.NEEDLEMAN_WUNSCH="Needlemann-Wunsch",t.MONOMER_CHEMICAL_DISTANCE="Monomer chemical distance",t.SOKAL="Sokal",t.COSINE="Cosine",t.ASYMMETRIC="Asymmetric",t.Difference="Difference",t.OneHot="One-Hot"}(st||(st={})),st.HAMMING,st.EUCLIDEAN,st.MANHATTAN,st.VECTOR_COSINE,st.TANIMOTO,st.LEVENSTEIN,st.NEEDLEMAN_WUNSCH,st.MONOMER_CHEMICAL_DISTANCE,st.SOKAL,st.COSINE,st.ASYMMETRIC,st.Difference,st.OneHot,st.HAMMING,st.EUCLIDEAN,st.MANHATTAN,st.TANIMOTO,st.SOKAL,st.COSINE,st.ASYMMETRIC,st.LEVENSTEIN,st.NEEDLEMAN_WUNSCH,st.MONOMER_CHEMICAL_DISTANCE,st.Difference,st.OneHot,st.VECTOR_COSINE,new Set([st.HAMMING,st.LEVENSTEIN,st.NEEDLEMAN_WUNSCH,st.MONOMER_CHEMICAL_DISTANCE,st.OneHot]),new Set([st.HAMMING,st.EUCLIDEAN,st.MANHATTAN,st.MONOMER_CHEMICAL_DISTANCE,st.LEVENSTEIN,st.NEEDLEMAN_WUNSCH,st.TANIMOTO,st.COSINE,st.VECTOR_COSINE,st.SOKAL,st.ASYMMETRIC,st.OneHot,st.Difference]),new Set([st.EUCLIDEAN,st.MANHATTAN,st.OneHot,st.Difference,st.VECTOR_COSINE]),new Set([st.EUCLIDEAN,st.MANHATTAN,st.Difference,st.VECTOR_COSINE]),new Set([st.EUCLIDEAN,st.MANHATTAN,st.Difference]),new Set([st.TANIMOTO,st.COSINE,st.SOKAL,st.ASYMMETRIC]),function(t){t.ADD="ADD",t.SUB="SUB",t.MULT="MULT"}(at||(at={})),function(t){t.SQUARE="SQUARE",t.INVERSE="INVERSE",t.TRANSPOSE="TRANSPOSE",t.NORM="NORM",t.COLUMN_NORM="COLUMN_NORM"}(lt||(lt={})),function(t){t.SCALARMULT="SCALARMULT",t.SCALARADD="SCALARADD",t.SCALARPOW="SCALARPOW"}(ut||(ut={})),Object.prototype.toString;const ct="dimensionality-reducer-terminate-event";var ft;!function(t){t.EUCLIDEAN="EUCLIDEAN",t.MANHATTAN="MANHATTAN"}(ft||(ft={}));const dt=t=>null==t;function ht(t,e){return`${e} (${t.length>4?`${t.length} columns`:t.map(t=>t.name).join(", ")})`}async function mt(e,n,o,r,i,a,l,u=!0,c=!1,f={preprocessingFuncArgs:[]},d={},h=null,m={},p){const g={showXAxis:!1,showYAxis:!1,showXSelector:!1,showYSelector:!1};if(n.length!==r.length||n.length!==a.length||n.length!==i.length||n.length!==f.preprocessingFuncArgs.length)throw new Error("columns, metrics and preprocessing functions, weights and function argumentsmust have the same length");const v=u?d.tableView??I.shell.tableView(e.name)??I.shell.addTableView(e):null,y=async()=>{const y=t.TaskBarProgressIndicator.create(`Initializing ${d.scatterPlotName??"dimensionality reduction"} ...`);let A;try{const w=function(t){const e=["Embed_X","Embed_Y"],n=t.columns.names().filter(t=>t.includes(e[0])).length+1;return e.map(t=>`${t}_${n}`)}(e);function C(r,i,s){let a=null,l=null;e.columns.names().includes(w[0])?(a=e.columns.byName(w[0]),l=e.columns.byName(w[1])):(a=e.columns.add(t.Column.float(w[0],e.rowCount)),l=e.columns.add(t.Column.float(w[1],e.rowCount)),u&&!A&&(A=v.scatterPlot({...g,x:w[0],y:w[1],title:d.scatterPlotName??ht(n,o)}))),d["show-scatterplot-progress"]&&(A?.root&&ot.setUpdateIndicator(A.root,!1),a.init(t=>s[0]?s[0][t]:void 0),l.init(t=>s[1]?s[1][t]:void 0));const c=r/i*100;y.update(c,`Running ${d.scatterPlotName??"dimensionality reduction"}... ${c.toFixed(0)}%`)}async function E(){e.columns.add(t.Column.float(w[0],e.rowCount)),e.columns.add(t.Column.float(w[1],e.rowCount));let c=null;u&&(A=v.scatterPlot({...g,x:w[0],y:w[1],title:d.scatterPlotName??ht(n,o)}),ot.setUpdateIndicator(A.root,!0));const h=I.events.onViewerClosed.subscribe(t=>{const e=t.args.viewer;e?.getOptions()?.look?.title&&A?.getOptions()?.look?.title&&e?.getOptions()?.look?.title===A?.getOptions()?.look?.title&&(I.events.fireCustomEvent(ct,{}),h.unsubscribe(),c?.(),y.close())}),m=new Promise(async(t,u)=>{try{c=t;const u=[];let h=r,m=i,g=l;if(p&&n.every(t=>t.isNumerical)){const t=n.map(t=>t.toList()),o=new Array(e.rowCount).fill(0).map((t,e)=>new Float32Array(n.length));for(let r=0;r<n.length;++r)for(let n=0;n<e.rowCount;++n)o[n][r]=t[r][n];f.distanceFnArgs=[{}],u.push({entries:o,options:{}}),h=[p],m=[1],g="MANHATTAN"}else for(let t=0;t<a.length;++t){const e=a[t];if(f.distanceFnArgs||(f.distanceFnArgs=[]),e){const o=e.inputs[0].name,i=e.inputs[1].name,{entries:s,options:a}=await e.apply({[o]:n[t],[i]:r[t],...f.preprocessingFuncArgs[t]??{}});u.push({entries:s,options:a}),f.distanceFnArgs.push(a)}else{const e=n[t].toList(),o={};u.push({entries:e,options:o}),f.distanceFnArgs.push(o)}}t(await async function(t,e,n,o,r,i,a){let l=await async function(t,e,n,o,r,i,a){if(!i.distanceFnArgs)throw new Error("options.distanceFnArgs must be defined");if(t.length!==e.length||t.length!==i.distanceFnArgs.length||t.length!==o.length)throw new Error("data, metrics and options and weights must have the same length");return new Promise(function(l,u){const c=new Worker(new URL(s.p+s.u(234),s.b));c.postMessage({columnsData:t,distanceMetrics:e,method:n,options:i,weights:o,aggregationMethod:r});const f=I.events.onCustomEvent(ct).subscribe(()=>{try{c?.terminate()}finally{f.unsubscribe()}});c.onmessage=({data:{error:t,embedding:e,epochNum:n,epochsLength:o}})=>{dt(n)||dt(o)?(f.unsubscribe(),t?u(t):l(e),setTimeout(()=>c.terminate(),100)):a&&a(n,o,e)}})}(t,n,e,o,r,i,a);return l=l.map(t=>function(t){const e=t.length;let n=0,o=0;for(let r=0;r<e;++r)n+=t[r],o+=Math.pow(t[r],2);const r=n/e,i=1/Math.sqrt(o/e-Math.pow(r,2));for(let n=0;n<e;++n)t[n]=(t[n]-r)*i;return t}(t)),l}(u.map(t=>t.entries),o,h,m,l,f,d[rt]?void 0:C))}catch(t){u(t)}}),E=await m;return y.close(),h.unsubscribe(),E}const b=await E();if(c&&b){const x=t.TaskBarProgressIndicator.create("Clustering embeddings ...");try{const _=await function(t,e,n,o){return r=this,i=void 0,l=function*(){return new Promise(function(r,i){const a=new Worker(new URL(s.p+s.u(682),s.b));a.postMessage({embedX:t,embedY:e,minPts:o,epsilon:n}),a.onmessage=({data:{error:t,clusters:e}})=>{a.terminate(),t?i(t):r(e)}})},new((a=void 0)||(a=Promise))(function(t,e){function n(t){try{s(l.next(t))}catch(t){e(t)}}function o(t){try{s(l.throw(t))}catch(t){e(t)}}function s(e){var r;e.done?t(e.value):(r=e.value,r instanceof a?r:new a(function(t){t(r)})).then(n,o)}s((l=l.apply(r,i||[])).next())});var r,i,a,l}(b[0],b[1],f.dbScanEpsilon??.01,f.dbScanMinPts??4),N=e.columns.getUnusedName("Cluster (DBSCAN)");e.columns.addNewString(N).init(t=>_[t].toString()),A&&(A.props.colorColumnName=N)}catch(M){I.shell.error("Clustering embeddings failed"),console.error(M)}finally{x.close()}}if(b){const T=e.columns.byName(w[0]),S=e.columns.byName(w[1]);if(T.init(t=>b[0][t]),S.init(t=>b[1][t]),h)try{const O=h.inputs[0].name,L=h.inputs[1].name;await h.prepare({[O]:T,[L]:S,...m}).call(!0)}catch(P){I.shell.error("Post-processing failed"),console.error(P)}if(A)return ot.setUpdateIndicator(A.root,!1),A.helpUrl="/help/compute/sequence-space",A}}catch(R){I.shell.error("Dimensionality reduction failed"),console.error(R),y.close(),A&&ot.setUpdateIndicator(A.root,!1)}};return new Promise(async(t,n)=>{try{if(d.fastRowCount&&e.rowCount>d.fastRowCount&&!d[rt])ot.dialog().add(ot.divText("Analysis might take several minutes. Do you want to continue?")).onOK(async()=>{try{const e=await y();t(e)}catch(t){n(t)}}).onCancel(()=>t(void 0)).show();else{const e=await y();t(e)}}catch(t){n(t)}})}var pt=function(t,e,n,o){return new(n||(n=Promise))(function(r,i){function s(t){try{l(o.next(t))}catch(t){i(t)}}function a(t){try{l(o.throw(t))}catch(t){i(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((o=o.apply(t,e||[])).next())})};const gt={SUBJ:"subj",STUDY:"study",SITE:"site",AGE:"age",SEX:"sex",RACE:"race",DISEASE:"disease",WEIGHT:"weight",HEIGHT:"height"};function vt(t,e,n){return pt(this,void 0,void 0,function*(){const o=I.data.demo.demog(100);I.shell.addTableView(o),E(!!(yield mt(o,t.map(t=>o.col(t)),e,n,t.map(()=>1),t.map(()=>{}),"EUCLIDEAN",!0,!0,{preprocessingFuncArgs:t.map(()=>({}))})),!0,"No scatterplot returned");const r=o.columns.names().filter(t=>t.toLowerCase().startsWith("embed"));E(r.length,2,"Wrong number of embeddings added"),E(!!o.columns.names().find(t=>t.toLowerCase().startsWith("cluster")),!0,"No cluster column added");for(const t of r){const e=o.col(t);E(new Array(e.length).fill(null).every((t,n)=>!e.isNone(n)&&!isNaN(e.get(n))),!0,"Embedding column has null-ish values")}yield new Promise(t=>setTimeout(t,500))})}b("Dimensionality reduction: UMAP",()=>{C("Numeric column",()=>pt(void 0,void 0,void 0,function*(){yield vt([gt.AGE],L.UMAP,[k.Difference])}),{timeout:3e4}),C("String column",()=>pt(void 0,void 0,void 0,function*(){yield vt([gt.SEX],L.UMAP,[P.Onehot])}),{timeout:3e4}),C("Numeric and string columns",()=>pt(void 0,void 0,void 0,function*(){yield vt([gt.SEX,gt.AGE],L.UMAP,[P.Onehot,k.Difference])})),C("All demog columns",()=>pt(void 0,void 0,void 0,function*(){const e=I.data.demo.demog(10).columns.toList().filter(t=>Object.values(gt).includes(t.name)),n=e.map(e=>e.type===t.COLUMN_TYPE.STRING?P.Onehot:k.Difference),o=e.map(t=>t.name);yield vt(o,L.UMAP,n)}))}),b("Dimensionality reduction: T-SNE",()=>{C("Numeric column",()=>pt(void 0,void 0,void 0,function*(){yield vt([gt.AGE],L.T_SNE,[k.Difference])}),{timeout:3e4}),C("String column",()=>pt(void 0,void 0,void 0,function*(){yield vt([gt.SEX],L.T_SNE,[P.Onehot])}),{timeout:3e4}),C("Numeric and string columns",()=>pt(void 0,void 0,void 0,function*(){yield vt([gt.SEX,gt.AGE],L.T_SNE,[P.Onehot,k.Difference])})),C("All demog columns",()=>pt(void 0,void 0,void 0,function*(){const e=I.data.demo.demog(10).columns.toList().filter(t=>Object.values(gt).includes(t.name)),n=e.map(e=>e.type===t.COLUMN_TYPE.STRING?P.Onehot:k.Difference),o=e.map(t=>t.name);yield vt(o,L.T_SNE,n)}))});const yt={i32:"HEAP32",f32:"HEAPF32"},At={i32:Int32Array,f32:Float32Array},wt={i32:2,f32:2},Ct={i32:DG.Column.fromInt32Array,f32:DG.Column.fromFloat32Array};class Et{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 bt extends Et{constructor(t,e,n=!1){super(t),this.type=e,this.toUpdate=n,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*At[this.type].BYTES_PER_ELEMENT)}isMemoryForBufferAllocated(){return 0!=this.buf}putDataToBuffer(t){if(this.isMemoryForBufferAllocated()){const e=this.type,n=wt[e],o=t[yt[e]];let r=null;const i=this.data;r="int"==i.type&&"i32"==e||"double"==i.type&&"f32"==e?i.getRawData():new At[e](i.getRawData()),r&&o.set(r,this.buf>>n)}}getDataFromBuffer(t){if(this.toUpdate&&this.isMemoryForBufferAllocated()){const e=this.type,n=t[yt[e]],o=this.buf,r=At[e].BYTES_PER_ELEMENT,i=this.data.getRawData();for(let t=0;t<this.numOfRows;t++)i[t]=n[o/r+t]}}freeBuffer(t){this.isMemoryForBufferAllocated()&&(t._free(this.buf),this.buf=0)}}class xt extends bt{constructor(t,e){super([],t,!0),this.numOfRows=e}putDataToBuffer(t){}getDataFromBuffer(t){if(this.toUpdate&&this.isMemoryForBufferAllocated()){const e=this.type,n=t[yt[e]],o=this.buf,r=Ct[e],i=new At[e](this.numOfRows);for(let t=0;t<i.length;t++)i[t]=n[o/i.BYTES_PER_ELEMENT+t];this.data=r("name",i)}}}class _t extends Et{constructor(t,e,n=!1){super(t),this.type=e,this.toUpdate=n,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*At[this.type].BYTES_PER_ELEMENT)}isMemoryForBufferAllocated(){return 0!=this.buf}putDataToBuffer(t){if(this.isMemoryForBufferAllocated()){const e=this.type,n=wt[e],o=t[yt[e]],r=At[e].BYTES_PER_ELEMENT;for(let t=0;t<this.numOfColumns;t++){let i=null;const s=this.data[t];i="int"==s.type&&"i32"==e||"double"==s.type&&"f32"==e?s.getRawData():new At[e](s.getRawData()),null!=i&&o.set(i,this.buf+t*this.numOfRows*r>>n)}}}getDataFromBuffer(t){if(this.toUpdate&&this.isMemoryForBufferAllocated()){const e=this.type,n=t[yt[e]],o=this.numOfRows,r=this.numOfColumns,i=new At[e](n.buffer,this.buf,o*r);for(let t=0;t<r;t++){const e=this.data[t].getRawData();for(let n=0;n<o;n++)e[n]=i[n+t*o]}}}freeBuffer(t){this.isMemoryForBufferAllocated()&&(t._free(this.buf),this.buf=0)}}class Nt extends _t{constructor(t,e,n){super([[]],t,!0),this.data=[],this.numOfColumns=n,this.numOfRows=e}putDataToBuffer(t){}getDataFromBuffer(t){if(this.toUpdate&&this.isMemoryForBufferAllocated()){const e=this.type,n=t[yt[e]],o=this.numOfRows,r=this.numOfColumns,i=At[e].BYTES_PER_ELEMENT,s=Ct[e],a=this.buf;for(let t=0;t<r;t++){const r=new At[e](o);for(let e=0;e<o;e++)r[e]=n[a/i+e+t*o];this.data.push(s((t+1).toString(),r))}}}}const Mt={intColumn:t=>new bt(t,"i32"),newIntColumn:t=>new xt("i32",t),intColumns:t=>new _t(t.toList(),"i32"),newIntColumns:(t,e)=>new Nt("i32",t,e),floatColumn:t=>new bt(t,"f32"),newFloatColumn:t=>new xt("f32",t),floatColumns:t=>new _t(t.toList(),"f32"),newFloatColumns:(t,e)=>new Nt("f32",t,e),int:t=>new Et(t),num:t=>new Et(t)},Tt={tableFromColumns:t=>DG.DataFrame.fromColumns(t.data),num:t=>t,int:t=>t,double:t=>t,column:t=>t.data};function St(t,e,n){const o=t[e],r=o.arguments,i=[];let s=0;for(const t in r){const e=r[t];if("_callResult"!=t){switch(e.type){case"floatColumns":case"int":case"num":case"floatColumn":case"intColumn":case"intColumns":e.data=Mt[e.type](n[s]),s++;break;case"newFloatColumns":case"newIntColumns":const t=r[e.numOfRows.ref].data[e.numOfRows.value],o=r[e.numOfColumns.ref].data[e.numOfColumns.value];e.data=Mt[e.type](t,o);break;case"newFloatColumn":case"newIntColumn":const i=r[e.numOfRows.ref].data[e.numOfRows.value];e.data=Mt[e.type](i)}i.push(r[t].data)}}const a=function(t,e,n,o){let r;for(const e of o)e.allocateMemoryForBuffer(t);let i=!0;for(const t of o)i&=t.isMemoryForBufferAllocated();if(i){const n=[],i=[];for(const e of o)e.complementArrOfParams(n),e.complementArrOfTypes(i),e.putDataToBuffer(t);const s="number";r=t.ccall(e,s,i,n);for(const e of o)e.getDataFromBuffer(t)}for(const e of o)e.freeBuffer(t);if(null!=r)return r}(t,e,0,i);r._callResult=Mt.num(a);const l=o.output;if("objects"!=l.type)return Tt[l.type](r[l.source].data);const u=[];for(const t of l.source)u.push(r[t].data.data);return u}const Ot="num",It="floatColumn",Lt="intColumn",Pt="floatColumns",Rt="newFloatColumns",Ft="intColumns",Dt="newIntColumns",Bt="newFloatColumn",kt="newIntColumn",Ut="numOfRows",Vt="numOfColumns",Gt="ref",$t="value",Ht="int",qt="double",Yt={intColumn:Int32Array,floatColumn:Float32Array,floatColumns:Float32Array,newFloatColumns:Float32Array,intColumns:Int32Array,newIntColumns:Int32Array,newFloatColumn:Float32Array,newIntColumn:Int32Array};function Wt(t,e){let n,o=[],r=0;for(const i in t){const s=t[i],a=s.type;if("_callResult"!==i){switch(a){case Ot:case Ht:case qt:s.data=e[r],r++;break;case Lt:case It:let o;const i=e[r],l=i.length;o=i.type===Ht&&a===Lt||i.type===qt&&a===It?i.getRawData().slice(0,l):new Yt[a](i.getRawData().slice(0,l)),s.data={array:o,numOfRows:l},r++;break;case kt:case Bt:let u=0;n=s[Ut][Gt],u=t[n].type===Ot?t[n].data:t[n].data[s[Ut][$t]],s.data={numOfRows:u},r++;break;case Ft:case Pt:let c=[];const f=e[r].byIndex(0).length;for(const t of e[r].toList())t.type===Ht&&a===Lt||t.type===qt&&a===It?c.push(t.getRawData().slice(0,f)):c.push(new Yt[a](t.getRawData().slice(0,f)));s.data={arrays:c,numOfRows:f,numOfColumns:c.length},r++;break;case Dt:case Rt:let d=0,h=0;n=s[Ut][Gt],d=t[n].type===Ot?t[n].data:t[n].data[s[Ut][$t]],n=s[Vt][Gt],h=t[n].type===Ot?t[n].data:t[n].data[s[Vt][$t]],s.data={numOfRows:d,numOfColumns:h},r++;break;default:return}o.push(s)}}return o}function jt(t,e){t.arguments._callResult=e.callResult,function(t,e){const n={newFloatColumns:DG.Column.fromFloat32Array,newIntColumns:DG.Column.fromInt32Array,newFloatColumn:DG.Column.fromFloat32Array,newIntColumn:DG.Column.fromInt32Array};let o=0;for(const r in t){const i=t[r];switch(i.type){case Ot:case Ht:case qt:case Lt:case It:case Pt:case Ft:break;case Bt:case kt:let t;null==i.name?t=(0).toString():a=i.name,i.column=n[i.type](t,e[o].array);break;case Dt:case Rt:let r=[],s=e[o].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++)r.push(n[i.type](a[t],e[o].arrays[t]));i.columns=r}o++}}(t.arguments,e.args);let n=function(t){let e=t.output;const n={newFloatColumns:"columns",newIntColumns:"columns",newFloatColumn:"column",newIntColumn:"column"};switch(e.type){case Ot:case Ht:case qt:return t.arguments[e.source];case"column":return t.arguments[e.source].column;case"tableFromColumns":return DG.DataFrame.fromColumns(t.arguments[e.source].columns);case"objects":let o=[];for(let r of e.source){let e=t.arguments[r];o.push(e[n[e.type]])}return o}}(t);return function(t){for(const e in t){const n=t[e];switch(n.type){case Ot:case Ht:case qt:case Lt:case It:case Ft:case Pt:break;case kt:case Bt:n.column=null;break;case Dt:case Rt:n.columns=null}}}(t.arguments),n}async function Xt(t,e,n){return new Promise((t,o)=>{const r=new Worker(new URL(s.p+s.u(128),s.b));r.postMessage(Wt(EDA.principalComponentAnalysisNipals.arguments,[e,n])),r.onmessage=function(e){r.terminate(),t(jt(EDA.principalComponentAnalysisNipals,e.data))}})}const Kt=1e-6;function zt(e){if(e.type!=t.COLUMN_TYPE.FLOAT&&e.type!=t.COLUMN_TYPE.INT)throw new Error("unsupported column type: "+e.type)}function Qt(t){if(t.stats.missingValueCount>0)throw new Error(`The column '${t.name}' has missing values.`)}function Zt(t,e){if(function(t,e){if(e<1)throw new Error("components must be positive.");if(e>t.length)throw new Error("components must not be greater than features count.");for(const e of t)zt(e),Qt(e)}(t,e),t.length*t.byIndex(0).length>1e8)throw new Error("dataframe is too big.")}function Jt(t,e,n){return e?n?function(t){const e=t.rowCount;for(const n of t.columns)if(n.isNumerical){const t=n.stats.stdev,o=n.stats.avg,r=n.getRawData();if(t>0)for(let n=0;n<e;++n)r[n]=(r[n]-o)/t;else for(let t=0;t<e;++t)r[t]-=o}return t}(t):function(t){const e=t.rowCount;for(const n of t.columns)if(n.isNumerical){const t=n.stats.avg;if(Math.abs(t)>Kt){const o=n.getRawData();for(let n=0;n<e;++n)o[n]-=t}}return t}(t):n?function(t){const e=t.rowCount;for(const n of t.columns)if(n.isNumerical){const t=n.stats.stdev;if(Math.abs(t-1)>Kt&&t>0){const o=n.getRawData();for(let n=0;n<e;++n)o[n]/=t}}return t}(t):t}var te,ee,ne,oe,re,ie,se,ae;function le(e,n,o,r,i){return a=this,l=void 0,c=function*(){Zt(n,o);const a=e.rowCount,l=function(e){const n=[];for(const t of e)t.stats.stdev>0&&t.stats.missingValueCount<1&&n.push(t);return t.DataFrame.fromColumns(n)}(n),u=l.columns.length;if(0===u){const e=[];for(let n=0;n<o;++n)e.push(t.Column.fromFloat32Array(`${n+1}`,new Float32Array(a).fill(0)));return t.DataFrame.fromColumns(e)}const c=u<o?o-u:0,f=Math.min(o,u);let d;if(u>900)d=yield Xt(0,n,f);else{const t=yield async function(t,e,n){return new Promise((t,o)=>{const r=new Worker(new URL(s.p+s.u(860),s.b));r.postMessage(Wt(EDA.principalComponentAnalysis.arguments,[e,n,1,0])),r.onmessage=function(e){r.terminate(),0===e.data.callResult?t(jt(EDA.principalComponentAnalysis,e.data)):t(-1)}})}(0,n,f);d=-1!==t?Jt(t,r,i):yield Xt(0,n,f)}if(void 0===d)throw new Error("Failed to compute PCA");d=Jt(d,r,i);const h=d.columns,m=h.length;for(let e=0;e<c;++e)h.add(t.Column.fromFloat32Array(`${m+e+1}`,new Float32Array(a).fill(0)));return d},new((u=void 0)||(u=Promise))(function(t,e){function n(t){try{r(c.next(t))}catch(t){e(t)}}function o(t){try{r(c.throw(t))}catch(t){e(t)}}function r(e){var r;e.done?t(e.value):(r=e.value,r instanceof u?r:new u(function(t){t(r)})).then(n,o)}r((c=c.apply(a,l||[])).next())});var a,l,u,c}!function(t){t[t.COMPUTE_COMPONENTS=0]="COMPUTE_COMPONENTS",t[t.PERFORM_MVA=1]="PERFORM_MVA",t[t.DEMO=2]="DEMO"}(te||(te={})),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",t.PREDICT="Predictors must not contain a response variable",t.ENOUGH="Not enough of features",t.COMP_LIN_PLS="Components count must be less than the number of features",t.COMP_QUA_PLS="Too large components count for the quadratic PLS regression",t.COMP_ROWS="Components count must not exceed the number of rows",t.COMPONENTS="Components count must be at least 1",t.INV_INP="Invalid inputs",t.NULL_COMPS="Components count is not specified"}(ee||(ee={})),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",t.BROWSE="Browse",t.ANALYSIS="Features Analysis",t.QUADRATIC="Quadratic"}(ne||(ne={})),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",t.QUADRATIC="Specifies whether to include squared terms as additional predictors in the PLS model"}(oe||(oe={})),function(t){t.PLS="/help/explore/multivariate-analysis#pls-components",t.MVA="/help/explore/multivariate-analysis",t.MODEL="/help/explore/multivariate-analysis#observed-vs-predicted",t.COEFFS="/help/explore/multivariate-analysis#regression-coefficients",t.LOADINGS="/help/explore/multivariate-analysis#loadings",t.EXPL_VARS="/help/explore/multivariate-analysis#explained-variance",t.SCORES="/help/explore/multivariate-analysis#scores"}(re||(re={})),function(t){t[t.DEFAULT=3]="DEFAULT",t[t.MIN=1]="MIN"}(ie||(ie={})),function(t){t.PREFIX="PLS",t.SUFFIX="(predicted)",t.COMP="component",t.COMPS="components"}(se||(se={})),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"}(ae||(ae={}));const ue=[.49,.79,.99];var ce;!function(t){t.AXIS="#838383",t.CIRCLE="#0000FF",t.INVALID="#EB6767",t.VALID_TEXT="#4d5261",t.VALID_LINE="#dbdcdf"}(ce||(ce={})),[{caption:ne.MODEL,text:"Closer to the line means better price prediction."},{caption:ne.SCORES,text:"The latent factor values for each sample reflect the similarities and dissimilarities among observations."},{caption:ne.LOADINGS,text:"The impact of each feature on the latent factors: higher loading means stronger influence."},{caption:ne.REGR_COEFS,text:"Parameters of the obtained model: features make different contribution to the prediction."},{caption:ne.EXPL_VAR,text:"How well the latent components fit source data: closer to one means better fit."}].map(t=>`# ${t.caption}\n\n${t.text}`).join("\n\n"),re.MVA;function fe(t){return e=this,n=void 0,r=function*(){Zt(t.features,t.components),zt(t.predict),Qt(t.predict);const e=yield async function(t,e,n,o){return new Promise((t,r)=>{const i=new Worker(new URL(s.p+s.u(412),s.b));i.postMessage(Wt(EDA.partialLeastSquareRegression.arguments,[e,n,o])),i.onmessage=function(e){i.terminate(),t(jt(EDA.partialLeastSquareRegression,e.data))}})}(t.table,t.features,t.predict,t.components);return{prediction:e[ae.PREDICTION],regressionCoefficients:e[ae.REGR_COEFFS],tScores:e[ae.T_SCORES],uScores:e[ae.U_SCORES],xLoadings:e[ae.X_LOADINGS],yLoadings:e[ae.Y_LOADINGS]}},new((o=void 0)||(o=Promise))(function(t,i){function s(t){try{l(r.next(t))}catch(t){i(t)}}function a(t){try{l(r.throw(t))}catch(t){i(t)}}function l(e){var n;e.done?t(e.value):(n=e.value,n instanceof o?n:new o(function(t){t(n)})).then(s,a)}l((r=r.apply(e,n||[])).next())});var e,n,o,r}Math.min,Math.max;var de=function(t,e,n,o){return new(n||(n=Promise))(function(r,i){function s(t){try{l(o.next(t))}catch(t){i(t)}}function a(t){try{l(o.throw(t))}catch(t){i(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((o=o.apply(t,e||[])).next())})};function he(e,n){return de(this,void 0,void 0,function*(){const o=e.length,r=n.length,i=n.stats.avg,s=n.stats.stdev,a=new Float32Array(o+1).fill(0);if(a[o]=i,0===s||1===r)return a;try{const r=[],l=[],u=new Float32Array(o),c=new Float32Array(o);let f=0,d=0;for(const t of e){const e=t.stats;e.stdev>0&&(r.push(f),l.push(t),u[d]=e.avg,c[d]=e.stdev,++d),++f}if(0===d)return a;const h=function(t,e,n,o,r,i,s){return St(EDA,"fitLinearRegressionParamsWithDataNormalizing",[t,e,n,o,r,i,s])}(t.DataFrame.fromColumns(l).columns,t.Column.fromFloat32Array("xAvgs",u,d),t.Column.fromFloat32Array("xStdevs",c,d),n,i,s,d+1).getRawData();for(let t=0;t<d;++t)a[r[t]]=h[t];a[o]=h[d]}catch(r){const i=yield function(e,n,o){return de(this,void 0,void 0,function*(){return(yield fe({table:t.DataFrame.fromColumns([n]),features:e,predict:n,components:o,names:void 0,isQuadratic:!1})).regressionCoefficients.getRawData()})}(e,n,pe(e.length,n.length));let s=0;for(let t=0;t<o;++t)a[t]=i[t],s+=i[t]*e.byIndex(t).stats.avg;a[o]-=s}return a})}function me(e,n){const o=e.length;if(o!==n.length-1)throw new Error("Incorrect parameters count");const r=e.byIndex(0),i=r.length,s=new Float32Array(i);let a=r.getRawData();const l=n[o];let u=n[0];for(let t=0;t<i;++t)s[t]=l+u*a[t];for(let t=1;t<o;++t){a=e.byIndex(t).getRawData(),u=n[t];for(let t=0;t<i;++t)s[t]+=u*a[t]}return t.Column.fromFloat32Array(e.getUnusedName("prediction"),s,i)}const pe=(t,e)=>e<=t?Math.min(10,e):Math.min(10,t);var ge;!function(t){t[t.MAX_SAMLPES=1e5]="MAX_SAMLPES",t[t.MAX_FEATURES=1e3]="MAX_FEATURES"}(ge||(ge={}));class ve{static isApplicable(t,e){for(const e of t)if(!e.matches("numerical"))return!1;return!!e.matches("numerical")}static isInteractive(t,e){return t.length<=ge.MAX_FEATURES&&e.length<=ge.MAX_SAMLPES}constructor(e){if(this.specn=null,e)try{const n=new Uint32Array(e.buffer,0,2),o=n[0],r=n[1],i=new Uint8Array(e.buffer,8,o),s=t.DataFrame.fromByteArray(i),a=s.rowCount,l=s.columns,u=l.length,c=new Uint8Array(e.buffer,8+o,r),f=t.DataFrame.fromByteArray(c);if(u<3)throw new Error("incorrect columns count");const d=l.byName(ne.FEATURES).toList(),h=new Float32Array(a);h.set(l.byName(ne.REGR_COEFS).getRawData());const m=u-2,p=new Array(m);for(let t=0;t<m;++t)p[t]=new Float32Array(a),p[t].set(l.byIndex(t+2).getRawData());this.specn={params:h,loadings:p,names:d,dim:a-1,components:u-2,scores:f}}catch(t){throw new Error(`Failed to load model: ${t instanceof Error?t.message:"the platform issue"}`)}}fit(e,n,o){return r=this,i=void 0,a=function*(){const r=yield fe({table:t.DataFrame.fromColumns([n]),features:e,predict:n,components:o,names:void 0,isQuadratic:!1}),i=e.names();i.push("_");const s=this.getRegrCoeffs(e,n,r.regressionCoefficients),a=this.getLoadings(o,r.xLoadings);this.specn={names:i,params:s,loadings:a,components:o,dim:e.length,scores:this.getScoresDf(r)},this.computeExplVars(n.length,o,r.yLoadings)},new((s=void 0)||(s=Promise))(function(t,e){function n(t){try{l(a.next(t))}catch(t){e(t)}}function o(t){try{l(a.throw(t))}catch(t){e(t)}}function l(e){var r;e.done?t(e.value):(r=e.value,r instanceof s?r:new s(function(t){t(r)})).then(n,o)}l((a=a.apply(r,i||[])).next())});var r,i,s,a}getLoadings(t,e){const n=Array(t),o=e[0].length+1;for(let r=0;r<t;++r)n[r]=new Float32Array(o),n[r].set(e[r].getRawData());return n}getRegrCoeffs(t,e,n){const o=t.length,r=new Float32Array(o+1),i=n.getRawData();let s=0;for(let e=0;e<o;++e)r[e]=i[e],s+=i[e]*t.byIndex(e).stats.avg;return r[o]=e.stats.avg-s,r}computeExplVars(t,e,n){if(null===this.specn)throw new Error("Failed to compute explained variances");const o=n.getRawData(),r=this.specn.loadings[0].length-1;let i=Math.pow(o[0],2)/t;this.specn.loadings[0][r]=i;for(let n=1;n<e;++n)i+=Math.pow(o[n],2)/t,this.specn.loadings[n][r]=i}toBytes(){if(null===this.specn)throw new Error("Failed to pack untrained model");const e=t.DataFrame.fromColumns([t.Column.fromStrings(ne.FEATURES,this.specn.names),t.Column.fromFloat32Array(ne.REGR_COEFS,this.specn.params)]);this.specn.loadings.forEach((n,o)=>e.columns.add(t.Column.fromFloat32Array(`${ne.XLOADING}${o+1}`,n)));const n=e.toByteArray(),o=n.length,r=this.specn.scores.toByteArray(),i=r.length,s=o+i+8,a=new Uint8Array(64*(Math.ceil(s/64)+1)),l=new Uint32Array(a.buffer,0,2);return l[0]=o,l[1]=i,a.set(n,8),a.set(r,8+o),a}predict(t){if(null===this.specn)throw new Error("Predicting failed: model is not trained");return me(t,this.specn.params)}loadingsParamsViewers(){if(null===this.specn)throw new Error("Failed to create loadings and parameters viewers: untrained model");const e=[],n=this.specn.dim,o=t.DataFrame.fromColumns([t.Column.fromStrings(ne.FEATURES,this.specn.names.slice(0,-1)),t.Column.fromFloat32Array(ne.REGR_COEFS,this.specn.params,n)]),r=o.columns,i=r.length,s=this.specn.components;return this.specn.loadings.forEach((e,r)=>o.columns.add(t.Column.fromFloat32Array(`${ne.XLOADING}${r+1}`,e,n))),e.push(t.Viewer.scatterPlot(o,{title:ne.LOADINGS,xColumnName:r.byIndex(i).name,yColumnName:r.byIndex(i+(s>1?1:0)).name,markerType:t.MARKER_TYPE.CIRCLE,labelFormColumnNames:[ne.FEATURES],help:re.LOADINGS})),e.push(t.Viewer.barChart(o,{title:ne.REGR_COEFS,splitColumnName:ne.FEATURES,valueColumnName:ne.REGR_COEFS,valueAggrType:t.AGG.AVG,help:re.COEFFS,showValueSelector:!1,showStackSelector:!1})),e}explVarsViewer(){if(null===this.specn)throw new Error("Failed to create exaplained variances viewer: untrained model");const e=this.specn.components,n=this.specn.dim,o=new Array(e),r=new Float32Array(e);o[0]=`${se.COMP} 1`,r[0]=this.specn.loadings[0][n];for(let t=1;t<e;++t)o[t]=`${se.COMPS} ${t+1}`,r[t]=this.specn.loadings[t][n];return t.Viewer.barChart(t.DataFrame.fromColumns([t.Column.fromStrings(se.COMPS,o),t.Column.fromFloat32Array(ne.EXPL_VAR,r)]),{title:ne.EXPL_VAR,splitColumnName:se.COMPS,valueColumnName:ne.EXPL_VAR,valueAggrType:t.AGG.AVG,help:re.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(e){const n=e.tScores,o=e.uScores;return n.forEach((t,e)=>t.name=`${ne.XSCORE}${e+1}`),o.forEach((t,e)=>t.name=`${ne.YSCORE}${e+1}`),t.DataFrame.fromColumns(n.concat(o))}getScoresScatter(){if(null===this.specn)throw new Error("Failed to create scores scatter: untrained model");const e=this.specn.scores.columns.names(),n=t.Viewer.scatterPlot(this.specn.scores,{title:ne.SCORES,xColumnName:e[0],yColumnName:e[1],markerType:t.MARKER_TYPE.CIRCLE,help:re.SCORES,showViewerFormulaLines:!0});return n.meta.formulaLines.addAll(function(t){const e=[],n=(t,n)=>{e.push({type:"line",formula:t,width:1,visible:!0,title:" ",min:-n,max:n,color:ce.CIRCLE})};return t.forEach(o=>{const r="${"+o+"}";e.push({type:"line",formula:`${r} = 0`,width:1,visible:!0,title:" ",color:ce.AXIS}),t.forEach(t=>{const e="${"+t+"}";ue.forEach(t=>{n(e+` = sqrt(${t*t} - ${r} * ${r})`,t),n(e+` = -sqrt(${t*t} - ${r} * ${r})`,t)})})}),e}(e)),n}}const ye=["Alpha","Beta","Gamma","Delta"];function Ae(t,e){if(t.length!==e.length)throw new Error(`Non-equal elements count: ${t.length} vs. ${e.length}`)}function we(e,n,o){const r=I.data.demo.randomWalk(e,n),i=r.columns,s=new Float32Array(n),a=new Array(n);for(let t=0;t<n;++t)a[t]=i.byIndex(t).getRawData();for(let r=0;r<o;++r){const o=new Float32Array(e);for(let t=0;t<n;++t)s[t]=Math.random();for(let t=0;t<e;++t)for(let e=0;e<n;++e)o[t]+=s[e]*a[e][t];i.add(t.Column.fromFloat32Array(`y${r}`,o))}return r}function Ce(t,e){Ae(t,e);let n=0;const o=t.length,r=t.getRawData(),i=e.getRawData();for(let t=0;t<o;++t)n=Math.max(n,Math.abs(r[t]-i[t]));return n}function Ee(e,n,o){const r=new Array(e),i=new Array(n);for(let t=0;t<n;++t){const n=new Float32Array(e);for(let t=0;t<e;++t)n[t]=Math.random();i[t]=n}const s=t.DataFrame.fromColumns(i.map((e,n)=>t.Column.fromFloat32Array(`#${n}`,e)));for(let t=0;t<e;++t)r[t]=i.slice(0,2).map(e=>e[t]>.5?"A":"B").join("");if(s.columns.add(t.Column.fromStrings("Labels",r)),o)for(let t=0;t<n;++t)for(let n=0;n<e;++n)i[t][n]+=1*(i[t][n]>0?1:-1);return s}function be(t,e){Ae(t,e);let n=0;const o=t.length;if(o<1)return 1;for(let r=0;r<o;++r)t.get(r)===e.get(r)&&++n;return n/o}var xe=function(t,e,n,o){return new(n||(n=Promise))(function(r,i){function s(t){try{l(o.next(t))}catch(t){i(t)}}function a(t){try{l(o.throw(t))}catch(t){i(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((o=o.apply(t,e||[])).next())})};const _e=100,Ne=9e3,Me=.1;b("Principal component analysis",()=>{C("Performance: 100K rows, 100 cols, 3 components",()=>xe(void 0,void 0,void 0,function*(){const t=I.data.demo.randomWalk(1e5,_e);yield le(t,t.columns,3,!1,!1)}),{timeout:Ne,benchmark:!0}),C("Performance: 1K rows, 5K cols, 3 components",()=>xe(void 0,void 0,void 0,function*(){const t=I.data.demo.randomWalk(1e3,5e3);yield le(t,t.columns,3,!1,!1)}),{timeout:Ne,benchmark:!0}),C("Correctness",()=>xe(void 0,void 0,void 0,function*(){const t=we(100,3,5);E(function(t){let e=0;const n=t.length,o=t.getRawData();for(let t=0;t<n;++t)e=Math.max(e,Math.abs(o[t]));return e}((yield le(t,t.columns,4,!1,!1)).columns.byIndex(3))<Me,!0,"Incorrect PCA computations")}),{timeout:Ne})}),b("Partial least squares regression",()=>{C("Performance: 100K rows, 100 cols, 3 components",()=>xe(void 0,void 0,void 0,function*(){const t=I.data.demo.randomWalk(1e5,_e),e=t.columns;yield fe({table:t,features:e,predict:e.byIndex(99),components:3,names:void 0,isQuadratic:!1})}),{timeout:Ne,benchmark:!0}),C("Correctness",()=>xe(void 0,void 0,void 0,function*(){const t=we(100,3,5),e=t.columns,n=e.byIndex(7),o=Ce(n,(yield fe({table:t,features:e,predict:n,components:3,isQuadratic:!1,names:void 0})).prediction);E(o<Me,!0,`Incorrect PLS computations, error is too big: ${o}; expected: < 0.1`)}),{timeout:Ne}),C("Predictive modeling: 100K samples, 100 features, 3 components",()=>xe(void 0,void 0,void 0,function*(){const t=we(1e5,3,98).columns,e=t.byIndex(_e);t.remove(e.name);const n=new ve;yield n.fit(t,e,3);const o=n.toBytes(),r=Ce(e,new ve(o).predict(t));E(r<Me,!0,`Incorrect PLS (ML) computations, error is too big: ${r}; expected: < 0.1`)}),{timeout:Ne,benchmark:!0})}),b("Linear regression",()=>{C("Performance: 100K samples, 100 features",()=>xe(void 0,void 0,void 0,function*(){const t=we(1e5,_e,1).columns,e=t.byIndex(_e),n=yield he(t,e),o=new Uint8Array(n.buffer);me(t,new Float32Array(o.buffer))}),{timeout:Ne,benchmark:!0}),C("Correctness",()=>xe(void 0,void 0,void 0,function*(){const t=we(100,2,1).columns,e=t.byIndex(2),n=yield he(t,e),o=new Uint8Array(n.buffer),r=me(t,new Float32Array(o.buffer)),i=Ce(r,r);E(i<Me,!0,`Incorrect linear regression computations, error is too big: ${i}; expected: < 0.1`)}),{timeout:Ne})});var Te=function(t,e,n,o){return new(n||(n=Promise))(function(r,i){function s(t){try{l(o.next(t))}catch(t){i(t)}}function a(t){try{l(o.throw(t))}catch(t){i(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((o=o.apply(t,e||[])).next())})};const Se="Avg-s",Oe="Stddev-s";var Ie;!function(t){t[t.MAX_SAMLPES=5e4]="MAX_SAMLPES",t[t.MAX_FEATURES=100]="MAX_FEATURES"}(Ie||(Ie={}));class Le{static isApplicable(e,n){for(const t of e)if(!t.matches("numerical"))return!1;return n.type===t.COLUMN_TYPE.STRING}static isInteractive(t,e){return t.length<=Ie.MAX_FEATURES&&e.length<=Ie.MAX_SAMLPES}constructor(e,n){if(this.params=void 0,this.classesCount=1,this.featuresCount=1,void 0!==e){const t=e.featuresCount,n=e.classesCount;if(t<1)throw new Error("Incorrect features count");if(n<1)throw new Error("Incorrect classes count");const o=t+1;this.avgs=new Float32Array(o),this.stdevs=new Float32Array(o),this.categories=new Array(o),this.featuresCount=t,this.classesCount=n}else{if(void 0===n)throw new Error("Softmax classifier not initialized");try{const e=new Uint32Array(n.buffer,0,1)[0],o=new Uint8Array(n.buffer,4,e),r=t.DataFrame.fromByteArray(o),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 e=0;e<a;++e){const n=i.byIndex(e);if(this.categories[e]=n.name,n.type!==t.COLUMN_TYPE.FLOAT)throw new Error(`Incorrect input column type. Expected: float, passed: ${n.type}`);this.params[e]=n.getRawData()}const l=i.byName(Se);if(l.type!==t.COLUMN_TYPE.FLOAT)throw new Error("incorrect average values column type");this.avgs=l.getRawData();const u=i.byName(Oe);if(u.type!==t.COLUMN_TYPE.FLOAT)throw new Error("incorrect standard deviations column type");this.stdevs=u.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 e=this.classesCount,n=new Array(e+2);for(let o=0;o<e;++o)n[o]=t.Column.fromFloat32Array(this.categories[o],this.params[o]);n[e]=t.Column.fromFloat32Array(Se,this.avgs),n[e+1]=t.Column.fromFloat32Array(Oe,this.stdevs);const o=t.DataFrame.fromColumns(n).toByteArray(),r=o.length,i=new Uint8Array(r+4);return new Uint32Array(i.buffer,0,1)[0]=r,i.set(o,4),i}fit(e,n){return Te(this,arguments,void 0,function*(e,n,o=1,r=100,i=.1,s=.001){if(e.length!==this.featuresCount)throw new Error("Training failes - incorrect features count");if(o<=0||r<1||i<=0||s<=0)throw new Error("Training failes - incorrect fitting hyperparameters");this.extractStats(e);const a=n.length,l=n.categories.length,u=n.categories;for(let t=0;t<l;++t)this.categories[t]=u[t];try{const u=function(t,e,n,o,r,i,s,a,l,u,c){return St(EDA,"fitSoftmax",[t,e,n,o,r,i,s,a,l,u,c])}(e,t.Column.fromFloat32Array("avgs",this.avgs,this.featuresCount),t.Column.fromFloat32Array("stdevs",this.stdevs,this.featuresCount),t.Column.fromInt32Array("targets",n.getRawData(),a),l,r,o,i,s,this.featuresCount+1,l).columns;this.params=new Array(l);for(let t=0;t<l;++t)this.params[t]=u.byIndex(t).getRawData()}catch(t){try{this.params=yield this.fitSoftmaxParams(e,n,r,o,i,s)}catch(t){throw new Error("Training failes")}}if(void 0===this.params)throw new Error("Training failes")})}extractStats(e){let n=0;for(const o of e){if(o.type!==t.COLUMN_TYPE.INT&&o.type!==t.COLUMN_TYPE.FLOAT)throw new Error("Training failes - incorrect features type");this.avgs[n]=o.stats.avg,this.stdevs[n]=o.stats.stdev,++n}}normalized(e){const n=e.byIndex(0).length,o=new Array(n);for(let t=0;t<n;++t)o[t]=new Float32Array(this.featuresCount);let r=0;for(const i of e){if(i.type!==t.COLUMN_TYPE.INT&&i.type!==t.COLUMN_TYPE.FLOAT)throw new Error("Training failes - incorrect features type");const e=i.getRawData(),s=this.avgs[r],a=this.stdevs[r];if(a>0)for(let t=0;t<n;++t)o[t][r]=(e[t]-s)/a;else for(let t=0;t<n;++t)o[t][r]=0;++r}return o}transposed(e){const n=e.byIndex(0).length,o=this.featuresCount,r=new Array(o);for(let t=0;t<o;++t)r[t]=new Float32Array(n);let i=0;for(const o of e){if(o.type!==t.COLUMN_TYPE.INT&&o.type!==t.COLUMN_TYPE.FLOAT)throw new Error("Training failes - incorrect features type");const e=o.getRawData(),s=this.avgs[i],a=this.stdevs[i];if(a>0)for(let t=0;t<n;++t)r[i][t]=(e[t]-s)/a;else for(let t=0;t<n;++t)r[i][t]=0;++i}return r}preprocessedTargets(e){if(e.type!==t.COLUMN_TYPE.STRING)throw new Error("Training failes - incorrect target type");const n=this.classesCount,o=e.length,r=e.getRawData(),i=new Array(o),s=new Uint32Array(n).fill(0);for(let t=0;t<o;++t)i[t]=new Uint8Array(n).fill(0);for(let t=0;t<o;++t)i[t][r[t]]=1,++s[r[t]];return{oneHot:i,weights:s}}predict(e){if(void 0===this.params)throw new Error("Non-trained model");if(e.length!==this.featuresCount)throw new Error("Predcition fails: incorrect features count");const n=this.normalized(e),o=n.length,r=this.featuresCount,i=this.classesCount;let s,a;const l=new Float32Array(i);let u,c,f;const d=new Array(o);for(let t=0;t<o;++t){s=n[t],u=0;for(let t=0;t<i;++t){a=this.params[t],u=a[r];for(let t=0;t<r;++t)u+=a[t]*s[t];l[t]=Math.exp(u)}c=l[0],f=0;for(let t=1;t<i;++t)c<l[t]&&(c=l[t],f=t);d[t]=this.categories[f]}return t.Column.fromStrings("predicted",d)}fitSoftmaxParams(t,e,n,o,r,i){return Te(this,void 0,void 0,function*(){const a=this.preprocessedTargets(e);return new Promise((l,u)=>{const c=new Worker(new URL(s.p+s.u(501),s.b));c.postMessage({features:this.normalized(t),transposed:this.transposed(t),oneHot:a.oneHot,classesWeights:a.weights,targetRaw:e.getRawData(),iterations:n,rate:o,penalty:r,tolerance:i}),c.onmessage=function(t){c.terminate(),l(t.data.params),console.log(`Loss: ${t.data.loss}`)}})})}}var Pe,Re,Fe;!function(t){t[t.ITERATIONS=20]="ITERATIONS",t[t.ETA=.3]="ETA",t[t.MAX_DEPTH=6]="MAX_DEPTH",t[t.LAMBDA=1]="LAMBDA",t[t.ALPHA=0]="ALPHA"}(Pe||(Pe={})),function(t){t[t.SAMLPES_HIGH=1e5]="SAMLPES_HIGH",t[t.SAMLPES_MID=5e4]="SAMLPES_MID",t[t.SAMPLES_LOW=1e4]="SAMPLES_LOW",t[t.FEATURES_HIGH=10]="FEATURES_HIGH",t[t.FEATURES_MID=20]="FEATURES_MID",t[t.FEATURES_LOW=100]="FEATURES_LOW"}(Re||(Re={})),function(t){t[t.MODEL=1e7]="MODEL",t[t.UTILS=1]="UTILS",t[t.PACK=128]="PACK",t[t.SIZE=4]="SIZE"}(Fe||(Fe={}));const De=t.FLOAT_NULL;var Be;!function(t){t.PREDICT="Prediction",t.TYPE="Type",t.PARAMS="Params count",t.CATS="Categories",t.CATS_SIZE="Categories size"}(Be||(Be={}));class ke{static isApplicable(t,e){for(const e of t)if(!e.matches("numerical"))return!1;return!(!e.matches("numerical")&&!e.matches("string"))}static isInteractive(t,e){const n=t.length,o=e.length;return o<=Re.SAMPLES_LOW?n<=Re.FEATURES_LOW:o<=Re.SAMLPES_MID?n<=Re.FEATURES_MID:o<=Re.SAMLPES_HIGH&&n<=Re.FEATURES_HIGH}constructor(e){var n;if(this.modelParams=void 0,this.targetType=void 0,this.targetCategories=void 0,e)try{let o=0;const r=new Uint32Array(e.buffer,o,1)[0];o+=Fe.SIZE;const i=t.DataFrame.fromByteArray(new Uint8Array(e.buffer,o,r));o+=r,this.targetType=i.get(Be.TYPE,0);const s=i.get(Be.PARAMS,0),a=i.get(Be.CATS_SIZE,0);if(a>0){const r=t.DataFrame.fromByteArray(new Uint8Array(e.buffer,o,a));this.targetCategories=null===(n=r.col(Be.CATS))||void 0===n?void 0:n.toList()}o+=a,o=4*Math.ceil(o/4),this.modelParams=new Int32Array(e.buffer,o,s)}catch(t){throw new Error(`Failed to load model: ${t instanceof Error?t.message:"the platform issue"}`)}}fit(e,n){return o=this,r=arguments,a=function*(e,n,o=Pe.ITERATIONS,r=Pe.ETA,i=Pe.MAX_DEPTH,a=Pe.LAMBDA,l=Pe.ALPHA){this.targetType=n.type,this.targetType===t.COLUMN_TYPE.STRING&&(this.targetCategories=n.categories),this.modelParams=yield async function(t,e,n,o,r,i,a,l,u,c){return new Promise((f,d)=>{const h=e.length,m=t.length,p=new Float32Array(h*m);let g,v;for(let e=0;e<m;++e){v=t.byIndex(e).getRawData(),g=e*h;for(let t=0;t<h;++t)p[t+g]=v[t]}const y=new Worker(new URL(s.p+s.u(990),s.b));y.postMessage({features:p,target:e.getRawData(),samplesCount:h,featuresCount:m,modelReserve:u,utilsLength:c,iterations:o,eta:r,maxDepth:i,lambda:a,alpha:l,missingValue:n}),y.onmessage=function(t){y.terminate(),f(t.data.params)}})}(e,n,De,o,r,i,a,l,Fe.MODEL,Fe.UTILS)},new((i=void 0)||(i=Promise))(function(t,e){function n(t){try{l(a.next(t))}catch(t){e(t)}}function s(t){try{l(a.throw(t))}catch(t){e(t)}}function l(e){var o;e.done?t(e.value):(o=e.value,o instanceof i?o:new i(function(t){t(o)})).then(n,s)}l((a=a.apply(o,r||[])).next())});var o,r,i,a}predict(e){if(void 0===this.modelParams)throw new Error("Failed to apply non-trained model");const n=function(t,e,n){const o=t.byIndex(0).length,r=t.length,i=n.length;let s=XGBoostModule.HEAPF32;const a=XGBoostModule.HEAP32,l=XGBoostModule._malloc(o*r*4),u=XGBoostModule._malloc(4*o),c=XGBoostModule._malloc(4*i);for(let e=0;e<r;++e){const n=t.byIndex(e).getRawData();for(let t=0;t<o;++t)s[l/4+t+e*o]=n[t]}for(let t=0;t<i;++t)a[c/4+t]=n[t];XGBoostModule._predict(l,o,r,e,c,i,u,o),s=XGBoostModule.HEAPF32;const f=new Float32Array(o);for(let t=0;t<o;++t)f[t]=s[u/4+t];return XGBoostModule._free(l),XGBoostModule._free(u),XGBoostModule._free(c),f}(e,De,this.modelParams);switch(this.targetType){case t.COLUMN_TYPE.STRING:return this.stringColPrediction(n);case t.COLUMN_TYPE.INT:return this.intColPrediction(n);case t.COLUMN_TYPE.BIG_INT:return this.bigIntColPrediction(n);default:return t.Column.fromFloat32Array(Be.PREDICT,n)}}toBytes(){if(void 0===this.modelParams||void 0===this.targetType)throw new Error("Failed to pack non-trained model");const e=void 0!==this.targetCategories?t.DataFrame.fromColumns([t.Column.fromList(t.COLUMN_TYPE.STRING,Be.CATS,this.targetCategories)]).toByteArray():void 0,n=void 0!==e?e.length:0,o=this.modelParams.length*this.modelParams.BYTES_PER_ELEMENT,r=t.DataFrame.fromColumns([t.Column.fromStrings(Be.TYPE,[this.targetType]),t.Column.fromInt32Array(Be.PARAMS,new Int32Array([this.modelParams.length])),t.Column.fromInt32Array(Be.CATS_SIZE,new Int32Array([n]))]).toByteArray(),i=r.length,s=64*Math.ceil((Fe.SIZE+i+n+o+Fe.PACK)/64),a=new Uint8Array(s);let l=0;return new Uint32Array(a.buffer,l,1)[0]=i,l+=Fe.SIZE,a.set(r,l),l+=i,n>0&&a.set(e,l),l+=n,l=4*Math.ceil(l/4),a.set(new Uint8Array(this.modelParams.buffer),l),a}stringColPrediction(e){const n=e.length;if(void 0===this.targetCategories)throw new Error("Predicting fails: undefined categories");const o=new Array(n),r=this.targetCategories.length-1,i=t=>Math.max(0,Math.min(t,r));for(let t=0;t<n;++t)o[t]=this.targetCategories[i(Math.round(e[t]))];return t.Column.fromList(t.COLUMN_TYPE.STRING,Be.PREDICT,o)}intColPrediction(e){const n=e.length,o=new Int32Array(n);for(let t=0;t<n;++t)o[t]=Math.round(e[t]);return t.Column.fromInt32Array(Be.PREDICT,o,n)}bigIntColPrediction(e){const n=e.length,o=new BigInt64Array(n);for(let t=0;t<n;++t)o[t]=BigInt(Math.round(e[t]));return t.Column.fromBigInt64Array(Be.PREDICT,o)}}var Ue=function(t,e,n,o){return new(n||(n=Promise))(function(r,i){function s(t){try{l(o.next(t))}catch(t){i(t)}}function a(t){try{l(o.throw(t))}catch(t){i(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((o=o.apply(t,e||[])).next())})};const Ve=100,Ge=8e3;var $e;b("Softmax",()=>{C("Performance: 50K samples, 100 features",()=>Ue(void 0,void 0,void 0,function*(){const t=Ee(5e4,Ve,!1).columns,e=t.byIndex(Ve);t.remove(e.name);const n=new Le({classesCount:e.categories.length,featuresCount:t.length});yield n.fit(t,e);const o=n.toBytes();new Le(void 0,o).predict(t)}),{timeout:Ge,benchmark:!0}),C("Correctness",()=>Ue(void 0,void 0,void 0,function*(){const t=Ee(50,2,!0).columns,e=t.byIndex(2);t.remove(e.name);const n=new Le({classesCount:e.categories.length,featuresCount:t.length});yield n.fit(t,e);const o=n.toBytes(),r=be(e,new Le(void 0,o).predict(t));E(r>.9,!0,`Softmax failed, too small accuracy: ${r}; expected: <= 0.9`)}),{timeout:Ge})}),b("XGBoost",()=>{C("Performance: 50K samples, 100 features",()=>Ue(void 0,void 0,void 0,function*(){const t=Ee(5e4,Ve,!1).columns,e=t.byIndex(Ve);t.remove(e.name);const n=new ke;yield n.fit(t,e);const o=n.toBytes();new ke(o).predict(t)}),{timeout:Ge,benchmark:!0}),C("Correctness",()=>Ue(void 0,void 0,void 0,function*(){const t=Ee(50,2,!0).columns,e=t.byIndex(2);t.remove(e.name);const n=new ke;yield n.fit(t,e);const o=n.toBytes(),r=be(e,new ke(o).predict(t));E(r>.9,!0,`XGBoost failed, too small accuracy: ${r}; expected: <= 0.9`)}),{timeout:Ge})}),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"}($e||($e={}));const He="copy";var qe,Ye;!function(t){t.KNN_IMPUTER="k-NN Imputation",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"}(qe||(qe={})),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 k-NN 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",t.RUN="Run imputation using the k-NN method"}(Ye||(Ye={}));const We=[t.COLUMN_TYPE.INT,t.COLUMN_TYPE.FLOAT,t.COLUMN_TYPE.STRING,t.COLUMN_TYPE.DATE_TIME,t.COLUMN_TYPE.QNUM];function je(e){switch(e.type){case t.COLUMN_TYPE.INT:return t.INT_NULL;case t.COLUMN_TYPE.FLOAT:case t.COLUMN_TYPE.QNUM:case t.COLUMN_TYPE.DATE_TIME:return t.FLOAT_NULL;case t.COLUMN_TYPE.STRING:return e.max;default:throw new Error($e.UNSUPPORTED_COLUMN_TYPE)}}var Xe,Ke,ze;function Qe(e){switch(e){case t.COLUMN_TYPE.STRING:case t.COLUMN_TYPE.DATE_TIME:return{defaultWeight:ze.WEIGHT,defaultMetric:Xe.ONE_HOT,availableMetrics:[Xe.ONE_HOT]};case t.COLUMN_TYPE.INT:case t.COLUMN_TYPE.FLOAT:case t.COLUMN_TYPE.QNUM:return{defaultWeight:ze.WEIGHT,defaultMetric:Xe.DIFFERENCE,availableMetrics:[Xe.DIFFERENCE,Xe.ONE_HOT]};default:throw new Error($e.UNSUPPORTED_COLUMN_TYPE)}}!function(t){t.ONE_HOT="One-hot",t.DIFFERENCE="Difference"}(Xe||(Xe={})),function(t){t.EUCLIDEAN="Euclidean",t.MANHATTAN="Manhattan"}(Ke||(Ke={})),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"}(ze||(ze={}));const Ze=e=>{C(`${e} dist, 100K rows, 15 cols, 75 missing vals`,()=>{return n=void 0,o=void 0,i=function*(){const n=function(e){const n=ye.length,o=[];let r=0;const i=new Map;for(let n=0;n<5;++n){const s=new Int32Array(e),a=`int #${n+1}`,l=[];for(let t=0;t<e;++t)s[t]=Math.floor(10*Math.random());for(let n=0;n<5;++n)r=Math.floor(e*Math.random()),s[r]=t.INT_NULL,l.push(r);o.push(t.Column.fromInt32Array(a,s)),i.set(a,l)}for(let n=0;n<5;++n){const s=new Float32Array(e),a=`float #${n+1}`,l=[];for(let t=0;t<e;++t)s[t]=10*Math.random();for(let n=0;n<5;++n)r=Math.floor(e*Math.random()),s[r]=t.FLOAT_NULL,l.push(r);o.push(t.Column.fromFloat32Array(a,s)),i.set(a,l)}for(let s=0;s<5;++s){const a=new Array(e),l=`str #${s+1}`,u=[];for(let t=0;t<e;++t)a[t]=ye[Math.floor(Math.random()*n)];const c=t.Column.fromStrings(l,a);for(let t=0;t<5;++t)r=Math.floor(e*Math.random()),c.set(r,null),u.push(r);o.push(c),i.set(l,u)}return{df:t.DataFrame.fromColumns(o),misValsIds:i}}(1e5),o=n.df,r=o.columns.names(),i=new Map,s=n.misValsIds;for(const t of o.columns){const e=Qe(t.type);i.set(t.name,{weight:e.defaultWeight,type:e.defaultMetric})}const a=function(e,n,o,r,i,s,a){if(s<1)throw new Error($e.INCORRECT_NEIGHBORS);if(e.rowCount<2)throw new Error($e.KNN_NOT_ENOUGH_OF_ROWS);if(0===n.length)throw new Error($e.KNN_NO_TARGET_COLUMNS);if(0===o.size)throw new Error($e.KNN_NO_FEATURE_COLUMNS);1===o.size&&n.forEach(t=>{if(o.has(t))throw new Error(`${$e.KNN_NO_FEATURE_COLUMNS} can be used for the column '${t}'`)}),n.forEach(t=>{if(!r.has(t))throw new Error(`${$e.KNN_FAILS}: ${$e.WRONG_PREDICTIONS}`)});const l=e.columns;n.forEach(t=>{if(!We.includes(l.byName(t).type))throw new Error($e.UNSUPPORTED_COLUMN_TYPE)}),o.forEach((t,n)=>{if(!We.includes(e.getCol(n).type))throw new Error($e.UNSUPPORTED_COLUMN_TYPE)});const u=new Map;return n.forEach(n=>{const c=l.byName(n),f=je(c),d=c.length,h=c.getRawData(),m=new Uint16Array(c.categories.length),p=[],g=[],v=[],y=[];o.forEach((t,e)=>{if(e!==c.name){const n=l.byName(e);switch(p.push(n.getRawData()),g.push(je(n)),t.type){case Xe.DIFFERENCE:v.push((e,n)=>t.weight*Math.abs(e-n));break;case Xe.ONE_HOT:v.push((e,n)=>t.weight*(e===n?0:1))}}});const A=p.length,w=new Uint32Array(p.length),C=new Float32Array(p.length);let E=0;const b=new Array(s);let x=0,_=0,N=0,M=0,T=0;const S=(t,e)=>{w.forEach((n,o)=>{C[o]=v[n](p[n][t],p[n][e])})},O=i===Ke.EUCLIDEAN?()=>{let t=0;for(let e=0;e<E;++e)t+=C[e]*C[e];return Math.sqrt(t)}:()=>{let t=0;for(let e=0;e<E;++e)t+=Math.abs(C[e]);return Math.sqrt(t)},L=t=>{if(h[t]===f)return!1;for(let e=0;e<E;++e)if(p[w[e]][t]===g[w[e]])return!1;return!0},P=e=>{if((t=>{E=0;for(let e=0;e<A;++e)p[e][t]!==g[e]&&(w[E]=e,++E)})(e),0===E)throw new Error(`${$e.KNN_IMPOSSIBLE_IMPUTATION}: the column "${c.name}", row ${e+1}`);x=0;for(let t=0;t<d;++t)if(L(t)&&t!==e){S(e,t);const n=O();if(x<s)b[x]={index:t,dist:n},++x;else{_=0,N=b[0].dist;for(let t=1;t<x;++t)N<b[t].dist&&(N=b[t].dist,_=t);n<N&&(b[_]={index:t,dist:n})}}if(0===x)throw new Error(`${$e.KNN_IMPOSSIBLE_IMPUTATION}: the column "${c.name}", row ${e+1}`);if(c.type===t.COLUMN_TYPE.STRING)return(()=>{m.forEach((t,e,n)=>n[e]=0);let t=0;for(t=0;t<x;++t)++m[h[b[t].index]];let e=m[0],n=0;return m.forEach((t,o)=>{t>e&&(e=t,n=o)}),n})();M=0;for(let t=0;t<x;++t)M+=h[b[t].index];return T=M/x,c.type===t.COLUMN_TYPE.INT?Math.round(T):T};if(a){for(const t of r.get(n))try{h[t]=P(t)}catch(e){y.push(t),e instanceof Error||I.shell.error($e.CORE_ISSUE)}y.length>0&&u.set(n,y),c.set(0,c.get(0))}else{const t=c.clone();let o=1,i=`${n}(${He})`;for(;e.columns.contains(i);)i=`${n}(${He} ${o})`,++o;t.name=i;const s=t.getRawData();for(const t of r.get(n))try{s[t]=P(t)}catch(e){y.push(t),e instanceof Error||I.shell.error($e.CORE_ISSUE)}y.length>0&&u.set(i,y),t.set(0,t.get(0)),e.columns.add(t)}}),u}(o,r,i,s,e,5,!0);let l=0;a.forEach((t,e)=>l+=t.length),E(l,0,`Failed to impute ${l} missing values`)},new((r=void 0)||(r=Promise))(function(t,e){function s(t){try{l(i.next(t))}catch(t){e(t)}}function a(t){try{l(i.throw(t))}catch(t){e(t)}}function l(e){var n;e.done?t(e.value):(n=e.value,n instanceof r?n:new r(function(t){t(n)})).then(s,a)}l((i=i.apply(n,o||[])).next())});var n,o,r,i},{timeout:1e4,benchmark:!0})};b("Missing values imputation",()=>{Ze(Ke.EUCLIDEAN),Ze(Ke.MANHATTAN)});var Je,tn=s(6572);function en(t){if(t<=0||t>=1)throw new Error(Je.INCORRECT_SIGNIFICANCE_LEVEL)}function nn(t){const e=t.size;return e<=1?0:(t.sumOfSquares-Math.pow(t.sum,2)/e)/(e-1)}function on(t,e,n){en(n);const o=nn(t),r=nn(e);return 0===o||0===r?o===r:o/r<tn.centralF.inv(1-n,t.size-1,e.size-1)}!function(t){t.NON_EQUAL_FACTORS_VALUES_SIZE="non-equal sizes of factor and values arrays",t.INCORRECT_SIGNIFICANCE_LEVEL="incorrect significance level",t.NON_EQUAL_VARIANCES="non-equal variances",t.NON_NORMAL_DISTRIB="non-normal distribution",t.UNSUPPORTED_COLUMN_TYPE="unsupported feature column type",t.INCORRECT_CATEGORIES_COL_TYPE="incorrect categories column type",t.SINGLE_FACTOR="single category features",t.CATS_EQUAL_SIZE="single value in each category",t.NO_FEATURE_VARIATION="no feature variation",t.NO_FEATURE_VARIATION_WITHIN_GROUPS="no feature variation within groups"}(Je||(Je={}));class rn{constructor(t,e,n){if(this.nullsCount=0,t.length!==e.length)throw new Error(Je.NON_EQUAL_FACTORS_VALUES_SIZE);if(!(e.stats.stdev>0))throw new Error(Je.NO_FEATURE_VARIATION);this.setStats(t,e,n)}areVarsEqual(t){const e=this.catCount;if(1===e)return!0;const n={sum:this.sums[0],sumOfSquares:this.sumsOfSquares[0],size:this.subSampleSizes[0]};for(let o=1;o<e;++o)if(!on(n,{sum:this.sums[o],sumOfSquares:this.sumsOfSquares[o],size:this.subSampleSizes[o]},t))return!1;return!0}getOneWayAnova(){let t=0,e=0,n=0,o=this.catCount,r=o;for(let i=0;i<o;++i)0!==this.subSampleSizes[i]?(t+=this.sums[i],e+=this.sumsOfSquares[i],n+=Math.pow(this.sums[i],2)/this.subSampleSizes[i]):--r;if(o=r,1===o)throw new Error(Je.SINGLE_FACTOR);const i=this.size-this.nullsCount;if(i===o)throw new Error(Je.CATS_EQUAL_SIZE);const s=e-Math.pow(t,2)/i,a=n-Math.pow(t,2)/i,l=s-a;if(0===l)throw new Error(Je.NO_FEATURE_VARIATION_WITHIN_GROUPS);const u=o-1,c=i-o,f=a/u,d=l/c,h=f/d;return{ssBn:a,ssWn:l,ssTot:s,dfBn:u,dfWn:c,dfTot:i-1,msBn:f,msWn:d,fStat:h,pValue:1-tn.centralF.cdf(h,u,c)}}setStats(e,n,o){const r=n.type,i=n.length,s=je(n);switch(r){case t.COLUMN_TYPE.INT:case t.COLUMN_TYPE.FLOAT:const r=o;this.catCount=r,this.size=i;const a=n.getRawData(),l=e.getRawData(),u=new Float64Array(r).fill(0),c=new Float64Array(r).fill(0),f=new Int32Array(r).fill(0);let d;if(e.type==t.COLUMN_TYPE.BOOL){let t=0,e=0,n=l[0];const o=8*l.BYTES_PER_ELEMENT-1;for(let r=0;r<i;++r)d=1&n>>e,a[r]!==s?(u[d]+=a[r],c[d]+=Math.pow(a[r],2),++f[d]):++this.nullsCount,++e,e>o&&(e=0,++t,n=l[t])}else{const t=e.stats.missingValueCount>0?je(e):-1;for(let e=0;e<i;++e)d=l[e],d!==t&&a[e]!==s?(u[d]+=a[e],c[d]+=Math.pow(a[e],2),++f[d]):++this.nullsCount}this.sums=u,this.sumsOfSquares=c,this.subSampleSizes=f;break;default:throw new Error(Je.UNSUPPORTED_COLUMN_TYPE)}}}function sn(t,e,n,o=!0){en(n);const r=t.stats.uniqueCount;if(r<2)throw new Error(Je.SINGLE_FACTOR);const i=new rn(t,e,r);if(o&&!i.areVarsEqual(n))throw new Error(Je.NON_EQUAL_VARIANCES);const s=i.getOneWayAnova();return{anovaTable:s,fCritical:tn.centralF.inv(1-n,s.dfBn,s.dfWn),significance:n}}var an=function(t,e,n,o){return new(n||(n=Promise))(function(r,i){function s(t){try{l(o.next(t))}catch(t){i(t)}}function a(t){try{l(o.throw(t))}catch(t){i(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((o=o.apply(t,e||[])).next())})};const ln=.05,un=!1,cn=t.Column.fromList(t.COLUMN_TYPE.INT,"features",[9,12,4,8,7,4,6,8,2,10,1,3,4,5,2]),fn=t.Column.fromStrings("features",["A","A","A","A","A","B","B","B","B","B","C","C","C","C","C"]);var dn;!function(t){t[t.DF_BN=2]="DF_BN",t[t.DF_TOT=14]="DF_TOT",t[t.DF_WN=12]="DF_WN",t[t.SS_BN=63.333]="SS_BN",t[t.SS_TOT=147.333]="SS_TOT",t[t.SS_WN=84]="SS_WN",t[t.MS_BN=31.666]="MS_BN",t[t.MS_WN=7]="MS_WN",t[t.F_STAT=4.523]="F_STAT",t[t.F_CRIT=3.885]="F_CRIT",t[t.P_VAL=.034]="P_VAL"}(dn||(dn={})),b("ANOVA",()=>{C("Performance: 1M rows demog",()=>an(void 0,void 0,void 0,function*(){const t=I.data.demo.demog(1e6),e=t.col("race"),n=t.col("height");new rn(e,n,e.stats.uniqueCount).areVarsEqual(ln),sn(e,n,ln,un)}),{timeout:4e3,benchmark:!0}),C("Correctness",()=>an(void 0,void 0,void 0,function*(){const t=sn(fn,cn,ln,un),e=t.anovaTable;E(e.dfBn,dn.DF_BN,"Incorrect degrees of freedom: dfBn"),E(e.dfTot,dn.DF_TOT,"Incorrect degrees of freedom: dfTot"),E(e.dfWn,dn.DF_WN,"Incorrect degrees of freedom: dfWn");const n=(t,e)=>Math.abs(t-e)<.01;E(n(e.ssBn,dn.SS_BN),!0,"Incorrect sum of squares: ssBn"),E(n(e.ssTot,dn.SS_TOT),!0,"Incorrect sum of squares: ssTot"),E(n(e.ssWn,dn.SS_WN),!0,"Incorrect sum of squares: ssWn"),E(n(e.msBn,dn.MS_BN),!0,"Incorrect mean squares: msBn"),E(n(e.msWn,dn.MS_WN),!0,"Incorrect mean squares: msWn"),E(n(e.fStat,dn.F_STAT),!0,"Incorrect F-statistics value"),E(n(e.pValue,dn.P_VAL),!0,"Incorrect p-value"),E(n(t.fCritical,dn.F_CRIT),!0,"Incorrect F-critical")}),{timeout:4e3})});const hn=rxjs;function mn(t){return"numerical"===t.functionType}function pn(t=1,e=0,n=1){return{functionType:"numerical",weight:t,mode:"freeform",min:e,max:n,line:[]}}function gn(t=1,e){return{functionType:"categorical",weight:t,categories:null!=e?e:[{name:"Category 1",desirability:1}]}}function vn(t){return t.functionType?t:t.categories?{...t,functionType:"categorical"}:{...t,functionType:"numerical"}}const yn=["Average","Sum","Product","Geomean","Min","Max"],An="Average";class wn{constructor(t,e=!1,n=!1){this.onChanged=new hn.Subject,this.supportsModeDialog=!0,this.desirabilityInputs=[],this.form=null,this.columnCategories=null,this._prop=t,this.design=e,this.showControls=n,this.root=ot.divV([],"statistics-mpo-cat-editor"),this.buildForm()}buildForm(){var t;const e=null!==(t=this._prop.categories)&&void 0!==t?t:[];this.form&&(ot.empty(this.root),this.form=null,this.desirabilityInputs=[]),this.design?this.buildDesignForm(e):this.buildViewForm(e)}createDesirabilityInput(t,e){var n;const o=ot.input.float(t,{value:null!==(n=e.desirability)&&void 0!==n?n:.5,min:0,max:1,format:"#0.000",onValueChanged:t=>{e.desirability=t,this.onChanged.next(this._prop)}});return this.desirabilityInputs.push(o),o}buildViewForm(t){for(const e of t)this.createDesirabilityInput(e.name,e);this.form=ot.form(this.desirabilityInputs),this.root.append(this.form)}buildDesignForm(t){const e=ot.divH([ot.divText("Name","statistics-mpo-cat-col-header statistics-mpo-cat-name"),ot.divText("Score","statistics-mpo-cat-col-header statistics-mpo-cat-desirability"),...this.showControls?[ot.div([],{style:{width:"40px"}})]:[]],"statistics-mpo-cat-row statistics-mpo-cat-header-row"),n=t.map((t,e)=>this.buildCategoryRow(t,e));this.form=ot.divV([e,...n]),this.root.append(this.form)}buildCategoryRow(t,e){const n=this.columnCategories?ot.input.choice("",{items:this.columnCategories,nullable:!0,value:t.name||null,onValueChanged:e=>{t.name=null!=e?e:"",this.onChanged.next(this._prop)}}):ot.input.string("",{value:t.name,onValueChanged:e=>{t.name=e,this.onChanged.next(this._prop)}});n.root.classList.add("statistics-mpo-cat-name");const o=this.createDesirabilityInput("",t);o.root.classList.add("statistics-mpo-cat-desirability");const r=[n.root,o.root];if(this.showControls){const t=ot.icons.add(()=>{const t={name:this.columnCategories?"":`Category ${this._prop.categories.length+1}`,desirability:1};this._prop.categories.splice(e+1,0,t),this.buildForm(),this.onChanged.next(this._prop)}),n=ot.icons.delete(()=>{this._prop.categories.splice(e,1),this.buildForm(),this.onChanged.next(this._prop)});r.push(ot.divH([t,n],"statistics-mpo-control-buttons"))}return ot.divH(r,"statistics-mpo-cat-row")}redrawAll(t=!0){this.buildForm(),t&&this.onChanged.next(this._prop)}setChoices(t){this.columnCategories=t,this.buildForm()}setColumn(t){var e,n;if(!t)return;this.columnCategories=t.isCategorical?[...t.categories]:null;const o=new Map(null!==(n=null===(e=this._prop.categories)||void 0===e?void 0:e.map(t=>[t.name,t.desirability]))&&void 0!==n?n:[]);this._prop.categories=t.categories.map(t=>{var e;return{name:t,desirability:null!==(e=o.get(t))&&void 0!==e?e:1}}),this.buildForm()}}let Cn;const En=10,bn=10,xn=20,_n=30,Nn={line:t.Color.toHtml(t.Color.filteredRows),handle:t.Color.toHtml(t.Color.selectedRows),barFill:t.Color.toHtml(t.Color.histogramBar),barStroke:t.Color.toHtml(t.Color.lightGray)};class Mn{constructor(t,e,n,o){this.minX=t,this.maxX=e,this.width=n,this.height=o,this.plotWidth=n-_n-bn,this.plotHeight=o-En-xn,this.scaleX=this.maxX-this.minX===0?1:this.plotWidth/(this.maxX-this.minX),this.scaleY=this.plotHeight}toCanvasCoords(t){return{x:_n+(t[0]-this.minX)*this.scaleX,y:En+this.plotHeight-t[1]*this.scaleY}}toDataCoords(t,e){let n=this.minX+(t-_n)/this.scaleX,o=(En+this.plotHeight-e)/this.scaleY;return n=Math.max(this.minX,Math.min(this.maxX,n)),o=Math.max(0,Math.min(1,o)),{x:n,y:o}}}class Tn{constructor(t,e,n){this.root=ot.div(),this.onChanged=new hn.Subject,this.supportsModeDialog=!0,this.ignoreNextClick=!1,this.dragScaleX=0,this.dragScaleY=0,this._prop=t,this._width=e,this._height=n,this.ensureDefaultLine(),this.root.style.width=`${e}px`,this.root.style.height=`${n}px`,this.root.style.position="relative",requestAnimationFrame(()=>this.initKonva(e,n))}ensureDefaultLine(){var t,e;if(this._prop.line.length>0)return;const n=null!==(t=this._prop.min)&&void 0!==t?t:0,o=null!==(e=this._prop.max)&&void 0!==e?e:1;this._prop.line=[[n,.5],[o,.5]]}updateDragScales(){const t=this._width-_n-bn,e=this._height-En-xn;this.dragScaleX=(this.getMaxX()-this.getMinX())/t,this.dragScaleY=1/e}isInPlotArea(t,e,n){return t.x>=_n&&t.x<=e-bn&&t.y>=En&&t.y<=n-xn}async initKonva(t,e){var n;if(!this.root.parentElement)return void console.warn("Konva container not attached to DOM yet.");const o=await async function(){return Cn||(Cn=(await s.e(397).then(s.t.bind(s,5778,23))).default),Cn}();this.barsLayer=new o.Layer,this.stage=new o.Stage({container:this.root,width:t,height:e}),this.stage.add(this.barsLayer),this.layer=new o.Layer,this.stage.add(this.layer);const r=this.getMinX(),i=this.getMaxX();this.drawAxes(r,i,t,e),this.konvaLine=new o.Line({points:[],stroke:Nn.line,strokeWidth:2,lineCap:"round",lineJoin:"round"}),this.layer.add(this.konvaLine),this.pointsGroup=new o.Group,this.layer.add(this.pointsGroup),this.redrawFn=(n=!0)=>{const r=this.getMinX(),i=this.getMaxX();"freeform"===this._prop.mode&&this._prop.freeformLine&&(this._prop.line=this._prop.freeformLine),"freeform"!==this._prop.mode&&(this._prop.freeformLine||(this._prop.freeformLine=[...this._prop.line]),this._prop.line=this.computeLine()),this.pointsGroup.destroyChildren();const s=[],a=new Mn(r,i,t,e),l=[...this._prop.line.keys()].sort((t,e)=>this._prop.line[t][0]-this._prop.line[e][0]);l.map(t=>this._prop.line[t]).forEach((t,n)=>{const u=a.toCanvasCoords([t[0],t[1]]);if(s.push(u.x,u.y),"freeform"!==this._prop.mode)return;const c=new o.Circle({x:u.x,y:u.y,radius:3,fill:"white",stroke:Nn.line,strokeWidth:1,draggable:!0,hitStrokeWidth:5});c.setAttr("_dataIndex",l[n]),c.on("dragmove",t=>{const n=t.target,o=n.position(),s=n.getAttr("_dataIndex"),u=l.indexOf(s),c=u>0?this._prop.line[l[u-1]][0]:r,f=u<l.length-1?this._prop.line[l[u+1]][0]:i,d=i-r===0?0:.001*(i-r),h=a.toCanvasCoords([c+(u>0?d:0),0]).x,m=a.toCanvasCoords([f-(u<l.length-1?d:0),0]).x;o.x=Math.max(h,Math.min(m,o.x));const p=e-xn;o.y=Math.max(10,Math.min(p,o.y)),n.position(o);const g=a.toDataCoords(o.x,o.y);this._prop.line[s][0]=g.x,this._prop.line[s][1]=g.y;const v=this._prop.line.map((t,e)=>{if(e===s)return[o.x,o.y];{const e=a.toCanvasCoords([t[0],t[1]]);return[e.x,e.y]}}).flat();this.konvaLine.points(v),this.layer.batchDraw()}),c.on("dragend",()=>{var t;this._prop.line.sort((t,e)=>t[0]-e[0]),null===(t=this.redrawFn)||void 0===t||t.call(this)}),c.on("contextmenu",t=>{var e;if(t.evt.preventDefault(),this._prop.line.length<=2)return void I.shell.warning("Cannot remove points, minimum of 2 required.");this.ignoreNextClick=!0;const n=t.target.getAttr("_dataIndex");n>=0&&(null==this._prop.min&&(this._prop.min=this.getMinX()),null==this._prop.max&&(this._prop.max=this.getMaxX()),this._prop.line.splice(n,1),null===(e=this.redrawFn)||void 0===e||e.call(this))}),c.on("mouseenter",t=>{this.stage.container().style.cursor="pointer";const e=t.target.position(),n=a.toDataCoords(e.x,e.y),o=`X: ${n.x.toFixed(2)}, Y: ${n.y.toFixed(2)}<br><br>Drag to move, double-click to edit, right-click to delete`;ot.tooltip.show(o,t.evt.clientX,t.evt.clientY)}),c.on("mouseleave",()=>{this.stage.container().style.cursor="default",ot.tooltip.hide()}),c.on("dblclick dbltap",t=>{this.ignoreNextClick=!0,ot.tooltip.hide();const e=t.target.getAttr("_dataIndex");this.showPointEditor(e,t.evt.clientX,t.evt.clientY)}),this.pointsGroup.add(c)}),this.konvaLine.points(s),this.layer.batchDraw(),this.addSpecialHandle(t,e),n&&this.onChanged.next(this._prop.line)},this.stage.on("click tap",t=>{var e,n;if(this.ignoreNextClick)return void(this.ignoreNextClick=!1);if(t.target instanceof o.Circle||0!==t.evt.button)return;const r=null===(e=this.stage)||void 0===e?void 0:e.getPointerPosition();if(!r)return;const i=this.getMinX(),s=this.getMaxX();if(!this.isInPlotArea(r,this.stage.width(),this.stage.height()))return;const a=new Mn(i,s,this.stage.width(),this.stage.height()).toDataCoords(r.x,r.y);this._prop.line.push([a.x,a.y]),this._prop.line.sort((t,e)=>t[0]-e[0]),null===(n=this.redrawFn)||void 0===n||n.call(this)}),this.stage.on("mousemove",n=>{if(!this.stage)return;const o=this.stage.getPointerPosition();o&&"freeform"!==this._prop.mode&&(this.isInPlotArea(o,t,e)?this.stage.container().style.cursor="grab":this.stage.container().style.cursor="default")}),this.stage.on("mouseout",()=>ot.tooltip.hide()),this.enableCurveDrag(t,e),this.updateDragScales(),this.pendingBarValues&&(this.drawBars(this.pendingBarValues),this.pendingBarValues=void 0),null===(n=this.redrawFn)||void 0===n||n.call(this,!1)}get line(){return this._prop.line}computeLine(){var t,e,n,o,r,i,s,a;if("freeform"===this._prop.mode)return this._prop.line;const l=this.getMinX(),u=this.getMaxX(),c=[];for(let f=0;f<=60;f++){const d=l+f/60*(u-l);let h=0;if("gaussian"===this._prop.mode){null!==(t=(r=this._prop).mean)&&void 0!==t||(r.mean=(l+u)/2),null!==(e=(i=this._prop).sigma)&&void 0!==e||(i.sigma=(u-l)/6);const n=(d-this._prop.mean)/this._prop.sigma;h=Math.exp(-.5*n*n)}if("sigmoid"===this._prop.mode){null!==(n=(s=this._prop).x0)&&void 0!==n||(s.x0=(l+u)/2),null!==(o=(a=this._prop).k)&&void 0!==o||(a.k=10);const t=this._prop.x0,e=this._prop.k;h=1/(1+Math.exp(-e*(d-t)))}c.push([d,h])}return c}drawAxes(t,e,n,o){const r=getComputedStyle(document.documentElement).getPropertyValue("--grey-2").trim()||"#DBDCDF";this.layer.add(new Cn.Line({points:[_n,o-xn,n-bn,o-xn],stroke:r,strokeWidth:1}),new Cn.Line({points:[_n,En,_n,o-xn],stroke:r,strokeWidth:1}),new Cn.Text({x:_n,y:o-xn+3,text:t.toFixed(1),fontSize:9,fill:"grey"}),new Cn.Text({x:n-bn-15,y:o-xn+3,text:e.toFixed(1),fontSize:9,fill:"grey"}))}getMinX(){var t,e;return null!==(e=null!==(t=this._prop.min)&&void 0!==t?t:Math.min(...this._prop.line.map(t=>t[0])))&&void 0!==e?e:0}getMaxX(){var t,e;return null!==(e=null!==(t=this._prop.max)&&void 0!==t?t:Math.max(...this._prop.line.map(t=>t[0])))&&void 0!==e?e:1}getDefaultMean(){return(this.getMinX()+this.getMaxX())/2}getDefaultSigma(){return Math.max(.01,(this.getMaxX()-this.getMinX())/6)}getDefaultX0(){return(this.getMinX()+this.getMaxX())/2}getDefaultK(){return 10}redrawAll(t=!0){if(!this.stage||!this.layer||!this.redrawFn)return;const e=this.stage.width(),n=this.stage.height(),o=this.getMinX(),r=this.getMaxX();this.layer.destroyChildren(),this.drawAxes(o,r,e,n),this.layer.add(this.konvaLine,this.pointsGroup),this.redrawFn(t),this.barValues&&this.drawBars()}drawBars(t){var e;if(t&&(this.barValues=t),!this.barsLayer)return void(this.pendingBarValues=t);if(this.barsLayer.destroyChildren(),!this.barValues||0===this.barValues.length)return;const n=this.barsLayer.getStage();if(!n)return void(this.pendingBarValues=t);const o=n.width(),r=n.height(),i=this.getMinX(),s=this.getMaxX();if(s===i)return;const a=o-_n-bn,l=r-En-xn,u=Math.max(1e-9,(s-i)/20),c=new Array(20).fill(0);(null!==(e=this.barValues)&&void 0!==e?e:[]).forEach(t=>{const e=Math.min(Math.floor((t-i)/u),19);c[e]++});const f=Math.max(...c)||1;c.forEach((t,e)=>{const n=_n+e*u/(s-i)*a,o=u/(s-i)*a-1,r=t/f*l,c=new Cn.Rect({x:n,y:En+l-r,width:o,height:r,fill:Nn.barFill,opacity:.25,stroke:Nn.barStroke,strokeWidth:.5});this.barsLayer.add(c)}),this.barsLayer.batchDraw()}enableCurveDrag(t,e){if(!this.stage)return;let n=!1,o=null,r=0,i=0,s=0,a=0;this.stage.on("mousedown touchstart",l=>{var u,c,f,d;if("freeform"===this._prop.mode)return;if(!l.evt)return;const h=this.stage.getPointerPosition();h&&this.isInPlotArea(h,t,e)&&(n=!0,o=h,r=null!==(u=this._prop.mean)&&void 0!==u?u:(this.getMinX()+this.getMaxX())/2,i=null!==(c=this._prop.sigma)&&void 0!==c?c:(this.getMaxX()-this.getMinX())/6,s=null!==(f=this._prop.x0)&&void 0!==f?f:(this.getMinX()+this.getMaxX())/2,a=null!==(d=this._prop.k)&&void 0!==d?d:10,this.stage.container().style.cursor="grabbing")}),this.stage.on("mousemove touchmove",t=>{var e,l;if(!n||!o)return;const u=this.stage.getPointerPosition();if(!u)return;const c=u.x-o.x,f=u.y-o.y;"gaussian"===this._prop.mode&&(this._prop.mean=r+c*this.dragScaleX,this._prop.sigma=Math.max(.01,i+-f*this.dragScaleY*(this.getMaxX()-this.getMinX()))),"sigmoid"===this._prop.mode&&(this._prop.x0=s+c*this.dragScaleX,this._prop.k=Math.max(.1,a+-f*this.dragScaleY*50)),this._prop.line=this.computeLine(),null===(e=this.redrawFn)||void 0===e||e.call(this),null===(l=this.onParamsChanged)||void 0===l||l.call(this,this._prop)}),this.stage.on("mouseup touchend",()=>{n=!1,o=null,this.stage.container().style.cursor="default"})}addSpecialHandle(t,e){var n,o;if("freeform"===this._prop.mode)return;const r=this.getMinX(),i=this.getMaxX(),s=new Mn(r,i,t,e);let a=(r+i)/2,l=.5;"gaussian"===this._prop.mode?(a=null!==(n=this._prop.mean)&&void 0!==n?n:(r+i)/2,l=1):"sigmoid"===this._prop.mode&&(a=null!==(o=this._prop.x0)&&void 0!==o?o:(r+i)/2,l=.5);const u=s.toCanvasCoords([a,l]);this.specialHandle?(this.specialHandle.getLayer()||this.layer.add(this.specialHandle),this.specialHandle.position(u)):(this.specialHandle=new Cn.Circle({x:u.x,y:u.y,radius:7,fill:Nn.handle,draggable:!0,hitStrokeWidth:15}),this.specialHandle.on("dragmove",t=>{var e,n;const o=t.target.position(),r=s.toDataCoords(o.x,o.y);var i;"gaussian"===this._prop.mode?(this._prop.mean=r.x,this._prop.sigma=Math.max(.01,Math.abs(r.y-1))):"sigmoid"===this._prop.mode&&(this._prop.x0=r.x,this._prop.k=(i=30*Math.abs(r.y-.5),Math.max(.1,Math.min(30,i)))),this._prop.line=this.computeLine(),null===(e=this.redrawFn)||void 0===e||e.call(this),null===(n=this.onParamsChanged)||void 0===n||n.call(this,this._prop)}),this.layer.add(this.specialHandle)),this.layer.batchDraw()}showPointEditor(t,e,n){const o=this._prop.line[t],r=ot.input.float("X",{value:o[0],min:this.getMinX(),max:this.getMaxX(),format:"#0.00",step:.01}),i=ot.input.float("Y",{value:o[1],min:0,max:1,format:"#0.00",step:.01}),s=()=>{u.removeEventListener("keydown",l),f.remove()},a=()=>{const e=r.value,n=i.value;null==e||null==n||isNaN(e)||isNaN(n)||(this._prop.line[t]=[e,n],this.redrawAll())},l=t=>{"Enter"===t.key&&(a(),s()),"Escape"===t.key&&s()},u=ot.inputs([r,i]);u.style.overflow="hidden",u.addEventListener("keydown",l);const c=this.root.getBoundingClientRect(),f=ot.showPopup(u,this.root,{dx:e-c.left,dy:n-c.bottom,smart:!1})}setRange(t,e){const n=this.getMinX(),o=this.getMaxX()-n,r=e-t;if(0!==o&&0!==r){const e=r/o,i=o=>t+(o-n)*e;null!=this._prop.mean&&(this._prop.mean=i(this._prop.mean)),null!=this._prop.sigma&&(this._prop.sigma*=e),null!=this._prop.x0&&(this._prop.x0=i(this._prop.x0)),null!=this._prop.k&&(this._prop.k/=e);for(const t of this._prop.line)t[0]=i(t[0]);if(this._prop.freeformLine)for(const t of this._prop.freeformLine)t[0]=i(t[0])}this._prop.min=t,this._prop.max=e,this.updateDragScales(),this.redrawAll(!1)}setColumn(t){if(!t)return;const e=t.toList();this.drawBars(e)}}class Sn{static create(t,e=300,n=80,o=!1){return mn(t)?new Tn(t,e,n):new wn(t,o,!1)}}const On=["freeform","gaussian","sigmoid"],In=["numerical","categorical"];function Ln(t){return ot.divText(t,"statistics-mpo-section-header")}class Pn{constructor(t,e,n,o,r){this.propertyName=t,this.prop=e,this.onUpdate=n,this.onTypeChanged=o,this.mappedCol=r}static strategyToLabel(t){switch(t){case"default":return"Use default score";case"skip":return"Skip property";default:return"Exclude row"}}buildDefaultScoreInput(t){const e=t.missingValues,n=ot.input.float("Default score",{value:"default"===(null==e?void 0:e.strategy)?e.score:0,min:0,max:1,format:"#0.000",onValueChanged:e=>{t.missingValues={strategy:"default",score:e},this.onUpdate({missingValues:t.missingValues})}});n.root.style.display="default"===(null==e?void 0:e.strategy)?"":"none";const o=ot.input.choice("If missing",{items:["Exclude row","Use default score","Skip property"],value:Pn.strategyToLabel(null==e?void 0:e.strategy),onValueChanged:e=>{var o;const r="Use default score"===e;t.missingValues="Skip property"===e?{strategy:"skip"}:r?{strategy:"default",score:null!==(o=n.value)&&void 0!==o?o:0}:{strategy:"exclude"},n.root.style.display=r?"":"none",this.onUpdate({missingValues:t.missingValues})}});return o.setTooltip("How to handle missing values:<br>• <b>Exclude row</b> — assign an MPO score of 0 to the row<br>• <b>Use default score</b> — use a fixed fallback desirability value<br>• <b>Skip property</b> — calculate the score from the remaining properties"),n.setTooltip("Desirability score (0–1) to use as fallback."),ot.form([o,n])}show(){const t=structuredClone(this.prop),e=ot.dialog({title:this.propertyName});e.root.classList.add("statistics-mpo-desirability-dialog");const n=ot.divV([]),o={[t.functionType]:structuredClone(t)},r=[];let i;const s=ot.input.choice("Type",{items:[...In],value:this.prop.functionType,onValueChanged:e=>{var n;if(e!==this.prop.functionType){if(o[this.prop.functionType]=structuredClone(this.prop),o[e])this.prop=structuredClone(o[e]);else if("categorical"===e){const e=(null===(n=this.mappedCol)||void 0===n?void 0:n.isCategorical)?this.mappedCol.categories.map(t=>({name:t,desirability:1})):void 0;this.prop=gn(t.weight,e)}else this.prop=pn(t.weight);c()}}}),a=()=>{var t,e,o;const s=this.prop;null!==(t=s.mode)&&void 0!==t||(s.mode="freeform");const a=new Tn(s,355,103);(null===(e=this.mappedCol)||void 0===e?void 0:e.isNumerical)&&a.setColumn(this.mappedCol);const l=ot.input.choice("Mode",{items:On,value:s.mode,onValueChanged:t=>{s.mode=t,this.onUpdate({mode:s.mode}),d(),a.redrawAll(!1)}}),u=[{key:"min",label:"Min",fallback:()=>a.getMinX()},{key:"max",label:"Max",fallback:()=>a.getMaxX()},{key:"mean",label:"Mean",fallback:()=>a.getDefaultMean()},{key:"sigma",label:"Sigma",fallback:()=>a.getDefaultSigma(),transform:t=>Math.max(.01,t)},{key:"x0",label:"x0",fallback:()=>a.getDefaultX0()},{key:"k",label:"k",fallback:()=>a.getDefaultK(),transform:t=>Math.max(.1,t)}],c=new Map;for(const t of u)c.set(t.key,ot.input.float(t.label,{value:null!==(o=s[t.key])&&void 0!==o?o:t.fallback(),format:"#0.000",onValueChanged:e=>{const n=t.transform?t.transform(null!=e?e:t.fallback()):null!=e?e:t.fallback();s[t.key]=n,this.onUpdate({[t.key]:n}),a.redrawAll(!1)}}));c.get("min").setTooltip("Minimum property value"),c.get("max").setTooltip("Maximum property value");const f=ot.form([c.get("min"),c.get("max"),c.get("mean"),c.get("sigma"),c.get("x0"),c.get("k")]);f.classList.add("statistics-mpo-param-grid");const d=()=>{c.get("mean").root.classList.toggle("statistics-mpo-hidden","gaussian"!==s.mode),c.get("sigma").root.classList.toggle("statistics-mpo-hidden","gaussian"!==s.mode),c.get("x0").root.classList.toggle("statistics-mpo-hidden","sigmoid"!==s.mode),c.get("k").root.classList.toggle("statistics-mpo-hidden","sigmoid"!==s.mode)};d(),a.onParamsChanged=t=>{Object.assign(s,t),(()=>{var t;for(const e of u)c.get(e.key).value=null!==(t=s[e.key])&&void 0!==t?t:e.fallback()})(),this.onUpdate(t)},r.push(a.onChanged.subscribe(t=>{s.line=t,"freeform"===s.mode&&this.onUpdate({line:t})})),i=l.root,a.root.classList.add("statistics-mpo-plot"),n.append(a.root,Ln("PARAMETERS"),f)},l=()=>{var t;const e=this.prop,o=new wn(e,!0,!0);(null===(t=this.mappedCol)||void 0===t?void 0:t.isCategorical)&&o.setChoices([...this.mappedCol.categories]),r.push(o.onChanged.subscribe(()=>this.onUpdate(this.prop))),n.append(Ln("CATEGORIES"),o.root)},u=()=>{for(const t of r)t.unsubscribe();r.length=0},c=()=>{u(),ot.empty(n),i=void 0,mn(this.prop)?a():l();const t=[];this.mappedCol||t.push(s.root),i&&t.push(i),t.length>0&&n.prepend(ot.divH(t,"statistics-mpo-dialog-header-row")),n.append(Ln("MISSING VALUES"),this.buildDefaultScoreInput(this.prop))};c(),e.add(n),e.onOK(()=>{var n;u(),this.prop.functionType!==t.functionType?null===(n=this.onTypeChanged)||void 0===n||n.call(this,this.prop):this.onUpdate(this.prop),e.close()}),e.onCancel(()=>{u(),this.prop=t,this.onUpdate(t),e.close()}),e.show()}}var Rn=s(5072),Fn=s.n(Rn),Dn=s(7825),Bn=s.n(Dn),kn=s(7659),Un=s.n(kn),Vn=s(5056),Gn=s.n(Vn),$n=s(540),Hn=s.n($n),qn=s(1113),Yn=s.n(qn),Wn=s(6801),jn={};jn.styleTagTransform=Yn(),jn.setAttributes=Gn(),jn.insert=Un().bind(null,"head"),jn.domAPI=Bn(),jn.insertStyleElement=Hn(),Fn()(Wn.A,jn),Wn.A&&Wn.A.locals&&Wn.A.locals;class Xn{constructor(t,e=!1,n=!1){this.root=ot.div([]),this.onChanged=new hn.Subject,this.design=!1,this.preview=!1,this.rows={},this.rowIds={},this.rowSubs=new Map,this.propertyOrder=[],this.columnMapping={},this.dataFrame=t,this.design=e,this.preview=n,this.aggregationInput=ot.input.choice("Aggregation",{items:yn,value:An,nullable:!1,onValueChanged:t=>{this.profile&&(this.profile.aggregation=t),this.emitChange()}}),this.aggregationInput.setTooltip("Score aggregation method")}newRowId(){return crypto.randomUUID()}setProfile(t){var e,n;if(t)for(const n of Object.keys(t.properties)){const o=vn(t.properties[n]);mn(o)&&(null!==(e=o.mode)&&void 0!==e||(o.mode="freeform")),t.properties[n]=o}for(const t of this.rowSubs.values())t.unsubscribe();this.rowSubs.clear(),this.profile=t,this.aggregationInput.value=null!==(n=null==t?void 0:t.aggregation)&&void 0!==n?n:An,this.columnMapping={},this.rows={},this.rowIds={},this.propertyOrder=t?Object.keys(t.properties):[];for(const t of this.propertyOrder)this.rowIds[t]=this.newRowId();this.render()}getProfile(){return this.profile}setDesignMode(t){this.design!==t&&(this.design=t,this.rows={},this.render())}setPreviewMode(t){this.preview!==t&&(this.preview=t,this.rows={},this.render())}render(){if(ot.empty(this.root),!this.profile)return this.renderEmpty("No profile specified.");const t=this.propertyOrder.map(t=>{const e=this.rowIds[t];return this.rows[e]||(this.rows[e]=this.buildRow(t,e,this.profile.properties[t])),this.rows[e]});if(!t.length)return this.preview||this.root.append(this.buildHeader()),this.design?this.renderDesignEmpty():this.renderEmpty("No properties defined.");this.preview||this.root.append(this.buildHeader()),this.root.append(ot.divV(t))}renderEmpty(t){this.root.append(ot.divText(t))}renderDesignEmpty(){const t=ot.iconFA("chart-line"),e=ot.h3("No properties yet"),n=ot.p("Select a dataset to auto-populate properties from its numerical columns, or add them manually."),o=ot.link("+ Add Property",()=>this.addProperty()),r=ot.divV([t,e,n,o],"statistics-mpo-empty-state");this.root.append(r)}addProperty(){if(!this.profile)return;const t=`NewProperty${Object.keys(this.profile.properties).length+1}`,e=this.newRowId();this.profile.properties[t]=pn(),this.rowIds[t]=e,this.propertyOrder.push(t),this.rows={},this.render(),this.emitChange()}buildHeader(){return ot.divH([ot.divText("Property","statistics-mpo-header-property"),ot.divText("Weight","statistics-mpo-header-weight"),ot.divText("Desirability","statistics-mpo-header-desirability")],"statistics-mpo-header")}buildRow(t,e,n){var o;const r=ot.divH([],"statistics-mpo-row");r.dataset.rowId=e;const i=this.resolveColumn(t);if(i){const e=this.correctPropertyType(n,i);e&&(n=e,this.profile.properties[t]=n)}const s=Sn.create(n,300,80,this.design);null===(o=this.rowSubs.get(e))||void 0===o||o.unsubscribe(),this.rowSubs.set(e,s.onChanged.subscribe(()=>this.emitChange()));const a=this.buildPropertyCell(e,t),l=this.buildWeightCell(e,n),u=this.buildColumnSelector(e,t,s),c=this.design?this.buildModeGear(e,n,s):null,f=this.design?this.buildRowControls(e):null;return r.append(ot.divV([a,u].filter(Boolean),"statistics-mpo-property-cell"),l,ot.divH([s.root,c].filter(Boolean))),f&&r.append(f),r}buildPropertyCell(t,e){if(this.dataFrame){const t=ot.divText(e);return ot.tooltip.bind(t,()=>e),t}let n=e;const o=ot.input.string("",{value:e,onValueChanged:t=>{t&&t!==n&&(this.renameProperty(n,t),n=t)}});return ot.tooltip.bind(o.input,()=>n),o.root}buildWeightCell(t,e){var n;const o=this.getPropertyNameByRowId(t),r=[],i=ot.input.float("",{value:e.weight,min:0,max:1,format:"#0.000",onValueChanged:t=>{o&&this.mutateProperty(o,e=>e.weight=Math.max(0,Math.min(1,null!=t?t:0)))}});if(i.root.classList.add("statistics-mpo-weight-input"),r.push(i.root),this.dataFrame){const t=this.getNumericalColumnNames();let s=!!e.weightColumn&&t.includes(e.weightColumn);const a=ot.input.choice("",{items:t,nullable:!0,value:null!==(n=e.weightColumn)&&void 0!==n?n:"",onValueChanged:t=>{o&&this.mutateProperty(o,e=>e.weightColumn=t||void 0)}}),l=()=>{i.root.classList.toggle("statistics-mpo-hidden",s),a.root.classList.toggle("statistics-mpo-hidden",!s),u.classList.toggle("statistics-mpo-weight-toggle-active",s)},u=ot.iconFA("columns",()=>{s=!s,l(),!s&&o?this.mutateProperty(o,t=>{delete t.weightColumn}):s&&o&&a.value&&this.mutateProperty(o,t=>t.weightColumn=a.value||void 0)});u.classList.add("statistics-mpo-weight-toggle"),ot.tooltip.bind(u,()=>s?"Switch to manual weight":"Use weight from column"),l(),r.push(a.root,u)}return ot.divH(r,"statistics-mpo-weight-cell")}buildColumnSelector(t,e,n){var o,r;if(!this.dataFrame)return null;const i=this.getEligibleColumnNames(),s=null!==(o=this.columnMapping[e])&&void 0!==o?o:null;if(s){const t=this.dataFrame.col(s);null===(r=n.setColumn)||void 0===r||r.call(n,t)}const a=ot.input.choice("",{items:i,nullable:!0,value:null!=s?s:"",onValueChanged:o=>{var r;this.columnMapping[e]=null!=o?o:null;const i=o?this.dataFrame.col(o):null;i&&this.switchPropertyType(e,t,i)||(null===(r=n.setColumn)||void 0===r||r.call(n,i),this.emitChange())}});return a.root}getEligibleColumnNames(){return this.dataFrame?Array.from(this.dataFrame.columns).filter(t=>!t.isCategorical||t.categories.length<=20).map(t=>t.name):[]}getNumericalColumnNames(){return this.dataFrame?Array.from(this.dataFrame.columns.numerical).map(t=>t.name):[]}resolveColumn(t){var e,n,o;if(!this.dataFrame)return null;const r=this.getEligibleColumnNames(),i=null!==(n=null!==(e=this.columnMapping[t])&&void 0!==e?e:r.find(e=>e.toLowerCase()===t.toLowerCase()))&&void 0!==n?n:null;return i&&(this.columnMapping[t]=i),i&&null!==(o=this.dataFrame.col(i))&&void 0!==o?o:null}correctPropertyType(t,e){if(mn(t)&&e.isCategorical){const n=e.categories.map(t=>({name:t,desirability:1}));return gn(t.weight,n)}return!mn(t)&&e.isNumerical?pn(t.weight,e.min,e.max):null}switchPropertyType(t,e,n){if(!this.profile)return!1;const o=this.correctPropertyType(this.profile.properties[t],n);return!!o&&(this.profile.properties[t]=o,this.rebuildRow(t,e),!0)}rebuildRow(t,e){const n=this.rows[e],o=this.buildRow(t,e,this.profile.properties[t]);this.rows[e]=o,(null==n?void 0:n.parentNode)&&n.replaceWith(o),this.emitChange()}buildModeGear(t,e,n){const o=ot.icons.settings(()=>{var o,r;const i=this.getPropertyNameByRowId(t);if(!i)return;const s=this.columnMapping[i],a=s&&null!==(r=null===(o=this.dataFrame)||void 0===o?void 0:o.col(s))&&void 0!==r?r:null;this.openModeDialog(i,t,e,n,a)});return o.classList.add("statistics-mpo-gear"),o}buildRowControls(t){const e=ot.icons.add(()=>this.insertRowAfterRow(t)),n=ot.icons.delete(()=>this.deleteRow(t));return ot.divH([e,n],"statistics-mpo-control-buttons")}openModeDialog(t,e,n,o,r=null){new Pn(t,n,e=>{var n;const r=null===(n=this.profile)||void 0===n?void 0:n.properties[t];r&&Object.assign(r,e),o.redrawAll()},n=>{this.profile&&(this.profile.properties[t]=n,this.rebuildRow(t,e))},r).show()}getPropertyNameByRowId(t){var e;return null===(e=Object.entries(this.rowIds).find(([,e])=>e===t))||void 0===e?void 0:e[0]}renameProperty(t,e){var n;if(!this.profile||this.profile.properties[e])return;const o=this.rowIds[t];this.profile.properties[e]=this.profile.properties[t],delete this.profile.properties[t],this.columnMapping[e]=null!==(n=this.columnMapping[t])&&void 0!==n?n:null,delete this.columnMapping[t];const r=this.propertyOrder.indexOf(t);r>=0&&(this.propertyOrder[r]=e),delete this.rowIds[t],this.rowIds[e]=o,this.emitChange()}deleteRow(t){var e;const n=this.getPropertyNameByRowId(t);if(!n||!this.profile)return;delete this.profile.properties[n],delete this.columnMapping[n],delete this.rowIds[n],null===(e=this.rowSubs.get(t))||void 0===e||e.unsubscribe(),this.rowSubs.delete(t);const o=this.propertyOrder.indexOf(n);o>=0&&this.propertyOrder.splice(o,1);const r=this.rows[t];delete this.rows[t],0===this.propertyOrder.length?this.render():null==r||r.remove(),this.emitChange()}insertRowAfterRow(t){var e;if(!this.profile)return;const n=this.getPropertyNameByRowId(t);if(!n)return;const o=`NewProperty${Object.keys(this.profile.properties).length+1}`,r=this.newRowId();this.profile.properties[o]=pn(),this.rowIds[o]=r;const i=this.propertyOrder.indexOf(n);this.propertyOrder.splice(i+1,0,o);const s=this.buildRow(o,r,this.profile.properties[o]);this.rows[r]=s,null===(e=this.rows[t])||void 0===e||e.after(s),this.emitChange()}mutateProperty(t,e){var n;const o=null===(n=this.profile)||void 0===n?void 0:n.properties[t];o&&(e(o),this.emitChange())}emitChange(){this.onChanged.next(),I.events.fireCustomEvent("grok-mpo-score-changed",{})}}var Kn=s(4884),zn={};zn.styleTagTransform=Yn(),zn.setAttributes=Gn(),zn.insert=Un().bind(null,"head"),zn.domAPI=Bn(),zn.insertStyleElement=Hn(),Fn()(Kn.A,zn),Kn.A&&Kn.A.locals&&Kn.A.locals;const Qn="pMPO is not applicable",Zn="Failed to compute pMPO parameters",Jn="desired",to="non-desired",eo="Mean",no="p-value",oo=new Map([["desAvg",`${eo}(${Jn})`],["desStd",`Std(${Jn})`],["nonDesAvg",`${eo}(${to})`],["nonDesStd",`Std(${to})`],["tstat","t-statistics"],["pValue",no]]),ro="Descriptor",io=ro+" Statistics",so="Selected",ao="Weight",lo="pMPO score",uo="Desirability Curve",co=.001,fo=.001,ho=.53,mo=.01,po=.05,go=.01,vo="0.000";var yo;!function(t){t.SELECTED="rgb(26, 146, 26)",t.SKIPPED="rgb(208, 57, 67)"}(yo||(yo={}));const Ao="System:AppData/Chem/mpo",wo=[0,.25,.5,1,1.5,2,2.5,3,4,5],Co=wo.slice(1).map(t=>-t).reverse().concat(wo),Eo=wo.concat([.12,.37,.63,.75,.88,1.25,1.75,2.25,2.75]).sort(),bo=Eo.slice(1).map(t=>-t).reverse().concat(Eo),xo="TPR (Sensitivity)",_o="FPR (1 - Specificity)",No=101,Mo=new Float32Array(Array.from({length:No},(t,e)=>e/100)),To="System:AppData/Eda/drugs-props-train.csv",So="System:AppData/Eda/drugs-props-train-scores.csv",Oo=new Map([["tolerance",.001],["maxIter",25],["nonZeroParam",1e-4],["initialScale",.02],["scaleReflaction",1],["scaleExpansion",2],["scaleContraction",-.5]]),Io=new Float32Array([.5,go]),Lo=new Float32Array([1,1]);var Po;!function(t){t.GREATER=">",t.LESS="<",t.GREATER_OR_EQUAL="≥",t.LESS_OR_EQUAL="≤",t.DEFAULT="≤"}(Po||(Po={}));const Ro=[Po.GREATER,Po.LESS,Po.GREATER_OR_EQUAL,Po.LESS_OR_EQUAL],Fo=["perfect","good","true","t","g","active","a","yes","y"];function Do(t,e){const n=t.groupBy([e.name]).getGroups();let o,r;for(const t in n)t.toLowerCase().includes("true")?o=n[t]:r=n[t];return{desired:o,nonDesired:r}}function Bo(t,e){const n=t.length,o=e.length;if(n<2||o<2)throw new Error(`Failed to compute the "${t.name}" descriptor statistics: \n both samples must have at least two observations.`);const r=t.stats.avg,i=e.stats.avg,s=t.stats.variance,a=e.stats.variance,l=t.stats.stdev,u=e.stats.stdev,c=Math.sqrt(s/n+a/o);if(0===c)throw new Error(`Failed to compute the "${t.name}" descriptor statistics: \n zero variance.`);const f=(r-i)/c,d=Math.pow(s/n+a/o,2)/(s*s/(n*n*(n-1))+a*a/(o*o*(o-1))),h=2*(1-tn.studentt.cdf(Math.abs(f),d));return{desAvg:r,desStd:l,desLen:n,nonDesAvg:i,nonDesStd:u,nonSesLen:o,min:Math.min(t.stats.min,e.stats.min),max:Math.max(t.stats.max,e.stats.max),tstat:f,pValue:h}}function ko(e,n,o){if(e.length!==n.length)throw new Error("Failed to compute confusion matrix: columns have different lengths.");if(e.type!==t.COLUMN_TYPE.BOOL)throw new Error("Failed to compute confusion matrix: desirability column must be boolean.");if(!n.isNumerical)throw new Error("Failed to compute confusion matrix: prediction column must be numerical.");let r=0,i=0,s=0,a=0;const l=e.getRawData(),u=n.getRawData();let c=0,f=0,d=l[0];for(let t=0;t<n.length;++t)1==(d>>>f&1)?u[t]>=o?++r:++a:u[t]>=o?++s:++i,++f,f>=32&&(f=0,++c,d=l[c]);return{TP:r,TN:i,FP:s,FN:a}}function Uo(t,e){if(t.length!==e.length)throw new Error("Failed to compute AUC: TPR and FPR arrays have different lengths.");let n=0;for(let o=1;o<t.length;++o)n+=Math.abs(e[o]-e[o-1])*((t[o]+t[o-1])/2);return n}function Vo(t,e){const n=new Float32Array(No),o=new Float32Array(No);let r=-1,i=-1,s=Mo[0];for(let a=0;a<No;++a){const l=ko(t,e,Mo[a]);n[a]=l.TP+l.FN>0?l.TP/(l.TP+l.FN):0,o[a]=l.FP+l.TN>0?l.FP/(l.FP+l.TN):0,i=n[a]-o[a],i>r&&(r=i,s=Mo[a])}return{auc:Uo(n,o),threshold:s,tpr:n,fpr:o}}var Go,$o,Ho,qo,Yo;!function(t){t.MIN="minimize",t.MAX="maximize"}(Go||(Go={})),function(t){t.OPTIMAL="optimal",t.NON_OPT="non-optimal"}($o||($o={})),function(t){t[t.FORM=.15]="FORM",t[t.VIEWER=.5]="VIEWER"}(Ho||(Ho={})),function(t){t.OPT="Pareto optimality",t.SIZE="Pareto size"}(qo||(qo={})),function(t){t[t.OPTIMAL=8]="OPTIMAL",t[t.NON_OPT=4]="NON_OPT"}(Yo||(Yo={}));const Wo=[t.Color.darkGreen,t.Color.yellow,t.Color.darkRed];function jo(t){return t===Go.MIN?[...Wo]:[...Wo].reverse()}function Xo(e,n=!0){const o=ot.label("Color scale:");o.style.paddingRight="7px";const r=[o],i=ot.label(n?"min":"worst"),s=ot.label(". . ."),a=ot.label(n?"max":"best"),l=jo(e),u=[i,s,a].map((e,n)=>(1!==n&&(e.style.fontWeight="bold",e.style.color=t.Color.toRgb(l[n])),e.style.marginRight="5px",e));return r.push(...u),ot.divH(r)}var Ko=function(t,e,n,o){return new(n||(n=Promise))(function(r,i){function s(t){try{l(o.next(t))}catch(t){i(t)}}function a(t){try{l(o.throw(t))}catch(t){i(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((o=o.apply(t,e||[])).next())})};function zo(e){const n=e.size,o=new Map;oo.forEach((t,e)=>{o.set(e,new Float64Array(n))});const r=[...e.keys()],i=[t.Column.fromStrings(ro,r),t.Column.fromInt32Array(uo,new Int32Array(n)),t.Column.fromFloat32Array(ao,new Float32Array(n).fill(t.FLOAT_NULL))];r.forEach((t,n)=>{const r=e.get(t);null!=r&&oo.forEach((t,e)=>{const i=r[e];o.get(e)[n]=i})}),oo.forEach((e,n)=>{i.push(t.Column.fromFloat64Array(e,o.get(n)))});const s=t.DataFrame.fromColumns(i);return s.name=io,s}function Qo(t,e){const n=[],o=t.col(ro);if(null==o)throw new Error(`No column "${ro} in the table with descriptors statistics.`);const r=o.toList(),i=t.col(no);if(null==i)throw new Error(`No column "${no} in the table with descriptors statistics.`);const s=i.getRawData();for(let o=0;o<t.rowCount;++o)s[o]<e&&n.push(r[o]);return n}function Zo(t,e,n,o){const r=ot.div();r.classList.add("eda-pmpo-tooltip-line");const i=ot.div();i.classList.add("eda-pmpo-box"),i.style.backgroundColor=yo.SELECTED;const s=ot.span([]);s.textContent=`- ${n}`,r.appendChild(i),r.appendChild(s);const a=ot.div();a.classList.add("eda-pmpo-tooltip-line");const l=ot.div();l.classList.add("eda-pmpo-box"),l.style.backgroundColor=yo.SKIPPED;const u=ot.span([]);return u.textContent=`- ${o}`,a.appendChild(l),a.appendChild(u),ot.divV([ot.h2(t),ot.divText(e),r,a])}function Jo(t,e){const n=[];for(let o=0;o<e.length;++o)for(let r=o+1;r<e.length;++r)n.push([e[o],e[r],Math.pow(t.byName(e[o]).stats.corr(t.byName(e[r])),2)]);return n}function tr(t,e,n,o,r){const i=r.sort((t,e)=>e[2]-t[2]),s=new Set(e);return i.filter(t=>t[2]>o).forEach(t=>{const[e,o,r]=t,i=n.get(e).pValue,a=n.get(o).pValue,l=n.get(e).tstat,u=n.get(o).tstat;i>a?s.delete(e):i<a||Math.abs(l)>Math.abs(u)?s.delete(o):s.delete(e)}),[...s]}function er(t,e,n,o){const r=new Map;let i=0;return n.forEach(n=>{const s=t.rowCount,a=e.rowCount,l=t.col(n);if(null==l)throw new Error(Zn+`: no column "${n}" in the desired table.`);const u=e.col(n);if(null==u)throw new Error(Zn+`: no column "${n}" in the non-desired table.`);const c=l.stats.avg,f=l.stats.stdev*Math.sqrt((s-1)/s),d=u.stats.avg,h=u.stats.stdev*Math.sqrt((a-1)/a),m=(g=f,y=h,(p=c)<(v=d)?{cutoff:(v-p)/(g+y)*g+p,cutoffDesired:Math.max(p,v-y),cutoffNotDesired:Math.max(p+g,v)}:{cutoff:(p-v)/(g+y)*y+v,cutoffDesired:Math.min(v+y,p),cutoffNotDesired:Math.max(v,p-g)});var p,g,v,y;const A=Math.exp(-Math.pow(m.cutoff-c,2)/(2*Math.pow(f,2))),w=function(t,e,n,o){const r=1/(2*Math.pow(e,2))-1/(2*Math.pow(o,2)),i=n/Math.pow(o,2)-t/Math.pow(e,2),s=Math.pow(t,2)/(2*Math.pow(e,2))-Math.pow(n,2)/(2*Math.pow(o,2))-Math.log(o/e);if(Math.abs(r)<1e-12)return Math.abs(i)<1e-12?[]:[-s/i];const a=i*i-4*r*s;if(a<0)return[];const l=Math.sqrt(a);return[(-i+l)/(2*r),(-i-l)/(2*r)]}(c,f,d,h),C=Math.pow(A,-1)-1,E=Math.pow(o,-1)-1,b=Math.pow(10,Math.log10(E/C)/(-1*(d-m.cutoff)));let x=null;if(w.length>0){for(const t of w){const e=Math.min(c,d),n=Math.max(c,d);if(e-1e-8<=t&&t<=n+1e-8){x=t;break}}null==x&&(x=w[0])}else x=m.cutoff;const _=m.cutoffNotDesired,N=function(t,e,n,o,r=.05){let i;if(e<=0)i=n===t?1:0;else{const o=1/(e*Math.sqrt(2*Math.PI)),r=-.5*Math.pow((n-t)/e,2);i=o*Math.exp(r)}i=Math.max(i,1e-12);const s=Math.max(1/i-1,1e-12),a=1/r-1,l=o-n;let u;if(Math.abs(l)<1e-12)u=1;else{const t=a/s;if(t<=0)u=1;else try{u=Math.exp(-Math.log(t)/l)}catch(t){u=1}}return{pX0:i,b:s,c:u}}(c,f,x,_,o),M=Math.abs(c-d)/(f+h);i+=M,r.set(n,{desAvg:c,desStd:f,nonDesAvg:d,nonDesStd:h,min:Math.min(l.stats.min,u.stats.min),max:Math.max(l.stats.max,u.stats.max),cutoff:m.cutoff,cutoffDesired:m.cutoffDesired,cutoffNotDesired:m.cutoffNotDesired,pX0:N.pX0,b:C,c:b,zScore:M,weight:M,intersections:w,x0:x,xBound:_,inflection:A})}),r.forEach(t=>{t.weight=t.zScore/i}),r}function nr(t,e,n,o,r){return{type:"MPO Desirability Profile",name:n,description:o,properties:or(t,e,r)}}function or(t,e,n){const o={};return t.forEach((t,r)=>{const i=sr(t,n);o[r]={weight:t.weight,line:ir(t,e,n),min:Math.min(...i),max:Math.max(...i)}}),o}function rr(t,e,n){return function(t,e,n){return Math.exp(-Math.pow(t-e,2)/(2*Math.pow(n,2)))}(t,e.desAvg,e.desStd)*(n?function(t,e,n,o){return o>0?1/(1+n*Math.pow(o,-(t-e))):1/(1+n)}(t,e.cutoff,e.b,e.c):1)}function ir(t,e,n){return sr(t,n).map(n=>[n,rr(n,t,e)])}function sr(t,e){const n=function(t,e,n){return n?Co.map(n=>t+n*e):bo.map(n=>t+n*e)}(t.desAvg,t.desStd,e);if(e){const e=Math.min(t.min,t.desAvg-3*t.desStd),o=Math.max(t.max,t.desAvg+3*t.desStd);return n.filter(t=>e<=t&&t<=o).sort()}return n}class ar extends Error{constructor(t){super(t),this.name="PmpoError"}}function lr(t,e,n){const o=t.stats.min,r=t.stats.max;switch(n){case Po.LESS:return r>=e&&o<e;case Po.LESS_OR_EQUAL:return r>e&&o<=e;case Po.GREATER:return o<=e&&r>e;default:return o<e&&r>=e}}function ur(t){const e=t.filter(t=>Fo.includes(t));return e.length>0?e:[t[0]]}function cr(t,e,n,o){for(let r=0;r<e;r++){let i=0;for(let t=0;t<e+1;t++)t!=n&&(i+=o[t][r]);t[r]=i/e}}function fr(t,e,n,o,r,i,s,a){for(let l=0;l<i;l++)e[l]=t[l],e[l]+=r*(t[l]-o[n][l]),e[l]<s[l]?e[l]=s[l]:e[l]>a[l]&&(e[l]=a[l])}function dr(t,e,n,o,r,i){return s=this,a=void 0,u=function*(){const s=o.get("tolerance"),a=o.get("maxIter"),l=o.get("scaleReflaction"),u=o.get("scaleExpansion"),c=o.get("scaleContraction"),f=n.length+1,d=n.length,[h,m]=function(t,e,n,o,r){const i=n.length+1,s=n.length,a=e.get("nonZeroParam"),l=e.get("initialScale"),u=new Array(i),c=new Array(i);for(let e=0;e<i;e++){u[e]=new Float32Array(s);for(let t=0;t<s;t++)u[e][t]=n[t],0!=e&&e-1===t&&(0==n[t]?u[e][t]=a:u[e][t]+=l*n[e-1],u[e][t]<o[t]?u[e][t]=o[t]:u[e][t]>r[t]&&(u[e][t]=r[t]));c[e]=t(u[e])}return[u,c]}(e,o,n,r,i),p=new Array(f);for(let t=0;t<f;t++)p[t]=t;const g=p.length-1;let v=0,y=0,A=0,w=0;const C=new Float32Array(d),E=new Float32Array(d),b=new Float32Array(d),x=new Float32Array(d),_=new Array(a);if(f>1){let n=0;for(;p.sort((t,e)=>m[t]-m[e]),n=Math.min(100,Math.floor(100*v/a)),t.update(n,`Optimizing pMPO... (${n}%)`),yield new Promise(t=>setTimeout(t,1)),!(t.canceled||v>a);){if(0==v&&(y=m[0],A=2*m[p[0]]),_[v]=y,++v,y=m[p[0]],A-y>s)w=0;else if(++w,w>2*f)break;A=y,cr(C,d,p[g],h),fr(C,E,p[g],h,l,d,r,i);const t=e(E);if(t<m[p[g]]){fr(C,b,p[g],h,u,d,r,i);const n=e(b);if(n<t){m[p[g]]=n;for(let t=0;t<d;t++)h[p[g]][t]=b[t];continue}m[p[g]]=t;for(let t=0;t<d;t++)h[p[g]][t]=E[t];continue}fr(C,x,p[g],h,c,d,r,i);const n=e(x);if(!(n<m[p[g]]))break;m[p[g]]=n;for(let t=0;t<d;t++)h[p[g]][t]=x[t]}for(let t=v;t<a;t++)_[t]=m[p[0]]}return{optimalPoint:h[p[0]],iterations:v}},new((l=void 0)||(l=Promise))(function(t,e){function n(t){try{r(u.next(t))}catch(t){e(t)}}function o(t){try{r(u.throw(t))}catch(t){e(t)}}function r(e){var r;e.done?t(e.value):(r=e.value,r instanceof l?r:new l(function(t){t(r)})).then(n,o)}r((u=u.apply(s,a||[])).next())});var s,a,l,u}var hr=function(t,e,n,o){return new(n||(n=Promise))(function(r,i){function s(t){try{l(o.next(t))}catch(t){i(t)}}function a(t){try{l(o.throw(t))}catch(t){i(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((o=o.apply(t,e||[])).next())})};class mr{static isApplicable(t,e,n,o,r,i=!1){const s=e.length,a=t=>{i&&I.shell.warning(Qn+t)};if(n<fo)return a(`: too small p-value threshold - ${n}, minimum - 0.001`),!1;if(o<mo)return a(`: too small R² threshold - ${o}, minimum - 0.01`),!1;if(r<go)return a(`: too small q-cutoff - ${r}, minimum - 0.01`),!1;if(s<10)return a(`: not enough of samples - ${s}, minimum - 10`),!1;if(0===e.stats.stdev)return a(`: "${e.name}" has a single category.`),!1;let l=0;for(const e of t){if(!e.isNumerical)return a(`: "${e.name}" is not numerical.`),!1;if(e.stats.missingValueCount===e.length)return a(`: "${e.name}" contains only missing values.`),!1;e.stats.stdev>0&&++l}return!(l<1&&(a(": not enough of non-constant descriptors."),1))}static isTableValid(e,n=!0){if(e.rowCount<2)return n&&I.shell.warning(Qn+`. Not enough of samples: ${e.rowCount}, minimum: 2.`),!1;let o=0;for(const n of e.columns)(n.isNumerical||n.type===t.TYPE.BOOL)&&n.stats.stdev>0&&++o;return!(o<2&&(n&&I.shell.warning(Qn+": not enough of non-constant columns."),1))}static fit(e,n,o,r,i,s,a=!0){if(a&&!mr.isApplicable(n,o,r,i,s))throw new Error("Failed to train pMPO model: the method is not applicable to the inputs");const l=n.names(),{desired:u,nonDesired:c}=Do(e,o),f=new Map;l.forEach(t=>{f.set(t,Bo(u.col(t),c.col(t)))});const d=zo(f);!function(t,e){const n=t.col(no);if(null==n)return;const o={};o[`<${e}`]=yo.SELECTED,o[`>=${e}`]=yo.SKIPPED,n.meta.colors.setConditional(o)}(d,r);const h=Qo(d,r);if(h.length<1)throw new ar("Cannot train pMPO model: all descriptors have high p-values (not significant).");const m=Jo(n,h),p=tr(0,h,f,i,m);return function(e,n){if(n.length<1)throw new Error("Empty list of selected descriptors.");const o=e.rowCount,r=new Array(o),i=e.col(ro);if(null==i)throw new Error(`No column "${ro} in the table with descriptors statistics.`);const s=i.toList();let a=!0;const l={};for(let t=0;t<o;++t)a=n.includes(s[t]),r[t]=a,l[s[t]]=a?yo.SELECTED:yo.SKIPPED;i.colors.setCategorical(l),e.columns.add(t.Column.fromList(t.COLUMN_TYPE.BOOL,so,r))}(d,p),function(e,n,o,r){const i=new Map;n.forEach(e=>{i.set(e,new Float32Array(n.length).fill(t.FLOAT_NULL))});const s=e.col(ro).toList();o.forEach(t=>{const[e,n,o]=t;i.get(e)[s.indexOf(n)]=o,i.get(n)[s.indexOf(e)]=o,i.get(e)[s.indexOf(e)]=1,i.get(n)[s.indexOf(n)]=1}),r.forEach(n=>{e.columns.add(t.Column.fromFloat32Array(n,i.get(n)))})}(d,l,m,p),function(t,e,n){e.forEach(e=>{const o=t.col(e);if(null==o)return;const r={};r[`>=${n}`]=yo.SKIPPED,r[`<${n}`]=yo.SELECTED,o.meta.colors.setConditional(r)})}(d,l,i),{params:er(u,c,p,s),descrStatsTable:d,selectedByPvalue:h,selectedByCorr:p}}static predict(e,n,o,r){const i=e.rowCount,s=new Float64Array(i).fill(0),a=[];return n.forEach((t,n)=>{const r=e.col(n),l=t.b,u=t.c,c=t.cutoff;let f=t.weight;const d=t.desAvg,h=t.desStd,m=1/(2*Math.pow(h,2));if(null==r)throw new Error(`Failed to apply pMPO: inconsistent data, no column "${n}" in the table "${e.name}"`);r.stats.missingValueCount>0&&a.push(r);const p=r.getRawData();if(o)if(u>0)for(let t=0;t<i;++t)s[t]+=f*Math.exp(-Math.pow(p[t]-d,2)*m)/(1+l*Math.pow(u,-(p[t]-c)));else{f/=1+l;for(let t=0;t<i;++t)s[t]+=f*Math.exp(-Math.pow(p[t]-d,2)*m)}else for(let t=0;t<i;++t)s[t]+=f*Math.exp(-Math.pow(p[t]-d,2)*m)}),t.Column.fromFloat64Array(r,s)}constructor(e,n){var o;this.params=null,this.desirabilityProfile=null,this.initTable=t.DataFrame.create(),this.statGrid=t.Viewer.grid(this.initTable,{showTitle:!0,title:io}),this.predictionName=lo,this.boolPredictionName="",this.desirabilityProfileRoots=new Map,this.tresholdedColumn=null,this.threshColTooltip=null,this.rocCurve=t.Viewer.scatterPlot(this.initTable,{showTitle:!0,showSizeSelector:!1,showColorSelector:!1}),this.confusionMatrix=t.Viewer.fromType("Confusion matrix",this.initTable,{xColumnName:"control",yColumnName:"control",showTitle:!0,title:"Confusion Matrix",descriptionPosition:"Bottom",description:"Confusion matrix for the predicted vs actual desirability labels.",descriptionVisibilityMode:"Always"}),this.table=e,this.view=null!=n?n:null!==(o=I.shell.tableView(e.name))&&void 0!==o?o:I.shell.addTableView(e),this.desirabilityColumns=this.getDesirabilityColumns(),this.numericCols=this.getValidNumericCols(),this.predictionName=e.columns.getUnusedName(lo),this.missingValsIndeces=function(t){const e=new Map;for(const n of t){if(!We.includes(n.type))throw new Error($e.UNSUPPORTED_COLUMN_TYPE);if(0===n.stats.missingValueCount)continue;const t=[],o=je(n);n.getRawData().forEach((e,n)=>{e===o&&t.push(n)}),e.set(n.name,t)}return e}(this.numericCols)}setRibbons(){const t=this.view.getRibbonPanels();t.length<1||this.view.setRibbonPanels(t.slice(1))}updateStatisticsGrid(t,e,n,o){const r=this.statGrid;r.dataFrame=t,r.setOptions({showTitle:!0,title:t.name}),r.sort([so],[!1]),r.col(no).format="scientific",r.col(ro).isTextColorCoded=!0,r.col(no).isTextColorCoded=!0,e.forEach(t=>{const e=r.col(t);null!=e&&(e.isTextColorCoded=!0,e.format="0.000")}),r.onCellTooltip((t,i,s)=>{if(t.isColHeader){const n=t.tableColumn;if(null==n)return!1;const o=n.name;switch(o){case ro:return ot.tooltip.show(Zo(ro,"Use of descriptors in model construction:","selected","excluded"),i,s),!0;case uo:return ot.tooltip.show(ot.divV([ot.h2(uo),ot.divText("Desirability profile charts for each descriptor. Only profiles for selected descriptors are shown.")]),i,s),!0;case ao:return ot.tooltip.show(ot.divV([ot.h2(ao),ot.divText("Weights of selected descriptors.")]),i,s),!0;case no:return ot.tooltip.show(Zo(no,"Filtering descriptors by p-value:","selected","excluded"),i,s),!0;default:return!!e.includes(o)&&(ot.tooltip.show(Zo(o,`Correlation of ${o} with other descriptors, measured by R²:`,"weakly correlated","highly correlated"),i,s),!0)}}else if(t.isTableCell){const a=t.tableColumn;if(null==a)return!1;const l=a.name,u=t.value;if(l===ro)return o.includes(u)?ot.tooltip.show("Selected for model construction.",i,s):n.includes(u)?ot.tooltip.show("Excluded due to a high correlation with other descriptors.",i,s):ot.tooltip.show("Excluded due to a high p-value.",i,s),!0;{const o=r.cell(ro,t.gridRow).value;if(l===ao)return!this.desirabilityProfileRoots.has(o)&&(n.includes(o)?ot.tooltip.show(`No weight: <b>${o}</b> is excluded due to a high correlation with other descriptors.`,i,s):ot.tooltip.show(`No weight: <b>${o}</b> is excluded due to a high p-value.`,i,s),!0);if(e.includes(l)&&!n.includes(o))return ot.tooltip.show(`<b>${o}</b> is excluded due to a high p-value; so correlation with <b>${l}</b> is not needed.`,i,s),!0}return!1}});const i=r.col(uo);r.setOptions({rowHeight:75}),i.width=305,i.cellType="html",r.onCellPrepare(t=>{if(null==t.tableColumn)return;if(null==t.tableColumn)return;if(!t.isTableCell)return;if(t.tableColumn.name!==uo)return;const e=r.cell(ro,t.gridRow).value,o=this.desirabilityProfileRoots.get(e);if(null!=o)t.element=o;else{const o=n.includes(e),r=o?"highly correlated with other descriptors":"statistically insignificant",i=o?`No chart shown: <b>${e}</b> is excluded due to a high correlation with other descriptors.`:`No chart shown: <b>${e}</b> is excluded due to a high p-value.`,s=ot.divText(r);s.style.color=yo.SKIPPED,s.classList.add("eda-pmpo-centered-text"),ot.tooltip.bind(s,i),t.element=s}})}updateGrid(){const t=this.view.grid,e=this.predictionName;t.sort([this.predictionName],[!1]);const n=t.col(e);n.format="0.0000",n.isTextColorCoded=!0,t.onCellTooltip((t,n,o)=>{var r;if(t.isColHeader&&t.tableColumn)return t.tableColumn.name===e?(ot.tooltip.show(ot.divV([ot.h2(lo),ot.divText("Scores computed using the trained probabilistic multi-parameter optimization (pMPO) model."),Xo(Go.MAX,!1)]),n,o),!0):null!=this.tresholdedColumn&&t.tableColumn.name===this.tresholdedColumn.name&&(ot.tooltip.show(ot.markdown(null!==(r=this.threshColTooltip)&&void 0!==r?r:""),n,o),!0)})}updateDesirabilityProfileData(t,e){if(null==this.params)return;this.desirabilityProfileRoots.forEach(t=>t.remove()),this.desirabilityProfileRoots.clear();const n=nr(this.params,e,"","",!0);this.desirabilityProfile=nr(this.params,e,"","",!1);const o=t.col(ro).toList(),r=t.col(ao).getRawData(),i=n.properties,s=Object.keys(i);for(const t of s)r[o.indexOf(t)]=i[t].weight;const a=new Xn;a.setProfile(n);const l=a.root.querySelector("div.d4-flex-col.ui-div");null!=l&&l.querySelectorAll("div.d4-flex-row.ui-div.statistics-mpo-row").forEach((t,e)=>{const n=t.children;if(n.length<2)return;const o=n[2];o.style.width="100%",this.desirabilityProfileRoots.set(s[e],o)})}updateRocCurve(e,n){const o=Vo(e,n),r=t.DataFrame.fromColumns([t.Column.fromFloat32Array("Threshold",Mo),t.Column.fromFloat32Array(_o,o.fpr),t.Column.fromFloat32Array(xo,o.tpr)]);return r.meta.formulaLines.addLine({title:"Non-informative baseline",formula:`\${${xo}} = \${${_o}}`,width:1,style:"dashed",min:0,max:1}),this.rocCurve.dataFrame=r,this.rocCurve.setOptions({xColumnName:_o,yColumnName:xo,linesOrderColumnName:_o,linesWidth:5,markerType:"dot",title:`ROC Curve (AUC = ${o.auc.toFixed(3)})`}),o.threshold}updateConfusionMatrix(t,e,n){this.confusionMatrix.dataFrame=t,this.confusionMatrix.setOptions({xColumnName:e,yColumnName:this.boolPredictionName,description:`Threshold: ${n.toFixed(3)} (optimized via Youden's J)`,title:e+" Confusion Matrix"})}getIndecesOfMissingValues(t){const e=[];return t.forEach(t=>{const n=this.missingValsIndeces.get(t);null!=n&&e.push(...n)}),e}setNulls(e,n){const o=e.getRawData();n.forEach(e=>o[e]=t.FLOAT_NULL)}fitAndUpdateViewers(e,n,o,r,i,s,a){const l=mr.fit(e,n,o,r,i,s);this.params=l.params;const u=l.descrStatsTable,c=l.selectedByPvalue,f=l.selectedByCorr,d=n.names(),h=mr.predict(e,this.params,a,this.predictionName),m=this.getIndecesOfMissingValues(f);this.setNulls(h,m),h.colors.setLinear(jo(Go.MAX),{min:h.stats.min,max:h.stats.max}),e.columns.remove(this.predictionName),e.columns.add(h),this.updateGrid(),this.updateDesirabilityProfileData(u,a),this.updateStatisticsGrid(u,d,c,f);const p=this.updateRocCurve(o,h),g=o.name;e.columns.remove(this.boolPredictionName),this.boolPredictionName=e.columns.getUnusedName(g+"(predicted)");const v=function(e,n,o){if(!e.isNumerical)throw new Error("Failed to compute confusion matrix: prediction column must be numerical.");const r=e.length,i=new Array(r),s=e.getRawData();for(let t=0;t<r;++t)i[t]=s[t]>=n;return t.Column.fromList(t.COLUMN_TYPE.BOOL,o,i)}(h,p,this.boolPredictionName);e.columns.add(v),this.updateConfusionMatrix(e,g,p),this.view.dataFrame.selection.setAll(!1,!0)}runTrainingApp(){const e=this.view.dockManager;e.dock(this.getInputForm(!0).form,t.DOCK_TYPE.LEFT,null,void 0,.1);const n=e.findNode(this.view.grid.root);if(null==n)throw new Error("Failed to train pMPO: missing a grid in the table view.");const o=e.dock(this.statGrid,t.DOCK_TYPE.DOWN,n,void 0,.5),r=e.dock(this.rocCurve,t.DOCK_TYPE.RIGHT,o,void 0,.3);e.dock(this.confusionMatrix,t.DOCK_TYPE.RIGHT,r,void 0,.2),this.setRibbons()}getPmpoAppItems(){return{statsGrid:this.statGrid,rocCurve:this.rocCurve,confusionMatrix:this.confusionMatrix,controls:this.getInputForm(!1),profile:this.desirabilityProfile}}getInputForm(e){const n=ot.form([]);n.append(ot.h2("Training data"));const o=function(e){for(const n of e)if(n.type===t.COLUMN_TYPE.BOOL&&n.stats.stdev>0)return n;for(const t of e)if(t.isNumerical&&t.stats.stdev>0)return t;return e[0]}(this.desirabilityColumns),r=()=>{if(null!=this.tresholdedColumn&&(this.table.columns.remove(this.tresholdedColumn.name),this.tresholdedColumn=null),l.value.type===t.COLUMN_TYPE.BOOL)return l.value;const e=l.value.type===t.COLUMN_TYPE.STRING?function(e,n){const o=new Array(e.length),r=e.getRawData(),i=e.categories;for(let t=0;t<e.length;++t)o[t]=n.includes(i[r[t]]);const s=i.filter(t=>!n.includes(t)),a=`✅ ${n.join(", ")}`,l=`❌ ${s.join(", ")}`;return{column:t.Column.fromList(t.COLUMN_TYPE.BOOL,"",o),tooltip:`Desirability based on the selected categories:\n\n **${a}**\n\n **${l}**`}}(l.value,h.value):function(e,n,o){const r=new Array(e.length),i=e.getRawData(),s=function(t){switch(t){case Po.LESS:return(t,e)=>t<e;case Po.LESS_OR_EQUAL:return(t,e)=>t<=e;case Po.GREATER:return(t,e)=>t>e;case Po.GREATER_OR_EQUAL:return(t,e)=>t>=e;default:throw new Error(`Unsupported sign: ${t}`)}}(o);for(let t=0;t<e.length;++t)r[t]=s(i[t],n);return{column:t.Column.fromList(t.COLUMN_TYPE.BOOL,"",r),tooltip:`Desirability based on the condition:\n\n **${e.name} ${o} ${n}**`}}(l.value,f.value,c.value);return this.tresholdedColumn=e.column,this.threshColTooltip=e.tooltip,this.tresholdedColumn.name=this.table.columns.getUnusedName("Desirability"),this.table.columns.add(this.tresholdedColumn),this.tresholdedColumn},i=()=>{if(w())try{this.fitAndUpdateViewers(this.table,t.DataFrame.fromColumns(s.value).columns,r(),b.value,x.value,_.value,g.value)}catch(t){if(t instanceof ar)I.shell.warning(t.message),ot.tooltip.bind(l.input,t.message),ot.tooltip.bind(s.input,t.message);else{const e=t instanceof Error?t.message:Zn+": the platform issue.";I.shell.error(e),ot.tooltip.bind(l.input,e),ot.tooltip.bind(s.input,e)}l.input.classList.add("d4-invalid"),s.input.classList.add("d4-invalid")}},s=ot.input.columns("Descriptors",{table:this.table,nullable:!1,available:this.numericCols.map(t=>t.name),checked:this.numericCols.filter(t=>t.name!==o.name&&t.stats.stdev>0&&t.stats.missingValueCount<t.length).map(t=>t.name),tooltipText:"Descriptor columns used for model construction.",onValueChanged:t=>{null!=t&&(y=!1,C())}});n.append(s.root),s.addValidator(()=>{if(null==s.value||s.value.length<1)return"Select at least one descriptor column.";if(null!=l.value&&s.value.includes(l.value))return"Desirability column cannot be used as a descriptor.";const t=s.value.filter(t=>0===t.stats.stdev).map(t=>t.name);if(t.length>0)return`Descriptor columns with zero variance: ${t.join(", ")}`;const e=s.value.filter(t=>t.stats.missingValueCount===t.length).map(t=>t.name);return e.length>0?`Descriptor columns with only missing values: ${e.join(", ")}`:null});const a=e=>{if(e.type===t.COLUMN_TYPE.BOOL)d.hidden=!0;else{d.hidden=!1;const n=e.type===t.COLUMN_TYPE.STRING;f.root.hidden=n,c.root.hidden=n}},l=ot.input.column("Desirability",{nullable:!1,value:o,table:this.table,filter:t=>this.desirabilityColumns.includes(t),tooltipText:"Desirability column.",onValueChanged:t=>{null!=t&&(m(),a(t),u=!0,f.value=Math.round(100*t.stats.avg)/100,u=!1,y=!1,C())}});n.append(l.root),l.addValidator(()=>{if(null==l.value)return"Select a desirability column.";if(null!=s.value&&s.value.includes(l.value))return"Desirability column cannot be used as a descriptor.";if(l.value.type===t.COLUMN_TYPE.BOOL){if(0===l.value.stats.stdev)return"All desirability values are the same - scoring is not feasible."}else if(l.value.type===t.COLUMN_TYPE.STRING){if(l.value.categories.length<2)return"String desirability column must have at least 2 categories."}else{if(0===l.value.stats.stdev)return l.value.stats.missingValueCount<l.value.length?"All desirability values are the same - scoring is not feasible.":"Empty column cannot be used as desirability column.";if(null==f.value)return"Specify non-null desirability threshold.";if(!lr(l.value,f.value,c.value))return`All compounds are either desired or non-desired for ${l.value.name} ${c.value} ${f.value}. Adjust the threshold or condition.`}return null});let u=!1;const c=ot.input.choice("Condition",{value:Po.DEFAULT,items:Ro,nullable:!1,tooltipText:"How to compare numeric Desirability column values against the threshold.",onValueChanged:t=>{y=!1,C()}}),f=ot.input.float("Threshold",{value:Math.round(100*o.stats.avg)/100,nullable:!1,tooltipText:"Boundary value that separates desired from non-desired compounds.",format:"0.00",onValueChanged:t=>{if(null!=t){if(u)return;y=!1,C()}}});f.addValidator(()=>null==l.value||l.value.type===t.COLUMN_TYPE.BOOL||l.value.type===t.COLUMN_TYPE.STRING?null:null==f.value?"Specify non-null desirability threshold.":lr(l.value,f.value,c.value)?null:"Adjust the threshold to get both desired and non-desired groups.");const d=ot.divV([c.root,f.root]);n.append(d);let h=null;const m=()=>{var e;null!=h&&(h.root.remove(),h=null),(null===(e=l.value)||void 0===e?void 0:e.type)===t.COLUMN_TYPE.STRING&&(h=ot.input.multiChoice("Preferred",{value:ur(l.value.categories),items:l.value.categories,nullable:!1,tooltipText:"Select which categories should be treated as desirable.",onValueChanged:t=>{if(null!=t){if(u)return;y=!1,C()}}}),h.addValidator(()=>null==h.value||0===h.value.length?"Select at least one preferable category.":null!=l.value&&h.value.length===l.value.categories.length?"At least one category must be non-preferable.":null),d.append(h.root))};a(l.value);const p=ot.h2("Settings");n.append(p),ot.tooltip.bind(p,"Settings of the pMPO model.");const g=ot.input.bool("σ correction",{value:!0,tooltipText:"Use the sigmoidal correction to the weighted Gaussian scores.",onValueChanged:t=>{y=!1,C()}});n.append(g.root);const v=this.table.rowCount<=1e4;let y=!1;const A=()=>hr(this,void 0,void 0,function*(){if(yield new Promise(t=>setTimeout(t,50)),w())if(y)i();else{const e=yield this.getOptimalSettings(t.DataFrame.fromColumns(s.value).columns,r(),g.value);"success"===e.state?(b.value=Math.max(e.pValTresh,fo),x.value=Math.max(e.r2Tresh,mo),_.value=Math.max(e.qCutoff,go),y=!0,i()):I.shell.warning(e.msg)}}),w=()=>{const t=[s.validate(),l.validate(),f.validate(),b.validate(),x.validate(),_.validate()];return null!=h&&t.push(h.validate()),t.every(t=>t)},C=()=>{E.value?A():i()},E=ot.input.bool("Auto-tuning",{value:!1,tooltipText:"Automatically select optimal p-value, R², and q-cutoff by maximizing AUC.",onValueChanged:t=>hr(this,void 0,void 0,function*(){N(!t),y||(t?yield A():i())})});n.append(E.root);const b=ot.input.float("p-value",{nullable:!1,min:fo,max:1,step:.001,value:co,format:vo,tooltipText:"P-value threshold. Descriptors with p-values above this threshold are excluded.",onValueChanged:t=>{E.value||(y=!1,null!=t&&t>=fo&&t<=1&&i())}});n.append(b.root),b.addValidator(()=>null==b.value?"P-value is required.":b.value<fo||b.value>1?"P-value must be between 0.001 and 1.":null);const x=ot.input.float("R²",{format:vo,nullable:!1,min:mo,value:ho,max:1,step:.01,tooltipText:"Squared correlation threshold. Descriptors with squared correlation above this threshold are considered highly correlated. Among them, the descriptor with the lower p-value is retained.",onValueChanged:t=>{E.value||(y=!1,null!=t&&t>=mo&&t<=1&&i())}});n.append(x.root),x.addValidator(()=>null==x.value?"R² is required.":x.value<mo||x.value>1?"R² must be between 0.01 and 1.":null);const _=ot.input.float("q-cutoff",{format:vo,nullable:!1,min:go,value:po,max:1,step:.01,tooltipText:"Q-cutoff for the pMPO model computation.",onValueChanged:t=>{E.value||(y=!1,null!=t&&t>=go&&t<=1&&i())}});n.append(_.root),_.addValidator(()=>null==_.value?"Q-cutoff is required.":_.value<go||_.value>1?"Q-cutoff must be between 0.01 and 1.":null);const N=t=>{b.enabled=t,x.enabled=t,_.enabled=t};setTimeout(()=>{i(),v?E.value=!0:i()},10);const M=ot.button("Save",()=>hr(this,void 0,void 0,function*(){null!=this.params?function(t,e,n){Ko(this,void 0,void 0,function*(){const o=ot.input.string("Name",{value:e,nullable:!1}),r=ot.input.textArea("Description",{value:" ",nullable:!0}),i=ot.input.bool("Desirability Profile",{value:!0,tooltipText:"Save the model as an MPO Desirability Profile. If disabled, the model is saved in the pMPO format."}),s=ot.dialog({title:"Save model"}).add(o).add(r).add(i).addButton("Save",()=>Ko(this,void 0,void 0,function*(){try{const e=yield I.dapi.files.list(Ao),s=new Set(e.map(t=>t.name)),a=function(t,e){return function(t,e,n){const o=n(t);if(!e.has(o))return o;let r=2;for(;e.has(n(t,r));)r++;return n(t,r)}(t.trim().replace(/[\s/\\]+/g,"-").replace(/^-|-$/g,"")||"profile",e,(t,e)=>e?`${t}-${e}.json`:`${t}.json`)}(o.value,s),l=`${Ao}/${a}`,u=JSON.stringify(i.value?nr(t,n,o.value,r.value,!1):{type:"Probabilistic MPO Model",name:o.value,description:r.value,properties:Object.fromEntries(t)},null,2);yield I.dapi.files.writeAsText(l,u),I.events.fireCustomEvent("chem-mpo-profile-changed",{}),I.shell.info(`Saved to ${l}`)}catch(t){I.shell.error(`Failed to save: ${t instanceof Error?t.message:"the platform issue"}.`)}s.close()})).show();s.getButton("Save").disabled=!o.validate(),o.onInput.subscribe(()=>s.getButton("Save").disabled=!o.validate())})}(this.params,this.table.name,g.value):I.shell.warning("Failed to save pMPO model: null parameters.")}),"Save model as platform file.");e&&n.append(M);const T=ot.div([n]);return T.classList.add("eda-pmpo-input-form"),{form:T,saveBtn:M}}static validateInputs(e){var n;const o=new Map,{descriptors:r,desirability:i,threshold:s,sign:a,desirableCategories:l,pValue:u,r2:c,qCutoff:f}=e;if(null==u||null==c||null==f)return{valid:!1,errors:o};if(u<=0||u>1||c<0||c>1||f<=0||f>1)return{valid:!1,errors:o};if(null==r||null==i)return{valid:!1,errors:o};if(r.length<1)return o.set("descriptors","Select at least one descriptor column."),{valid:!1,errors:o};if(r.includes(i)){const t="Desirability column cannot be used as a descriptor.";return o.set("descriptors",t),o.set("desirability",t),{valid:!1,errors:o}}const d=r.filter(t=>0===t.stats.stdev).map(t=>t.name);d.length>0&&o.set("descriptors",()=>ot.markdown(`Descriptor columns with zero variance cannot be used: **${d.join(", ")}**`));const h=r.filter(t=>t.stats.missingValueCount===t.length).map(t=>t.name);if(h.length>0&&o.set("descriptors",()=>ot.markdown(`Descriptor columns with only missing values cannot be used: **${h.join(", ")}**`)),i.type===t.COLUMN_TYPE.BOOL)0===i.stats.stdev&&o.set("desirability","All desirability values are the same - scoring is not feasible.");else if(i.type===t.COLUMN_TYPE.STRING){const t=i.categories.length,e=null!==(n=null==l?void 0:l.length)&&void 0!==n?n:0;t<2?o.set("desirability","String desirability column must have at least 2 categories."):0===e?o.set("desirability","Select at least one preferable category."):e===t&&o.set("desirability","At least one category must be non-preferable.")}else 0===i.stats.stdev?o.set("desirability",i.stats.missingValueCount<i.length?"All desirability values are the same - scoring is not feasible.":"Empty column cannot be used as desirability column."):null==s?o.set("desirability","Specify non-null desirability threshold."):lr(i,s,a)||(o.set("desirability",()=>ot.markdown(`All compounds are either desired or non-desired for\n <div align="center">\n **${i.name} ${a} ${s}.**\n </div>\n Adjust the threshold or condition to get both groups.`)),o.set("threshold","Adjust the threshold to get both desired and non-desired groups."));return{valid:!o.size,errors:o}}getDesirabilityColumns(){const e=[];for(const n of this.table.columns)(n.type===t.COLUMN_TYPE.BOOL||n.isNumerical||n.type===t.COLUMN_TYPE.STRING)&&e.push(n);return e}getValidNumericCols(){const t=[];for(const e of this.table.columns)e.isNumerical&&t.push(e);return t}getOptimalSettings(e,n,o){return hr(this,void 0,void 0,function*(){const r=t.TaskBarProgressIndicator.create("Optimizing... ",{cancelable:!0});try{const t=e.names(),{desired:i,nonDesired:s}=Do(this.table,n),a=new Map;t.forEach(t=>{a.set(t,Bo(i.col(t),s.col(t)))});const l=Qo(zo(a),co);if(l.length<1)return r.close(),{pValTresh:0,r2Tresh:0,qCutoff:0,state:"failed",msg:"No descriptors passed the p-value threshold filter."};const u=Jo(e,l),c=t=>{const e=tr(0,l,a,t[0],u),r=er(i,s,e,t[1]),c=mr.predict(this.table,r,o,this.predictionName);return 1-Vo(n,c).auc},f=yield dr(r,c,new Float32Array([ho,po]),Oo,Io,Lo),d=!r.canceled;return r.close(),d?{pValTresh:co,r2Tresh:f.optimalPoint[0],qCutoff:f.optimalPoint[1],state:"success",msg:"Optimization completed successfully."}:{pValTresh:0,r2Tresh:0,qCutoff:0,state:"canceled",msg:"Auto-tuning was canceled by the user."}}catch(t){return r.close(),{pValTresh:0,r2Tresh:0,qCutoff:0,state:"failed",msg:t instanceof Error?t.message:"Optimization failed due to an unexpected error."}}})}}function pr(e){return n=this,o=arguments,i=function*(e,n=!0){const o=yield I.dapi.files.readCsv(To),r=new gr(o,"Drug","CNS","Smiles").getGenerated(e);if(!n){r.columns.add(t.Column.fromList(t.COLUMN_TYPE.BOOL,"Const bool",new Array(e).fill(!0))),r.columns.add(t.Column.fromInt32Array("Const int",new Int32Array(e).fill(1)));const n=r.columns.toList().find(t=>t.isNumerical);if(n){const e=n.clone();e.name=`${n.name} (missing)`;for(let n=0;n<Math.min(5,e.length);++n)e.set(n,t.FLOAT_NULL);r.columns.add(e)}r.columns.add(t.Column.fromFloat32Array("Nulls",new Float32Array(e).fill(t.FLOAT_NULL)));const o=function(e,n){const o=e.toList(),r=new Array(n),i=new Array(n);for(let t=0;t<n;++t)r[t]=o[t]?"active":"non-active",i[t]=o[t]?Math.random()<.5?"perfect":"good":Math.random()<.5?"bad":"worst";return[t.Column.fromList(t.COLUMN_TYPE.STRING,"CNS (strings)",r),t.Column.fromList(t.COLUMN_TYPE.STRING,"CNS (4 categories)",i),t.Column.fromList(t.COLUMN_TYPE.STRING,"Single category",new Array(n).fill("Unknown"))]}(r.col("CNS"),e);for(const t of o)r.columns.add(t)}return r},new((r=void 0)||(r=Promise))(function(t,e){function s(t){try{l(i.next(t))}catch(t){e(t)}}function a(t){try{l(i.throw(t))}catch(t){e(t)}}function l(e){var n;e.done?t(e.value):(n=e.value,n instanceof r?n:new r(function(t){t(n)})).then(s,a)}l((i=i.apply(n,o||[])).next())});var n,o,r,i}class gr{constructor(t,e,n,o){this.sourceDf=t,this.drugName=e,this.desirabilityColName=n,this.smilesColName=o;const r=t.columns.toList().filter(t=>t.isNumerical).map(t=>t.name),{desired:i,nonDesired:s}=Do(t,t.col(n));this.descriptorStats=new Map,r.forEach(t=>{this.descriptorStats.set(t,Bo(i.col(t),s.col(t)))}),this.desiredProbability=i.rowCount/t.rowCount}getGenerated(e){if(e<=1)throw new Error("Failed to generate pMPO data: sample count must be greater than 1.");let n;if(e<=this.sourceDf.rowCount){const o=t.BitSet.create(this.sourceDf.rowCount);for(let t=0;t<e;++t)o.set(t,!0);n=this.sourceDf.clone(o)}else n=this.getClonedSourceDfWithFloatNumericCols().append(this.getSyntheticTable(e-this.sourceDf.rowCount));for(const e of n.columns)if(e.type===t.COLUMN_TYPE.BOOL&&0===e.stats.stdev){let t=e.get(0);e.set(0,!t),t=e.get(1),e.set(1,!t)}return n}getSyntheticTable(e){const n=new Array(e);for(let t=0;t<e;++t)n[t]=Math.random()<this.desiredProbability;const o=[this.getDrugColumn(e),this.getSmilesColumn(e),t.Column.fromList(t.COLUMN_TYPE.BOOL,this.desirabilityColName,n)];return this.descriptorStats.forEach((r,i)=>{const s=new Float32Array(e);for(let t=0;t<e;++t)n[t]?s[t]=tn.normal.sample(r.desAvg,r.desStd):s[t]=tn.normal.sample(r.nonDesAvg,r.nonDesStd);o.push(t.Column.fromFloat32Array(i,s))}),t.DataFrame.fromColumns(o)}getDrugColumn(e){return t.Column.fromList(t.COLUMN_TYPE.STRING,this.drugName,Array.from({length:e},(t,e)=>`Synthetic drug ${e+1}`))}getSmilesColumn(e){return t.Column.fromList(t.COLUMN_TYPE.STRING,this.smilesColName,Array.from({length:e},()=>"C"))}getClonedSourceDfWithFloatNumericCols(){const e=[];this.sourceDf.columns.toList().forEach(n=>{n.isNumerical?e.push(n.clone().convertTo(t.COLUMN_TYPE.FLOAT)):e.push(n.clone())});const n=t.DataFrame.fromColumns(e);return n.name=this.sourceDf.name,n}}var vr=function(t,e,n,o){return new(n||(n=Promise))(function(r,i){function s(t){try{l(o.next(t))}catch(t){i(t)}}function a(t){try{l(o.throw(t))}catch(t){i(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((o=o.apply(t,e||[])).next())})};const yr="CNS",Ar=["TPSA","TPSA_S","HBA","HBD","MW","nAtoms","cLogD_ACD_v15","mapKa","cLogP_Biobyte","mbpKa","cLogP_ACD_v15","ALogP98"],wr="Score",Cr="Drug",Er="Sigmoidal",br=[Er,"Gaussian"];function xr(e=20){const n=Math.floor(e/2),o=[],r=new Float64Array(e),i=new Float64Array(e),s=new Float64Array(e);for(let t=0;t<e;t++){o.push(t<n);const e=t<n?t:t-n,a=e/Math.max(n-1,1);r[t]=t<n?9+2*a:1+2*a,i[t]=t<n?18+4*a:3+4*a,s[t]=5+.1*e}return t.DataFrame.fromColumns([t.Column.fromList(t.COLUMN_TYPE.BOOL,"des",o),t.Column.fromFloat64Array("d1",r),t.Column.fromFloat64Array("d2",i),t.Column.fromFloat64Array("d3",s)])}function _r(e,n){return t.DataFrame.fromColumns(e.columns.byNames(n)).columns}function Nr(){const t=xr();return{descriptors:t.columns.byNames(["d1","d2"]),desirability:t.col("des"),threshold:null,sign:Po.DEFAULT,desirableCategories:null,pValue:co,r2:ho,qCutoff:po}}function Mr(t,e,n,o){if(0===n)return[];const r=t.length;if(e.length!==r)throw new Error("Sense array length must match number of dimensions");const i=new Uint32Array(n);for(let t=0;t<n;t++)i[t]=t;i.sort((n,o)=>e[0]===Go.MIN?t[0][n]-t[0][o]:t[0][o]-t[0][n]);const s=Array(n).fill(!0),a=[];null==o||o.forEach(t=>s[t]=!1);for(const n of i){if(!s[n])continue;let o=!1;for(const i of a){let s=!0,a=!1;for(let o=0;o<r;o++){const r=t[o][i],l=t[o][n];e[o]===Go.MIN?(r>l&&(s=!1),r<l&&(a=!0)):(r<l&&(s=!1),r>l&&(a=!0))}if(s&&a){o=!0;break}}o?s[n]=!1:a.push(n)}return s}b("Probabilistic MPO: Computation",()=>{br.forEach(e=>{const n=e==Er;C("Correctness: "+e,()=>vr(void 0,void 0,void 0,function*(){let o=null,r=null,i=null,s=[],a=null,l=null,u=null,c=null;try{if(o=yield I.dapi.files.readCsv(To),r=yield I.dapi.files.readCsv(So),i=o.col(yr),s=o.columns.byNames(Ar),null==i)throw new Error;const f=mr.fit(o,t.DataFrame.fromColumns(s).columns,i,co,ho,po),d=mr.predict(o,f.params,n,wr);a=o.col(Cr),l=r.col(Cr),u=r.col(e),c=function(t,e,n,o){let r=0;const i=t.toList(),s=n.toList(),a=e.getRawData(),l=o.getRawData();return i.forEach((t,e)=>{const n=s.indexOf(t);if(n<0)throw new Error(`Failed to compare pMPO scores: the "${t}" drug is missing in the reference data.`);r=Math.max(r,Math.abs(a[e]-l[n]))}),r}(a,d,l,u)}catch(t){I.shell.error(t.message)}E(null!==o,!0,"Failed to load the source data: "+To),E(null!==r,!0,"Failed to load the scores data: "+So),E(null!==i,!0,"Inconsistent source data: no column "+yr),E(s.length,Ar.length,"Inconsistent source data: no enough of columns"),E(null!==a,!0,"Inconsistent source data: no column "+Cr),E(null!==l,!0,"Inconsistent reference data: no column "+Cr),E(null!==u,!0,"Inconsistent reference data: no column "+wr),E(null!==c,!0,"Failed to compare pMPO scores with the reference data"),E(c<1e-6,!0,"Max absolute deviation of pMPO scores exceeds the threshold (0.000001)")}),{timeout:1e4})}),C("Performance: 100K drugs, "+Ar.length+" descriptors",()=>vr(void 0,void 0,void 0,function*(){let e=null,n=null,o=[];try{if(e=yield pr(1e5),n=e.col(yr),o=e.columns.byNames(Ar),null==n)throw new Error;const r=mr.fit(e,t.DataFrame.fromColumns(o).columns,n,co,ho,po);mr.predict(e,r.params,!0,wr)}catch(t){I.shell.error(t.message)}E(null!==e,!0,"Failed to load the source data: "+To),E(null!==n,!0,"Inconsistent source data: no column "+yr),E(o.length,Ar.length,"Inconsistent source data: no enough of columns")}),{timeout:1e4})}),b("Probabilistic MPO: API",()=>{C("isApplicable: rejects p-value below minimum",()=>vr(void 0,void 0,void 0,function*(){const t=xr(),e=t.col("des"),n=_r(t,["d1","d2"]);E(mr.isApplicable(n,e,1e-4,ho,po),!1)})),C("isApplicable: rejects R² below minimum",()=>vr(void 0,void 0,void 0,function*(){const t=xr(),e=t.col("des"),n=_r(t,["d1","d2"]);E(mr.isApplicable(n,e,co,.001,po),!1)})),C("isApplicable: rejects q-cutoff below minimum",()=>vr(void 0,void 0,void 0,function*(){const t=xr(),e=t.col("des"),n=_r(t,["d1","d2"]);E(mr.isApplicable(n,e,co,ho,.001),!1)})),C("isApplicable: rejects too few samples",()=>vr(void 0,void 0,void 0,function*(){const t=xr(8),e=t.col("des"),n=_r(t,["d1","d2"]);E(mr.isApplicable(n,e,co,ho,po),!1)})),C("isApplicable: rejects single-category desirability",()=>vr(void 0,void 0,void 0,function*(){const e=t.DataFrame.fromColumns([t.Column.fromList(t.COLUMN_TYPE.BOOL,"des",new Array(20).fill(!0)),t.Column.fromFloat64Array("d1",Float64Array.from({length:20},(t,e)=>e+1)),t.Column.fromFloat64Array("d2",Float64Array.from({length:20},(t,e)=>2*e))]),n=e.col("des"),o=_r(e,["d1","d2"]);E(mr.isApplicable(o,n,co,ho,po),!1)})),C("isApplicable: rejects non-numerical descriptor",()=>vr(void 0,void 0,void 0,function*(){const e=t.DataFrame.fromColumns([t.Column.fromList(t.COLUMN_TYPE.BOOL,"des",Array.from({length:20},(t,e)=>e<10)),t.Column.fromFloat64Array("d1",Float64Array.from({length:20},(t,e)=>e+1)),t.Column.fromStrings("strCol",Array.from({length:20},(t,e)=>"a"+e))]),n=e.col("des"),o=_r(e,["d1","strCol"]);E(mr.isApplicable(o,n,co,ho,po),!1)})),C("isApplicable: rejects all-constant descriptors",()=>vr(void 0,void 0,void 0,function*(){const e=t.DataFrame.fromColumns([t.Column.fromList(t.COLUMN_TYPE.BOOL,"des",Array.from({length:20},(t,e)=>e<10)),t.Column.fromFloat64Array("c1",new Float64Array(20).fill(5)),t.Column.fromFloat64Array("c2",new Float64Array(20).fill(3))]),n=e.col("des"),o=_r(e,["c1","c2"]);E(mr.isApplicable(o,n,co,ho,po),!1)})),C("isApplicable: accepts valid data at minimum sample count",()=>vr(void 0,void 0,void 0,function*(){const t=xr(10),e=t.col("des"),n=_r(t,["d1","d2"]);E(mr.isApplicable(n,e,co,ho,po),!0)})),C("isTableValid: rejects table with 1 row",()=>vr(void 0,void 0,void 0,function*(){const e=t.DataFrame.fromColumns([t.Column.fromFloat64Array("a",new Float64Array([1])),t.Column.fromFloat64Array("b",new Float64Array([2]))]);E(mr.isTableValid(e,!1),!1)})),C("isTableValid: rejects all-constant numeric columns",()=>vr(void 0,void 0,void 0,function*(){const e=t.DataFrame.fromColumns([t.Column.fromFloat64Array("a",new Float64Array(10).fill(5)),t.Column.fromFloat64Array("b",new Float64Array(10).fill(3))]);E(mr.isTableValid(e,!1),!1)})),C("isTableValid: rejects single non-constant numeric column",()=>vr(void 0,void 0,void 0,function*(){const e=t.DataFrame.fromColumns([t.Column.fromFloat64Array("a",Float64Array.from({length:10},(t,e)=>e)),t.Column.fromFloat64Array("b",new Float64Array(10).fill(3))]);E(mr.isTableValid(e,!1),!1)})),C("isTableValid: accepts two non-constant numeric columns",()=>vr(void 0,void 0,void 0,function*(){const e=t.DataFrame.fromColumns([t.Column.fromFloat64Array("a",Float64Array.from({length:10},(t,e)=>e)),t.Column.fromFloat64Array("b",Float64Array.from({length:10},(t,e)=>2*e))]);E(mr.isTableValid(e,!1),!0)})),C("fit: returns non-empty params",()=>vr(void 0,void 0,void 0,function*(){const t=xr();E(mr.fit(t,_r(t,["d1","d2"]),t.col("des"),co,ho,po).params.size>0,!0,"Expected non-empty params")})),C("fit: weights sum to 1",()=>vr(void 0,void 0,void 0,function*(){const t=xr(),e=mr.fit(t,_r(t,["d1","d2"]),t.col("des"),co,ho,po);let n=0;e.params.forEach(t=>n+=t.weight),E(Math.abs(n-1)<1e-10,!0,`Weights sum ${n} should equal 1.0`)})),C("fit: selectedByCorr is subset of selectedByPvalue",()=>vr(void 0,void 0,void 0,function*(){const t=xr(),e=mr.fit(t,_r(t,["d1","d2","d3"]),t.col("des"),co,ho,po);E(e.selectedByCorr.every(t=>e.selectedByPvalue.includes(t)),!0,"selectedByCorr must be a subset of selectedByPvalue")})),C("fit: statistics table row count matches descriptor count",()=>vr(void 0,void 0,void 0,function*(){const t=["d1","d2","d3"],e=xr();E(mr.fit(e,_r(e,t),e.col("des"),co,ho,po).descrStatsTable.rowCount,t.length)})),C("fit: throws on non-applicable data",()=>vr(void 0,void 0,void 0,function*(){const t=xr(8);let e=!1;try{mr.fit(t,_r(t,["d1","d2"]),t.col("des"),co,ho,po)}catch(t){e=!0}E(e,!0,"Expected fit to throw on non-applicable data")})),C("fit: throws when no descriptors pass p-value filter",()=>vr(void 0,void 0,void 0,function*(){const e=t.DataFrame.fromColumns([t.Column.fromList(t.COLUMN_TYPE.BOOL,"des",Array.from({length:20},(t,e)=>e<10)),t.Column.fromFloat64Array("d1",Float64Array.from({length:20},(t,e)=>e%10+1)),t.Column.fromFloat64Array("d2",Float64Array.from({length:20},(t,e)=>2*(e%10+1)))]);let n=!1;try{mr.fit(e,_r(e,["d1","d2"]),e.col("des"),co,ho,po)}catch(t){n=!0}E(n,!0,"Expected fit to throw when no descriptors pass p-value filter")})),C("predict: returns column with correct length",()=>vr(void 0,void 0,void 0,function*(){const t=xr(),e=mr.fit(t,_r(t,["d1","d2"]),t.col("des"),co,ho,po);E(mr.predict(t,e.params,!0,wr).length,t.rowCount)})),C("predict: scores are non-negative",()=>vr(void 0,void 0,void 0,function*(){const t=xr(),e=mr.fit(t,_r(t,["d1","d2"]),t.col("des"),co,ho,po),n=mr.predict(t,e.params,!0,wr).getRawData();let o=!0;for(let t=0;t<n.length;t++)if(n[t]<0){o=!1;break}E(o,!0,"All scores should be non-negative")})),C("predict: scores do not exceed 1",()=>vr(void 0,void 0,void 0,function*(){const t=xr(),e=mr.fit(t,_r(t,["d1","d2"]),t.col("des"),co,ho,po),n=mr.predict(t,e.params,!0,wr).getRawData();let o=0;for(let t=0;t<n.length;t++)o=Math.max(o,n[t]);E(o<=1+1e-10,!0,`Max score ${o} should not exceed 1.0`)})),C("predict: sigmoid and Gaussian modes produce different scores",()=>vr(void 0,void 0,void 0,function*(){const t=xr(),e=mr.fit(t,_r(t,["d1","d2"]),t.col("des"),co,ho,po),n=mr.predict(t,e.params,!0,"sig").getRawData(),o=mr.predict(t,e.params,!1,"gau").getRawData();let r=!1;for(let e=0;e<t.rowCount;e++)if(Math.abs(n[e]-o[e])>1e-12){r=!0;break}E(r,!0,"Sigmoid and Gaussian modes should produce different scores")})),C("predict: throws for missing column",()=>vr(void 0,void 0,void 0,function*(){const e=xr(),n=mr.fit(e,_r(e,["d1","d2"]),e.col("des"),co,ho,po),o=t.DataFrame.fromColumns([t.Column.fromFloat64Array("other",Float64Array.from({length:5},(t,e)=>e))]);let r=!1;try{mr.predict(o,n.params,!0,wr)}catch(t){r=!0}E(r,!0,"Expected predict to throw for missing column")})),C("validateInputs: rejects null p-value",()=>vr(void 0,void 0,void 0,function*(){const t=Nr();t.pValue=null;const e=mr.validateInputs(t);E(e.valid,!1),E(e.errors.size,0,"No input-specific errors for null settings")})),C("validateInputs: rejects null R²",()=>vr(void 0,void 0,void 0,function*(){const t=Nr();t.r2=null,E(mr.validateInputs(t).valid,!1)})),C("validateInputs: rejects null q-cutoff",()=>vr(void 0,void 0,void 0,function*(){const t=Nr();t.qCutoff=null,E(mr.validateInputs(t).valid,!1)})),C("validateInputs: rejects p-value out of range",()=>vr(void 0,void 0,void 0,function*(){const t=Nr();t.pValue=0,E(mr.validateInputs(t).valid,!1),t.pValue=1.5,E(mr.validateInputs(t).valid,!1)})),C("validateInputs: rejects R² out of range",()=>vr(void 0,void 0,void 0,function*(){const t=Nr();t.r2=-.1,E(mr.validateInputs(t).valid,!1),t.r2=1.5,E(mr.validateInputs(t).valid,!1)})),C("validateInputs: rejects q-cutoff out of range",()=>vr(void 0,void 0,void 0,function*(){const t=Nr();t.qCutoff=0,E(mr.validateInputs(t).valid,!1),t.qCutoff=1.5,E(mr.validateInputs(t).valid,!1)})),C("validateInputs: rejects null descriptors",()=>vr(void 0,void 0,void 0,function*(){const t=Nr();t.descriptors=null,E(mr.validateInputs(t).valid,!1)})),C("validateInputs: rejects null desirability",()=>vr(void 0,void 0,void 0,function*(){const t=Nr();t.desirability=null,E(mr.validateInputs(t).valid,!1)})),C("validateInputs: rejects empty descriptors",()=>vr(void 0,void 0,void 0,function*(){const t=Nr();t.descriptors=[];const e=mr.validateInputs(t);E(e.valid,!1),E(e.errors.has("descriptors"),!0)})),C("validateInputs: rejects desirability among descriptors",()=>vr(void 0,void 0,void 0,function*(){const t=xr(),e=t.col("des"),n=mr.validateInputs({descriptors:[t.col("d1"),e],desirability:e,threshold:null,sign:Po.DEFAULT,desirableCategories:null,pValue:co,r2:ho,qCutoff:po});E(n.valid,!1),E(n.errors.has("descriptors"),!0),E(n.errors.has("desirability"),!0)})),C("validateInputs: rejects zero-variance descriptors",()=>vr(void 0,void 0,void 0,function*(){const e=t.DataFrame.fromColumns([t.Column.fromList(t.COLUMN_TYPE.BOOL,"des",Array.from({length:20},(t,e)=>e<10)),t.Column.fromFloat64Array("d1",Float64Array.from({length:20},(t,e)=>e+1)),t.Column.fromFloat64Array("constCol",new Float64Array(20).fill(5))]),n=mr.validateInputs({descriptors:[e.col("d1"),e.col("constCol")],desirability:e.col("des"),threshold:null,sign:Po.DEFAULT,desirableCategories:null,pValue:co,r2:ho,qCutoff:po});E(n.valid,!1),E(n.errors.has("descriptors"),!0)})),C("validateInputs: accepts valid boolean desirability",()=>vr(void 0,void 0,void 0,function*(){const t=Nr(),e=mr.validateInputs(t);E(e.valid,!0),E(e.errors.size,0)})),C("validateInputs: rejects all-true boolean desirability",()=>vr(void 0,void 0,void 0,function*(){const e=t.DataFrame.fromColumns([t.Column.fromList(t.COLUMN_TYPE.BOOL,"des",new Array(20).fill(!0)),t.Column.fromFloat64Array("d1",Float64Array.from({length:20},(t,e)=>e+1)),t.Column.fromFloat64Array("d2",Float64Array.from({length:20},(t,e)=>2*e))]),n=mr.validateInputs({descriptors:[e.col("d1"),e.col("d2")],desirability:e.col("des"),threshold:null,sign:Po.DEFAULT,desirableCategories:null,pValue:co,r2:ho,qCutoff:po});E(n.valid,!1),E(n.errors.has("desirability"),!0)})),C("validateInputs: rejects string desirability with single category",()=>vr(void 0,void 0,void 0,function*(){const e=t.DataFrame.fromColumns([t.Column.fromStrings("des",new Array(20).fill("active")),t.Column.fromFloat64Array("d1",Float64Array.from({length:20},(t,e)=>e+1)),t.Column.fromFloat64Array("d2",Float64Array.from({length:20},(t,e)=>2*e))]),n=mr.validateInputs({descriptors:[e.col("d1"),e.col("d2")],desirability:e.col("des"),threshold:null,sign:Po.DEFAULT,desirableCategories:["active"],pValue:co,r2:ho,qCutoff:po});E(n.valid,!1),E(n.errors.has("desirability"),!0)})),C("validateInputs: rejects no selected categories",()=>vr(void 0,void 0,void 0,function*(){const e=t.DataFrame.fromColumns([t.Column.fromStrings("des",Array.from({length:20},(t,e)=>e<10?"active":"inactive")),t.Column.fromFloat64Array("d1",Float64Array.from({length:20},(t,e)=>e+1)),t.Column.fromFloat64Array("d2",Float64Array.from({length:20},(t,e)=>2*e))]),n=mr.validateInputs({descriptors:[e.col("d1"),e.col("d2")],desirability:e.col("des"),threshold:null,sign:Po.DEFAULT,desirableCategories:[],pValue:co,r2:ho,qCutoff:po});E(n.valid,!1),E(n.errors.has("desirability"),!0)})),C("validateInputs: rejects all categories selected",()=>vr(void 0,void 0,void 0,function*(){const e=t.DataFrame.fromColumns([t.Column.fromStrings("des",Array.from({length:20},(t,e)=>e<10?"active":"inactive")),t.Column.fromFloat64Array("d1",Float64Array.from({length:20},(t,e)=>e+1)),t.Column.fromFloat64Array("d2",Float64Array.from({length:20},(t,e)=>2*e))]),n=mr.validateInputs({descriptors:[e.col("d1"),e.col("d2")],desirability:e.col("des"),threshold:null,sign:Po.DEFAULT,desirableCategories:["active","inactive"],pValue:co,r2:ho,qCutoff:po});E(n.valid,!1),E(n.errors.has("desirability"),!0)})),C("validateInputs: accepts valid string desirability",()=>vr(void 0,void 0,void 0,function*(){const e=t.DataFrame.fromColumns([t.Column.fromStrings("des",Array.from({length:20},(t,e)=>e<10?"active":"inactive")),t.Column.fromFloat64Array("d1",Float64Array.from({length:20},(t,e)=>e<10?e+10:e)),t.Column.fromFloat64Array("d2",Float64Array.from({length:20},(t,e)=>e<10?3*e:e))]),n=mr.validateInputs({descriptors:[e.col("d1"),e.col("d2")],desirability:e.col("des"),threshold:null,sign:Po.DEFAULT,desirableCategories:["active"],pValue:co,r2:ho,qCutoff:po});E(n.valid,!0),E(n.errors.size,0)})),C("validateInputs: rejects constant numeric desirability",()=>vr(void 0,void 0,void 0,function*(){const e=t.DataFrame.fromColumns([t.Column.fromFloat64Array("des",new Float64Array(20).fill(5)),t.Column.fromFloat64Array("d1",Float64Array.from({length:20},(t,e)=>e+1)),t.Column.fromFloat64Array("d2",Float64Array.from({length:20},(t,e)=>2*e))]),n=mr.validateInputs({descriptors:[e.col("d1"),e.col("d2")],desirability:e.col("des"),threshold:5,sign:Po.DEFAULT,desirableCategories:null,pValue:co,r2:ho,qCutoff:po});E(n.valid,!1),E(n.errors.has("desirability"),!0)})),C("validateInputs: rejects null threshold for numeric desirability",()=>vr(void 0,void 0,void 0,function*(){const e=t.DataFrame.fromColumns([t.Column.fromFloat64Array("des",Float64Array.from({length:20},(t,e)=>e)),t.Column.fromFloat64Array("d1",Float64Array.from({length:20},(t,e)=>e+1)),t.Column.fromFloat64Array("d2",Float64Array.from({length:20},(t,e)=>2*e))]),n=mr.validateInputs({descriptors:[e.col("d1"),e.col("d2")],desirability:e.col("des"),threshold:null,sign:Po.DEFAULT,desirableCategories:null,pValue:co,r2:ho,qCutoff:po});E(n.valid,!1),E(n.errors.has("desirability"),!0)})),C("validateInputs: rejects threshold producing single group",()=>vr(void 0,void 0,void 0,function*(){const e=t.DataFrame.fromColumns([t.Column.fromFloat64Array("des",Float64Array.from({length:20},(t,e)=>e)),t.Column.fromFloat64Array("d1",Float64Array.from({length:20},(t,e)=>e+1)),t.Column.fromFloat64Array("d2",Float64Array.from({length:20},(t,e)=>2*e))]),n=mr.validateInputs({descriptors:[e.col("d1"),e.col("d2")],desirability:e.col("des"),threshold:100,sign:Po.LESS_OR_EQUAL,desirableCategories:null,pValue:co,r2:ho,qCutoff:po});E(n.valid,!1),E(n.errors.has("desirability"),!0),E(n.errors.has("threshold"),!0)})),C("validateInputs: accepts valid numeric desirability with threshold",()=>vr(void 0,void 0,void 0,function*(){const e=t.DataFrame.fromColumns([t.Column.fromFloat64Array("des",Float64Array.from({length:20},(t,e)=>e)),t.Column.fromFloat64Array("d1",Float64Array.from({length:20},(t,e)=>e+1)),t.Column.fromFloat64Array("d2",Float64Array.from({length:20},(t,e)=>2*e))]),n=mr.validateInputs({descriptors:[e.col("d1"),e.col("d2")],desirability:e.col("des"),threshold:10,sign:Po.LESS_OR_EQUAL,desirableCategories:null,pValue:co,r2:ho,qCutoff:po});E(n.valid,!0),E(n.errors.size,0)}))});var Tr=function(t,e,n,o){return new(n||(n=Promise))(function(r,i){function s(t){try{l(o.next(t))}catch(t){i(t)}}function a(t){try{l(o.throw(t))}catch(t){i(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((o=o.apply(t,e||[])).next())})};const Sr=5e3,Or=1e6,Ir="1M points, 2D";function Lr(t,e,n=42){const o=[];let r=n;const i=()=>(r=(1664525*r+1013904223)%4294967296,r/4294967296);for(let n=0;n<e;n++){const e=new Float32Array(t);for(let o=0;o<t;o++)e[o]=100*i()+10*n;o.push(e)}return o}function Pr(t,e){const n=[];for(let o=0;o<t;o++)"all-min"===e?n.push(Go.MIN):"all-max"===e?n.push(Go.MAX):n.push(o%2==0?Go.MIN:Go.MAX);return n}function Rr(t,e){const n=Math.floor(t*e),o=new Set,r=Math.floor(t/n);for(let t=0;t<n;t++)o.add(t*r);return o}function Fr(t,e){if(t.length!==e)throw new Error(`Invalid mask length: expected ${e}, got ${t.length}`);const n=t.filter(t=>t).length;if(0===n)throw new Error("No optimal points found");n===e&&I.shell.warning("All points are optimal - data may be degenerate")}b("Pareto optimization",()=>{C(`Performance: ${Ir}`,()=>Tr(void 0,void 0,void 0,function*(){var t;let e=null,n=null;try{e=Mr(Lr(Or,2),Pr(2,"mixed"),Or),Fr(e,Or)}catch(t){n=t,I.shell.error(n.message)}E(null!==e,!0,"Failed to compute Pareto mask"),E(null===n,!0,null!==(t=null==n?void 0:n.message)&&void 0!==t?t:"")}),{timeout:Sr}),C(`Performance: ${Ir}, all minimize`,()=>Tr(void 0,void 0,void 0,function*(){var t;let e=null,n=null;try{e=Mr(Lr(Or,2),Pr(2,"all-min"),Or),Fr(e,Or)}catch(t){n=t,I.shell.error(n.message)}E(null!==e,!0,"Failed to compute Pareto mask"),E(null===n,!0,null!==(t=null==n?void 0:n.message)&&void 0!==t?t:"")}),{timeout:Sr}),C(`Performance: ${Ir}, all maximize`,()=>Tr(void 0,void 0,void 0,function*(){var t;let e=null,n=null;try{e=Mr(Lr(Or,2),Pr(2,"all-max"),Or),Fr(e,Or)}catch(t){n=t,I.shell.error(n.message)}E(null!==e,!0,"Failed to compute Pareto mask"),E(null===n,!0,null!==(t=null==n?void 0:n.message)&&void 0!==t?t:"")}),{timeout:Sr}),C(`Performance: ${Ir} with 10% null indices`,()=>Tr(void 0,void 0,void 0,function*(){var t;let e=null,n=null;try{const t=Lr(Or,2),n=Pr(2,"mixed"),o=Rr(Or,.1);e=Mr(t,n,Or,o),Fr(e,Or)}catch(t){n=t,I.shell.error(n.message)}E(null!==e,!0,"Failed to compute Pareto mask"),E(null===n,!0,null!==(t=null==n?void 0:n.message)&&void 0!==t?t:"")}),{timeout:Sr}),C(`Performance: ${Ir} with 25% null indices`,()=>Tr(void 0,void 0,void 0,function*(){var t;let e=null,n=null;try{const t=Lr(Or,2),n=Pr(2,"mixed"),o=Rr(Or,.25);e=Mr(t,n,Or,o),Fr(e,Or)}catch(t){n=t,I.shell.error(n.message)}E(null!==e,!0,"Failed to compute Pareto mask"),E(null===n,!0,null!==(t=null==n?void 0:n.message)&&void 0!==t?t:"")}),{timeout:Sr}),C("Edge case: Empty dataset",()=>Tr(void 0,void 0,void 0,function*(){var t;let e=null,n=null;try{e=Mr([new Float32Array(0),new Float32Array(0)],Pr(2,"mixed"),0)}catch(t){n=t,I.shell.error(n.message)}E(null!==e,!0,"Failed to compute Pareto mask"),E(e.length,0,"Empty dataset should return empty mask"),E(null===n,!0,null!==(t=null==n?void 0:n.message)&&void 0!==t?t:"")}),{timeout:Sr}),C("Edge case: Single point",()=>Tr(void 0,void 0,void 0,function*(){var t;let e=null,n=null;try{e=Mr([new Float32Array([1]),new Float32Array([2])],Pr(2,"mixed"),1)}catch(t){n=t,I.shell.error(n.message)}E(null!==e,!0,"Failed to compute Pareto mask"),E(e.length,1,"Single point dataset should return mask with one element"),E(e[0],!0,"Single point should be optimal"),E(null===n,!0,null!==(t=null==n?void 0:n.message)&&void 0!==t?t:"")}),{timeout:Sr}),C("Edge case: All identical points",()=>Tr(void 0,void 0,void 0,function*(){var t;let e=null,n=null;try{const t=100;e=Mr([new Float32Array(t).fill(5),new Float32Array(t).fill(10)],Pr(2,"mixed"),t)}catch(t){n=t,I.shell.error(n.message)}E(null!==e,!0,"Failed to compute Pareto mask"),E(e.length,100,"Should return mask with correct length"),E(e.filter(t=>t).length>0,!0,"At least some identical points should be optimal"),E(null===n,!0,null!==(t=null==n?void 0:n.message)&&void 0!==t?t:"")}),{timeout:Sr})});var Dr=function(t,e,n,o){return new(n||(n=Promise))(function(r,i){function s(t){try{l(o.next(t))}catch(t){i(t)}}function a(t){try{l(o.throw(t))}catch(t){i(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((o=o.apply(t,e||[])).next())})};const Br=new t.Package;function kr(e,s,a){return Dr(this,void 0,void 0,function*(){const d=yield function(t){var e,s,a;return n(this,void 0,void 0,function*(){const d=(null==t?void 0:t.nodeOptions)?t.nodeOptions.package:grok.functions.getCurrentCall().func.package;if(!d)throw new Error("Can't run tests outside of the package");const h=null===(e=d.packageOwner)||void 0===e?void 0:e.match(/<([^>]*)>/),m=h?h[1]:"";null!=d&&(yield _(d));const p=[];console.log("Running tests..."),console.log(t),null!=t||(t={}),null!==(s=(a=t).testContext)&&void 0!==s||(a.testContext=new A),grok.shell.clearLastError();const g=function(){const t=[];return console.log=(...e)=>{t.push(...e),i(...e)},console.info=(...e)=>{t.push(...e),l(...e)},console.warn=(...e)=>{t.push(...e),u(...e)},console.error=(...e)=>{t.push(...e),c(...e)},t}();yield function(t,e){var o,r,s,a,f,h;return n(this,void 0,void 0,function*(){try{let l=null!=(null==e?void 0:e.skipToCategory),u=!1;for(const[c,g]of Object.entries(t)){if(null===(o=e.exclude)||void 0===o?void 0:o.some(t=>c.startsWith(t)))continue;if(null!=(null==e?void 0:e.category)&&!c.toLowerCase().startsWith(null==e?void 0:e.category.toLowerCase().trim()))continue;if(l)if(u)l=!1;else{if(null==(null==e?void 0:e.skipToCategory)||c.toLowerCase().trim()!==(null==e?void 0:e.skipToCategory.toLowerCase().trim()))continue;u=!0}const t=null===(r=g.tests)||void 0===r?void 0:r.every(t=>{var n;return(null===(n=t.options)||void 0===n?void 0:n.skipReason)||null!=(null==e?void 0:e.test)&&e.test.toLowerCase()!==t.name.toLowerCase()});if(!t){const t=(null!==(s=g.tests)&&void 0!==s?s:[]).filter(t=>{var n;return(null===(n=t.options)||void 0===n?void 0:n.skipReason)||null!=(null==e?void 0:e.test)&&e.test.toLowerCase()!==t.name.toLowerCase()}).length;i(`Package testing: Started {{${c}}}${t>0?` skipped {{${t}}}`:""}`),g.beforeStatus=yield v(g.before,c)}let A,w=null!==(a=g.tests)&&void 0!==a?a:[];e.stressTest&&(w=w.filter(t=>{var e;return null===(e=t.options)||void 0===e?void 0:e.stressTest}),w=T(w)),(null!==(h=null===(f=e.tags)||void 0===f?void 0:f.length)&&void 0!==h?h:0)>0&&(w=w.filter(t=>{var n,o;return null===(o=null===(n=t.options)||void 0===n?void 0:n.tags)||void 0===o?void 0:o.some(t=>{var n;return(null!==(n=null==e?void 0:e.tags)&&void 0!==n?n:[]).includes(t)})})),g.beforeStatus?(A=Array.from(w.map(t=>({date:(new Date).toISOString(),category:c,name:t.name,success:!1,result:"before() failed",ms:0,skipped:!1,logs:"",owner:m,package:d.name,widgetsDifference:0,flaking:DG.Test.isReproducing}))),A.forEach(t=>n(this,void 0,void 0,function*(){return yield grok.shell.reportTest("package",t)}))):A=yield y(g,e,l);const C=A.filter(t=>"skipped"!=t.result);if(t||(g.afterStatus=yield v(g.after,c)),g.afterStatus&&(i(`Package testing: Category after() {{${c}}} failed`),i(`Package testing: Result for {{${c}}} after: ${g.afterStatus}`),C.push({date:(new Date).toISOString(),category:c,name:"after",success:!1,result:g.afterStatus,ms:0,skipped:!1,logs:"",owner:m,package:d.name,widgetsDifference:0,flaking:DG.Test.isReproducing})),g.beforeStatus&&(i(`Package testing: Category before() {{${c}}} failed`),i(`Package testing: Result for {{${c}}} before: ${g.beforeStatus}`),C.push({date:(new Date).toISOString(),category:c,name:"before",success:!1,result:g.beforeStatus,ms:0,skipped:!1,logs:"",owner:m,package:d.name,widgetsDifference:0,flaking:DG.Test.isReproducing})),p.push(...C),e.returnOnFail&&C.some(t=>!t.success&&!t.skipped&&t.name!==e.skipToTest))break}}finally{console.log=i,console.info=l,console.warn=u,console.error=c}if(e.testContext.catchUnhandled&&!DG.Test.isInBenchmark){yield S(1e3);const t=yield grok.shell.lastError;if(null!=t){const e={logs:"",date:(new Date).toISOString(),category:"Unhandled exceptions",name:"Exception",result:null!=t?t:"",success:!t,ms:0,skipped:!1,owner:null!=m?m:"",package:d.name,widgetsDifference:0};i(`Package testing: Unhandled Exception: ${t}`),p.push(Object.assign(Object.assign({},e),{flaking:DG.Test.isReproducing&&!t})),e.package=d.name,yield grok.shell.reportTest("package",e)}}})}(f,t);for(let t of p)t.result=t.result.toString().replace(/"/g,"'"),null!=t.logs&&(t.logs=t.logs.toString().replace(/"/g,"'"));return p;function v(t,e){return n(this,void 0,void 0,function*(){let o;try{void 0!==t&&(yield O(()=>n(this,void 0,void 0,function*(){yield t()}),1e5,`before ${e}: timeout error`))}catch(t){o=yield N(t)}return o})}function y(t,e,i){var s,a,l,u,c,f,h,p,v,y,A,C,E,b,x,_,N,T;return n(this,void 0,void 0,function*(){let n=null!==(s=t.tests)&&void 0!==s?s:[];const S=[],O=w();if(t.clear){let s=i&&null!=e.skipToTest;for(let i=0;i<n.length;i++){n[i].options&&void 0===(null===(a=n[i].options)||void 0===a?void 0:a.benchmark)&&(n[i].options||(n[i].options={}),n[i].options.benchmark=null!==(l=t.benchmarks)&&void 0!==l&&l);let C=n[i];if(e.test&&e.test.toLowerCase()!==C.name.toLowerCase())continue;if(s){if(null==(null==e?void 0:e.skipToTest)||C.name.toLowerCase().trim()!==(null==e?void 0:e.skipToTest.toLowerCase().trim()))continue;s=!1}(null==C?void 0:C.options)&&(C.options.owner=null!==(h=null!==(f=null!==(c=null===(u=n[i].options)||void 0===u?void 0:u.owner)&&void 0!==c?c:null==t?void 0:t.owner)&&void 0!==f?f:m)&&void 0!==h?h:"");let E=yield M(C,null==e?void 0:e.test,g,DG.Test.isInBenchmark?null!==(v=null===(p=n[i].options)||void 0===p?void 0:p.benchmarkTimeout)&&void 0!==v?v:r:null!==(A=null===(y=n[i].options)||void 0===y?void 0:y.timeout)&&void 0!==A?A:o,d.name,e.verbose);if(E&&(S.push(Object.assign(Object.assign({},E),{widgetsDifference:w()-O})),e.returnOnFail&&e.skipToTest!==C.name&&!E.success&&!E.skipped))return S;e.nodeOptions||(grok.shell.closeAll(),DG.Balloon.closeAll())}}else{let o=i&&null!=e.skipToTest;for(let i=0;i<n.length;i++){let s=n[i];if(e.test&&e.test.toLowerCase()!==s.name.toLowerCase())continue;if(o){null!=(null==e?void 0:e.skipToTest)&&s.name.toLowerCase().trim()===(null==e?void 0:e.skipToTest.toLowerCase().trim())&&(o=!1);continue}(null==s?void 0:s.options)&&(s.options.owner=null!==(x=null!==(b=null!==(E=null===(C=n[i].options)||void 0===C?void 0:C.owner)&&void 0!==E?E:null==t?void 0:t.owner)&&void 0!==b?b:m)&&void 0!==x?x:"");let a=yield M(s,null==e?void 0:e.test,g,DG.Test.isInBenchmark?null!==(N=null===(_=n[i].options)||void 0===_?void 0:_.benchmarkTimeout)&&void 0!==N?N:r:null===(T=n[i].options)||void 0===T?void 0:T.timeout,d.name,e.verbose);if(a&&(S.push(Object.assign(Object.assign({},a),{widgetsDifference:w()-O})),e.returnOnFail&&e.skipToTest!==s.name&&!a.success&&!a.skipped))return S}}return S})}function w(){var t;if("undefined"!=typeof process)return 0;let e=-1;try{e=DG.Widget.getAll().length}catch(e){console.warn(null!==(t=e.message)&&void 0!==t?t:e)}return e}})}({category:e,test:s,testContext:a});return t.DataFrame.fromObjects(d)})}function Ur(){return Dr(this,void 0,void 0,function*(){yield _(Br,Br.getModule("package-test.js"))})}})(),eda_test=a})();
1
+ var eda_test;(()=>{var t,e,n,o,r={5540(t,e,n){"use strict";t=n.hmd(t);var o,r=(o="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0,function(t={}){var e,n,r=void 0!==t?t:{};r.ready=new Promise(function(t,o){e=t,n=o});var i,s=Object.assign({},r),a="object"==typeof window,l="function"==typeof importScripts,u=("object"==typeof process&&"object"==typeof process.versions&&process.versions.node,"");(a||l)&&(l?u=self.location.href:"undefined"!=typeof document&&document.currentScript&&(u=document.currentScript.src),o&&(u=o),u=0!==u.indexOf("blob:")?u.substr(0,u.replace(/[?#].*/,"").lastIndexOf("/")+1):"",l&&(i=t=>{var e=new XMLHttpRequest;return e.open("GET",t,!1),e.responseType="arraybuffer",e.send(null),new Uint8Array(e.response)})),r.print||console.log.bind(console);var c,f,d=r.printErr||console.warn.bind(console);Object.assign(r,s),s=null,r.arguments&&r.arguments,r.thisProgram&&r.thisProgram,r.quit&&r.quit,r.wasmBinary&&(c=r.wasmBinary),r.noExitRuntime,"object"!=typeof WebAssembly&&T("no native wasm support detected");var h,m,p,g=!1;function v(){var t=f.buffer;r.HEAP8=h=new Int8Array(t),r.HEAP16=new Int16Array(t),r.HEAP32=new Int32Array(t),r.HEAPU8=m=new Uint8Array(t),r.HEAPU16=new Uint16Array(t),r.HEAPU32=p=new Uint32Array(t),r.HEAPF32=new Float32Array(t),r.HEAPF64=new Float64Array(t)}var y=[],A=[],w=[];function C(t){y.unshift(t)}function E(t){w.unshift(t)}var b,x,_=0,N=null,M=null;function T(t){r.onAbort&&r.onAbort(t),d(t="Aborted("+t+")"),g=!0,t+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(t);throw n(e),e}function S(t){return t.startsWith("data:application/octet-stream;base64,")}function O(t){try{if(t==b&&c)return new Uint8Array(c);if(i)return i(t);throw"both async and sync fetching of the wasm failed"}catch(t){T(t)}}function I(t,e,n){return function(t){return c||!a&&!l||"function"!=typeof fetch?Promise.resolve().then(function(){return O(t)}):fetch(t,{credentials:"same-origin"}).then(function(e){if(!e.ok)throw"failed to load wasm binary file at '"+t+"'";return e.arrayBuffer()}).catch(function(){return O(t)})}(t).then(function(t){return WebAssembly.instantiate(t,e)}).then(function(t){return t}).then(n,function(t){d("failed to asynchronously prepare wasm: "+t),T(t)})}function L(t){for(;t.length>0;)t.shift()(r)}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,h[this.ptr+12|0]=t},this.get_caught=function(){return 0!=h[this.ptr+12|0]},this.set_rethrown=function(t){t=t?1:0,h[this.ptr+13|0]=t},this.get_rethrown=function(){return 0!=h[this.ptr+13|0]},this.init=function(t,e){this.set_adjusted_ptr(0),this.set_type(t),this.set_destructor(e)},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(H(this.get_type()))return p[this.excPtr>>2];var t=this.get_adjusted_ptr();return 0!==t?t:this.excPtr}}function R(t){var e=f.buffer;try{return f.grow(t-e.byteLength+65535>>>16),v(),1}catch(t){}}function F(t){return r["_"+t]}S(b="wasmDbscan.wasm")||(x=b,b=r.locateFile?r.locateFile(x,u):u+x);var D="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function B(t,e,n,o,r){var i={string:t=>{var e=0;return null!=t&&0!==t&&(e=function(t){var e=function(t){for(var e=0,n=0;n<t.length;++n){var o=t.charCodeAt(n);o<=127?e++:o<=2047?e+=2:o>=55296&&o<=57343?(e+=4,++n):e+=3}return e}(t)+1,n=$(e);return function(t,e,n){!function(t,e,n,o){if(!(o>0))return 0;for(var r=n+o-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(n>=r)break;e[n++]=s}else if(s<=2047){if(n+1>=r)break;e[n++]=192|s>>6,e[n++]=128|63&s}else if(s<=65535){if(n+2>=r)break;e[n++]=224|s>>12,e[n++]=128|s>>6&63,e[n++]=128|63&s}else{if(n+3>=r)break;e[n++]=240|s>>18,e[n++]=128|s>>12&63,e[n++]=128|s>>6&63,e[n++]=128|63&s}}e[n]=0}(t,m,e,n)}(t,n,e),n}(t)),e},array:t=>{var e,n,o=$(t.length);return e=t,n=o,h.set(e,n),o}},s=F(t),a=[],l=0;if(o)for(var u=0;u<o.length;u++){var c=i[n[u]];c?(0===l&&(l=V()),a[u]=c(o[u])):a[u]=o[u]}var f=s.apply(null,a);return function(t){return 0!==l&&G(l),function(t){return"string"===e?(n=t)?function(t,e,n){for(var o=e+n,r=e;t[r]&&!(r>=o);)++r;if(r-e>16&&t.buffer&&D)return D.decode(t.subarray(e,r));for(var i="";e<r;){var s=t[e++];if(128&s){var a=63&t[e++];if(192!=(224&s)){var l=63&t[e++];if((s=224==(240&s)?(15&s)<<12|a<<6|l:(7&s)<<18|a<<12|l<<6|63&t[e++])<65536)i+=String.fromCharCode(s);else{var u=s-65536;i+=String.fromCharCode(55296|u>>10,56320|1023&u)}}else i+=String.fromCharCode((31&s)<<6|a)}else i+=String.fromCharCode(s)}return i}(m,n,o):"":"boolean"===e?Boolean(t):t;var n,o}(t)}(f)}var k,U={__cxa_throw:function(t,e,n){throw new P(t).init(e,n),t},abort:function(){T("")},emscripten_memcpy_big:function(t,e,n){m.copyWithin(t,e,e+n)},emscripten_resize_heap:function(t){var e=m.length,n=2147483648;if((t>>>=0)>n)return!1;let o=(t,e)=>t+(e-t%e)%e;for(var r=1;r<=4;r*=2){var i=e*(1+.2/r);if(i=Math.min(i,t+100663296),R(Math.min(n,o(Math.max(t,i),65536))))return!0}return!1}},V=(function(){var t,e,o,i,s={env:U,wasi_snapshot_preview1:U};function a(t,e){var n,o=t.exports;return r.asm=o,f=r.asm.memory,v(),r.asm.__indirect_function_table,n=r.asm.__wasm_call_ctors,A.unshift(n),function(){if(_--,r.monitorRunDependencies&&r.monitorRunDependencies(_),0==_&&(null!==N&&(clearInterval(N),N=null),M)){var t=M;M=null,t()}}(),o}if(_++,r.monitorRunDependencies&&r.monitorRunDependencies(_),r.instantiateWasm)try{return r.instantiateWasm(s,a)}catch(t){d("Module.instantiateWasm callback failed with error: "+t),n(t)}(t=c,e=b,o=s,i=function(t){a(t.instance)},t||"function"!=typeof WebAssembly.instantiateStreaming||S(e)||"function"!=typeof fetch?I(e,o,i):fetch(e,{credentials:"same-origin"}).then(function(t){return WebAssembly.instantiateStreaming(t,o).then(i,function(t){return d("wasm streaming compile failed: "+t),d("falling back to ArrayBuffer instantiation"),I(e,o,i)})})).catch(n)}(),r._dbscan=function(){return(r._dbscan=r.asm.dbscan).apply(null,arguments)},r._malloc=function(){return(r._malloc=r.asm.malloc).apply(null,arguments)},r._free=function(){return(r._free=r.asm.free).apply(null,arguments)},function(){return(V=r.asm.stackSave).apply(null,arguments)}),G=function(){return(G=r.asm.stackRestore).apply(null,arguments)},$=function(){return($=r.asm.stackAlloc).apply(null,arguments)},H=function(){return(H=r.asm.__cxa_is_pointer_type).apply(null,arguments)};function q(){function t(){k||(k=!0,r.calledRun=!0,g||(L(A),e(r),r.onRuntimeInitialized&&r.onRuntimeInitialized(),function(){if(r.postRun)for("function"==typeof r.postRun&&(r.postRun=[r.postRun]);r.postRun.length;)E(r.postRun.shift());L(w)}()))}_>0||(function(){if(r.preRun)for("function"==typeof r.preRun&&(r.preRun=[r.preRun]);r.preRun.length;)C(r.preRun.shift());L(y)}(),_>0||(r.setStatus?(r.setStatus("Running..."),setTimeout(function(){setTimeout(function(){r.setStatus("")},1),t()},1)):t()))}if(r.ccall=B,r.cwrap=function(t,e,n,o){var r=!n||n.every(t=>"number"===t||"boolean"===t);return"string"!==e&&r&&!o?F(t):function(){return B(t,e,n,arguments)}},M=function t(){k||q(),k||(M=t)},r.preInit)for("function"==typeof r.preInit&&(r.preInit=[r.preInit]);r.preInit.length>0;)r.preInit.pop()();return q(),t.ready});"object"==typeof exports?t.exports=r:"function"==typeof define&&n.amdO?define([],function(){return r}):"object"==typeof exports&&(exports.exportCppDbscanLib=r)},4884(t,e,n){"use strict";n.d(e,{A:()=>a});var o=n(1354),r=n.n(o),i=n(6314),s=n.n(i)()(r());s.push([t.id,".eda-pmpo-tooltip-line {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-left: 6px;\n}\n\n.eda-pmpo-box {\n width: 10px;\n height: 10px;\n}\n\n.eda-pmpo-input-form {\n padding-left: 10px;\n padding-right: 5px;\n}\n\n.eda-pmpo-title {\n font-size: 14.5px;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n pointer-events: none;\n white-space: nowrap;\n}\n\n.eda-pmpo-centered-text {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n width: 100%;\n text-align: center;\n}","",{version:3,sources:["webpack://./css/pmpo.css"],names:[],mappings:"AAAA;EACE,aAAa;EACb,mBAAmB;EACnB,QAAQ;EACR,gBAAgB;AAClB;;AAEA;EACE,WAAW;EACX,YAAY;AACd;;AAEA;EACE,kBAAkB;EAClB,kBAAkB;AACpB;;AAEA;EACE,iBAAiB;EACjB,kBAAkB;EAClB,QAAQ;EACR,SAAS;EACT,gCAAgC;EAChC,oBAAoB;EACpB,mBAAmB;AACrB;;AAEA;EACE,aAAa;EACb,uBAAuB;EACvB,mBAAmB;EACnB,YAAY;EACZ,WAAW;EACX,kBAAkB;AACpB",sourcesContent:[".eda-pmpo-tooltip-line {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-left: 6px;\n}\n\n.eda-pmpo-box {\n width: 10px;\n height: 10px;\n}\n\n.eda-pmpo-input-form {\n padding-left: 10px;\n padding-right: 5px;\n}\n\n.eda-pmpo-title {\n font-size: 14.5px;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n pointer-events: none;\n white-space: nowrap;\n}\n\n.eda-pmpo-centered-text {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n width: 100%;\n text-align: center;\n}"],sourceRoot:""}]);const a=s},6801(t,e,n){"use strict";n.d(e,{A:()=>a});var o=n(1354),r=n.n(o),i=n(6314),s=n.n(i)()(r());s.push([t.id,".statistics-mpo-header {\n margin-top: 10px;\n padding-bottom: 5px;\n border-bottom: 1px solid var(--grey-2);\n gap: 10px;\n}\n\n.statistics-mpo-header > * {\n font-weight: bold;\n}\n\n.statistics-mpo-header > *:first-child {\n width: 130px;\n}\n\n.statistics-mpo-header > *:nth-child(2) {\n width: 120px;\n min-width: 60px;\n}\n\n.statistics-mpo-header > *:nth-child(3) {\n flex-grow: 1;\n}\n\n.statistics-mpo-property-cell {\n width: 130px;\n max-width: 130px;\n align-self: flex-end;\n margin-bottom: 20px !important;\n}\n\n.ui-form .statistics-mpo-property-cell > div:first-child {\n padding-left: 4px;\n}\n\n.statistics-mpo-property-cell > div:first-child {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.statistics-mpo-weight-input {\n width: 100px;\n}\n\n.statistics-mpo-weight-cell {\n align-self: flex-end;\n margin-bottom: 20px !important;\n align-items: center;\n gap: 4px;\n}\n\n.statistics-mpo-control-buttons {\n gap: 10px;\n margin-left: 10px;\n color: var(--blue-1);\n visibility: hidden;\n white-space: nowrap;\n flex-shrink: 0;\n}\n\n.statistics-mpo-row:hover .statistics-mpo-control-buttons,\n.statistics-mpo-cat-row:hover .statistics-mpo-control-buttons {\n visibility: visible;\n}\n\n.statistics-mpo-range-input {\n width: 70px;\n}\n\n.statistics-mpo-row {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n padding: 8px 0;\n min-height: 70px;\n gap: 10px;\n\n flex-wrap: wrap;\n}\n\n.statistics-mpo-row > * {\n flex: 0 0 auto;\n}\n\n\n.statistics-mpo-row .ui-input-choice .ui-input-editor {\n width: 100px !important;\n max-width: none !important;\n}\n\n.ui-form .statistics-mpo-row .ui-input-root {\n margin-bottom: 0 !important;\n padding: 0 !important;\n}\n\n.statistics-mpo-editor-fill {\n width: 100%;\n height: 100%;\n}\n\n.statistics-mpo-cat-editor {\n width: 280px;\n margin-left: 30px;\n}\n\n.statistics-mpo-cat-row {\n display: flex;\n align-items: center;\n gap: 4px;\n margin-bottom: 2px;\n}\n\n.statistics-mpo-cat-name {\n width: 120px;\n}\n\n.statistics-mpo-cat-col-header {\n font-size: 11px;\n color: var(--grey-3);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.statistics-mpo-desirability-dialog .statistics-mpo-cat-editor {\n width: auto;\n margin-left: 0;\n}\n\n.statistics-mpo-desirability-dialog .statistics-mpo-cat-name {\n flex: 1;\n width: auto;\n}\n\n.statistics-mpo-cat-desirability {\n width: 70px;\n}\n\n.statistics-mpo-weight-toggle {\n cursor: pointer;\n color: var(--grey-3);\n font-size: 12px;\n}\n\n.statistics-mpo-weight-toggle:hover {\n color: var(--grey-5);\n}\n\n.statistics-mpo-weight-toggle-active {\n color: var(--blue-1);\n}\n\n.statistics-mpo-weight-toggle-active:hover {\n color: var(--blue-2);\n}\n\n.statistics-mpo-hidden {\n display: none !important;\n}\n\n.statistics-mpo-empty-state {\n text-align: center;\n padding: 48px 24px;\n color: var(--grey-4);\n border: 1px dashed var(--grey-2);\n border-radius: 8px;\n margin: 16px 12px;\n}\n\n.statistics-mpo-empty-state i {\n font-size: 48px;\n margin-bottom: 16px;\n display: block;\n color: var(--blue-1);\n opacity: 0.3;\n cursor: default;\n pointer-events: none;\n}\n\n.statistics-mpo-empty-state h3 {\n color: var(--grey-5);\n}\n\n.statistics-mpo-empty-state p {\n color: var(--grey-3);\n max-width: 360px;\n margin-inline: auto;\n}\n\n.statistics-mpo-dialog-header-row {\n gap: 12px;\n align-items: flex-end;\n margin-bottom: 8px;\n}\n\n.statistics-mpo-dialog-header-row .ui-input-root {\n flex: 0 1 auto;\n}\n\n.statistics-mpo-section-header {\n font-size: 11px;\n text-transform: uppercase;\n color: var(--blue-1);\n letter-spacing: 0.5px;\n border-bottom: 1px solid var(--grey-2);\n padding-bottom: 4px;\n margin: 12px 0 8px;\n}\n\n.statistics-mpo-param-grid.ui-form {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 0 8px;\n}\n\n.statistics-mpo-desirability-dialog .statistics-mpo-plot {\n margin: 0 auto;\n}\n\n@media (max-width: 500px) {\n .statistics-mpo-row {\n flex-direction: column;\n align-items: flex-start;\n }\n\n .statistics-mpo-row > * {\n width: 100% !important;\n margin-bottom: 5px;\n }\n\n .statistics-mpo-weight-cell {\n margin-top: 0 !important;\n }\n}\n","",{version:3,sources:["webpack://./node_modules/@datagrok-libraries/statistics/css/styles.css"],names:[],mappings:"AAAA;EACE,gBAAgB;EAChB,mBAAmB;EACnB,sCAAsC;EACtC,SAAS;AACX;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,YAAY;EACZ,eAAe;AACjB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,YAAY;EACZ,gBAAgB;EAChB,oBAAoB;EACpB,8BAA8B;AAChC;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,gBAAgB;EAChB,uBAAuB;EACvB,mBAAmB;AACrB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,oBAAoB;EACpB,8BAA8B;EAC9B,mBAAmB;EACnB,QAAQ;AACV;;AAEA;EACE,SAAS;EACT,iBAAiB;EACjB,oBAAoB;EACpB,kBAAkB;EAClB,mBAAmB;EACnB,cAAc;AAChB;;AAEA;;EAEE,mBAAmB;AACrB;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,2BAA2B;EAC3B,cAAc;EACd,gBAAgB;EAChB,SAAS;;EAET,eAAe;AACjB;;AAEA;EACE,cAAc;AAChB;;;AAGA;EACE,uBAAuB;EACvB,0BAA0B;AAC5B;;AAEA;EACE,2BAA2B;EAC3B,qBAAqB;AACvB;;AAEA;EACE,WAAW;EACX,YAAY;AACd;;AAEA;EACE,YAAY;EACZ,iBAAiB;AACnB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,QAAQ;EACR,kBAAkB;AACpB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,eAAe;EACf,oBAAoB;EACpB,yBAAyB;EACzB,qBAAqB;AACvB;;AAEA;EACE,WAAW;EACX,cAAc;AAChB;;AAEA;EACE,OAAO;EACP,WAAW;AACb;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,eAAe;EACf,oBAAoB;EACpB,eAAe;AACjB;;AAEA;EACE,oBAAoB;AACtB;;AAEA;EACE,oBAAoB;AACtB;;AAEA;EACE,oBAAoB;AACtB;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,kBAAkB;EAClB,kBAAkB;EAClB,oBAAoB;EACpB,gCAAgC;EAChC,kBAAkB;EAClB,iBAAiB;AACnB;;AAEA;EACE,eAAe;EACf,mBAAmB;EACnB,cAAc;EACd,oBAAoB;EACpB,YAAY;EACZ,eAAe;EACf,oBAAoB;AACtB;;AAEA;EACE,oBAAoB;AACtB;;AAEA;EACE,oBAAoB;EACpB,gBAAgB;EAChB,mBAAmB;AACrB;;AAEA;EACE,SAAS;EACT,qBAAqB;EACrB,kBAAkB;AACpB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,eAAe;EACf,yBAAyB;EACzB,oBAAoB;EACpB,qBAAqB;EACrB,sCAAsC;EACtC,mBAAmB;EACnB,kBAAkB;AACpB;;AAEA;EACE,aAAa;EACb,8BAA8B;EAC9B,UAAU;AACZ;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE;IACE,sBAAsB;IACtB,uBAAuB;EACzB;;EAEA;IACE,sBAAsB;IACtB,kBAAkB;EACpB;;EAEA;IACE,wBAAwB;EAC1B;AACF",sourcesContent:[".statistics-mpo-header {\n margin-top: 10px;\n padding-bottom: 5px;\n border-bottom: 1px solid var(--grey-2);\n gap: 10px;\n}\n\n.statistics-mpo-header > * {\n font-weight: bold;\n}\n\n.statistics-mpo-header > *:first-child {\n width: 130px;\n}\n\n.statistics-mpo-header > *:nth-child(2) {\n width: 120px;\n min-width: 60px;\n}\n\n.statistics-mpo-header > *:nth-child(3) {\n flex-grow: 1;\n}\n\n.statistics-mpo-property-cell {\n width: 130px;\n max-width: 130px;\n align-self: flex-end;\n margin-bottom: 20px !important;\n}\n\n.ui-form .statistics-mpo-property-cell > div:first-child {\n padding-left: 4px;\n}\n\n.statistics-mpo-property-cell > div:first-child {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.statistics-mpo-weight-input {\n width: 100px;\n}\n\n.statistics-mpo-weight-cell {\n align-self: flex-end;\n margin-bottom: 20px !important;\n align-items: center;\n gap: 4px;\n}\n\n.statistics-mpo-control-buttons {\n gap: 10px;\n margin-left: 10px;\n color: var(--blue-1);\n visibility: hidden;\n white-space: nowrap;\n flex-shrink: 0;\n}\n\n.statistics-mpo-row:hover .statistics-mpo-control-buttons,\n.statistics-mpo-cat-row:hover .statistics-mpo-control-buttons {\n visibility: visible;\n}\n\n.statistics-mpo-range-input {\n width: 70px;\n}\n\n.statistics-mpo-row {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n padding: 8px 0;\n min-height: 70px;\n gap: 10px;\n\n flex-wrap: wrap;\n}\n\n.statistics-mpo-row > * {\n flex: 0 0 auto;\n}\n\n\n.statistics-mpo-row .ui-input-choice .ui-input-editor {\n width: 100px !important;\n max-width: none !important;\n}\n\n.ui-form .statistics-mpo-row .ui-input-root {\n margin-bottom: 0 !important;\n padding: 0 !important;\n}\n\n.statistics-mpo-editor-fill {\n width: 100%;\n height: 100%;\n}\n\n.statistics-mpo-cat-editor {\n width: 280px;\n margin-left: 30px;\n}\n\n.statistics-mpo-cat-row {\n display: flex;\n align-items: center;\n gap: 4px;\n margin-bottom: 2px;\n}\n\n.statistics-mpo-cat-name {\n width: 120px;\n}\n\n.statistics-mpo-cat-col-header {\n font-size: 11px;\n color: var(--grey-3);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.statistics-mpo-desirability-dialog .statistics-mpo-cat-editor {\n width: auto;\n margin-left: 0;\n}\n\n.statistics-mpo-desirability-dialog .statistics-mpo-cat-name {\n flex: 1;\n width: auto;\n}\n\n.statistics-mpo-cat-desirability {\n width: 70px;\n}\n\n.statistics-mpo-weight-toggle {\n cursor: pointer;\n color: var(--grey-3);\n font-size: 12px;\n}\n\n.statistics-mpo-weight-toggle:hover {\n color: var(--grey-5);\n}\n\n.statistics-mpo-weight-toggle-active {\n color: var(--blue-1);\n}\n\n.statistics-mpo-weight-toggle-active:hover {\n color: var(--blue-2);\n}\n\n.statistics-mpo-hidden {\n display: none !important;\n}\n\n.statistics-mpo-empty-state {\n text-align: center;\n padding: 48px 24px;\n color: var(--grey-4);\n border: 1px dashed var(--grey-2);\n border-radius: 8px;\n margin: 16px 12px;\n}\n\n.statistics-mpo-empty-state i {\n font-size: 48px;\n margin-bottom: 16px;\n display: block;\n color: var(--blue-1);\n opacity: 0.3;\n cursor: default;\n pointer-events: none;\n}\n\n.statistics-mpo-empty-state h3 {\n color: var(--grey-5);\n}\n\n.statistics-mpo-empty-state p {\n color: var(--grey-3);\n max-width: 360px;\n margin-inline: auto;\n}\n\n.statistics-mpo-dialog-header-row {\n gap: 12px;\n align-items: flex-end;\n margin-bottom: 8px;\n}\n\n.statistics-mpo-dialog-header-row .ui-input-root {\n flex: 0 1 auto;\n}\n\n.statistics-mpo-section-header {\n font-size: 11px;\n text-transform: uppercase;\n color: var(--blue-1);\n letter-spacing: 0.5px;\n border-bottom: 1px solid var(--grey-2);\n padding-bottom: 4px;\n margin: 12px 0 8px;\n}\n\n.statistics-mpo-param-grid.ui-form {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 0 8px;\n}\n\n.statistics-mpo-desirability-dialog .statistics-mpo-plot {\n margin: 0 auto;\n}\n\n@media (max-width: 500px) {\n .statistics-mpo-row {\n flex-direction: column;\n align-items: flex-start;\n }\n\n .statistics-mpo-row > * {\n width: 100% !important;\n margin-bottom: 5px;\n }\n\n .statistics-mpo-weight-cell {\n margin-top: 0 !important;\n }\n}\n"],sourceRoot:""}]);const a=s},6314(t){"use strict";t.exports=function(t){var e=[];return e.toString=function(){return this.map(function(e){var n="",o=void 0!==e[5];return e[4]&&(n+="@supports (".concat(e[4],") {")),e[2]&&(n+="@media ".concat(e[2]," {")),o&&(n+="@layer".concat(e[5].length>0?" ".concat(e[5]):""," {")),n+=t(e),o&&(n+="}"),e[2]&&(n+="}"),e[4]&&(n+="}"),n}).join("")},e.i=function(t,n,o,r,i){"string"==typeof t&&(t=[[null,t,void 0]]);var s={};if(o)for(var a=0;a<this.length;a++){var l=this[a][0];null!=l&&(s[l]=!0)}for(var u=0;u<t.length;u++){var c=[].concat(t[u]);o&&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),n&&(c[2]?(c[1]="@media ".concat(c[2]," {").concat(c[1],"}"),c[2]=n):c[2]=n),r&&(c[4]?(c[1]="@supports (".concat(c[4],") {").concat(c[1],"}"),c[4]=r):c[4]="".concat(r)),e.push(c))}},e}},1354(t){"use strict";t.exports=function(t){var e=t[1],n=t[3];if(!n)return e;if("function"==typeof btoa){var o=btoa(unescape(encodeURIComponent(JSON.stringify(n)))),r="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(o),i="/*# ".concat(r," */");return[e].concat([i]).join("\n")}return[e].join("\n")}},9982(t,e,n){var o;!function(){var e={};!function(t){"use strict";t.__esModule=!0,t.digestLength=32,t.blockSize=64;var e=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]);function n(t,n,o,r,i){for(var s,a,l,u,c,f,d,h,m,p,g,v,y;i>=64;){for(s=n[0],a=n[1],l=n[2],u=n[3],c=n[4],f=n[5],d=n[6],h=n[7],p=0;p<16;p++)g=r+4*p,t[p]=(255&o[g])<<24|(255&o[g+1])<<16|(255&o[g+2])<<8|255&o[g+3];for(p=16;p<64;p++)v=((m=t[p-2])>>>17|m<<15)^(m>>>19|m<<13)^m>>>10,y=((m=t[p-15])>>>7|m<<25)^(m>>>18|m<<14)^m>>>3,t[p]=(v+t[p-7]|0)+(y+t[p-16]|0);for(p=0;p<64;p++)v=(((c>>>6|c<<26)^(c>>>11|c<<21)^(c>>>25|c<<7))+(c&f^~c&d)|0)+(h+(e[p]+t[p]|0)|0)|0,y=((s>>>2|s<<30)^(s>>>13|s<<19)^(s>>>22|s<<10))+(s&a^s&l^a&l)|0,h=d,d=f,f=c,c=u+v|0,u=l,l=a,a=s,s=v+y|0;n[0]+=s,n[1]+=a,n[2]+=l,n[3]+=u,n[4]+=c,n[5]+=f,n[6]+=d,n[7]+=h,r+=64,i-=64}return r}var o=function(){function e(){this.digestLength=t.digestLength,this.blockSize=t.blockSize,this.state=new Int32Array(8),this.temp=new Int32Array(64),this.buffer=new Uint8Array(128),this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this.reset()}return e.prototype.reset=function(){return this.state[0]=1779033703,this.state[1]=3144134277,this.state[2]=1013904242,this.state[3]=2773480762,this.state[4]=1359893119,this.state[5]=2600822924,this.state[6]=528734635,this.state[7]=1541459225,this.bufferLength=0,this.bytesHashed=0,this.finished=!1,this},e.prototype.clean=function(){for(var t=0;t<this.buffer.length;t++)this.buffer[t]=0;for(t=0;t<this.temp.length;t++)this.temp[t]=0;this.reset()},e.prototype.update=function(t,e){if(void 0===e&&(e=t.length),this.finished)throw new Error("SHA256: can't update because hash was finished.");var o=0;if(this.bytesHashed+=e,this.bufferLength>0){for(;this.bufferLength<64&&e>0;)this.buffer[this.bufferLength++]=t[o++],e--;64===this.bufferLength&&(n(this.temp,this.state,this.buffer,0,64),this.bufferLength=0)}for(e>=64&&(o=n(this.temp,this.state,t,o,e),e%=64);e>0;)this.buffer[this.bufferLength++]=t[o++],e--;return this},e.prototype.finish=function(t){if(!this.finished){var e=this.bytesHashed,o=this.bufferLength,r=e/536870912|0,i=e<<3,s=e%64<56?64:128;this.buffer[o]=128;for(var a=o+1;a<s-8;a++)this.buffer[a]=0;this.buffer[s-8]=r>>>24&255,this.buffer[s-7]=r>>>16&255,this.buffer[s-6]=r>>>8&255,this.buffer[s-5]=r>>>0&255,this.buffer[s-4]=i>>>24&255,this.buffer[s-3]=i>>>16&255,this.buffer[s-2]=i>>>8&255,this.buffer[s-1]=i>>>0&255,n(this.temp,this.state,this.buffer,0,s),this.finished=!0}for(a=0;a<8;a++)t[4*a+0]=this.state[a]>>>24&255,t[4*a+1]=this.state[a]>>>16&255,t[4*a+2]=this.state[a]>>>8&255,t[4*a+3]=this.state[a]>>>0&255;return this},e.prototype.digest=function(){var t=new Uint8Array(this.digestLength);return this.finish(t),t},e.prototype._saveState=function(t){for(var e=0;e<this.state.length;e++)t[e]=this.state[e]},e.prototype._restoreState=function(t,e){for(var n=0;n<this.state.length;n++)this.state[n]=t[n];this.bytesHashed=e,this.finished=!1,this.bufferLength=0},e}();t.Hash=o;var r=function(){function t(t){this.inner=new o,this.outer=new o,this.blockSize=this.inner.blockSize,this.digestLength=this.inner.digestLength;var e=new Uint8Array(this.blockSize);if(t.length>this.blockSize)(new o).update(t).finish(e).clean();else for(var n=0;n<t.length;n++)e[n]=t[n];for(n=0;n<e.length;n++)e[n]^=54;for(this.inner.update(e),n=0;n<e.length;n++)e[n]^=106;for(this.outer.update(e),this.istate=new Uint32Array(8),this.ostate=new Uint32Array(8),this.inner._saveState(this.istate),this.outer._saveState(this.ostate),n=0;n<e.length;n++)e[n]=0}return t.prototype.reset=function(){return this.inner._restoreState(this.istate,this.inner.blockSize),this.outer._restoreState(this.ostate,this.outer.blockSize),this},t.prototype.clean=function(){for(var t=0;t<this.istate.length;t++)this.ostate[t]=this.istate[t]=0;this.inner.clean(),this.outer.clean()},t.prototype.update=function(t){return this.inner.update(t),this},t.prototype.finish=function(t){return this.outer.finished?this.outer.finish(t):(this.inner.finish(t),this.outer.update(t,this.digestLength).finish(t)),this},t.prototype.digest=function(){var t=new Uint8Array(this.digestLength);return this.finish(t),t},t}();function i(t){var e=(new o).update(t),n=e.digest();return e.clean(),n}function s(t,e){var n=new r(t).update(e),o=n.digest();return n.clean(),o}function a(t,e,n,o){var r=o[0];if(0===r)throw new Error("hkdf: cannot expand more");e.reset(),r>1&&e.update(t),n&&e.update(n),e.update(o),e.finish(t),o[0]++}t.HMAC=r,t.hash=i,t.default=i,t.hmac=s;var l=new Uint8Array(t.digestLength);t.hkdf=function(t,e,n,o){void 0===e&&(e=l),void 0===o&&(o=32);for(var i=new Uint8Array([1]),u=s(e,t),c=new r(u),f=new Uint8Array(c.digestLength),d=f.length,h=new Uint8Array(o),m=0;m<o;m++)d===f.length&&(a(f,c,n,i),d=0),h[m]=f[d++];return c.clean(),f.fill(0),i.fill(0),h},t.pbkdf2=function(t,e,n,o){for(var i=new r(t),s=i.digestLength,a=new Uint8Array(4),l=new Uint8Array(s),u=new Uint8Array(s),c=new Uint8Array(o),f=0;f*s<o;f++){var d=f+1;a[0]=d>>>24&255,a[1]=d>>>16&255,a[2]=d>>>8&255,a[3]=d>>>0&255,i.reset(),i.update(e),i.update(a),i.finish(u);for(var h=0;h<s;h++)l[h]=u[h];for(h=2;h<=n;h++){i.reset(),i.update(u).finish(u);for(var m=0;m<s;m++)l[m]^=u[m]}for(h=0;h<s&&f*s+h<o;h++)c[f*s+h]=l[h]}for(f=0;f<s;f++)l[f]=u[f]=0;for(f=0;f<4;f++)a[f]=0;return i.clean(),c}}(e);var r=e.default;for(var i in e)r[i]=e[i];"object"==typeof t.exports?t.exports=r:void 0===(o=function(){return r}.call(e,n,e,t))||(t.exports=o)}()},944(t,e){"use strict";e.Vb=void 0,e.Vb=function(t,e,n){var o=function(t,e,n){if(0===t.length||0===e.length)return 0;if(n&&!n.caseSensitive&&(t=t.toUpperCase(),e=e.toUpperCase()),t===e)return 1;for(var o=0,r=t.length,i=e.length,s=Math.floor(Math.max(r,i)/2)-1,a=new Array(r),l=new Array(i),u=0;u<r;u++)for(var c=Math.max(0,u-s);c<=Math.min(i,u+s+1);c++)if(!a[u]&&!l[c]&&t[u]===e[c]){++o,a[u]=l[c]=!0;break}if(0===o)return 0;var f=0,d=0;for(u=0;u<r;u++)if(a[u]){for(;!l[d];)d++;t.charAt(u)!==e.charAt(d++)&&f++}return(o/r+o/i+(o-(f/=2))/o)/3}(t,e,n),r=0;if(o>.7){for(var i=Math.min(t.length,e.length),s=0;t[s]===e[s]&&s<4&&s<i;)++r,s++;o+=.1*r*(1-o)}return o}},6572(t){var e;t.exports=(e=function(t,e){var n=Array.prototype.concat,o=Array.prototype.slice,r=Object.prototype.toString;function i(e,n){var o=e>n?e:n;return t.pow(10,17-~~(t.log(o>0?o:-o)*t.LOG10E))}var s=Array.isArray||function(t){return"[object Array]"===r.call(t)};function a(t){return"[object Function]"===r.call(t)}function l(t){return"number"==typeof t&&t-t===0}function u(){return new u._init(arguments)}function c(){return 0}function f(){return 1}function d(t,e){return t===e?1:0}u.fn=u.prototype,u._init=function(t){if(s(t[0]))if(s(t[0][0])){a(t[1])&&(t[0]=u.map(t[0],t[1]));for(var e=0;e<t[0].length;e++)this[e]=t[0][e];this.length=t[0].length}else this[0]=a(t[1])?u.map(t[0],t[1]):t[0],this.length=1;else if(l(t[0]))this[0]=u.seq.apply(null,t),this.length=1;else{if(t[0]instanceof u)return u(t[0].toArray());this[0]=[],this.length=1}return this},u._init.prototype=u.prototype,u._init.constructor=u,u.utils={calcRdx:i,isArray:s,isFunction:a,isNumber:l,toVector:function(t){return n.apply([],t)}},u._random_fn=t.random,u.setRandom=function(t){if("function"!=typeof t)throw new TypeError("fn is not a function");u._random_fn=t},u.extend=function(t){var e,n;if(1===arguments.length){for(n in t)u[n]=t[n];return this}for(e=1;e<arguments.length;e++)for(n in arguments[e])t[n]=arguments[e][n];return t},u.rows=function(t){return t.length||1},u.cols=function(t){return t[0].length||1},u.dimensions=function(t){return{rows:u.rows(t),cols:u.cols(t)}},u.row=function(t,e){return s(e)?e.map(function(e){return u.row(t,e)}):t[e]},u.rowa=function(t,e){return u.row(t,e)},u.col=function(t,e){if(s(e)){var n=u.arange(t.length).map(function(){return new Array(e.length)});return e.forEach(function(e,o){u.arange(t.length).forEach(function(r){n[r][o]=t[r][e]})}),n}for(var o=new Array(t.length),r=0;r<t.length;r++)o[r]=[t[r][e]];return o},u.cola=function(t,e){return u.col(t,e).map(function(t){return t[0]})},u.diag=function(t){for(var e=u.rows(t),n=new Array(e),o=0;o<e;o++)n[o]=[t[o][o]];return n},u.antidiag=function(t){for(var e=u.rows(t)-1,n=new Array(e),o=0;e>=0;e--,o++)n[o]=[t[o][e]];return n},u.transpose=function(t){var e,n,o,r,i,a=[];for(s(t[0])||(t=[t]),n=t.length,o=t[0].length,i=0;i<o;i++){for(e=new Array(n),r=0;r<n;r++)e[r]=t[r][i];a.push(e)}return 1===a.length?a[0]:a},u.map=function(t,e,n){var o,r,i,a,l;for(s(t[0])||(t=[t]),r=t.length,i=t[0].length,a=n?t:new Array(r),o=0;o<r;o++)for(a[o]||(a[o]=new Array(i)),l=0;l<i;l++)a[o][l]=e(t[o][l],o,l);return 1===a.length?a[0]:a},u.cumreduce=function(t,e,n){var o,r,i,a,l;for(s(t[0])||(t=[t]),r=t.length,i=t[0].length,a=n?t:new Array(r),o=0;o<r;o++)for(a[o]||(a[o]=new Array(i)),i>0&&(a[o][0]=t[o][0]),l=1;l<i;l++)a[o][l]=e(a[o][l-1],t[o][l]);return 1===a.length?a[0]:a},u.alter=function(t,e){return u.map(t,e,!0)},u.create=function(t,e,n){var o,r,i=new Array(t);for(a(e)&&(n=e,e=t),o=0;o<t;o++)for(i[o]=new Array(e),r=0;r<e;r++)i[o][r]=n(o,r);return i},u.zeros=function(t,e){return l(e)||(e=t),u.create(t,e,c)},u.ones=function(t,e){return l(e)||(e=t),u.create(t,e,f)},u.rand=function(t,e){return l(e)||(e=t),u.create(t,e,u._random_fn)},u.identity=function(t,e){return l(e)||(e=t),u.create(t,e,d)},u.symmetric=function(t){var e,n,o=t.length;if(t.length!==t[0].length)return!1;for(e=0;e<o;e++)for(n=0;n<o;n++)if(t[n][e]!==t[e][n])return!1;return!0},u.clear=function(t){return u.alter(t,c)},u.seq=function(t,e,n,o){a(o)||(o=!1);var r,s=[],l=i(t,e),u=(e*l-t*l)/((n-1)*l),c=t;for(r=0;c<=e&&r<n;c=(t*l+u*l*++r)/l)s.push(o?o(c,r):c);return s},u.arange=function(t,n,o){var r,i=[];if(o=o||1,n===e&&(n=t,t=0),t===n||0===o)return[];if(t<n&&o<0)return[];if(t>n&&o>0)return[];if(o>0)for(r=t;r<n;r+=o)i.push(r);else for(r=t;r>n;r+=o)i.push(r);return i},u.slice=function(){function t(t,n,o,r){var i,s=[],a=t.length;if(n===e&&o===e&&r===e)return u.copy(t);if(r=r||1,(n=(n=n||0)>=0?n:a+n)===(o=(o=o||t.length)>=0?o:a+o)||0===r)return[];if(n<o&&r<0)return[];if(n>o&&r>0)return[];if(r>0)for(i=n;i<o;i+=r)s.push(t[i]);else for(i=n;i>o;i+=r)s.push(t[i]);return s}return function(e,n){var o,r;return l((n=n||{}).row)?l(n.col)?e[n.row][n.col]:t(u.rowa(e,n.row),(o=n.col||{}).start,o.end,o.step):l(n.col)?t(u.cola(e,n.col),(r=n.row||{}).start,r.end,r.step):(r=n.row||{},o=n.col||{},t(e,r.start,r.end,r.step).map(function(e){return t(e,o.start,o.end,o.step)}))}}(),u.sliceAssign=function(n,o,r){var i,s;if(l(o.row)){if(l(o.col))return n[o.row][o.col]=r;o.col=o.col||{},o.col.start=o.col.start||0,o.col.end=o.col.end||n[0].length,o.col.step=o.col.step||1,i=u.arange(o.col.start,t.min(n.length,o.col.end),o.col.step);var a=o.row;return i.forEach(function(t,e){n[a][t]=r[e]}),n}if(l(o.col)){o.row=o.row||{},o.row.start=o.row.start||0,o.row.end=o.row.end||n.length,o.row.step=o.row.step||1,s=u.arange(o.row.start,t.min(n[0].length,o.row.end),o.row.step);var c=o.col;return s.forEach(function(t,e){n[t][c]=r[e]}),n}return r[0].length===e&&(r=[r]),o.row.start=o.row.start||0,o.row.end=o.row.end||n.length,o.row.step=o.row.step||1,o.col.start=o.col.start||0,o.col.end=o.col.end||n[0].length,o.col.step=o.col.step||1,s=u.arange(o.row.start,t.min(n.length,o.row.end),o.row.step),i=u.arange(o.col.start,t.min(n[0].length,o.col.end),o.col.step),s.forEach(function(t,e){i.forEach(function(o,i){n[t][o]=r[e][i]})}),n},u.diagonal=function(t){var e=u.zeros(t.length,t.length);return t.forEach(function(t,n){e[n][n]=t}),e},u.copy=function(t){return t.map(function(t){return l(t)?t:t.map(function(t){return t})})};var h=u.prototype;return h.length=0,h.push=Array.prototype.push,h.sort=Array.prototype.sort,h.splice=Array.prototype.splice,h.slice=Array.prototype.slice,h.toArray=function(){return this.length>1?o.call(this):o.call(this)[0]},h.map=function(t,e){return u(u.map(this,t,e))},h.cumreduce=function(t,e){return u(u.cumreduce(this,t,e))},h.alter=function(t){return u.alter(this,t),this},function(t){for(var e=0;e<t.length;e++)(function(t){h[t]=function(e){var n,o=this;return e?(setTimeout(function(){e.call(o,h[t].call(o))}),this):(n=u[t](this),s(n)?u(n):n)}})(t[e])}("transpose clear symmetric rows cols dimensions diag antidiag".split(" ")),function(t){for(var e=0;e<t.length;e++)(function(t){h[t]=function(e,n){var o=this;return n?(setTimeout(function(){n.call(o,h[t].call(o,e))}),this):u(u[t](this,e))}})(t[e])}("row col".split(" ")),function(t){for(var e=0;e<t.length;e++)(function(t){h[t]=function(){return u(u[t].apply(null,arguments))}})(t[e])}("create zeros ones rand identity".split(" ")),u}(Math),function(t,e){var n=t.utils.isFunction;function o(t,e){return t-e}function r(t,n,o){return e.max(n,e.min(t,o))}t.sum=function(t){for(var e=0,n=t.length;--n>=0;)e+=t[n];return e},t.sumsqrd=function(t){for(var e=0,n=t.length;--n>=0;)e+=t[n]*t[n];return e},t.sumsqerr=function(e){for(var n,o=t.mean(e),r=0,i=e.length;--i>=0;)r+=(n=e[i]-o)*n;return r},t.sumrow=function(t){for(var e=0,n=t.length;--n>=0;)e+=t[n];return e},t.product=function(t){for(var e=1,n=t.length;--n>=0;)e*=t[n];return e},t.min=function(t){for(var e=t[0],n=0;++n<t.length;)t[n]<e&&(e=t[n]);return e},t.max=function(t){for(var e=t[0],n=0;++n<t.length;)t[n]>e&&(e=t[n]);return e},t.unique=function(t){for(var e={},n=[],o=0;o<t.length;o++)e[t[o]]||(e[t[o]]=!0,n.push(t[o]));return n},t.mean=function(e){return t.sum(e)/e.length},t.meansqerr=function(e){return t.sumsqerr(e)/e.length},t.geomean=function(n){var o=n.map(e.log),r=t.mean(o);return e.exp(r)},t.median=function(t){var e=t.length,n=t.slice().sort(o);return 1&e?n[e/2|0]:(n[e/2-1]+n[e/2])/2},t.cumsum=function(e){return t.cumreduce(e,function(t,e){return t+e})},t.cumprod=function(e){return t.cumreduce(e,function(t,e){return t*e})},t.diff=function(t){var e,n=[],o=t.length;for(e=1;e<o;e++)n.push(t[e]-t[e-1]);return n},t.rank=function(t){var e,n=[],r={};for(e=0;e<t.length;e++)r[l=t[e]]?r[l]++:(r[l]=1,n.push(l));var i=n.sort(o),s={},a=1;for(e=0;e<i.length;e++){var l,u=r[l=i[e]],c=(a+(a+u-1))/2;s[l]=c,a+=u}return t.map(function(t){return s[t]})},t.mode=function(t){var e,n=t.length,r=t.slice().sort(o),i=1,s=0,a=0,l=[];for(e=0;e<n;e++)r[e]===r[e+1]?i++:(i>s?(l=[r[e]],s=i,a=0):i===s&&(l.push(r[e]),a++),i=1);return 0===a?l[0]:l},t.range=function(e){return t.max(e)-t.min(e)},t.variance=function(e,n){return t.sumsqerr(e)/(e.length-(n?1:0))},t.pooledvariance=function(e){return e.reduce(function(e,n){return e+t.sumsqerr(n)},0)/(e.reduce(function(t,e){return t+e.length},0)-e.length)},t.deviation=function(e){for(var n=t.mean(e),o=e.length,r=new Array(o),i=0;i<o;i++)r[i]=e[i]-n;return r},t.stdev=function(n,o){return e.sqrt(t.variance(n,o))},t.pooledstdev=function(n){return e.sqrt(t.pooledvariance(n))},t.meandev=function(n){for(var o=t.mean(n),r=[],i=n.length-1;i>=0;i--)r.push(e.abs(n[i]-o));return t.mean(r)},t.meddev=function(n){for(var o=t.median(n),r=[],i=n.length-1;i>=0;i--)r.push(e.abs(n[i]-o));return t.median(r)},t.coeffvar=function(e){return t.stdev(e)/t.mean(e)},t.quartiles=function(t){var n=t.length,r=t.slice().sort(o);return[r[e.round(n/4)-1],r[e.round(n/2)-1],r[e.round(3*n/4)-1]]},t.quantiles=function(t,n,i,s){var a,l,u,c,f,d=t.slice().sort(o),h=[n.length],m=t.length;for(void 0===i&&(i=3/8),void 0===s&&(s=3/8),a=0;a<n.length;a++)u=m*(l=n[a])+(i+l*(1-i-s)),c=e.floor(r(u,1,m-1)),f=r(u-c,0,1),h[a]=(1-f)*d[c-1]+f*d[c];return h},t.percentile=function(t,e,n){var r=t.slice().sort(o),i=e*(r.length+(n?1:-1))+(n?0:1),s=parseInt(i),a=i-s;return s+1<r.length?r[s-1]+a*(r[s]-r[s-1]):r[s-1]},t.percentileOfScore=function(t,e,n){var o,r,i=0,s=t.length,a=!1;for("strict"===n&&(a=!0),r=0;r<s;r++)o=t[r],(a&&o<e||!a&&o<=e)&&i++;return i/s},t.histogram=function(n,o){o=o||4;var r,i=t.min(n),s=(t.max(n)-i)/o,a=n.length,l=[];for(r=0;r<o;r++)l[r]=0;for(r=0;r<a;r++)l[e.min(e.floor((n[r]-i)/s),o-1)]+=1;return l},t.covariance=function(e,n){var o,r=t.mean(e),i=t.mean(n),s=e.length,a=new Array(s);for(o=0;o<s;o++)a[o]=(e[o]-r)*(n[o]-i);return t.sum(a)/(s-1)},t.corrcoeff=function(e,n){return t.covariance(e,n)/t.stdev(e,1)/t.stdev(n,1)},t.spearmancoeff=function(e,n){return e=t.rank(e),n=t.rank(n),t.corrcoeff(e,n)},t.stanMoment=function(n,o){for(var r=t.mean(n),i=t.stdev(n),s=n.length,a=0,l=0;l<s;l++)a+=e.pow((n[l]-r)/i,o);return a/n.length},t.skewness=function(e){return t.stanMoment(e,3)},t.kurtosis=function(e){return t.stanMoment(e,4)-3};var i=t.prototype;!function(e){for(var o=0;o<e.length;o++)(function(e){i[e]=function(o,r){var s=[],a=0,l=this;if(n(o)&&(r=o,o=!1),r)return setTimeout(function(){r.call(l,i[e].call(l,o))}),this;if(this.length>1){for(l=!0===o?this:this.transpose();a<l.length;a++)s[a]=t[e](l[a]);return s}return t[e](this[0],o)}})(e[o])}("cumsum cumprod".split(" ")),function(e){for(var o=0;o<e.length;o++)(function(e){i[e]=function(o,r){var s=[],a=0,l=this;if(n(o)&&(r=o,o=!1),r)return setTimeout(function(){r.call(l,i[e].call(l,o))}),this;if(this.length>1){for("sumrow"!==e&&(l=!0===o?this:this.transpose());a<l.length;a++)s[a]=t[e](l[a]);return!0===o?t[e](t.utils.toVector(s)):s}return t[e](this[0],o)}})(e[o])}("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(e){for(var o=0;o<e.length;o++)(function(e){i[e]=function(){var o,r=[],s=0,a=this,l=Array.prototype.slice.call(arguments);if(n(l[l.length-1])){o=l[l.length-1];var u=l.slice(0,l.length-1);return setTimeout(function(){o.call(a,i[e].apply(a,u))}),this}o=void 0;var c=function(n){return t[e].apply(a,[n].concat(l))};if(this.length>1){for(a=a.transpose();s<a.length;s++)r[s]=c(a[s]);return r}return c(this[0])}})(e[o])}("quantiles percentileOfScore".split(" "))}(e,Math),function(t,e){t.gammaln=function(t){var n,o,r,i=0,s=[76.18009172947146,-86.50532032941678,24.01409824083091,-1.231739572450155,.001208650973866179,-5395239384953e-18],a=1.000000000190015;for(r=(o=n=t)+5.5,r-=(n+.5)*e.log(r);i<6;i++)a+=s[i]/++o;return e.log(2.5066282746310007*a/n)-r},t.loggam=function(t){var n,o,r,i,s,a,l,u=[.08333333333333333,-.002777777777777778,.0007936507936507937,-.0005952380952380952,.0008417508417508418,-.001917526917526918,.00641025641025641,-.02955065359477124,.1796443723688307,-1.3924322169059];if(n=t,l=0,1==t||2==t)return 0;for(t<=7&&(n=t+(l=e.floor(7-t))),o=1/(n*n),r=2*e.PI,s=u[9],a=8;a>=0;a--)s*=o,s+=u[a];if(i=s/n+.5*e.log(r)+(n-.5)*e.log(n)-n,t<=7)for(a=1;a<=l;a++)i-=e.log(n-1),n-=1;return i},t.gammafn=function(t){var n,o,r,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],l=!1,u=0,c=0,f=0,d=t;if(t>171.6243769536076)return 1/0;if(d<=0){if(!(i=d%1+36e-17))return 1/0;l=(1&d?-1:1)*e.PI/e.sin(e.PI*i),d=1-d}for(r=d,o=d<1?d++:(d-=u=(0|d)-1)-1,n=0;n<8;++n)f=(f+s[n])*o,c=c*o+a[n];if(i=f/c+1,r<d)i/=r;else if(r>d)for(n=0;n<u;++n)i*=d,d++;return l&&(i=l/i),i},t.gammap=function(e,n){return t.lowRegGamma(e,n)*t.gammafn(e)},t.lowRegGamma=function(n,o){var r,i=t.gammaln(n),s=n,a=1/n,l=a,u=o+1-n,c=1/1e-30,f=1/u,d=f,h=1,m=-~(8.5*e.log(n>=1?n:1/n)+.4*n+17);if(o<0||n<=0)return NaN;if(o<n+1){for(;h<=m;h++)a+=l*=o/++s;return a*e.exp(-o+n*e.log(o)-i)}for(;h<=m;h++)d*=(f=1/(f=(r=-h*(h-n))*f+(u+=2)))*(c=u+r/c);return 1-d*e.exp(-o+n*e.log(o)-i)},t.factorialln=function(e){return e<0?NaN:t.gammaln(e+1)},t.factorial=function(e){return e<0?NaN:t.gammafn(e+1)},t.combination=function(n,o){return n>170||o>170?e.exp(t.combinationln(n,o)):t.factorial(n)/t.factorial(o)/t.factorial(n-o)},t.combinationln=function(e,n){return t.factorialln(e)-t.factorialln(n)-t.factorialln(e-n)},t.permutation=function(e,n){return t.factorial(e)/t.factorial(e-n)},t.betafn=function(n,o){if(!(n<=0||o<=0))return n+o>170?e.exp(t.betaln(n,o)):t.gammafn(n)*t.gammafn(o)/t.gammafn(n+o)},t.betaln=function(e,n){return t.gammaln(e)+t.gammaln(n)-t.gammaln(e+n)},t.betacf=function(t,n,o){var r,i,s,a,l=1e-30,u=1,c=n+o,f=n+1,d=n-1,h=1,m=1-c*t/f;for(e.abs(m)<l&&(m=l),a=m=1/m;u<=100&&(m=1+(i=u*(o-u)*t/((d+(r=2*u))*(n+r)))*m,e.abs(m)<l&&(m=l),h=1+i/h,e.abs(h)<l&&(h=l),a*=(m=1/m)*h,m=1+(i=-(n+u)*(c+u)*t/((n+r)*(f+r)))*m,e.abs(m)<l&&(m=l),h=1+i/h,e.abs(h)<l&&(h=l),a*=s=(m=1/m)*h,!(e.abs(s-1)<3e-7));u++);return a},t.gammapinv=function(n,o){var r,i,s,a,l,u,c=0,f=o-1,d=t.gammaln(o);if(n>=1)return e.max(100,o+100*e.sqrt(o));if(n<=0)return 0;for(o>1?(l=e.log(f),u=e.exp(f*(l-1)-d),a=n<.5?n:1-n,r=(2.30753+.27061*(i=e.sqrt(-2*e.log(a))))/(1+i*(.99229+.04481*i))-i,n<.5&&(r=-r),r=e.max(.001,o*e.pow(1-1/(9*o)-r/(3*e.sqrt(o)),3))):r=n<(i=1-o*(.253+.12*o))?e.pow(n/i,1/o):1-e.log(1-(n-i)/(1-i));c<12;c++){if(r<=0)return 0;if((r-=i=(s=(t.lowRegGamma(o,r)-n)/(i=o>1?u*e.exp(-(r-f)+f*(e.log(r)-l)):e.exp(-r+f*e.log(r)-d)))/(1-.5*e.min(1,s*((o-1)/r-1))))<=0&&(r=.5*(r+i)),e.abs(i)<1e-8*r)break}return r},t.erf=function(t){var n,o,r,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,l=!1,u=0,c=0;for(t<0&&(t=-t,l=!0),o=4*(n=2/(2+t))-2;a>0;a--)r=u,u=o*u-c+s[a],c=r;return i=n*e.exp(-t*t+.5*(s[0]+o*u)-c),l?i-1:1-i},t.erfc=function(e){return 1-t.erf(e)},t.erfcinv=function(n){var o,r,i,s,a=0;if(n>=2)return-100;if(n<=0)return 100;for(s=n<1?n:2-n,o=-.70711*((2.30753+.27061*(i=e.sqrt(-2*e.log(s/2))))/(1+i*(.99229+.04481*i))-i);a<2;a++)o+=(r=t.erfc(o)-s)/(1.1283791670955126*e.exp(-o*o)-o*r);return n<1?o:-o},t.ibetainv=function(n,o,r){var i,s,a,l,u,c,f,d,h,m,p=o-1,g=r-1,v=0;if(n<=0)return 0;if(n>=1)return 1;for(o>=1&&r>=1?(a=n<.5?n:1-n,c=(2.30753+.27061*(l=e.sqrt(-2*e.log(a))))/(1+l*(.99229+.04481*l))-l,n<.5&&(c=-c),f=(c*c-3)/6,d=2/(1/(2*o-1)+1/(2*r-1)),h=c*e.sqrt(f+d)/d-(1/(2*r-1)-1/(2*o-1))*(f+5/6-2/(3*d)),c=o/(o+r*e.exp(2*h))):(i=e.log(o/(o+r)),s=e.log(r/(o+r)),c=n<(l=e.exp(o*i)/o)/(h=l+(u=e.exp(r*s)/r))?e.pow(o*h*n,1/o):1-e.pow(r*h*(1-n),1/r)),m=-t.gammaln(o)-t.gammaln(r)+t.gammaln(o+r);v<10;v++){if(0===c||1===c)return c;if((c-=l=(u=(t.ibeta(c,o,r)-n)/(l=e.exp(p*e.log(c)+g*e.log(1-c)+m)))/(1-.5*e.min(1,u*(p/c-g/(1-c)))))<=0&&(c=.5*(c+l)),c>=1&&(c=.5*(c+l+1)),e.abs(l)<1e-8*c&&v>0)break}return c},t.ibeta=function(n,o,r){var i=0===n||1===n?0:e.exp(t.gammaln(o+r)-t.gammaln(o)-t.gammaln(r)+o*e.log(n)+r*e.log(1-n));return!(n<0||n>1)&&(n<(o+1)/(o+r+2)?i*t.betacf(n,o,r)/o:1-i*t.betacf(1-n,r,o)/r)},t.randn=function(n,o){var r,i,s,a,l;if(o||(o=n),n)return t.create(n,o,function(){return t.randn()});do{r=t._random_fn(),i=1.7156*(t._random_fn()-.5),l=(s=r-.449871)*s+(a=e.abs(i)+.386595)*(.196*a-.25472*s)}while(l>.27597&&(l>.27846||i*i>-4*e.log(r)*r*r));return i/r},t.randg=function(n,o,r){var i,s,a,l,u,c,f=n;if(r||(r=o),n||(n=1),o)return(c=t.zeros(o,r)).alter(function(){return t.randg(n)}),c;n<1&&(n+=1),i=n-1/3,s=1/e.sqrt(9*i);do{do{l=1+s*(u=t.randn())}while(l<=0);l*=l*l,a=t._random_fn()}while(a>1-.331*e.pow(u,4)&&e.log(a)>.5*u*u+i*(1-l+e.log(l)));if(n==f)return i*l;do{a=t._random_fn()}while(0===a);return e.pow(a,1/f)*i*l},function(e){for(var n=0;n<e.length;n++)(function(e){t.fn[e]=function(){return t(t.map(this,function(n){return t[e](n)}))}})(e[n])}("gammaln gammafn factorial factorialln".split(" ")),function(e){for(var n=0;n<e.length;n++)(function(e){t.fn[e]=function(){return t(t[e].apply(null,arguments))}})(e[n])}("randn".split(" "))}(e,Math),function(t,e){function n(t,n,o,r){for(var i,s=0,a=1,l=1,u=1,c=0,f=0;e.abs((l-f)/l)>r;)f=l,a=u+(i=-(n+c)*(n+o+c)*t/(n+2*c)/(n+2*c+1))*a,l=(s=l+i*s)+(i=(c+=1)*(o-c)*t/(n+2*c-1)/(n+2*c))*l,s/=u=a+i*u,a/=u,l/=u,u=1;return l/n}function o(n,o,r){var i=[.9815606342467192,.9041172563704749,.7699026741943047,.5873179542866175,.3678314989981802,.1252334085114689],s=[.04717533638651183,.10693932599531843,.16007832854334622,.20316742672306592,.2334925365383548,.24914704581340277],a=.5*n;if(a>=8)return 1;var l,u=2*t.normal.cdf(a,0,1,1,0)-1;u=u>=e.exp(-50/r)?e.pow(u,r):0;for(var c=a,f=(8-a)/(l=n>3?2:3),d=c+f,h=0,m=r-1,p=1;p<=l;p++){for(var g=0,v=.5*(d+c),y=.5*(d-c),A=1;A<=12;A++){var w,C=v+y*(6<A?i[(w=12-A+1)-1]:-i[(w=A)-1]),E=C*C;if(E>60)break;var b=2*t.normal.cdf(C,0,1,1,0)*.5-2*t.normal.cdf(C,n,1,1,0)*.5;b>=e.exp(-30/m)&&(g+=b=s[w-1]*e.exp(-.5*E)*e.pow(b,m))}h+=g*=2*y*r/e.sqrt(2*e.PI),c=d,d+=f}return(u+=h)<=e.exp(-30/o)?0:(u=e.pow(u,o))>=1?1:u}!function(e){for(var n=0;n<e.length;n++)(function(e){t[e]=function t(e,n,o){return this instanceof t?(this._a=e,this._b=n,this._c=o,this):new t(e,n,o)},t.fn[e]=function(n,o,r){var i=t[e](n,o,r);return i.data=this,i},t[e].prototype.sample=function(n){var o=this._a,r=this._b,i=this._c;return n?t.alter(n,function(){return t[e].sample(o,r,i)}):t[e].sample(o,r,i)},function(n){for(var o=0;o<n.length;o++)(function(n){t[e].prototype[n]=function(o){var r=this._a,i=this._b,s=this._c;return o||0===o||(o=this.data),"number"!=typeof o?t.fn.map.call(o,function(o){return t[e][n](o,r,i,s)}):t[e][n](o,r,i,s)}})(n[o])}("pdf cdf inv".split(" ")),function(n){for(var o=0;o<n.length;o++)(function(n){t[e].prototype[n]=function(){return t[e][n](this._a,this._b,this._c)}})(n[o])}("mean median mode variance".split(" "))})(e[n])}("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(n,o,r){return n>1||n<0?0:1==o&&1==r?1:o<512&&r<512?e.pow(n,o-1)*e.pow(1-n,r-1)/t.betafn(o,r):e.exp((o-1)*e.log(n)+(r-1)*e.log(1-n)-t.betaln(o,r))},cdf:function(e,n,o){return e>1||e<0?1*(e>1):t.ibeta(e,n,o)},inv:function(e,n,o){return t.ibetainv(e,n,o)},mean:function(t,e){return t/(t+e)},median:function(e,n){return t.ibetainv(.5,e,n)},mode:function(t,e){return(t-1)/(t+e-2)},sample:function(e,n){var o=t.randg(e);return o/(o+t.randg(n))},variance:function(t,n){return t*n/(e.pow(t+n,2)*(t+n+1))}}),t.extend(t.centralF,{pdf:function(n,o,r){var i;return n<0?0:o<=2?0===n&&o<2?1/0:0===n&&2===o?1:1/t.betafn(o/2,r/2)*e.pow(o/r,o/2)*e.pow(n,o/2-1)*e.pow(1+o/r*n,-(o+r)/2):(i=o*n/(r+n*o),o*(r/(r+n*o))/2*t.binomial.pdf((o-2)/2,(o+r-2)/2,i))},cdf:function(e,n,o){return e<0?0:t.ibeta(n*e/(n*e+o),n/2,o/2)},inv:function(e,n,o){return o/(n*(1/t.ibetainv(e,n/2,o/2)-1))},mean:function(t,e){return e>2?e/(e-2):void 0},mode:function(t,e){return t>2?e*(t-2)/(t*(e+2)):void 0},sample:function(e,n){return 2*t.randg(e/2)/e/(2*t.randg(n/2)/n)},variance:function(t,e){if(!(e<=4))return 2*e*e*(t+e-2)/(t*(e-2)*(e-2)*(e-4))}}),t.extend(t.cauchy,{pdf:function(t,n,o){return o<0?0:o/(e.pow(t-n,2)+e.pow(o,2))/e.PI},cdf:function(t,n,o){return e.atan((t-n)/o)/e.PI+.5},inv:function(t,n,o){return n+o*e.tan(e.PI*(t-.5))},median:function(t){return t},mode:function(t){return t},sample:function(n,o){return t.randn()*e.sqrt(1/(2*t.randg(.5)))*o+n}}),t.extend(t.chisquare,{pdf:function(n,o){return n<0?0:0===n&&2===o?.5:e.exp((o/2-1)*e.log(n)-n/2-o/2*e.log(2)-t.gammaln(o/2))},cdf:function(e,n){return e<0?0:t.lowRegGamma(n/2,e/2)},inv:function(e,n){return 2*t.gammapinv(e,.5*n)},mean:function(t){return t},median:function(t){return t*e.pow(1-2/(9*t),3)},mode:function(t){return t-2>0?t-2:0},sample:function(e){return 2*t.randg(e/2)},variance:function(t){return 2*t}}),t.extend(t.exponential,{pdf:function(t,n){return t<0?0:n*e.exp(-n*t)},cdf:function(t,n){return t<0?0:1-e.exp(-n*t)},inv:function(t,n){return-e.log(1-t)/n},mean:function(t){return 1/t},median:function(t){return 1/t*e.log(2)},mode:function(){return 0},sample:function(n){return-1/n*e.log(t._random_fn())},variance:function(t){return e.pow(t,-2)}}),t.extend(t.gamma,{pdf:function(n,o,r){return n<0?0:0===n&&1===o?1/r:e.exp((o-1)*e.log(n)-n/r-t.gammaln(o)-o*e.log(r))},cdf:function(e,n,o){return e<0?0:t.lowRegGamma(n,e/o)},inv:function(e,n,o){return t.gammapinv(e,n)*o},mean:function(t,e){return t*e},mode:function(t,e){if(t>1)return(t-1)*e},sample:function(e,n){return t.randg(e)*n},variance:function(t,e){return t*e*e}}),t.extend(t.invgamma,{pdf:function(n,o,r){return n<=0?0:e.exp(-(o+1)*e.log(n)-r/n-t.gammaln(o)+o*e.log(r))},cdf:function(e,n,o){return e<=0?0:1-t.lowRegGamma(n,o/e)},inv:function(e,n,o){return o/t.gammapinv(1-e,n)},mean:function(t,e){return t>1?e/(t-1):void 0},mode:function(t,e){return e/(t+1)},sample:function(e,n){return n/t.randg(e)},variance:function(t,e){if(!(t<=2))return e*e/((t-1)*(t-1)*(t-2))}}),t.extend(t.kumaraswamy,{pdf:function(t,n,o){return 0===t&&1===n?o:1===t&&1===o?n:e.exp(e.log(n)+e.log(o)+(n-1)*e.log(t)+(o-1)*e.log(1-e.pow(t,n)))},cdf:function(t,n,o){return t<0?0:t>1?1:1-e.pow(1-e.pow(t,n),o)},inv:function(t,n,o){return e.pow(1-e.pow(1-t,1/o),1/n)},mean:function(e,n){return n*t.gammafn(1+1/e)*t.gammafn(n)/t.gammafn(1+1/e+n)},median:function(t,n){return e.pow(1-e.pow(2,-1/n),1/t)},mode:function(t,n){if(t>=1&&n>=1&&1!==t&&1!==n)return e.pow((t-1)/(t*n-1),1/t)},variance:function(){throw new Error("variance not yet implemented")}}),t.extend(t.lognormal,{pdf:function(t,n,o){return t<=0?0:e.exp(-e.log(t)-.5*e.log(2*e.PI)-e.log(o)-e.pow(e.log(t)-n,2)/(2*o*o))},cdf:function(n,o,r){return n<0?0:.5+.5*t.erf((e.log(n)-o)/e.sqrt(2*r*r))},inv:function(n,o,r){return e.exp(-1.4142135623730951*r*t.erfcinv(2*n)+o)},mean:function(t,n){return e.exp(t+n*n/2)},median:function(t){return e.exp(t)},mode:function(t,n){return e.exp(t-n*n)},sample:function(n,o){return e.exp(t.randn()*o+n)},variance:function(t,n){return(e.exp(n*n)-1)*e.exp(2*t+n*n)}}),t.extend(t.noncentralt,{pdf:function(n,o,r){return e.abs(r)<1e-14?t.studentt.pdf(n,o):e.abs(n)<1e-14?e.exp(t.gammaln((o+1)/2)-r*r/2-.5*e.log(e.PI*o)-t.gammaln(o/2)):o/n*(t.noncentralt.cdf(n*e.sqrt(1+2/o),o+2,r)-t.noncentralt.cdf(n,o,r))},cdf:function(n,o,r){var i=1e-14;if(e.abs(r)<i)return t.studentt.cdf(n,o);var s=!1;n<0&&(s=!0,r=-r);for(var a=t.normal.cdf(-r,0,1),l=i+1,u=l,c=n*n/(n*n+o),f=0,d=e.exp(-r*r/2),h=e.exp(-r*r/2-.5*e.log(2)-t.gammaln(1.5))*r;f<200||u>i||l>i;)u=l,f>0&&(d*=r*r/(2*f),h*=r*r/(2*(f+.5))),a+=.5*(l=d*t.beta.cdf(c,f+.5,o/2)+h*t.beta.cdf(c,f+1,o/2)),f++;return s?1-a:a}}),t.extend(t.normal,{pdf:function(t,n,o){return e.exp(-.5*e.log(2*e.PI)-e.log(o)-e.pow(t-n,2)/(2*o*o))},cdf:function(n,o,r){return.5*(1+t.erf((n-o)/e.sqrt(2*r*r)))},inv:function(e,n,o){return-1.4142135623730951*o*t.erfcinv(2*e)+n},mean:function(t){return t},median:function(t){return t},mode:function(t){return t},sample:function(e,n){return t.randn()*n+e},variance:function(t,e){return e*e}}),t.extend(t.pareto,{pdf:function(t,n,o){return t<n?0:o*e.pow(n,o)/e.pow(t,o+1)},cdf:function(t,n,o){return t<n?0:1-e.pow(n/t,o)},inv:function(t,n,o){return n/e.pow(1-t,1/o)},mean:function(t,n){if(!(n<=1))return n*e.pow(t,n)/(n-1)},median:function(t,n){return t*(n*e.SQRT2)},mode:function(t){return t},variance:function(t,n){if(!(n<=2))return t*t*n/(e.pow(n-1,2)*(n-2))}}),t.extend(t.studentt,{pdf:function(n,o){return o=o>1e100?1e100:o,1/(e.sqrt(o)*t.betafn(.5,o/2))*e.pow(1+n*n/o,-(o+1)/2)},cdf:function(n,o){var r=o/2;return t.ibeta((n+e.sqrt(n*n+o))/(2*e.sqrt(n*n+o)),r,r)},inv:function(n,o){var r=t.ibetainv(2*e.min(n,1-n),.5*o,.5);return r=e.sqrt(o*(1-r)/r),n>.5?r:-r},mean:function(t){return t>1?0:void 0},median:function(){return 0},mode:function(){return 0},sample:function(n){return t.randn()*e.sqrt(n/(2*t.randg(n/2)))},variance:function(t){return t>2?t/(t-2):t>1?1/0:void 0}}),t.extend(t.weibull,{pdf:function(t,n,o){return t<0||n<0||o<0?0:o/n*e.pow(t/n,o-1)*e.exp(-e.pow(t/n,o))},cdf:function(t,n,o){return t<0?0:1-e.exp(-e.pow(t/n,o))},inv:function(t,n,o){return n*e.pow(-e.log(1-t),1/o)},mean:function(e,n){return e*t.gammafn(1+1/n)},median:function(t,n){return t*e.pow(e.log(2),1/n)},mode:function(t,n){return n<=1?0:t*e.pow((n-1)/n,1/n)},sample:function(n,o){return n*e.pow(-e.log(t._random_fn()),1/o)},variance:function(n,o){return n*n*t.gammafn(1+2/o)-e.pow(t.weibull.mean(n,o),2)}}),t.extend(t.uniform,{pdf:function(t,e,n){return t<e||t>n?0:1/(n-e)},cdf:function(t,e,n){return t<e?0:t<n?(t-e)/(n-e):1},inv:function(t,e,n){return e+t*(n-e)},mean:function(t,e){return.5*(t+e)},median:function(e,n){return t.mean(e,n)},mode:function(){throw new Error("mode is not yet implemented")},sample:function(e,n){return e/2+n/2+(n/2-e/2)*(2*t._random_fn()-1)},variance:function(t,n){return e.pow(n-t,2)/12}}),t.extend(t.binomial,{pdf:function(n,o,r){return 0===r||1===r?o*r===n?1:0:t.combination(o,n)*e.pow(r,n)*e.pow(1-r,o-n)},cdf:function(o,r,i){var s,a=1e-10;if(o<0)return 0;if(o>=r)return 1;if(i<0||i>1||r<=0)return NaN;var l=i,u=(o=e.floor(o))+1,c=r-o,f=u+c,d=e.exp(t.gammaln(f)-t.gammaln(c)-t.gammaln(u)+u*e.log(l)+c*e.log(1-l));return s=l<(u+1)/(f+2)?d*n(l,u,c,a):1-d*n(1-l,c,u,a),e.round(1/a*(1-s))/(1/a)}}),t.extend(t.negbin,{pdf:function(n,o,r){return n===n>>>0&&(n<0?0:t.combination(n+o-1,o-1)*e.pow(1-r,n)*e.pow(r,o))},cdf:function(e,n,o){var r=0,i=0;if(e<0)return 0;for(;i<=e;i++)r+=t.negbin.pdf(i,n,o);return r}}),t.extend(t.hypgeom,{pdf:function(n,o,r,i){if(n!=n|0)return!1;if(n<0||n<r-(o-i))return 0;if(n>i||n>r)return 0;if(2*r>o)return 2*i>o?t.hypgeom.pdf(o-r-i+n,o,o-r,o-i):t.hypgeom.pdf(i-n,o,o-r,i);if(2*i>o)return t.hypgeom.pdf(r-n,o,r,o-i);if(r<i)return t.hypgeom.pdf(n,o,i,r);for(var s=1,a=0,l=0;l<n;l++){for(;s>1&&a<i;)s*=1-r/(o-a),a++;s*=(i-l)*(r-l)/((l+1)*(o-r-i+l+1))}for(;a<i;a++)s*=1-r/(o-a);return e.min(1,e.max(0,s))},cdf:function(n,o,r,i){if(n<0||n<r-(o-i))return 0;if(n>=i||n>=r)return 1;if(2*r>o)return 2*i>o?t.hypgeom.cdf(o-r-i+n,o,o-r,o-i):1-t.hypgeom.cdf(i-n-1,o,o-r,i);if(2*i>o)return 1-t.hypgeom.cdf(r-n-1,o,r,o-i);if(r<i)return t.hypgeom.cdf(n,o,i,r);for(var s=1,a=1,l=0,u=0;u<n;u++){for(;s>1&&l<i;){var c=1-r/(o-l);a*=c,s*=c,l++}s+=a*=(i-u)*(r-u)/((u+1)*(o-r-i+u+1))}for(;l<i;l++)s*=1-r/(o-l);return e.min(1,e.max(0,s))}}),t.extend(t.poisson,{pdf:function(n,o){return o<0||n%1!=0||n<0?0:e.pow(o,n)*e.exp(-o)/t.factorial(n)},cdf:function(e,n){var o=[],r=0;if(e<0)return 0;for(;r<=e;r++)o.push(t.poisson.pdf(r,n));return t.sum(o)},mean:function(t){return t},variance:function(t){return t},sampleSmall:function(n){var o=1,r=0,i=e.exp(-n);do{r++,o*=t._random_fn()}while(o>i);return r-1},sampleLarge:function(n){var o,r,i,s,a,l,u,c,f,d,h=n;for(s=e.sqrt(h),a=e.log(h),l=.02483*(u=.931+2.53*s)-.059,c=1.1239+1.1328/(u-3.4),f=.9277-3.6224/(u-2);;){if(r=e.random()-.5,i=e.random(),d=.5-e.abs(r),o=e.floor((2*l/d+u)*r+h+.43),d>=.07&&i<=f)return o;if(!(o<0||d<.013&&i>d)&&e.log(i)+e.log(c)-e.log(l/(d*d)+u)<=o*a-h-t.loggam(o+1))return o}},sample:function(t){return t<10?this.sampleSmall(t):this.sampleLarge(t)}}),t.extend(t.triangular,{pdf:function(t,e,n,o){return n<=e||o<e||o>n?NaN:t<e||t>n?0:t<o?2*(t-e)/((n-e)*(o-e)):t===o?2/(n-e):2*(n-t)/((n-e)*(n-o))},cdf:function(t,n,o,r){return o<=n||r<n||r>o?NaN:t<=n?0:t>=o?1:t<=r?e.pow(t-n,2)/((o-n)*(r-n)):1-e.pow(o-t,2)/((o-n)*(o-r))},inv:function(t,n,o,r){return o<=n||r<n||r>o?NaN:t<=(r-n)/(o-n)?n+(o-n)*e.sqrt(t*((r-n)/(o-n))):n+(o-n)*(1-e.sqrt((1-t)*(1-(r-n)/(o-n))))},mean:function(t,e,n){return(t+e+n)/3},median:function(t,n,o){return o<=(t+n)/2?n-e.sqrt((n-t)*(n-o))/e.sqrt(2):o>(t+n)/2?t+e.sqrt((n-t)*(o-t))/e.sqrt(2):void 0},mode:function(t,e,n){return n},sample:function(n,o,r){var i=t._random_fn();return i<(r-n)/(o-n)?n+e.sqrt(i*(o-n)*(r-n)):o-e.sqrt((1-i)*(o-n)*(o-r))},variance:function(t,e,n){return(t*t+e*e+n*n-t*e-t*n-e*n)/18}}),t.extend(t.arcsine,{pdf:function(t,n,o){return o<=n?NaN:t<=n||t>=o?0:2/e.PI*e.pow(e.pow(o-n,2)-e.pow(2*t-n-o,2),-.5)},cdf:function(t,n,o){return t<n?0:t<o?2/e.PI*e.asin(e.sqrt((t-n)/(o-n))):1},inv:function(t,n,o){return n+(.5-.5*e.cos(e.PI*t))*(o-n)},mean:function(t,e){return e<=t?NaN:(t+e)/2},median:function(t,e){return e<=t?NaN:(t+e)/2},mode:function(){throw new Error("mode is not yet implemented")},sample:function(n,o){return(n+o)/2+(o-n)/2*e.sin(2*e.PI*t.uniform.sample(0,1))},variance:function(t,n){return n<=t?NaN:e.pow(n-t,2)/8}}),t.extend(t.laplace,{pdf:function(t,n,o){return o<=0?0:e.exp(-e.abs(t-n)/o)/(2*o)},cdf:function(t,n,o){return o<=0?0:t<n?.5*e.exp((t-n)/o):1-.5*e.exp(-(t-n)/o)},mean:function(t){return t},median:function(t){return t},mode:function(t){return t},variance:function(t,e){return 2*e*e},sample:function(n,o){var r,i=t._random_fn()-.5;return n-o*((r=i)/e.abs(r))*e.log(1-2*e.abs(i))}}),t.extend(t.tukey,{cdf:function(n,r,i){var s=r,a=[.9894009349916499,.9445750230732326,.8656312023878318,.755404408355003,.6178762444026438,.45801677765722737,.2816035507792589,.09501250983763744],l=[.027152459411754096,.062253523938647894,.09515851168249279,.12462897125553388,.14959598881657674,.16915651939500254,.18260341504492358,.1894506104550685];if(n<=0)return 0;if(i<2||s<2)return NaN;if(!Number.isFinite(n))return 1;if(i>25e3)return o(n,1,s);var u,c=.5*i,f=c*e.log(i)-i*e.log(2)-t.gammaln(c),d=c-1,h=.25*i;u=i<=100?1:i<=800?.5:i<=5e3?.25:.125,f+=e.log(u);for(var m=0,p=1;p<=50;p++){for(var g=0,v=(2*p-1)*u,y=1;y<=16;y++){var A,w;8<y?(A=y-8-1,w=f+d*e.log(v+a[A]*u)-(a[A]*u+v)*h):(A=y-1,w=f+d*e.log(v-a[A]*u)+(a[A]*u-v)*h),w>=-30&&(g+=o(8<y?n*e.sqrt(.5*(a[A]*u+v)):n*e.sqrt(.5*(-a[A]*u+v)),1,s)*l[A]*e.exp(w))}if(p*u>=1&&g<=1e-14)break;m+=g}if(g>1e-14)throw new Error("tukey.cdf failed to converge");return m>1&&(m=1),m},inv:function(n,o,r){if(r<2||o<2)return NaN;if(n<0||n>1)return NaN;if(0===n)return 0;if(1===n)return 1/0;var i,s=function(t,n,o){var r=.5-.5*t,i=e.sqrt(e.log(1/(r*r))),s=i+((((-453642210148e-16*i-.204231210125)*i-.342242088547)*i-1)*i+.322232421088)/((((.0038560700634*i+.10353775285)*i+.531103462366)*i+.588581570495)*i+.099348462606);o<120&&(s+=(s*s*s+s)/o/4);var a=.8832-.2368*s;return o<120&&(a+=-1.214/o+1.208*s/o),s*(a*e.log(n-1)+1.4142)}(n,o,r),a=t.tukey.cdf(s,o,r)-n;i=a>0?e.max(0,s-1):s+1;for(var l,u=t.tukey.cdf(i,o,r)-n,c=1;c<50;c++)if(l=i-u*(i-s)/(u-a),a=u,s=i,l<0&&(l=0,u=-n),u=t.tukey.cdf(l,o,r)-n,i=l,e.abs(i-s)<1e-4)return l;throw new Error("tukey.inv failed to converge")}})}(e,Math),function(t,e){var n,o,r=Array.prototype.push,i=t.utils.isArray;function s(e){return i(e)||e instanceof t}t.extend({add:function(e,n){return s(n)?(s(n[0])||(n=[n]),t.map(e,function(t,e,o){return t+n[e][o]})):t.map(e,function(t){return t+n})},subtract:function(e,n){return s(n)?(s(n[0])||(n=[n]),t.map(e,function(t,e,o){return t-n[e][o]||0})):t.map(e,function(t){return t-n})},divide:function(e,n){return s(n)?(s(n[0])||(n=[n]),t.multiply(e,t.inv(n))):t.map(e,function(t){return t/n})},multiply:function(e,n){var o,r,i,a,l,u,c,f;if(void 0===e.length&&void 0===n.length)return e*n;if(l=e.length,u=e[0].length,c=t.zeros(l,i=s(n)?n[0].length:u),f=0,s(n)){for(;f<i;f++)for(o=0;o<l;o++){for(a=0,r=0;r<u;r++)a+=e[o][r]*n[r][f];c[o][f]=a}return 1===l&&1===f?c[0][0]:c}return t.map(e,function(t){return t*n})},outer:function(e,n){return t.multiply(e.map(function(t){return[t]}),[n])},dot:function(e,n){s(e[0])||(e=[e]),s(n[0])||(n=[n]);for(var o,r,i=1===e[0].length&&1!==e.length?t.transpose(e):e,a=1===n[0].length&&1!==n.length?t.transpose(n):n,l=[],u=0,c=i.length,f=i[0].length;u<c;u++){for(l[u]=[],o=0,r=0;r<f;r++)o+=i[u][r]*a[u][r];l[u]=o}return 1===l.length?l[0]:l},pow:function(n,o){return t.map(n,function(t){return e.pow(t,o)})},exp:function(n){return t.map(n,function(t){return e.exp(t)})},log:function(n){return t.map(n,function(t){return e.log(t)})},abs:function(n){return t.map(n,function(t){return e.abs(t)})},norm:function(t,n){var o=0,r=0;for(isNaN(n)&&(n=2),s(t[0])&&(t=t[0]);r<t.length;r++)o+=e.pow(e.abs(t[r]),n);return e.pow(o,1/n)},angle:function(n,o){return e.acos(t.dot(n,o)/(t.norm(n)*t.norm(o)))},aug:function(t,e){var n,o=[];for(n=0;n<t.length;n++)o.push(t[n].slice());for(n=0;n<o.length;n++)r.apply(o[n],e[n]);return o},inv:function(e){for(var n,o=e.length,r=e[0].length,i=t.identity(o,r),s=t.gauss_jordan(e,i),a=[],l=0;l<o;l++)for(a[l]=[],n=r;n<s[0].length;n++)a[l][n-r]=s[l][n];return a},det:function t(e){if(2===e.length)return e[0][0]*e[1][1]-e[0][1]*e[1][0];for(var n=0,o=0;o<e.length;o++){for(var r=[],i=1;i<e.length;i++){r[i-1]=[];for(var s=0;s<e.length;s++)s<o?r[i-1][s]=e[i][s]:s>o&&(r[i-1][s-1]=e[i][s])}var a=o%2?-1:1;n+=t(r)*e[0][o]*a}return n},gauss_elimination:function(n,o){var r,i,s,a,l=0,u=0,c=n.length,f=n[0].length,d=1,h=0,m=[];for(r=(n=t.aug(n,o))[0].length,l=0;l<c;l++){for(i=n[l][l],u=l,a=l+1;a<f;a++)i<e.abs(n[a][l])&&(i=n[a][l],u=a);if(u!=l)for(a=0;a<r;a++)s=n[l][a],n[l][a]=n[u][a],n[u][a]=s;for(u=l+1;u<c;u++)for(d=n[u][l]/n[l][l],a=l;a<r;a++)n[u][a]=n[u][a]-d*n[l][a]}for(l=c-1;l>=0;l--){for(h=0,u=l+1;u<=c-1;u++)h+=m[u]*n[l][u];m[l]=(n[l][r-1]-h)/n[l][l]}return m},gauss_jordan:function(n,o){var r,i,s,a=t.aug(n,o),l=a.length,u=a[0].length,c=0;for(i=0;i<l;i++){var f=i;for(s=i+1;s<l;s++)e.abs(a[s][i])>e.abs(a[f][i])&&(f=s);var d=a[i];for(a[i]=a[f],a[f]=d,s=i+1;s<l;s++)for(c=a[s][i]/a[i][i],r=i;r<u;r++)a[s][r]-=a[i][r]*c}for(i=l-1;i>=0;i--){for(c=a[i][i],s=0;s<i;s++)for(r=u-1;r>i-1;r--)a[s][r]-=a[i][r]*a[s][i]/c;for(a[i][i]/=c,r=l;r<u;r++)a[i][r]/=c}return a},triaUpSolve:function(e,n){var o,r=e[0].length,i=t.zeros(1,r)[0],s=!1;return null!=n[0].length&&(n=n.map(function(t){return t[0]}),s=!0),t.arange(r-1,-1,-1).forEach(function(s){o=t.arange(s+1,r).map(function(t){return i[t]*e[s][t]}),i[s]=(n[s]-t.sum(o))/e[s][s]}),s?i.map(function(t){return[t]}):i},triaLowSolve:function(e,n){var o,r=e[0].length,i=t.zeros(1,r)[0],s=!1;return null!=n[0].length&&(n=n.map(function(t){return t[0]}),s=!0),t.arange(r).forEach(function(r){o=t.arange(r).map(function(t){return e[r][t]*i[t]}),i[r]=(n[r]-t.sum(o))/e[r][r]}),s?i.map(function(t){return[t]}):i},lu:function(e){var n,o=e.length,r=t.identity(o),i=t.zeros(e.length,e[0].length);return t.arange(o).forEach(function(t){i[0][t]=e[0][t]}),t.arange(1,o).forEach(function(s){t.arange(s).forEach(function(o){n=t.arange(o).map(function(t){return r[s][t]*i[t][o]}),r[s][o]=(e[s][o]-t.sum(n))/i[o][o]}),t.arange(s,o).forEach(function(o){n=t.arange(s).map(function(t){return r[s][t]*i[t][o]}),i[s][o]=e[n.length][o]-t.sum(n)})}),[r,i]},cholesky:function(n){var o,r=n.length,i=t.zeros(n.length,n[0].length);return t.arange(r).forEach(function(s){o=t.arange(s).map(function(t){return e.pow(i[s][t],2)}),i[s][s]=e.sqrt(n[s][s]-t.sum(o)),t.arange(s+1,r).forEach(function(e){o=t.arange(s).map(function(t){return i[s][t]*i[e][t]}),i[e][s]=(n[s][e]-t.sum(o))/i[s][s]})}),i},gauss_jacobi:function(n,o,r,i){for(var s,a,l,u,c=0,f=0,d=n.length,h=[],m=[],p=[];c<d;c++)for(h[c]=[],m[c]=[],p[c]=[],f=0;f<d;f++)c>f?(h[c][f]=n[c][f],m[c][f]=p[c][f]=0):c<f?(m[c][f]=n[c][f],h[c][f]=p[c][f]=0):(p[c][f]=n[c][f],h[c][f]=m[c][f]=0);for(l=t.multiply(t.multiply(t.inv(p),t.add(h,m)),-1),a=t.multiply(t.inv(p),o),s=r,u=t.add(t.multiply(l,r),a),c=2;e.abs(t.norm(t.subtract(u,s)))>i;)s=u,u=t.add(t.multiply(l,s),a),c++;return u},gauss_seidel:function(n,o,r,i){for(var s,a,l,u,c,f=0,d=n.length,h=[],m=[],p=[];f<d;f++)for(h[f]=[],m[f]=[],p[f]=[],s=0;s<d;s++)f>s?(h[f][s]=n[f][s],m[f][s]=p[f][s]=0):f<s?(m[f][s]=n[f][s],h[f][s]=p[f][s]=0):(p[f][s]=n[f][s],h[f][s]=m[f][s]=0);for(u=t.multiply(t.multiply(t.inv(t.add(p,h)),m),-1),l=t.multiply(t.inv(t.add(p,h)),o),a=r,c=t.add(t.multiply(u,r),l),f=2;e.abs(t.norm(t.subtract(c,a)))>i;)a=c,c=t.add(t.multiply(u,a),l),f+=1;return c},SOR:function(n,o,r,i,s){for(var a,l,u,c,f,d=0,h=n.length,m=[],p=[],g=[];d<h;d++)for(m[d]=[],p[d]=[],g[d]=[],a=0;a<h;a++)d>a?(m[d][a]=n[d][a],p[d][a]=g[d][a]=0):d<a?(p[d][a]=n[d][a],m[d][a]=g[d][a]=0):(g[d][a]=n[d][a],m[d][a]=p[d][a]=0);for(c=t.multiply(t.inv(t.add(g,t.multiply(m,s))),t.subtract(t.multiply(g,1-s),t.multiply(p,s))),u=t.multiply(t.multiply(t.inv(t.add(g,t.multiply(m,s))),o),s),l=r,f=t.add(t.multiply(c,r),u),d=2;e.abs(t.norm(t.subtract(f,l)))>i;)l=f,f=t.add(t.multiply(c,l),u),d++;return f},householder:function(n){for(var o,r,i,s,a=n.length,l=n[0].length,u=0,c=[],f=[];u<a-1;u++){for(o=0,s=u+1;s<l;s++)o+=n[s][u]*n[s][u];for(o=(n[u+1][u]>0?-1:1)*e.sqrt(o),r=e.sqrt((o*o-n[u+1][u]*o)/2),(c=t.zeros(a,1))[u+1][0]=(n[u+1][u]-o)/(2*r),i=u+2;i<a;i++)c[i][0]=n[i][u]/(2*r);f=t.subtract(t.identity(a,l),t.multiply(t.multiply(c,t.transpose(c)),2)),n=t.multiply(f,t.multiply(n,f))}return n},QR:(n=t.sum,o=t.arange,function(r){var i,s,a,l=r.length,u=r[0].length,c=t.zeros(u,u);for(r=t.copy(r),s=0;s<u;s++){for(c[s][s]=e.sqrt(n(o(l).map(function(t){return r[t][s]*r[t][s]}))),i=0;i<l;i++)r[i][s]=r[i][s]/c[s][s];for(a=s+1;a<u;a++)for(c[s][a]=n(o(l).map(function(t){return r[t][s]*r[t][a]})),i=0;i<l;i++)r[i][a]=r[i][a]-r[i][s]*c[s][a]}return[r,c]}),lstsq:function(e,n){var o=!1;void 0===n[0].length&&(n=n.map(function(t){return[t]}),o=!0);var r=t.QR(e),i=r[0],s=r[1],a=e[0].length,l=t.slice(i,{col:{end:a}}),u=function(e){var n=(e=t.copy(e)).length,o=t.identity(n);return t.arange(n-1,-1,-1).forEach(function(n){t.sliceAssign(o,{row:n},t.divide(t.slice(o,{row:n}),e[n][n])),t.sliceAssign(e,{row:n},t.divide(t.slice(e,{row:n}),e[n][n])),t.arange(n).forEach(function(r){var i=t.multiply(e[r][n],-1),s=t.slice(e,{row:r}),a=t.multiply(t.slice(e,{row:n}),i);t.sliceAssign(e,{row:r},t.add(s,a));var l=t.slice(o,{row:r}),u=t.multiply(t.slice(o,{row:n}),i);t.sliceAssign(o,{row:r},t.add(l,u))})}),o}(t.slice(s,{row:{end:a}})),c=t.transpose(l);void 0===c[0].length&&(c=[c]);var f=t.multiply(t.multiply(u,c),n);return void 0===f.length&&(f=[[f]]),o?f.map(function(t){return t[0]}):f},jacobi:function(n){for(var o,r,i,s,a,l,u,c=1,f=n.length,d=t.identity(f,f),h=[];1===c;){for(a=n[0][1],i=0,s=1,o=0;o<f;o++)for(r=0;r<f;r++)o!=r&&a<e.abs(n[o][r])&&(a=e.abs(n[o][r]),i=o,s=r);for(l=n[i][i]===n[s][s]?n[i][s]>0?e.PI/4:-e.PI/4:e.atan(2*n[i][s]/(n[i][i]-n[s][s]))/2,(u=t.identity(f,f))[i][i]=e.cos(l),u[i][s]=-e.sin(l),u[s][i]=e.sin(l),u[s][s]=e.cos(l),d=t.multiply(d,u),n=t.multiply(t.multiply(t.inv(u),n),u),c=0,o=1;o<f;o++)for(r=1;r<f;r++)o!=r&&e.abs(n[o][r])>.001&&(c=1)}for(o=0;o<f;o++)h.push(n[o][o]);return[d,h]},rungekutta:function(t,e,n,o,r,i){var s,a,l;if(2===i)for(;o<=n;)r+=((s=e*t(o,r))+(a=e*t(o+e,r+s)))/2,o+=e;if(4===i)for(;o<=n;)r+=((s=e*t(o,r))+2*(a=e*t(o+e/2,r+s/2))+2*(l=e*t(o+e/2,r+a/2))+e*t(o+e,r+l))/6,o+=e;return r},romberg:function(t,n,o,r){for(var i,s,a,l,u,c=0,f=(o-n)/2,d=[],h=[],m=[];c<r/2;){for(u=t(n),a=n,l=0;a<=o;a+=f,l++)d[l]=a;for(i=d.length,a=1;a<i-1;a++)u+=(a%2!=0?4:2)*t(d[a]);u=f/3*(u+t(o)),m[c]=u,f/=2,c++}for(s=m.length,i=1;1!==s;){for(a=0;a<s-1;a++)h[a]=(e.pow(4,i)*m[a+1]-m[a])/(e.pow(4,i)-1);s=h.length,m=h,h=[],i++}return m},richardson:function(t,n,o,r){function i(t,e){for(var n,o=0,r=t.length;o<r;o++)t[o]===e&&(n=o);return n}for(var s,a,l,u,c,f=e.abs(o-t[i(t,o)+1]),d=0,h=[],m=[];r>=f;)s=i(t,o+r),a=i(t,o),h[d]=(n[s]-2*n[a]+n[2*a-s])/(r*r),r/=2,d++;for(u=h.length,l=1;1!=u;){for(c=0;c<u-1;c++)m[c]=(e.pow(4,l)*h[c+1]-h[c])/(e.pow(4,l)-1);u=m.length,h=m,m=[],l++}return h},simpson:function(t,e,n,o){for(var r,i=(n-e)/o,s=t(e),a=[],l=e,u=0,c=1;l<=n;l+=i,u++)a[u]=l;for(r=a.length;c<r-1;c++)s+=(c%2!=0?4:2)*t(a[c]);return i/3*(s+t(n))},hermite:function(t,e,n,o){for(var r,i=t.length,s=0,a=0,l=[],u=[],c=[],f=[];a<i;a++){for(l[a]=1,r=0;r<i;r++)a!=r&&(l[a]*=(o-t[r])/(t[a]-t[r]));for(u[a]=0,r=0;r<i;r++)a!=r&&(u[a]+=1/(t[a]-t[r]));c[a]=(1-2*(o-t[a])*u[a])*(l[a]*l[a]),f[a]=(o-t[a])*(l[a]*l[a]),s+=c[a]*e[a]+f[a]*n[a]}return s},lagrange:function(t,e,n){for(var o,r,i=0,s=0,a=t.length;s<a;s++){for(r=e[s],o=0;o<a;o++)s!=o&&(r*=(n-t[o])/(t[s]-t[o]));i+=r}return i},cubic_spline:function(e,n,o){for(var r,i,s=e.length,a=0,l=[],u=[],c=[],f=[],d=[],h=[];a<s-1;a++)f[a]=e[a+1]-e[a];for(c[0]=0,a=1;a<s-1;a++)c[a]=3/f[a]*(n[a+1]-n[a])-3/f[a-1]*(n[a]-n[a-1]);for(a=1;a<s-1;a++)l[a]=[],u[a]=[],l[a][a-1]=f[a-1],l[a][a]=2*(f[a-1]+f[a]),l[a][a+1]=f[a],u[a][0]=c[a];for(i=t.multiply(t.inv(l),u),r=0;r<s-1;r++)d[r]=(n[r+1]-n[r])/f[r]-f[r]*(i[r+1][0]+2*i[r][0])/3,h[r]=(i[r+1][0]-i[r][0])/(3*f[r]);for(r=0;r<s&&!(e[r]>o);r++);return n[r-=1]+(o-e[r])*d[r]+t.sq(o-e[r])*i[r]+(o-e[r])*t.sq(o-e[r])*h[r]},gauss_quadrature:function(){throw new Error("gauss_quadrature not yet implemented")},PCA:function(e){var n,o,r,i,s,a=e.length,l=e[0].length,u=0,c=[],f=[],d=[],h=[],m=[],p=[],g=[];for(u=0;u<a;u++)c[u]=t.sum(e[u])/l;for(u=0;u<l;u++)for(m[u]=[],n=0;n<a;n++)m[u][n]=e[n][u]-c[n];for(m=t.transpose(m),u=0;u<a;u++)for(p[u]=[],n=0;n<a;n++)p[u][n]=t.dot([m[u]],[m[n]])/(l-1);for(s=(r=t.jacobi(p))[0],f=r[1],g=t.transpose(s),u=0;u<f.length;u++)for(n=u;n<f.length;n++)f[u]<f[n]&&(o=f[u],f[u]=f[n],f[n]=o,d=g[u],g[u]=g[n],g[n]=d);for(i=t.transpose(m),u=0;u<a;u++)for(h[u]=[],n=0;n<i.length;n++)h[u][n]=t.dot([g[u]],[i[n]]);return[e,f,g,h]}}),function(e){for(var n=0;n<e.length;n++)(function(e){t.fn[e]=function(n,o){var r=this;return o?(setTimeout(function(){o.call(r,t.fn[e].call(r,n))},15),this):"number"==typeof t[e](this,n)?t[e](this,n):t(t[e](this,n))}})(e[n])}("add divide multiply subtract dot pow exp log abs norm angle".split(" "))}(e,Math),function(t,e){var n=[].slice,o=t.utils.isNumber,r=t.utils.isArray;function i(t,n,o,r){if(t>1||o>1||t<=0||o<=0)throw new Error("Proportions should be greater than 0 and less than 1");var i=(t*n+o*r)/(n+r);return(t-o)/e.sqrt(i*(1-i)*(1/n+1/r))}t.extend({zscore:function(){var e=n.call(arguments);return o(e[1])?(e[0]-e[1])/e[2]:(e[0]-t.mean(e[1]))/t.stdev(e[1],e[2])},ztest:function(){var o,i=n.call(arguments);return r(i[1])?(o=t.zscore(i[0],i[1],i[3]),1===i[2]?t.normal.cdf(-e.abs(o),0,1):2*t.normal.cdf(-e.abs(o),0,1)):i.length>2?(o=t.zscore(i[0],i[1],i[2]),1===i[3]?t.normal.cdf(-e.abs(o),0,1):2*t.normal.cdf(-e.abs(o),0,1)):(o=i[0],1===i[1]?t.normal.cdf(-e.abs(o),0,1):2*t.normal.cdf(-e.abs(o),0,1))}}),t.extend(t.fn,{zscore:function(t,e){return(t-this.mean())/this.stdev(e)},ztest:function(n,o,r){var i=e.abs(this.zscore(n,r));return 1===o?t.normal.cdf(-i,0,1):2*t.normal.cdf(-i,0,1)}}),t.extend({tscore:function(){var o=n.call(arguments);return 4===o.length?(o[0]-o[1])/(o[2]/e.sqrt(o[3])):(o[0]-t.mean(o[1]))/(t.stdev(o[1],!0)/e.sqrt(o[1].length))},ttest:function(){var r,i=n.call(arguments);return 5===i.length?(r=e.abs(t.tscore(i[0],i[1],i[2],i[3])),1===i[4]?t.studentt.cdf(-r,i[3]-1):2*t.studentt.cdf(-r,i[3]-1)):o(i[1])?(r=e.abs(i[0]),1==i[2]?t.studentt.cdf(-r,i[1]-1):2*t.studentt.cdf(-r,i[1]-1)):(r=e.abs(t.tscore(i[0],i[1])),1==i[2]?t.studentt.cdf(-r,i[1].length-1):2*t.studentt.cdf(-r,i[1].length-1))}}),t.extend(t.fn,{tscore:function(t){return(t-this.mean())/(this.stdev(!0)/e.sqrt(this.cols()))},ttest:function(n,o){return 1===o?1-t.studentt.cdf(e.abs(this.tscore(n)),this.cols()-1):2*t.studentt.cdf(-e.abs(this.tscore(n)),this.cols()-1)}}),t.extend({anovafscore:function(){var o,r,i,s,a,l,u,c,f=n.call(arguments);if(1===f.length){for(a=new Array(f[0].length),u=0;u<f[0].length;u++)a[u]=f[0][u];f=a}for(r=new Array,u=0;u<f.length;u++)r=r.concat(f[u]);for(i=t.mean(r),o=0,u=0;u<f.length;u++)o+=f[u].length*e.pow(t.mean(f[u])-i,2);for(o/=f.length-1,l=0,u=0;u<f.length;u++)for(s=t.mean(f[u]),c=0;c<f[u].length;c++)l+=e.pow(f[u][c]-s,2);return o/(l/(r.length-f.length))},anovaftest:function(){var e,r,i,s,a=n.call(arguments);if(o(a[0]))return 1-t.centralF.cdf(a[0],a[1],a[2]);var l=t.anovafscore(a);for(e=a.length-1,i=0,s=0;s<a.length;s++)i+=a[s].length;return r=i-e-1,1-t.centralF.cdf(l,e,r)},ftest:function(e,n,o){return 1-t.centralF.cdf(e,n,o)}}),t.extend(t.fn,{anovafscore:function(){return t.anovafscore(this.toArray())},anovaftes:function(){var e,n=0;for(e=0;e<this.length;e++)n+=this[e].length;return t.ftest(this.anovafscore(),this.length-1,n-this.length)}}),t.extend({qscore:function(){var r,i,s,a,l,u=n.call(arguments);return o(u[0])?(r=u[0],i=u[1],s=u[2],a=u[3],l=u[4]):(r=t.mean(u[0]),i=t.mean(u[1]),s=u[0].length,a=u[1].length,l=u[2]),e.abs(r-i)/(l*e.sqrt((1/s+1/a)/2))},qtest:function(){var e,o=n.call(arguments);3===o.length?(e=o[0],o=o.slice(1)):7===o.length?(e=t.qscore(o[0],o[1],o[2],o[3],o[4]),o=o.slice(5)):(e=t.qscore(o[0],o[1],o[2]),o=o.slice(3));var r=o[0],i=o[1];return 1-t.tukey.cdf(e,i,r-i)},tukeyhsd:function(e){for(var n=t.pooledstdev(e),o=e.map(function(e){return t.mean(e)}),r=e.reduce(function(t,e){return t+e.length},0),i=[],s=0;s<e.length;++s)for(var a=s+1;a<e.length;++a){var l=t.qtest(o[s],o[a],e[s].length,e[a].length,n,r,e.length);i.push([[s,a],l])}return i}}),t.extend({normalci:function(){var o,r=n.call(arguments),i=new Array(2);return o=4===r.length?e.abs(t.normal.inv(r[1]/2,0,1)*r[2]/e.sqrt(r[3])):e.abs(t.normal.inv(r[1]/2,0,1)*t.stdev(r[2])/e.sqrt(r[2].length)),i[0]=r[0]-o,i[1]=r[0]+o,i},tci:function(){var o,r=n.call(arguments),i=new Array(2);return o=4===r.length?e.abs(t.studentt.inv(r[1]/2,r[3]-1)*r[2]/e.sqrt(r[3])):e.abs(t.studentt.inv(r[1]/2,r[2].length-1)*t.stdev(r[2],!0)/e.sqrt(r[2].length)),i[0]=r[0]-o,i[1]=r[0]+o,i},significant:function(t,e){return t<e}}),t.extend(t.fn,{normalci:function(e,n){return t.normalci(e,n,this.toArray())},tci:function(e,n){return t.tci(e,n,this.toArray())}}),t.extend(t.fn,{oneSidedDifferenceOfProportions:function(e,n,o,r){var s=i(e,n,o,r);return t.ztest(s,1)},twoSidedDifferenceOfProportions:function(e,n,o,r){var s=i(e,n,o,r);return t.ztest(s,2)}})}(e,Math),e.models=function(){function t(t,n){var o=t.length,r=n[0].length-1,i=o-r-1,s=e.lstsq(n,t),a=e.multiply(n,s.map(function(t){return[t]})).map(function(t){return t[0]}),l=e.subtract(t,a),u=e.mean(t),c=e.sum(a.map(function(t){return Math.pow(t-u,2)})),f=e.sum(t.map(function(t,e){return Math.pow(t-a[e],2)})),d=c+f;return{exog:n,endog:t,nobs:o,df_model:r,df_resid:i,coef:s,predict:a,resid:l,ybar:u,SST:d,SSE:c,SSR:f,R2:c/d}}function n(n){var o,r,i=(o=n.exog,r=o[0].length,e.arange(r).map(function(n){var i=e.arange(r).filter(function(t){return t!==n});return t(e.col(o,n).map(function(t){return t[0]}),e.col(o,i))})),s=Math.sqrt(n.SSR/n.df_resid),a=i.map(function(t){var e=t.SST,n=t.R2;return s/Math.sqrt(e*(1-n))}),l=n.coef.map(function(t,e){return(t-0)/a[e]}),u=l.map(function(t){var o=e.studentt.cdf(t,n.df_resid);return 2*(o>.5?1-o:o)}),c=e.studentt.inv(.975,n.df_resid),f=n.coef.map(function(t,e){var n=c*a[e];return[t-n,t+n]});return{se:a,t:l,p:u,sigmaHat:s,interval95:f}}return{ols:function(o,r){var i=t(o,r),s=n(i),a=function(t){var n,o,r,i=t.R2/t.df_model/((1-t.R2)/t.df_resid);return{F_statistic:i,pvalue:1-(n=i,o=t.df_model,r=t.df_resid,e.beta.cdf(n/(r/o+n),o/2,r/2))}}(i),l=1-(1-i.R2)*((i.nobs-1)/i.df_resid);return i.t=s,i.f=a,i.adjust_R2=l,i}}}(),e.extend({buildxmatrix:function(){for(var t=new Array(arguments.length),n=0;n<arguments.length;n++){t[n]=[1].concat(arguments[n])}return e(t)},builddxmatrix:function(){for(var t=new Array(arguments[0].length),n=0;n<arguments[0].length;n++){t[n]=[1].concat(arguments[0][n])}return e(t)},buildjxmatrix:function(t){for(var n=new Array(t.length),o=0;o<t.length;o++)n[o]=t[o];return e.builddxmatrix(n)},buildymatrix:function(t){return e(t).transpose()},buildjymatrix:function(t){return t.transpose()},matrixmult:function(t,n){var o,r,i,s,a;if(t.cols()==n.rows()){if(n.rows()>1){for(s=[],o=0;o<t.rows();o++)for(s[o]=[],r=0;r<n.cols();r++){for(a=0,i=0;i<t.cols();i++)a+=t.toArray()[o][i]*n.toArray()[i][r];s[o][r]=a}return e(s)}for(s=[],o=0;o<t.rows();o++)for(s[o]=[],r=0;r<n.cols();r++){for(a=0,i=0;i<t.cols();i++)a+=t.toArray()[o][i]*n.toArray()[r];s[o][r]=a}return e(s)}},regress:function(t,n){var o=e.xtranspxinv(t),r=t.transpose(),i=e.matrixmult(e(o),r);return e.matrixmult(i,n)},regresst:function(t,n,o){var r=e.regress(t,n),i={anova:{}},s=e.jMatYBar(t,r);i.yBar=s;var a=n.mean();i.anova.residuals=e.residuals(n,s),i.anova.ssr=e.ssr(s,a),i.anova.msr=i.anova.ssr/(t[0].length-1),i.anova.sse=e.sse(n,s),i.anova.mse=i.anova.sse/(n.length-(t[0].length-1)-1),i.anova.sst=e.sst(n,a),i.anova.mst=i.anova.sst/(n.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=e.anovaftest(i.anova.fratio,t[0].length-1,n.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 l,u,c,f=e.xtranspxinv(t),d=0;d<r.length;d++)l=Math.sqrt(i.anova.mse*Math.abs(f[d][d])),u=Math.abs(r[d]/l),c=e.ttest(u,n.length-t[0].length-1,o),i.stats[d]=[r[d],l,u,c];return i.regress=r,i},xtranspx:function(t){return e.matrixmult(t.transpose(),t)},xtranspxinv:function(t){var n=e.matrixmult(t.transpose(),t);return e.inv(n)},jMatYBar:function(t,n){var o=e.matrixmult(t,n);return new e(o)},residuals:function(t,n){return e.matrixsubtract(t,n)},ssr:function(t,e){for(var n=0,o=0;o<t.length;o++)n+=Math.pow(t[o]-e,2);return n},sse:function(t,e){for(var n=0,o=0;o<t.length;o++)n+=Math.pow(t[o]-e[o],2);return n},sst:function(t,e){for(var n=0,o=0;o<t.length;o++)n+=Math.pow(t[o]-e,2);return n},matrixsubtract:function(t,n){for(var o=new Array(t.length),r=0;r<t.length;r++){o[r]=new Array(t[r].length);for(var i=0;i<t[r].length;i++)o[r][i]=t[r][i]-n[r][i]}return e(o)}}),e.jStat=e,e)},5072(t){"use strict";var e=[];function n(t){for(var n=-1,o=0;o<e.length;o++)if(e[o].identifier===t){n=o;break}return n}function o(t,o){for(var i={},s=[],a=0;a<t.length;a++){var l=t[a],u=o.base?l[0]+o.base:l[0],c=i[u]||0,f="".concat(u," ").concat(c);i[u]=c+1;var d=n(f),h={css:l[1],media:l[2],sourceMap:l[3],supports:l[4],layer:l[5]};if(-1!==d)e[d].references++,e[d].updater(h);else{var m=r(h,o);o.byIndex=a,e.splice(a,0,{identifier:f,updater:m,references:1})}s.push(f)}return s}function r(t,e){var n=e.domAPI(e);return n.update(t),function(e){if(e){if(e.css===t.css&&e.media===t.media&&e.sourceMap===t.sourceMap&&e.supports===t.supports&&e.layer===t.layer)return;n.update(t=e)}else n.remove()}}t.exports=function(t,r){var i=o(t=t||[],r=r||{});return function(t){t=t||[];for(var s=0;s<i.length;s++){var a=n(i[s]);e[a].references--}for(var l=o(t,r),u=0;u<i.length;u++){var c=n(i[u]);0===e[c].references&&(e[c].updater(),e.splice(c,1))}i=l}}},7659(t){"use strict";var e={};t.exports=function(t,n){var o=function(t){if(void 0===e[t]){var n=document.querySelector(t);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(t){n=null}e[t]=n}return e[t]}(t);if(!o)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");o.appendChild(n)}},540(t){"use strict";t.exports=function(t){var e=document.createElement("style");return t.setAttributes(e,t.attributes),t.insert(e,t.options),e}},5056(t,e,n){"use strict";t.exports=function(t){var e=n.nc;e&&t.setAttribute("nonce",e)}},7825(t){"use strict";t.exports=function(t){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var e=t.insertStyleElement(t);return{update:function(n){!function(t,e,n){var o="";n.supports&&(o+="@supports (".concat(n.supports,") {")),n.media&&(o+="@media ".concat(n.media," {"));var r=void 0!==n.layer;r&&(o+="@layer".concat(n.layer.length>0?" ".concat(n.layer):""," {")),o+=n.css,r&&(o+="}"),n.media&&(o+="}"),n.supports&&(o+="}");var i=n.sourceMap;i&&"undefined"!=typeof btoa&&(o+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(i))))," */")),e.styleTagTransform(o,t,e.options)}(e,t,n)},remove:function(){!function(t){if(null===t.parentNode)return!1;t.parentNode.removeChild(t)}(e)}}}},1113(t){"use strict";t.exports=function(t,e){if(e.styleSheet)e.styleSheet.cssText=t;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(t))}}}},i={};function s(t){var e=i[t];if(void 0!==e)return e.exports;var n=i[t]={id:t,loaded:!1,exports:{}};return r[t].call(n.exports,n,n.exports,s),n.loaded=!0,n.exports}s.m=r,s.amdO={},s.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return s.d(e,{a:e}),e},e=Object.getPrototypeOf?t=>Object.getPrototypeOf(t):t=>t.__proto__,s.t=function(n,o){if(1&o&&(n=this(n)),8&o)return n;if("object"==typeof n&&n){if(4&o&&n.__esModule)return n;if(16&o&&"function"==typeof n.then)return n}var r=Object.create(null);s.r(r);var i={};t=t||[null,e({}),e([]),e(e)];for(var a=2&o&&n;("object"==typeof a||"function"==typeof a)&&!~t.indexOf(a);a=e(a))Object.getOwnPropertyNames(a).forEach(t=>i[t]=()=>n[t]);return i.default=()=>n,s.d(r,i),r},s.d=(t,e)=>{for(var n in e)s.o(e,n)&&!s.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},s.f={},s.e=t=>Promise.all(Object.keys(s.f).reduce((e,n)=>(s.f[n](t,e),e),[])),s.u=t=>t+".js",s.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),s.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),s.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n={},o="eda:",s.l=(t,e,r,i)=>{if(n[t])n[t].push(e);else{var a,l;if(void 0!==r)for(var u=document.getElementsByTagName("script"),c=0;c<u.length;c++){var f=u[c];if(f.getAttribute("src")==t||f.getAttribute("data-webpack")==o+r){a=f;break}}a||(l=!0,(a=document.createElement("script")).charset="utf-8",s.nc&&a.setAttribute("nonce",s.nc),a.setAttribute("data-webpack",o+r),a.src=t),n[t]=[e];var d=(e,o)=>{a.onerror=a.onload=null,clearTimeout(h);var r=n[t];if(delete n[t],a.parentNode&&a.parentNode.removeChild(a),r&&r.forEach(t=>t(o)),e)return e(o)},h=setTimeout(d.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=d.bind(null,a.onerror),a.onload=d.bind(null,a.onload),l&&document.head.appendChild(a)}},s.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},(()=>{var t;s.g.importScripts&&(t=s.g.location+"");var e=s.g.document;if(!t&&e&&(e.currentScript&&"SCRIPT"===e.currentScript.tagName.toUpperCase()&&(t=e.currentScript.src),!t)){var n=e.getElementsByTagName("script");if(n.length)for(var o=n.length-1;o>-1&&(!t||!/^http(s?):/.test(t));)t=n[o--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),s.p=t})(),(()=>{s.b="undefined"!=typeof document&&document.baseURI||self.location.href;var t={255:0};s.f.j=(e,n)=>{var o=s.o(t,e)?t[e]:void 0;if(0!==o)if(o)n.push(o[2]);else{var r=new Promise((n,r)=>o=t[e]=[n,r]);n.push(o[2]=r);var i=s.p+s.u(e),a=new Error;s.l(i,n=>{if(s.o(t,e)&&(0!==(o=t[e])&&(t[e]=void 0),o)){var r=n&&("load"===n.type?"missing":n.type),i=n&&n.target&&n.target.src;a.message="Loading chunk "+e+" failed.\n("+r+": "+i+")",a.name="ChunkLoadError",a.type=r,a.request=i,o[1](a)}},"chunk-"+e,e)}};var e=(e,n)=>{var o,r,[i,a,l]=n,u=0;if(i.some(e=>0!==t[e])){for(o in a)s.o(a,o)&&(s.m[o]=a[o]);l&&l(s)}for(e&&e(n);u<i.length;u++)r=i[u],s.o(t,r)&&t[r]&&t[r][0](),t[r]=0},n=self.webpackChunkeda=self.webpackChunkeda||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))})(),s.nc=void 0;var a={};(()=>{"use strict";s.r(a),s.d(a,{_package:()=>Br,initAutoTests:()=>Ur,test:()=>kr,tests:()=>f});const t=DG;s(9982);const e=DG.DataFrame.fromCsv('countries,fasta,smiles,molregno,LON,Zip Code,Street Address Line 1,ImageUrl,user_id,error_message,xray,flag,magnitude,CS-id,pdb_id,accel_a,time_offset,chart,fit,Questions,empty_number,empty_string\nBelgium,MSNFHNEHVMQFYRNNLKTKGVFGRQ,CC(C(=O)OCCCc1cccnc1)c2cccc(c2)C(=O)c3ccccc3,1480014,36.276729583740234,995042300,14016 ROUTE 31W,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,"COMPND \nATOM \nEND",flag,1,1,1QBS,1,1.23,<chart></chart>,"{""series"":[{""name"":""Run:2023-08-08"",""fitFunction"":""sigmoid"",""fitLineColor"":""#1f77b4"",""pointColor"":""#1f77b4"",""showPoints"":""points"",""parameters"":[2.497360340644872, 1.7058694986686864, 5.278052678195135, 0.16000320889028383],""points"":[{""x"":0.10000000149011612,""y"":2.374499797821045},{""x"":0.6000000238418579,""y"":2.6242473125457764},{""x"":1.100000023841858,""y"":2.367267608642578},{""x"":1.600000023841858,""y"":2.6723148822784424},{""x"":2.0999999046325684,""y"":2.6537344455718994},{""x"":2.5999999046325684,""y"":2.3651671409606934},{""x"":3.0999999046325684,""y"":2.5654284954071045},{""x"":3.5999999046325684,""y"":2.4160959720611572},{""x"":4.099999904632568,""y"":2.286726713180542},{""x"":4.599999904632568,""y"":2.5100042819976807},{""x"":5.099999904632568,""y"":1.6676985025405884},{""x"":5.599999904632568,""y"":0.680136501789093},{""x"":6.099999904632568,""y"":0.3391543924808502},{""x"":6.599999904632568,""y"":0.09038983285427094},{""x"":7.099999904632568,""y"":0.19802775979042053}]},{""name"":""Run:2023-08-08"",""fitLineColor"":""#ffbb78"",""pointColor"":""#ffbb78"",""showPoints"":""points"",""parameters"":[7.525235855508179, 1.3186911876809984, 5.335672608564294, 0.7860743343958098],""points"":[{""x"":0.10000000149011612,""y"":7.988070487976074},{""x"":0.6000000238418579,""y"":7.018453121185303},{""x"":1.100000023841858,""y"":8.115279197692871},{""x"":1.600000023841858,""y"":7.486658096313477},{""x"":2.0999999046325684,""y"":7.396438121795654},{""x"":2.5999999046325684,""y"":7.477052211761475},{""x"":3.0999999046325684,""y"":6.913095474243164},{""x"":3.5999999046325684,""y"":8.01385498046875},{""x"":4.099999904632568,""y"":6.985900402069092},{""x"":4.599999904632568,""y"":6.970335960388184},{""x"":5.099999904632568,""y"":5.448817253112793},{""x"":5.599999904632568,""y"":2.5534818172454834},{""x"":6.099999904632568,""y"":1.893947958946228},{""x"":6.599999904632568,""y"":0.6340042352676392},{""x"":7.099999904632568,""y"":0.8403874039649963}]}],""chartOptions"":{""xAxisName"":""Conc."",""yAxisName"":""Activity"",""title"":""Dose-Response curves""}}",text,100,abc\nBurundi,MDYKETLLMPKTDFPMRGGLPNKEPQIQEKW,COc1ccc2cc(ccc2c1)C(C)C(=O)Oc3ccc(C)cc3OC,1480015,36.276729583740234,995073444,80 STATE HIGHWAY 310,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,"COMPND \nATOM \nEND",flag,2,2,1ZP8,2,1.23,<chart></chart>,"{""series"":[{""name"":""Run:2023-08-08"",""fitFunction"":""sigmoid"",""fitLineColor"":""#1f77b4"",""pointColor"":""#1f77b4"",""showPoints"":""points"",""parameters"":[4.431460753103398, 2.1691498799246745, 5.266445597102774, 0.7825762827017926],""points"":[{""x"":0.10000000149011612,""y"":4.751083850860596},{""x"":0.6000000238418579,""y"":4.203000068664551},{""x"":1.100000023841858,""y"":4.415858745574951},{""x"":1.600000023841858,""y"":4.68414306640625},{""x"":2.0999999046325684,""y"":4.198400974273682},{""x"":2.5999999046325684,""y"":4.179222106933594},{""x"":3.0999999046325684,""y"":4.638473987579346},{""x"":3.5999999046325684,""y"":4.708553314208984},{""x"":4.099999904632568,""y"":4.291589260101318},{""x"":4.599999904632568,""y"":4.038082599639893},{""x"":5.099999904632568,""y"":3.4349939823150635},{""x"":5.599999904632568,""y"":1.2194708585739136},{""x"":6.099999904632568,""y"":1.1920831203460693},{""x"":6.599999904632568,""y"":0.5352635979652405},{""x"":7.099999904632568,""y"":0.3346920311450958}]},{""name"":""Run:2023-08-08"",""fitLineColor"":""#ffbb78"",""pointColor"":""#ffbb78"",""showPoints"":""points"",""parameters"":[2.339458017970126, -1.0734184310171178, 4.746332950550934, 0.2482416857595658],""points"":[{""x"":0.10000000149011612,""y"":0.2139337658882141},{""x"":0.6000000238418579,""y"":0.4269562065601349},{""x"":1.100000023841858,""y"":0.2441573292016983},{""x"":1.600000023841858,""y"":0.146635964512825},{""x"":2.0999999046325684,""y"":0.08818462491035461},{""x"":2.5999999046325684,""y"":0.2560656666755676},{""x"":3.0999999046325684,""y"":0.42434045672416687},{""x"":3.5999999046325684,""y"":0.37111231684684753},{""x"":4.099999904632568,""y"":0.5581737160682678},{""x"":4.599999904632568,""y"":1.183590054512024},{""x"":5.099999904632568,""y"":1.5629843473434448},{""x"":5.599999904632568,""y"":2.3211288452148438},{""x"":6.099999904632568,""y"":2.229961633682251},{""x"":6.599999904632568,""y"":2.2560226917266846},{""x"":7.099999904632568,""y"":2.2142398357391357}]}],""chartOptions"":{""xAxisName"":""Conc."",""yAxisName"":""Activity"",""title"":""Dose-Response curves""}}",text,,\nCameroon,MIEVFLFGIVLGLIPITLAGLFVTAYLQYRRGDQLDL,COc1ccc2cc(ccc2c1)C(C)C(=O)OCCCc3cccnc3,1480016,36.26095962524414,995153596,30-56 WHITESTONE EXPY,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,"COMPND \nATOM \nEND",flag,3,3,2BDJ,3,1.23,<chart></chart>,"{""series"":[{""name"":""Run:2023-08-08"",""fitFunction"":""sigmoid"",""fitLineColor"":""#1f77b4"",""pointColor"":""#1f77b4"",""showPoints"":""points"",""parameters"":[4.6760652578642325, 0.9046956320756703, 5.651408971856738, 0.07738846012184185],""points"":[{""x"":0.10000000149011612,""y"":4.32425594329834},{""x"":0.6000000238418579,""y"":4.668442249298096},{""x"":1.100000023841858,""y"":4.379785060882568},{""x"":1.600000023841858,""y"":5.0345139503479},{""x"":2.0999999046325684,""y"":4.878653526306152},{""x"":2.5999999046325684,""y"":4.3451313972473145},{""x"":3.0999999046325684,""y"":4.336992263793945},{""x"":3.5999999046325684,""y"":5.037430286407471},{""x"":4.099999904632568,""y"":5.0092692375183105},{""x"":4.599999904632568,""y"":4.151902675628662},{""x"":5.099999904632568,""y"":3.4066951274871826},{""x"":5.599999904632568,""y"":2.3732759952545166},{""x"":6.099999904632568,""y"":1.673728108406067},{""x"":6.599999904632568,""y"":0.48574790358543396},{""x"":7.099999904632568,""y"":0.2783052325248718}]},{""name"":""Run:2023-08-08"",""fitLineColor"":""#ffbb78"",""pointColor"":""#ffbb78"",""showPoints"":""points"",""parameters"":[2.938395863010111, -1.4658480661392117, 5.462702751996584, 0.3473139023615039],""points"":[{""x"":0.10000000149011612,""y"":0.4941710829734802},{""x"":0.6000000238418579,""y"":0.15323974192142487},{""x"":1.100000023841858,""y"":0.46373432874679565},{""x"":1.600000023841858,""y"":0.3370431363582611},{""x"":2.0999999046325684,""y"":0.5179030299186707},{""x"":2.5999999046325684,""y"":0.27899765968322754},{""x"":3.0999999046325684,""y"":0.22075064480304718},{""x"":3.5999999046325684,""y"":0.5789918899536133},{""x"":4.099999904632568,""y"":0.21169911324977875},{""x"":4.599999904632568,""y"":0.27857646346092224},{""x"":5.099999904632568,""y"":1.0906332731246948},{""x"":5.599999904632568,""y"":1.8520300388336182},{""x"":6.099999904632568,""y"":2.7177059650421143},{""x"":6.599999904632568,""y"":2.8680918216705322},{""x"":7.099999904632568,""y"":3.2413077354431152}]}],""chartOptions"":{""xAxisName"":""Conc."",""yAxisName"":""Activity"",""title"":""Dose-Response curves""}}",text,,\nCanada,MMELVLKTIIGPIVVGVVLRIVDKWLNKDK,CC(C(=O)NCCS)c1cccc(c1)C(=O)c2ccccc2,1480017,36.26095962524414,99515,30-56 WHITESTONE EXPY,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,"COMPND \nATOM \nEND",flag,4,4,1IAN,4,1.23,<chart></chart>,"{""series"":[{""name"":""Run:2023-08-08"",""fitFunction"":""sigmoid"",""fitLineColor"":""#1f77b4"",""pointColor"":""#1f77b4"",""showPoints"":""points"",""parameters"":[0.8597390975430008, 1.0957625732481946, 5.260537067987958, 0.07974187998177736],""points"":[{""x"":0.10000000149011612,""y"":0.8190152645111084},{""x"":0.6000000238418579,""y"":0.8421689867973328},{""x"":1.100000023841858,""y"":0.8740922212600708},{""x"":1.600000023841858,""y"":0.8924275040626526},{""x"":2.0999999046325684,""y"":0.8249067664146423},{""x"":2.5999999046325684,""y"":0.9327669143676758},{""x"":3.0999999046325684,""y"":0.8522974252700806},{""x"":3.5999999046325684,""y"":0.8174492716789246},{""x"":4.099999904632568,""y"":0.8394647240638733},{""x"":4.599999904632568,""y"":0.7139387726783752},{""x"":5.099999904632568,""y"":0.5561167597770691},{""x"":5.599999904632568,""y"":0.3276226818561554},{""x"":6.099999904632568,""y"":0.12479474395513535},{""x"":6.599999904632568,""y"":0.13006797432899475},{""x"":7.099999904632568,""y"":0.059702079743146896}]},{""name"":""Run:2023-08-08"",""fitLineColor"":""#ffbb78"",""pointColor"":""#ffbb78"",""showPoints"":""points"",""parameters"":[5.760930219582546, 1.6591793293833013, 4.667155929720851, 0.7858109544121652],""points"":[{""x"":0.10000000149011612,""y"":6.156993389129639},{""x"":0.6000000238418579,""y"":5.236701965332031},{""x"":1.100000023841858,""y"":6.010560512542725},{""x"":1.600000023841858,""y"":5.495512962341309},{""x"":2.0999999046325684,""y"":6.087770462036133},{""x"":2.5999999046325684,""y"":5.79986572265625},{""x"":3.0999999046325684,""y"":5.597546577453613},{""x"":3.5999999046325684,""y"":5.520902156829834},{""x"":4.099999904632568,""y"":5.360654354095459},{""x"":4.599999904632568,""y"":3.5539746284484863},{""x"":5.099999904632568,""y"":1.577236294746399},{""x"":5.599999904632568,""y"":1.0001264810562134},{""x"":6.099999904632568,""y"":0.9305797815322876},{""x"":6.599999904632568,""y"":0.6033638715744019},{""x"":7.099999904632568,""y"":0.4203685522079468}]}],""chartOptions"":{""xAxisName"":""Conc."",""yAxisName"":""Activity"",""title"":""Dose-Response curves""}}",text,,\nColombia,MDRTDEVSNHTHDKPTLTWFEEIFEEYHSPFHN,FC(F)(F)c1ccc(OC2CCNCC2)cc1,1480029,36.3309440612793,995152050,1 COURT HOUSE SQUARE,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,"COMPND \nATOM \nEND",flag,5,5,4UJ1,5,1.23,<chart></chart>,"{""series"":[{""name"":""Run:2023-08-08"",""fitFunction"":""sigmoid"",""fitLineColor"":""#1f77b4"",""pointColor"":""#1f77b4"",""showPoints"":""points"",""parameters"":[6.4995088314153655, 2.4270351004539914, 5.178659535348579, 0.625653346241577],""points"":[{""x"":0.10000000149011612,""y"":6.496231555938721},{""x"":0.6000000238418579,""y"":6.42543363571167},{""x"":1.100000023841858,""y"":7.040063858032227},{""x"":1.600000023841858,""y"":6.1115403175354},{""x"":2.0999999046325684,""y"":6.680728435516357},{""x"":2.5999999046325684,""y"":6.406774520874023},{""x"":3.0999999046325684,""y"":6.611269474029541},{""x"":3.5999999046325684,""y"":5.889094352722168},{""x"":4.099999904632568,""y"":6.75344705581665},{""x"":4.599999904632568,""y"":6.361435890197754},{""x"":5.099999904632568,""y"":4.1666975021362305},{""x"":5.599999904632568,""y"":1.172118902206421},{""x"":6.099999904632568,""y"":0.801048994064331},{""x"":6.599999904632568,""y"":0.4640021026134491},{""x"":7.099999904632568,""y"":0.0010357667924836278}]},{""name"":""Run:2023-08-08"",""fitLineColor"":""#ffbb78"",""pointColor"":""#ffbb78"",""showPoints"":""points"",""parameters"":[1.4734381347446401, 1.1649805188074196, 4.82958608866421, 0.09500545496710007],""points"":[{""x"":0.10000000149011612,""y"":1.5279096364974976},{""x"":0.6000000238418579,""y"":1.3559974431991577},{""x"":1.100000023841858,""y"":1.5246378183364868},{""x"":1.600000023841858,""y"":1.5567657947540283},{""x"":2.0999999046325684,""y"":1.4114240407943726},{""x"":2.5999999046325684,""y"":1.4045010805130005},{""x"":3.0999999046325684,""y"":1.4769829511642456},{""x"":3.5999999046325684,""y"":1.4875500202178955},{""x"":4.099999904632568,""y"":1.2991987466812134},{""x"":4.599999904632568,""y"":0.922961413860321},{""x"":5.099999904632568,""y"":0.6520044803619385},{""x"":5.599999904632568,""y"":0.15350978076457977},{""x"":6.099999904632568,""y"":0.1078903079032898},{""x"":6.599999904632568,""y"":0.17276449501514435},{""x"":7.099999904632568,""y"":0.14066608250141144}]}],""chartOptions"":{""xAxisName"":""Conc."",""yAxisName"":""Activity"",""title"":""Dose-Response curves""}}",text,,\nCosta Rica,MKSTKEEIQTIKTLLKDSRTAKYHKRLQIVL,CC(C)Cc1ccc(cc1)C(C)C(=O)N2CCCC2C(=O)OCCCc3ccccc3,1480018,36.3309440612793,995084218,4041 SOUTHWESTERN BLVD,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,"COMPND \nATOM \nEND",flag,6,6,2BPW,6,1.23,<chart></chart>,"{""series"":[{""name"":""Run:2023-08-08"",""fitFunction"":""sigmoid"",""fitLineColor"":""#1f77b4"",""pointColor"":""#1f77b4"",""showPoints"":""points"",""parameters"":[2.4833641843311227, -1.8945978742090062, 4.671127708092568, 0.24159861311815153],""points"":[{""x"":0.10000000149011612,""y"":0.0969524160027504},{""x"":0.6000000238418579,""y"":0.028483040630817413},{""x"":1.100000023841858,""y"":0.22087176144123077},{""x"":1.600000023841858,""y"":0.0068915546871721745},{""x"":2.0999999046325684,""y"":0.4305879771709442},{""x"":2.5999999046325684,""y"":0.44774115085601807},{""x"":3.0999999046325684,""y"":0.45346319675445557},{""x"":3.5999999046325684,""y"":0.2370593100786209},{""x"":4.099999904632568,""y"":0.4657953977584839},{""x"":4.599999904632568,""y"":1.155200719833374},{""x"":5.099999904632568,""y"":2.2294070720672607},{""x"":5.599999904632568,""y"":2.4311530590057373},{""x"":6.099999904632568,""y"":2.33846116065979},{""x"":6.599999904632568,""y"":2.608201026916504},{""x"":7.099999904632568,""y"":2.8136143684387207}]},{""name"":""Run:2023-08-08"",""fitLineColor"":""#ffbb78"",""pointColor"":""#ffbb78"",""showPoints"":""points"",""parameters"":[5.224573521642033, 1.4454033924198528, 5.6014197746076535, 0.2823216054197577],""points"":[{""x"":0.10000000149011612,""y"":4.95027494430542},{""x"":0.6000000238418579,""y"":5.1754679679870605},{""x"":1.100000023841858,""y"":5.276752948760986},{""x"":1.600000023841858,""y"":5.589294910430908},{""x"":2.0999999046325684,""y"":5.616994857788086},{""x"":2.5999999046325684,""y"":5.120813846588135},{""x"":3.0999999046325684,""y"":5.340766906738281},{""x"":3.5999999046325684,""y"":4.876471042633057},{""x"":4.099999904632568,""y"":4.94999361038208},{""x"":4.599999904632568,""y"":5.162564754486084},{""x"":5.099999904632568,""y"":4.399557590484619},{""x"":5.599999904632568,""y"":2.7977969646453857},{""x"":6.099999904632568,""y"":1.0229872465133667},{""x"":6.599999904632568,""y"":0.48275601863861084},{""x"":7.099999904632568,""y"":0.10408931970596313}]}],""chartOptions"":{""xAxisName"":""Conc."",""yAxisName"":""Activity"",""title"":""Dose-Response curves""}}",text,,\nCuba,MHAILRYFIRRLFYHIFYKIYSLISKKHQSLPSDVRQF,COc1ccc2c(c1)c(CC(=O)N3CCCC3C(=O)Oc4ccc(C)cc4OC)c(C)n2C(=O)c5ccc(Cl)cc5,1480019,36.33115768432617,995081928,1227 US HIGHWAY 11,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,"COMPND \nATOM \nEND",flag,7,7,1QBS,7,1.23,<chart></chart>,"{""series"":[{""name"":""Run:2023-08-08"",""fitFunction"":""sigmoid"",""fitLineColor"":""#1f77b4"",""pointColor"":""#1f77b4"",""showPoints"":""points"",""parameters"":[3.320838679713925, -1.2421619987316728, 4.831325425225256, 0.3236011098403072],""points"":[{""x"":0.10000000149011612,""y"":0.3727470338344574},{""x"":0.6000000238418579,""y"":0.12365014106035233},{""x"":1.100000023841858,""y"":0.48422467708587646},{""x"":1.600000023841858,""y"":0.2264465093612671},{""x"":2.0999999046325684,""y"":0.16821794211864471},{""x"":2.5999999046325684,""y"":0.3879014551639557},{""x"":3.0999999046325684,""y"":0.5470244884490967},{""x"":3.5999999046325684,""y"":0.3419053554534912},{""x"":4.099999904632568,""y"":0.7655120491981506},{""x"":4.599999904632568,""y"":1.2346516847610474},{""x"":5.099999904632568,""y"":2.453336715698242},{""x"":5.599999904632568,""y"":2.9565491676330566},{""x"":6.099999904632568,""y"":3.335299491882324},{""x"":6.599999904632568,""y"":3.240290880203247},{""x"":7.099999904632568,""y"":3.1107218265533447}]},{""name"":""Run:2023-08-08"",""fitLineColor"":""#ffbb78"",""pointColor"":""#ffbb78"",""showPoints"":""points"",""parameters"":[3.6401853521511094, 1.26211588875013, 5.399028074402744, 0.5089580830068091],""points"":[{""x"":0.10000000149011612,""y"":3.8585598468780518},{""x"":0.6000000238418579,""y"":3.6077206134796143},{""x"":1.100000023841858,""y"":3.855252265930176},{""x"":1.600000023841858,""y"":3.619039297103882},{""x"":2.0999999046325684,""y"":3.839388370513916},{""x"":2.5999999046325684,""y"":3.335283041000366},{""x"":3.0999999046325684,""y"":3.571141481399536},{""x"":3.5999999046325684,""y"":3.4155046939849854},{""x"":4.099999904632568,""y"":3.7316646575927734},{""x"":4.599999904632568,""y"":3.0680155754089355},{""x"":5.099999904632568,""y"":2.891066551208496},{""x"":5.599999904632568,""y"":1.6022753715515137},{""x"":6.099999904632568,""y"":0.7652576565742493},{""x"":6.599999904632568,""y"":0.6875326037406921},{""x"":7.099999904632568,""y"":0.5828871726989746}]}],""chartOptions"":{""xAxisName"":""Conc."",""yAxisName"":""Activity"",""title"":""Dose-Response curves""}}",text,,\nItaly,MSNFHNEHVMQFYRNNLKTKGVFGRQ,CC(C)Cc1ccc(cc1)C(C)C(=O)N2CCCC2C(=O)OCCO[N+](=O)[O-],1480020,36.33115768432617,99502,"168-46 91ST AVE., 2ND FLR",https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,"COMPND \nATOM \nEND",flag,8,8,1ZP8,8,1.23,<chart></chart>,"{""series"":[{""name"":""Run:2023-08-08"",""fitFunction"":""sigmoid"",""fitLineColor"":""#1f77b4"",""pointColor"":""#1f77b4"",""showPoints"":""points"",""parameters"":[2.293592105923809, 1.3781586549141835, 5.1025898038676605, 0.03493851245291291],""points"":[{""x"":0.10000000149011612,""y"":2.1287283897399902},{""x"":0.6000000238418579,""y"":2.267972230911255},{""x"":1.100000023841858,""y"":2.398442506790161},{""x"":1.600000023841858,""y"":2.5130622386932373},{""x"":2.0999999046325684,""y"":2.3255116939544678},{""x"":2.5999999046325684,""y"":2.127340793609619},{""x"":3.0999999046325684,""y"":2.47259783744812},{""x"":3.5999999046325684,""y"":2.131181478500366},{""x"":4.099999904632568,""y"":2.090421438217163},{""x"":4.599999904632568,""y"":2.02299165725708},{""x"":5.099999904632568,""y"":1.1105059385299683},{""x"":5.599999904632568,""y"":0.4494485855102539},{""x"":6.099999904632568,""y"":0.1375635862350464},{""x"":6.599999904632568,""y"":0.036351121962070465},{""x"":7.099999904632568,""y"":0.1619771122932434}]},{""name"":""Run:2023-08-08"",""fitLineColor"":""#ffbb78"",""pointColor"":""#ffbb78"",""showPoints"":""points"",""parameters"":[5.953125499439879, 1.2528620255306528, 5.187637440149802, 0.3110348753260886],""points"":[{""x"":0.10000000149011612,""y"":5.6585283279418945},{""x"":0.6000000238418579,""y"":5.911152362823486},{""x"":1.100000023841858,""y"":5.924920082092285},{""x"":1.600000023841858,""y"":5.8469438552856445},{""x"":2.0999999046325684,""y"":5.929472923278809},{""x"":2.5999999046325684,""y"":6.190037727355957},{""x"":3.0999999046325684,""y"":6.236179828643799},{""x"":3.5999999046325684,""y"":6.141019344329834},{""x"":4.099999904632568,""y"":5.295210838317871},{""x"":4.599999904632568,""y"":5.265801906585693},{""x"":5.099999904632568,""y"":3.3722851276397705},{""x"":5.599999904632568,""y"":1.8299226760864258},{""x"":6.099999904632568,""y"":0.32690900564193726},{""x"":6.599999904632568,""y"":0.6274543404579163},{""x"":7.099999904632568,""y"":0.8441857099533081}]}],""chartOptions"":{""xAxisName"":""Conc."",""yAxisName"":""Activity"",""title"":""Dose-Response curves""}}",text,,\nRwanda,MPNSEPASLLELFNSIATQGELVRSLKAGNASK,CC(C)Cc1ccc(cc1)C(C)C(=O)N2CCCC2C(=O)OCCO,1480021,36.33137130737305,995037247,"168-46 91ST AVE., 2ND FLR",https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,"COMPND \nATOM \nEND",flag,9,9,2BDJ,9,1.23,<chart></chart>,"{""series"":[{""name"":""Run:2023-08-08"",""fitFunction"":""sigmoid"",""fitLineColor"":""#1f77b4"",""pointColor"":""#1f77b4"",""showPoints"":""points"",""parameters"":[3.8209972202654474, 1.3779216716448506, 5.299882228439686, 0.06040645519069608],""points"":[{""x"":0.10000000149011612,""y"":3.7821109294891357},{""x"":0.6000000238418579,""y"":3.542433023452759},{""x"":1.100000023841858,""y"":3.7008674144744873},{""x"":1.600000023841858,""y"":3.717301607131958},{""x"":2.0999999046325684,""y"":4.024452209472656},{""x"":2.5999999046325684,""y"":4.013899326324463},{""x"":3.0999999046325684,""y"":3.945094347000122},{""x"":3.5999999046325684,""y"":3.866621971130371},{""x"":4.099999904632568,""y"":3.7461626529693604},{""x"":4.599999904632568,""y"":3.3454740047454834},{""x"":5.099999904632568,""y"":2.61944317817688},{""x"":5.599999904632568,""y"":0.999405026435852},{""x"":6.099999904632568,""y"":0.46259793639183044},{""x"":6.599999904632568,""y"":0.054134611040353775},{""x"":7.099999904632568,""y"":0.05711187422275543}]},{""name"":""Run:2023-08-08"",""fitLineColor"":""#ffbb78"",""pointColor"":""#ffbb78"",""showPoints"":""points"",""parameters"":[5.6318079657726035, 1.8495493770000595, 5.391793312471116, 0.17060707587348442],""points"":[{""x"":0.10000000149011612,""y"":5.458079814910889},{""x"":0.6000000238418579,""y"":5.554427146911621},{""x"":1.100000023841858,""y"":5.799983024597168},{""x"":1.600000023841858,""y"":5.364140033721924},{""x"":2.0999999046325684,""y"":5.864485740661621},{""x"":2.5999999046325684,""y"":5.4509806632995605},{""x"":3.0999999046325684,""y"":5.702574729919434},{""x"":3.5999999046325684,""y"":5.7314534187316895},{""x"":4.099999904632568,""y"":5.5123443603515625},{""x"":4.599999904632568,""y"":5.724395751953125},{""x"":5.099999904632568,""y"":4.354506969451904},{""x"":5.599999904632568,""y"":1.7307666540145874},{""x"":6.099999904632568,""y"":0.6305936574935913},{""x"":6.599999904632568,""y"":0.035183437168598175},{""x"":7.099999904632568,""y"":0.7575169205665588}]}],""chartOptions"":{""xAxisName"":""Conc."",""yAxisName"":""Activity"",""title"":""Dose-Response curves""}}",text,,\nSwitzerland,IRVVGRYLIEVWKAAGMDMDKVLFLWSSDEI,CN1CCC(CC1)Oc2ccc(cc2)C(F)(F)F,1480028,36.33137130737305,99504,92-11 179TH PLACE,https://datagrok.ai/img/slides/access-db-connect.png,id,ErrorMessage,"COMPND \nATOM \nEND",flag,9,10,1IAN,10,1.23,<chart></chart>,"{""series"":[{""name"":""Run:2023-08-08"",""fitFunction"":""sigmoid"",""fitLineColor"":""#1f77b4"",""pointColor"":""#1f77b4"",""showPoints"":""points"",""parameters"":[1.1190255865097471, 2.3163895161544437, 5.4968866182279195, 0.2035204047289052],""points"":[{""x"":0.10000000149011612,""y"":1.1057683229446411},{""x"":0.6000000238418579,""y"":1.1019697189331055},{""x"":1.100000023841858,""y"":1.0818607807159424},{""x"":1.600000023841858,""y"":1.062997817993164},{""x"":2.0999999046325684,""y"":1.046447515487671},{""x"":2.5999999046325684,""y"":1.1217249631881714},{""x"":3.0999999046325684,""y"":1.2166996002197266},{""x"":3.5999999046325684,""y"":1.215477705001831},{""x"":4.099999904632568,""y"":1.0581893920898438},{""x"":4.599999904632568,""y"":1.1747995615005493},{""x"":5.099999904632568,""y"":1.0181127786636353},{""x"":5.599999904632568,""y"":0.5344523191452026},{""x"":6.099999904632568,""y"":0.2569526433944702},{""x"":6.599999904632568,""y"":0.1912207305431366},{""x"":7.099999904632568,""y"":0.15060538053512573}]},{""name"":""Run:2023-08-08"",""fitLineColor"":""#ffbb78"",""pointColor"":""#ffbb78"",""showPoints"":""points"",""parameters"":[3.1038581025805785, 2.0032224204185245, 5.087602825989163, 0.13277988512492753],""points"":[{""x"":0.10000000149011612,""y"":3.0498509407043457},{""x"":0.6000000238418579,""y"":2.805217742919922},{""x"":1.100000023841858,""y"":3.3415253162384033},{""x"":1.600000023841858,""y"":3.0549843311309814},{""x"":2.0999999046325684,""y"":3.250074863433838},{""x"":2.5999999046325684,""y"":3.0432586669921875},{""x"":3.0999999046325684,""y"":3.265852451324463},{""x"":3.5999999046325684,""y"":2.9475724697113037},{""x"":4.099999904632568,""y"":3.1929898262023926},{""x"":4.599999904632568,""y"":2.7460060119628906},{""x"":5.099999904632568,""y"":1.6175861358642578},{""x"":5.599999904632568,""y"":0.3006608486175537},{""x"":6.099999904632568,""y"":0.3444803059101105},{""x"":6.599999904632568,""y"":0.015537971630692482},{""x"":7.099999904632568,""y"":0.5527358055114746}]}],""chartOptions"":{""xAxisName"":""Conc."",""yAxisName"":""Activity"",""title"":""Dose-Response curves""}}",text,,\n,,,,,,,,,,,,,,,,,,,,,');e.columns.add(DG.Column.fromList(DG.TYPE.BYTE_ARRAY,"BinaryImage",Array.from(new Uint8Array(11))));var n=function(t,e,n,o){return new(n||(n=Promise))(function(r,i){function s(t){try{l(o.next(t))}catch(t){i(t)}}function a(t){try{l(o.throw(t))}catch(t){i(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((o=o.apply(t,e||[])).next())})};const o=3e4,r=108e5,i=console.log.bind(console),l=console.info.bind(console),u=console.warn.bind(console),c=console.error.bind(console),f={},d="Auto Tests",h="Demo",m="Detectors",p="Core",g={};let v;var y;!function(t){t.notNull=function(t,e){if(null==t)throw new Error(`${null==e?"Value":e} not defined`)}}(y||(y={}));class A{constructor(t,e,n){this.catchUnhandled=!0,this.report=!1,this.returnOnFail=!1,void 0!==t&&(this.catchUnhandled=t),void 0!==e&&(this.report=e),void 0!==n&&(this.returnOnFail=n)}}class w{constructor(t,e,r,i){var s;this.category=t,this.name=e,null!=i||(i={}),null!==(s=i.timeout)&&void 0!==s||(i.timeout=o),this.options=i,this.test=()=>n(this,void 0,void 0,function*(){return new Promise((t,e)=>n(this,void 0,void 0,function*(){var n;let o="";try{DG.Test.isInDebug;let t=yield r();try{o=null!==(n=null==t?void 0:t.toString())&&void 0!==n?n:""}catch(t){o="Can't convert test's result to string",console.error(`Can't convert test's result to string in the ${this.category}:${this.name} test`)}}catch(t){e(t)}t(o)}))})}}function C(t,e,n){null==f[v]&&(f[v]={}),null==f[v].tests&&(f[v].tests=[]),f[v].tests.push(new w(v,t,e,n))}function E(t,e=!0,n){if(n=n?`${n}, `:"",t!==e)throw new Error(`${n}Expected "${e}", got "${t}"`)}function b(t,e,n){var o;v=t,e(),f[v]&&(f[v].clear=null===(o=null==n?void 0:n.clear)||void 0===o||o,f[v].timeout=null==n?void 0:n.timeout,f[v].benchmarks=null==n?void 0:n.benchmarks,f[v].stressTests=null==n?void 0:n.stressTests,f[v].owner=null==n?void 0:n.owner)}function x(t,e){return t.replace(new RegExp(e.name,"gi"),e.nqName)}function _(t,i){var s,a,l,u,c,v,y,A,C,b;return n(this,void 0,void 0,function*(){const _=t.id;if(g[_])return;const N=i?i.tests:f;if("DevTools"===t.name||i&&"DevTools"===i._package.name)for(const t of window.dartTests){const e=t.name.split(/\s*\|\s*!/g);let n=null!==(s=e.pop())&&void 0!==s?s:t.name,r=e.length?p+": "+e.join(": "):p,i=n.split(" | ");n=i[i.length-1],i.unshift(r),i.pop(),r=i.join(": "),void 0===N[r]&&(N[r]={tests:[],clear:!0}),N[r].tests.push(new w(r,n,t.test,{isAggregated:!1,timeout:null!==(l=null===(a=t.options)||void 0===a?void 0:a.timeout)&&void 0!==l?l:o,skipReason:null===(u=t.options)||void 0===u?void 0:u.skipReason,owner:null===(c=t.options)||void 0===c?void 0:c.owner,benchmark:null!==(y=null===(v=t.options)||void 0===v?void 0:v.benchmark)&&void 0!==y&&y}))}const M=[],T=[],O=[],I=yield grok.dapi.functions.filter(`package.id = "${_}"`).list(),L=new RegExp(/skip:\s*([^,\s]+)|wait:\s*(\d+)|cat:\s*([^,\s]+)|timeout:\s*(\d+)/g);for(const i of I){const s=i.options.test,a=i.options.demoPath;if(s&&Array.isArray(s)&&s.length)for(let t=0;t<s.length;t++){const e=s[t].matchAll(L),a={};Array.from(e).forEach(t=>{t[0].startsWith("skip")?a.skip=t[1]:t[0].startsWith("wait")?a.wait=parseInt(t[2]):t[0].startsWith("cat")?a.cat=t[3]:t[0].startsWith("timeout")&&(a.timeout=parseInt(t[4]))});const l=new w(null!==(A=a.cat)&&void 0!==A?A:d,1===s.length?i.name:`${i.name} ${t+1}`,()=>n(this,void 0,void 0,function*(){const e=yield grok.functions.eval(x(s[t],i));if(a.wait&&(yield S(a.wait)),"boolean"==typeof e&&!e)throw`Failed: ${s[t]}, expected true, got ${e}`}),{skipReason:a.skip,timeout:DG.Test.isInBenchmark?null!==(C=a.benchmarkTimeout)&&void 0!==C?C:r:null!==(b=a.timeout)&&void 0!==b?b:o});if(a.cat){const t=a.cat;void 0===N[t]&&(N[t]={tests:[],clear:!0}),N[t].tests||(N[t].tests=[]),N[t].tests.push(l)}else M.push(l)}if(a){const t=i.options.demoWait?parseInt(i.options.demoWait):void 0,e=new w(h,i.friendlyName,()=>n(this,void 0,void 0,function*(){yield S(300),grok.shell.clearLastError(),yield i.apply(),yield S(t||2e3);const e=yield grok.shell.lastError;if(e)throw new Error(e)}),{skipReason:i.options.demoSkip});T.push(e)}if(i.hasTag("semTypeDetector")){let o=e;i.options.testData&&(o=yield grok.data.files.openTable(`System:AppData/${t.nqName}/${i.options.testData}`));const r=new w(m,i.friendlyName,()=>n(this,void 0,void 0,function*(){const e=[];console.log(`System:AppData/${t.nqName}/${i.options.testData}`);for(const t of o.clone().columns){const n=yield i.apply([t]);e.push(n||t.semType)}const n=e.filter(t=>t);E(n.length,1),i.options.testDataColumnName&&E(n[0],i.options.testDataColumnName)}),{skipReason:i.options.skipTest});O.push(r)}}g[_]=!0,M.length>0&&(N[d]={tests:M,clear:!0}),T.length>0&&(N[h]={tests:T,clear:!0}),O.length>0&&(N[m]={tests:O,clear:!1})})}function N(t){return n(this,void 0,void 0,function*(){return`${t.toString()}\n${t.stack?yield DG.Logger.translateStackTrace(t.stack):""}`})}function M(t,e,r,s,a,l){var u,f,d,h,m,p,g,v,y,A,w,C,E,b;return n(this,void 0,void 0,function*(){let n;r.length=0;const x=null!=e&&t.name.toLowerCase()!==e.toLowerCase();let _=(null===(u=t.options)||void 0===u?void 0:u.skipReason)||x,M=x?"skipped":null===(f=t.options)||void 0===f?void 0:f.skipReason;if(DG.Test.isInBenchmark&&!(null===(d=t.options)||void 0===d?void 0:d.benchmark))return void i(`Package testing: Skipped {{${t.category}}} {{${t.name}}} doesnt available in benchmark mode`);_&&!DG.Test.isInBenchmark&&i(`Package testing: Skipped {{${t.category}}} {{${t.name}}}`),_||i(`Package testing: Started {{${t.category}}} {{${t.name}}}`);const T=Date.now(),S=new Date(T).toISOString();try{if(_)n={name:t.name,owner:null!==(m=null===(h=t.options)||void 0===h?void 0:h.owner)&&void 0!==m?m:"",category:t.category,logs:"",date:S,success:!0,result:M,ms:0,skipped:!0,package:null!=a?a:"",flaking:DG.Test.isReproducing};else{let e=null!=s?s:o;DG.Test.isProfiling&&console.profile(`${t.category}: ${t.name}`),n={name:t.name,owner:null!==(g=null===(p=t.options)||void 0===p?void 0:p.owner)&&void 0!==g?g:"",category:t.category,logs:"",date:S,success:!0,result:null!==(v=(yield O(t.test,e)).toString())&&void 0!==v?v:"OK",ms:0,skipped:!1,package:null!=a?a:"",flaking:DG.Test.isReproducing},DG.Test.isProfiling&&(console.profileEnd(`${t.category}: ${t.name}`),grok.shell.info(`Profiling of ${t.category}: ${t.name} finished \n Please ensure that you have opened DevTools (F12) / Performance panel before test starts.`))}}catch(e){c(e),n={name:t.name,owner:null!==(A=null===(y=t.options)||void 0===y?void 0:y.owner)&&void 0!==A?A:"",category:t.category,logs:"",date:S,success:!1,result:yield N(e),ms:0,skipped:!1,package:null!=a?a:"",flaking:!1}}if((null===(w=t.options)||void 0===w?void 0:w.isAggregated)&&n.result.constructor===DG.DataFrame){const t=n.result.col("success");if(t&&(n.success=t.stats.sum===t.length),!l){const t=n.result;t.columns.remove("stack"),t.rows.removeWhere(t=>t.get("success")),n.result=t}n.result=n.result.toCsv()}if(n.logs=r.join("\n"),n.ms=Date.now()-T,_||i(`Package testing: Finished {{${t.category}}} {{${t.name}}} with {{${n.success?"success":"error"}}} for ${n.ms} ms`),n.success||i(`Package testing: Result for {{${t.category}}} {{${t.name}}}: ${n.result}`),n.category=t.category,n.name=t.name,n.owner=null!==(E=null===(C=t.options)||void 0===C?void 0:C.owner)&&void 0!==E?E:"",!x){let e={success:n.success,result:n.result,ms:n.ms,date:n.date,skipped:n.skipped,category:t.category,name:t.name,logs:n.logs,owner:n.owner,flaking:DG.Test.isReproducing&&n.success,package:n.package};if(n.result.constructor==Object){const t=Object.keys(n.result).reduce((t,e)=>Object.assign(Object.assign({},t),{["result."+e]:n.result[e]}),{});e=Object.assign(Object.assign({},e),t)}e.result instanceof DG.DataFrame&&(e.result=JSON.stringify(null===(b=e.result)||void 0===b?void 0:b.toJson())||""),yield grok.shell.reportTest("package",e)}return n})}function T(t){const e=t.slice();return e.sort(()=>Math.random()-.5),e}function S(t){return n(this,void 0,void 0,function*(){yield new Promise(e=>setTimeout(e,t))})}function O(t,e,o="EXECUTION TIMEOUT"){return n(this,void 0,void 0,function*(){let n=null;const r=new Promise((t,r)=>{n=setTimeout(()=>{r(o)},e)});try{return yield Promise.race([t(),r])}finally{n&&clearTimeout(n)}})}DG.DataFrame.fromColumns([DG.Column.fromStrings("col",["val1","val2","val3"])]);const I=grok;var L,P,R,F,D,B,k,U;!function(t){t.UMAP="UMAP",t.T_SNE="t-SNE"}(L||(L={})),function(t){t.Levenshtein="Levenshtein",t.JaroWinkler="Jaro-Winkler",t.Manhattan="Manhattan String",t.Onehot="One-Hot"}(P||(P={})),function(t){t.Euclidean="Euclidean",t.Manhattan="Manhattan",t.Cosine="Vector Cosine"}(R||(R={})),function(t){t.Tanimoto="Tanimoto",t.Dice="Dice",t.Asymmetric="Asymmetric",t.BraunBlanquet="Braun-Blanquet",t.Cosine="Cosine",t.Kulczynski="Kulczynski",t.McConnaughey="Mc-Connaughey",t.RogotGoldberg="Rogot-Goldberg",t.Russel="Russel",t.Sokal="Sokal",t.Hamming="Hamming",t.Euclidean="Euclidean BitArray"}(F||(F={})),function(t){t.TanimotoIntArray="TanimotoIntArray"}(D||(D={})),function(t){t.Vector="Vector",t.String="String",t.BitArray="BitArray",t.MacroMolecule="MacroMolecule",t.Number="Number",t.IntArray="IntArray",t.NumberArray="NumberArray"}(B||(B={})),function(t){t.Difference="Difference"}(k||(k={})),function(t){t.CommonItems="Common Items"}(U||(U={}));const V=new Uint32Array(65536),G=(t,e)=>{if(t.length<e.length){const n=e;e=t,t=n}return 0===e.length?t.length:t.length<=32?((t,e)=>{const n=t.length,o=e.length,r=1<<n-1;let i=-1,s=0,a=n,l=n;for(;l--;)V[t.charCodeAt(l)]|=1<<l;for(l=0;l<o;l++){let t=V[e.charCodeAt(l)];const n=t|s;t|=(t&i)+i^i,s|=~(t|i),i&=t,s&r&&a++,i&r&&a--,s=s<<1|1,i=i<<1|~(n|s),s&=n}for(l=n;l--;)V[t.charCodeAt(l)]=0;return a})(t,e):((t,e)=>{const n=e.length,o=t.length,r=[],i=[],s=Math.ceil(n/32),a=Math.ceil(o/32);for(let t=0;t<s;t++)i[t]=-1,r[t]=0;let l=0;for(;l<a-1;l++){let s=0,a=-1;const u=32*l,c=Math.min(32,o)+u;for(let e=u;e<c;e++)V[t.charCodeAt(e)]|=1<<e;for(let t=0;t<n;t++){const n=V[e.charCodeAt(t)],o=i[t/32|0]>>>t&1,l=r[t/32|0]>>>t&1,u=n|s,c=((n|l)&a)+a^a|n|l;let f=s|~(c|a),d=a&c;f>>>31^o&&(i[t/32|0]^=1<<t),d>>>31^l&&(r[t/32|0]^=1<<t),f=f<<1|o,d=d<<1|l,a=d|~(u|f),s=f&u}for(let e=u;e<c;e++)V[t.charCodeAt(e)]=0}let u=0,c=-1;const f=32*l,d=Math.min(32,o-f)+f;for(let e=f;e<d;e++)V[t.charCodeAt(e)]|=1<<e;let h=o;for(let t=0;t<n;t++){const n=V[e.charCodeAt(t)],s=i[t/32|0]>>>t&1,a=r[t/32|0]>>>t&1,l=n|u,f=((n|a)&c)+c^c|n|a;let d=u|~(f|c),m=c&f;h+=d>>>o-1&1,h-=m>>>o-1&1,d>>>31^s&&(i[t/32|0]^=1<<t),m>>>31^a&&(r[t/32|0]^=1<<t),d=d<<1|s,m=m<<1|a,c=m|~(l|d),u=d&l}for(let e=f;e<d;e++)V[t.charCodeAt(e)]=0;return h})(t,e)};var $=s(944);class H{constructor(t,e=!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 n=t,o=H._createBuffer(n);if(e)for(let t=0;t<o.length;t++)o[t]=-1;this._data=o,this._length=n}else{if(!(t instanceof Uint32Array))throw new Error("Invalid constructor");this._data=t,this._length=e}}getRawData(){return this._data}assureGoez(t,e){if(t<0)throw new Error(`${e} should be greater than zero`)}assureInRange(t,e,n,o){if(t<e||t>n)throw new Error(`Argument ${o} (${t}) out of range (${e}, ${n})`)}copy(t,e,n){for(let o=0;o<n;o++)e[o]=t[o]}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 e=Math.floor((t+31)/32);if(e>this._data.length||e+this.SHRINK_THRESHOLD<this._data.length){const t=new Uint32Array(e);this.copy(this._data,t,e>this._data.length?this._data.length:e),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,e)),this._length=t,this._version++}static fromAnd(t,e){if(t._length!=e._length)throw new Error(`Lengths differ (${t._length} != ${e._length})`);const n=new H(t._length);n._length=t._length,n._data=H._createBuffer(n._length),n._version=0;const o=t.lengthInInts;for(let r=0;r<o;r++)n._data[r]=t._data[r]&e._data[r];return n}static _createBuffer(t){return new Uint32Array(Math.floor((t+31)/32))}static fromValues(t){const e=new H(t.length);e._version=0;for(let n=0;n<e._length;n++)t[n]&&(e._data[Math.floor(n/32)]|=1<<(n%32&31));return e}static fromSeq(t,e){const n=new H(t);for(let o=0;o<t;++o)n.setBit(o,e(o));return n._version=0,n}static fromString(t){return H.fromSeq(t.length,e=>"1"==t.charAt(e))}static fromUint32Array(t,e){const n=new H(t);return n._data=e,n}static fromBytes(t){const e=t.length,n=new H(8*e);n._data=new Uint32Array(Math.floor((e+3)/4)),n._length=8*e;let o=0,r=0;for(;e-r>=4;)n._data[o++]=255&t[r]|(255&t[r+1])<<8|(255&t[r+2])<<16|(255&t[r+3])<<24,r+=4;return e-r==3&&(n._data[o]=(255&t[r+2])<<16),e-r==2&&(n._data[o]|=(255&t[r+1])<<8),e-r==1&&(n._data[o]|=255&t[r]),n._version=0,n}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 e=0;e<this._data.length-1;e++)if(this._data[e]!=t._data[e])return!1;for(let e=8*(this._data.length-1);e<this._length;e++)if(this.getBit(e)!=t.getBit(e))return!1;return!0}clone(){const t=new H(0,!1);return t._data=Uint32Array.from(this._data),t._length=this._length,t._version=this._version,t}init(t,e){this.setAll(!1,!1);for(let e=0;e<this._length;e++)t(e)&&(this._data[Math.floor(e/32)]|=1<<(e%32&31));return this.incrementVersion(e),this}invert(t=!0){for(let t=0;t<this._data.length;t++)this._data[t]^=-1;this.incrementVersion(t)}setAll(t,e=!1){const n=t?-1:0,o=this.lengthInInts;for(let t=0;t<o;t++)this._data[t]=n;this.incrementVersion(e)}setIndexes(t,e=!0,n=!0,o=!0){n&&this.setAll(!e,!1);for(const n of t)this.setFast(n,e);this.incrementVersion(o)}everyIndex(t,e=!0){for(const n of t)if(this.getBit(n)!=e)return!1;return!0}anyIndex(t,e=!0){for(const n of t)if(this.getBit(n)==e)return!0;return!1}setWhere(t,e=!0,n=!0,o=!0,r=!0){if(n&&r&&this.setAll(!e,!1),r)for(let n=0;n<this._length;n++)t(n)&&this.setFast(n,e);else for(let n=0;n<this._length;n++)this.setFast(n,t(n)?e:!e);this.incrementVersion(o)}getRange(t,e){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(e,0,this._length,"to");const n=[];for(let o=t;o<e;++o)n.push(this.getBit(o));return H.fromValues(n)}getRangeAsList(t,e){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(e,0,this._length,"to");const n=[];for(let o=t;o<e;++o)n.push(this.getBit(o));return n}setRange(t,e,n,o=!0){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(e,0,this._length-1,"to");const r=Math.min(t,e),i=Math.max(t,e);if(n)for(let t=r;t<=i;t++)this.setTrue(t);else for(let t=r;t<=i;t++)this.setFalse(t);return this.incrementVersion(o),this}setRandom(t,e,n=!0){if(t<0||t>this._length)throw new Error("n must be >= 0 && <= Count");t>this._length/2&&this.setRandom(this._length-t,!e),this.setAll(!e);for(let n=0;n<t;){const t=Math.floor(Math.random()*this._length);this.getBit(t)!=e&&(this.setFast(t,e),n++)}this.incrementVersion(n)}and(t,e=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let e=0,n=this.lengthInInts;e<n;e++)this._data[e]&=t._data[e];return this.incrementVersion(e),this}andNot(t,e=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");const n=this.lengthInInts;for(let e=0;e<n;e++)this._data[e]&=~t._data[e];return this.incrementVersion(e),this}notAnd(t,e=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let e=0,n=this.lengthInInts;e<n;e++)this._data[e]=~this._data[e]&t._data[e];return this.incrementVersion(e),this}not(t=!0){for(let t=0,e=this.lengthInInts;t<e;t++)this._data[t]=~this._data[t];return this.incrementVersion(t),this}or(t,e=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let e=0,n=this.lengthInInts;e<n;e++)this._data[e]|=t._data[e];return this.incrementVersion(e),this}xor(t,e=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let e=0,n=this.lengthInInts;e<n;e++)this._data[e]^=t._data[e];return this.incrementVersion(e),this}insertAt(t,e,n=!1){if(this.assureInRange(t,0,this._length,"pos"),0==e)return;const o=this._length;this.setLength(this._length+e);for(let n=o-1;n>=t;n--)this.setBit(n+e,this.getBit(n));for(let o=t;o<t+e;o++)this.setBit(o,n)}removeAt(t,e=1){if(e<0)throw new Error("n cannot be negative");if(this.assureInRange(t,0,this._length-e,"pos"),this.contains(!0))for(let n=t;n<this._length-e;n++)this.setBit(n,this.getBit(n+e));this.setLength(this._length-e)}removeByMask(t,e=!0){if(this._length!=t.length)throw new Error("length != mask.length");if(t==this)this.setLength(t.countBits(!e)),this.setAll(!e);else{let n=0;for(let o=-1;-1!=(o=t.findNext(o,!e));)this.setFast(n++,this.getBit(o));this._length=n,this._version++}return this}getBit(t){return!!(this._data[Math.floor(t/32)]&1<<(31&t))}setBit(t,e,n=!0){this.setFast(t,e),this._version++}setFast(t,e){e?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 e=0;for(;e<t-1;e++)for(let t=this._data[e];0!=t;t>>>=8)this._selectedCount+=H._onBitCount[255&t];let n=this._data[e];const o=31&this._length;for(0!=o&&(n&=~(4294967295<<o));0!=n;n>>>=8)this._selectedCount+=H._onBitCount[255&n];this._selectedCountVersion=this._version}return t?this._selectedCount:this._length-this._selectedCount}countWhere(t){let e=0;if(this.trueCount()==this._length)for(let n=0;n<this._length;n++)e+=t(n)?1:0;else for(let n=-1;-1!=(n=this.findNext(n,!0));)e+=t(n)?1:0;return e}andWithCountBits(t,e){if(0==this._length)return 0;let n=0;const o=this.lengthInInts;let r=0;for(;r<o-1;r++)for(let e=this._data[r]&t._data[r];0!=e;e>>>=8)n+=H._onBitCount[255&e];let i=this._data[r]&t._data[r];const s=31&this._length;for(0!=s&&(i&=~(4294967295<<s));0!=i;i>>>=8)n+=H._onBitCount[255&i];return e?n:this._length-n}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,e=!0){if(this.assureInRange(t,-1,this._length,"index"),t>=this._length-1)return-1;let n=31&(t=t<0?0:t+1);const o=this.lengthInInts;for(let r=Math.floor(t/32);r<o;r++){let o=e?this._data[r]:~this._data[r];if(0!=n)o&=4294967295<<n&4294967295,n=0;else if(!e&&-4294967296==o)continue;for(let e=0;0!=o;e+=8,o>>>=8){const n=H._firstOnBit[255&o];if(n>=0)return(t=n+32*r+e)>=this._length?-1:t}}return-1}findPrev(t,e=!0){if(0==t)return-1;this.assureInRange(t,-1,this._length,"index");let n=1+(t=t<0?this._length-1:t-1)&31;for(let o=Math.floor(t/32);o>=0;o--){let t=e?this._data[o]:~this._data[o];0!=n&&(t&=~(4294967295<<n),n=0);for(let e=24;0!=t;e-=8,t<<=8){const n=H._lastOnBit[t>>>24];if(n>=0)return n+32*o+e}}return-1}}function q(t={}){const e=function(){if(!t||!t.scoringMatrix||!t.alphabetIndexes)return(t,e)=>t===e?0:1;if(t.scoringMatrix.length!==Object.keys(t.alphabetIndexes).length)throw new Error("Scoring matrix and alphabet indexes should have the same length");const e=t.alphabetIndexes,n=t.scoringMatrix,o=Math.min(...Object.keys(e).map(t=>t.charCodeAt(0)))+1,r=new Float32Array((n.length+o)*(n.length+o));return Object.entries(e).forEach(([t,o])=>{const i=n[o];Object.entries(e).forEach(([e,o])=>{r[t.charCodeAt(0)*n.length+e.charCodeAt(0)]=i[o]})}),(t,e)=>1-r[t.charCodeAt(0)*n.length+e.charCodeAt(0)]}(),n=t?.threshold??0;return(t,o)=>{let r=0;const i=t.length,s=o.length,a=Math.ceil(Math.max(i,s)*(1-n));i!==s&&(r=Math.abs(i-s));let l=0;for(let n=0;n<Math.min(i,s);n++)if(t[n]!==o[n]&&(l+=e(t[n],o[n]),l>a))return 1;return l+=r,l/=Math.max(i,s),l}}H._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]),H._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]),H._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]);const Y={gapOpen:1,gapExtend:.6,scoringMatrix:[[4,-1,-2,-2,0,-1,-1,0,-2,-1,-1,-1,-1,-2,-1,1,0,-3,-2,0,-2,-1,0,-4],[-1,5,0,-2,-3,1,0,-2,0,-3,-2,2,-1,-3,-2,-1,-1,-3,-2,-3,-1,0,-1,-4],[-2,0,6,1,-3,0,0,0,1,-3,-3,0,-2,-3,-2,1,0,-4,-2,-3,3,0,-1,-4],[-2,-2,1,6,-3,0,2,-1,-1,-3,-4,-1,-3,-3,-1,0,-1,-4,-3,-3,4,1,-1,-4],[0,-3,-3,-3,9,-3,-4,-3,-3,-1,-1,-3,-1,-2,-3,-1,-1,-2,-2,-1,-3,-3,-2,-4],[-1,1,0,0,-3,5,2,-2,0,-3,-2,1,0,-3,-1,0,-1,-2,-1,-2,0,3,-1,-4],[-1,0,0,2,-4,2,5,-2,0,-3,-3,1,-2,-3,-1,0,-1,-3,-2,-2,1,4,-1,-4],[0,-2,0,-1,-3,-2,-2,6,-2,-4,-4,-2,-3,-3,-2,0,-2,-2,-3,-3,-1,-2,-1,-4],[-2,0,1,-1,-3,0,0,-2,8,-3,-3,-1,-2,-1,-2,-1,-2,-2,2,-3,0,0,-1,-4],[-1,-3,-3,-3,-1,-3,-3,-4,-3,4,2,-3,1,0,-3,-2,-1,-3,-1,3,-3,-3,-1,-4],[-1,-2,-3,-4,-1,-2,-3,-4,-3,2,4,-2,2,0,-3,-2,-1,-2,-1,1,-4,-3,-1,-4],[-1,2,0,-1,-3,1,1,-2,-1,-3,-2,5,-1,-3,-1,0,-1,-3,-2,-2,0,1,-1,-4],[-1,-1,-2,-3,-1,0,-2,-3,-2,1,2,-1,5,0,-2,-1,-1,-1,-1,1,-3,-1,-1,-4],[-2,-3,-3,-3,-2,-3,-3,-3,-1,0,0,-3,0,6,-4,-2,-2,1,3,-1,-3,-3,-1,-4],[-1,-2,-2,-1,-3,-1,-1,-2,-2,-3,-3,-1,-2,-4,7,-1,-1,-4,-3,-2,-2,-1,-2,-4],[1,-1,1,0,-1,0,0,0,-1,-2,-2,0,-1,-2,-1,4,1,-3,-2,-2,0,0,0,-4],[0,-1,0,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-2,-1,1,5,-2,-2,0,-1,-1,0,-4],[-3,-3,-4,-4,-2,-2,-3,-2,-2,-3,-2,-3,-1,1,-4,-3,-2,11,2,-3,-4,-3,-2,-4],[-2,-2,-2,-3,-2,-1,-2,-3,2,-1,-1,-2,-1,3,-3,-2,-2,2,7,-1,-3,-2,-1,-4],[0,-3,-3,-3,-1,-2,-2,-3,-3,3,1,-2,1,-1,-2,-2,0,-3,-1,4,-3,-2,-1,-4],[-2,-1,3,4,-3,0,1,-1,0,-3,-4,0,-3,-3,-2,0,-1,-4,-3,-3,4,1,-1,-4],[-1,0,0,1,-3,3,4,-2,0,-3,-3,1,-1,-3,-1,0,-1,-3,-2,-2,1,4,-1,-4],[0,-1,-1,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-2,0,0,-2,-1,-1,-1,-1,-1,-4],[-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,1]],alphabetIndexes:{A:0,R:1,N:2,D:3,C:4,Q:5,E:6,G:7,H:8,I:9,L:10,K:11,M:12,F:13,P:14,S:15,T:16,W:17,Y:18,V:19,B:20,Z:21,X:22,"*":23}};var W;!function(t){t.HAMMING="Hamming",t.LEVENSHTEIN="Levenshtein",t.NEEDLEMANN_WUNSCH="Needlemann-Wunsch",t.MONOMER_CHEMICAL_DISTANCE="Monomer chemical distance"}(W||(W={}));const j={[W.HAMMING]:q,[W.LEVENSHTEIN]:function(){return(t,e)=>G(t,e)/Math.max(t.length,e.length)},[W.NEEDLEMANN_WUNSCH]:function(t){const e=new Uint16Array(65536),{gapOpen:n,gapExtend:o,scoringMatrix:r,alphabetIndexes:i}={...Y,...t};Object.entries(i).forEach(([t,n])=>e[t.charCodeAt(0)]=n);const s=[new Float32Array(1e4),new Float32Array(1e4)];return(t,i)=>{const a=new Array(t.length+1).fill(!1),l=new Array(t.length+1).fill(!1);let u=0,c=1;for(let e=1;e<t.length+1;e++)s[0][e]=-o-(e-1)*o,s[1][e]=0;s[0][0]=0;for(let f=1;f<i.length+1;f++){s[c][0]=-o-(f-1)*o;for(let d=1;d<t.length+1;d++){const h=s[u][d-1]+r[e[t.charCodeAt(d-1)]][e[i.charCodeAt(f-1)]],m=s[u][d]-(a[d]||1===f||f===i.length?o:n),p=s[c][d-1]-(l[d-1]||1===d||d===t.length?o:n);s[c][d]=Math.max(h,p,m),s[c][d]===h?(a[d]=!1,l[d]=!1):s[c][d]===p?(a[d]=!1,l[d]=!0):(a[d]=!0,l[d]=!1)}u=c,c=(c+1)%2}const f=Math.min(t.length,i.length);return(f-s[u][t.length])/f}},[W.MONOMER_CHEMICAL_DISTANCE]:q};function X(t,e){const n=t.trueCount()+e.trueCount();if(0==n)return 1;const o=t.andWithCountBits(e,!0);return o/(n-o)}function z(t){return t<=0?3402823e32:1/t-1}F.Tanimoto,F.Dice,F.Asymmetric,F.BraunBlanquet,F.Cosine,F.Kulczynski,F.McConnaughey,F.RogotGoldberg,F.Russel,F.Sokal,F.Hamming,F.Euclidean,F.Tanimoto,F.Dice,F.Asymmetric,F.BraunBlanquet,F.Cosine,F.Kulczynski,F.McConnaughey,F.RogotGoldberg,F.Russel,F.Sokal,F.Hamming,F.Euclidean,F.Tanimoto,F.Dice,F.Cosine,F.Tanimoto,F.Asymmetric,F.Cosine,F.Sokal,W.HAMMING,W.LEVENSHTEIN,W.MONOMER_CHEMICAL_DISTANCE,W.NEEDLEMANN_WUNSCH;const K={[R.Euclidean]:function(t,e){let n=0;for(let o=0;o<t.length;o++)n+=Math.pow(t[o]-e[o],2);return Math.sqrt(n)},[R.Manhattan]:function(t,e){let n=0;for(let o=0;o<t.length;o++)n+=Math.abs(t[o]-e[o]);return n},[R.Cosine]:function(t,e){let n=0,o=0,r=0;for(let i=0;i<t.length;i++)n+=t[i]*e[i],o+=t[i]*t[i],r+=e[i]*e[i];return(1-n/(Math.sqrt(o)*Math.sqrt(r)))/2}},Q={[P.Levenshtein]:G,[P.JaroWinkler]:$.Vb,[P.Manhattan]:function(t,e){if(t.length!==e.length)return 1;{let n=0;for(let o=1;o<t.length;o++)n+=t[o]==e[o]?0:1;return n/t.length}},[P.Onehot]:function(t,e){return t===e?0:1}},Z={[F.Tanimoto]:function(t,e){return 1-X(t,e)},[F.Dice]:function(t,e){return 1-function(t,e){const n=t.trueCount()+e.trueCount();return 0==n?0:2*t.andWithCountBits(e,!0)/n}(t,e)},[F.Asymmetric]:function(t,e){return 1-function(t,e){const n=Math.min(t.trueCount(),e.trueCount());return 0==n?0:t.andWithCountBits(e,!0)/n}(t,e)},[F.BraunBlanquet]:function(t,e){return z(function(t,e){const n=Math.max(t.trueCount(),e.trueCount());return 0==n?0:t.andWithCountBits(e,!0)/n}(t,e))},[F.Cosine]:function(t,e){return 1-function(t,e){const n=t.trueCount()*e.trueCount();return 0==n?0:t.andWithCountBits(e,!0)/Math.sqrt(n)}(t,e)},[F.Kulczynski]:function(t,e){return z(function(t,e){const n=t.trueCount()+e.trueCount(),o=t.trueCount()*e.trueCount();return 0==o?0:t.andWithCountBits(e,!0)*n/(2*o)}(t,e))},[F.McConnaughey]:function(t,e){return z(function(t,e){const n=t.trueCount()+e.trueCount(),o=t.trueCount()*e.trueCount();return 0==o?0:(t.andWithCountBits(e,!0)*n-o)/o}(t,e))},[F.RogotGoldberg]:function(t,e){return z(function(t,e){const n=t.andWithCountBits(e,!0),o=t.countBits(!0)+e.countBits(!0),r=t.length,i=r-o+n;return n==r||i==r?1:n/o+i/(2*r-o)}(t,e))},[F.Russel]:function(t,e){return z(function(t,e){return 0==t.length?0:t.andWithCountBits(e,!0)/t.length}(t,e))},[F.Sokal]:function(t,e){return 1-function(t,e){const n=t.trueCount()+e.trueCount(),o=t.andWithCountBits(e,!0);return o/(2*n-3*o)}(t,e)},[F.Hamming]:function(t,e){return t.trueCount()+e.trueCount()-2*t.andWithCountBits(e,!0)},[F.Euclidean]:function(t,e){return Math.sqrt(t.trueCount()+e.trueCount()-2*t.andWithCountBits(e,!0))}},J={[D.TanimotoIntArray]:function(t,e){return z(X(new H(t,32*t.length),new H(e,32*e.length)))}},tt={[k.Difference]:function(t){if(t&&null!=t.range&&t.range>0){const e=t.range;return(t,n)=>Math.abs(t-n)/e}return(t,e)=>Math.abs(t-e)}},et={[U.CommonItems]:function(t){const e=function(t){const e=t?.mostCommon??new Set;return(t,n)=>{const o=t.length,r=n.length;let i=0,s=0,a=0;for(;s<o&&a<r;)t[s]===n[a]?(e?.has(t[s])||++i,++s,++a):t[s]<n[a]?++s:++a;return i}}(t);return(t,n)=>0===n.length||0===t.length?1e4:Math.min(t.length,n.length)/(e(t,n)+1e-4)}},nt={[B.Vector]:{[R.Euclidean]:K[R.Euclidean],[R.Manhattan]:K[R.Manhattan],[R.Cosine]:K[R.Cosine]},[B.String]:{[P.Levenshtein]:Q[P.Levenshtein],[P.JaroWinkler]:Q[P.JaroWinkler],[P.Manhattan]:Q[P.Manhattan],[P.Onehot]:Q[P.Onehot]},[B.BitArray]:{[F.Tanimoto]:Z[F.Tanimoto],[F.Dice]:Z[F.Dice],[F.Asymmetric]:Z[F.Asymmetric],[F.BraunBlanquet]:Z[F.BraunBlanquet],[F.Cosine]:Z[F.Cosine],[F.Kulczynski]:Z[F.Kulczynski],[F.McConnaughey]:Z[F.McConnaughey],[F.RogotGoldberg]:Z[F.RogotGoldberg],[F.Russel]:Z[F.Russel],[F.Sokal]:Z[F.Sokal]},[B.MacroMolecule]:{[W.HAMMING]:j[W.HAMMING],[W.LEVENSHTEIN]:j[W.LEVENSHTEIN],[W.NEEDLEMANN_WUNSCH]:j[W.NEEDLEMANN_WUNSCH],[W.MONOMER_CHEMICAL_DISTANCE]:j[W.MONOMER_CHEMICAL_DISTANCE]},[B.Number]:{[k.Difference]:tt[k.Difference]},[B.IntArray]:{[D.TanimotoIntArray]:J[D.TanimotoIntArray]},[B.NumberArray]:{[U.CommonItems]:et[U.CommonItems]}};Object.keys(nt).reduce((t,e)=>{for(const n of Object.keys(nt[e]))t[n]=e;return t},{});const ot=ui,rt="bypassLargeDataWarning";var it,st,at,lt,ut;s(5540),function(t){t.EUCLIDEAN="EUCLIDEAN",t.MANHATTAN="MANHATTAN"}(it||(it={})),it.EUCLIDEAN,it.MANHATTAN,function(t){t.HAMMING="Hamming",t.EUCLIDEAN="Euclidean",t.VECTOR_COSINE="Vector Cosine",t.MANHATTAN="Manhattan",t.TANIMOTO="Tanimoto",t.LEVENSTEIN="Levenshtein",t.NEEDLEMAN_WUNSCH="Needlemann-Wunsch",t.MONOMER_CHEMICAL_DISTANCE="Monomer chemical distance",t.SOKAL="Sokal",t.COSINE="Cosine",t.ASYMMETRIC="Asymmetric",t.Difference="Difference",t.OneHot="One-Hot"}(st||(st={})),st.HAMMING,st.EUCLIDEAN,st.MANHATTAN,st.VECTOR_COSINE,st.TANIMOTO,st.LEVENSTEIN,st.NEEDLEMAN_WUNSCH,st.MONOMER_CHEMICAL_DISTANCE,st.SOKAL,st.COSINE,st.ASYMMETRIC,st.Difference,st.OneHot,st.HAMMING,st.EUCLIDEAN,st.MANHATTAN,st.TANIMOTO,st.SOKAL,st.COSINE,st.ASYMMETRIC,st.LEVENSTEIN,st.NEEDLEMAN_WUNSCH,st.MONOMER_CHEMICAL_DISTANCE,st.Difference,st.OneHot,st.VECTOR_COSINE,new Set([st.HAMMING,st.LEVENSTEIN,st.NEEDLEMAN_WUNSCH,st.MONOMER_CHEMICAL_DISTANCE,st.OneHot]),new Set([st.HAMMING,st.EUCLIDEAN,st.MANHATTAN,st.MONOMER_CHEMICAL_DISTANCE,st.LEVENSTEIN,st.NEEDLEMAN_WUNSCH,st.TANIMOTO,st.COSINE,st.VECTOR_COSINE,st.SOKAL,st.ASYMMETRIC,st.OneHot,st.Difference]),new Set([st.EUCLIDEAN,st.MANHATTAN,st.OneHot,st.Difference,st.VECTOR_COSINE]),new Set([st.EUCLIDEAN,st.MANHATTAN,st.Difference,st.VECTOR_COSINE]),new Set([st.EUCLIDEAN,st.MANHATTAN,st.Difference]),new Set([st.TANIMOTO,st.COSINE,st.SOKAL,st.ASYMMETRIC]),function(t){t.ADD="ADD",t.SUB="SUB",t.MULT="MULT"}(at||(at={})),function(t){t.SQUARE="SQUARE",t.INVERSE="INVERSE",t.TRANSPOSE="TRANSPOSE",t.NORM="NORM",t.COLUMN_NORM="COLUMN_NORM"}(lt||(lt={})),function(t){t.SCALARMULT="SCALARMULT",t.SCALARADD="SCALARADD",t.SCALARPOW="SCALARPOW"}(ut||(ut={})),Object.prototype.toString;const ct="dimensionality-reducer-terminate-event";var ft;!function(t){t.EUCLIDEAN="EUCLIDEAN",t.MANHATTAN="MANHATTAN"}(ft||(ft={}));const dt=t=>null==t;function ht(t,e){return`${e} (${t.length>4?`${t.length} columns`:t.map(t=>t.name).join(", ")})`}async function mt(e,n,o,r,i,a,l,u=!0,c=!1,f={preprocessingFuncArgs:[]},d={},h=null,m={},p){const g={showXAxis:!1,showYAxis:!1,showXSelector:!1,showYSelector:!1};if(n.length!==r.length||n.length!==a.length||n.length!==i.length||n.length!==f.preprocessingFuncArgs.length)throw new Error("columns, metrics and preprocessing functions, weights and function argumentsmust have the same length");const v=u?d.tableView??I.shell.tableView(e.name)??I.shell.addTableView(e):null,y=async()=>{const y=t.TaskBarProgressIndicator.create(`Initializing ${d.scatterPlotName??"dimensionality reduction"} ...`);let A;try{const w=function(t){const e=["Embed_X","Embed_Y"],n=t.columns.names().filter(t=>t.includes(e[0])).length+1;return e.map(t=>`${t}_${n}`)}(e);function C(r,i,s){let a=null,l=null;e.columns.names().includes(w[0])?(a=e.columns.byName(w[0]),l=e.columns.byName(w[1])):(a=e.columns.add(t.Column.float(w[0],e.rowCount)),l=e.columns.add(t.Column.float(w[1],e.rowCount)),u&&!A&&(A=v.scatterPlot({...g,x:w[0],y:w[1],title:d.scatterPlotName??ht(n,o)}))),d["show-scatterplot-progress"]&&(A?.root&&ot.setUpdateIndicator(A.root,!1),a.init(t=>s[0]?s[0][t]:void 0),l.init(t=>s[1]?s[1][t]:void 0));const c=r/i*100;y.update(c,`Running ${d.scatterPlotName??"dimensionality reduction"}... ${c.toFixed(0)}%`)}async function E(){e.columns.add(t.Column.float(w[0],e.rowCount)),e.columns.add(t.Column.float(w[1],e.rowCount));let c=null;u&&(A=v.scatterPlot({...g,x:w[0],y:w[1],title:d.scatterPlotName??ht(n,o)}),ot.setUpdateIndicator(A.root,!0));const h=I.events.onViewerClosed.subscribe(t=>{const e=t.args.viewer;e?.getOptions()?.look?.title&&A?.getOptions()?.look?.title&&e?.getOptions()?.look?.title===A?.getOptions()?.look?.title&&(I.events.fireCustomEvent(ct,{}),h.unsubscribe(),c?.(),y.close())}),m=new Promise(async(t,u)=>{try{c=t;const u=[];let h=r,m=i,g=l;if(p&&n.every(t=>t.isNumerical)){const t=n.map(t=>t.toList()),o=new Array(e.rowCount).fill(0).map((t,e)=>new Float32Array(n.length));for(let r=0;r<n.length;++r)for(let n=0;n<e.rowCount;++n)o[n][r]=t[r][n];f.distanceFnArgs=[{}],u.push({entries:o,options:{}}),h=[p],m=[1],g="MANHATTAN"}else for(let t=0;t<a.length;++t){const e=a[t];if(f.distanceFnArgs||(f.distanceFnArgs=[]),e){const o=e.inputs[0].name,i=e.inputs[1].name,{entries:s,options:a}=await e.apply({[o]:n[t],[i]:r[t],...f.preprocessingFuncArgs[t]??{}});u.push({entries:s,options:a}),f.distanceFnArgs.push(a)}else{const e=n[t].toList(),o={};u.push({entries:e,options:o}),f.distanceFnArgs.push(o)}}t(await async function(t,e,n,o,r,i,a){let l=await async function(t,e,n,o,r,i,a){if(!i.distanceFnArgs)throw new Error("options.distanceFnArgs must be defined");if(t.length!==e.length||t.length!==i.distanceFnArgs.length||t.length!==o.length)throw new Error("data, metrics and options and weights must have the same length");return new Promise(function(l,u){const c=new Worker(new URL(s.p+s.u(234),s.b));c.postMessage({columnsData:t,distanceMetrics:e,method:n,options:i,weights:o,aggregationMethod:r});const f=I.events.onCustomEvent(ct).subscribe(()=>{try{c?.terminate()}finally{f.unsubscribe()}});c.onmessage=({data:{error:t,embedding:e,epochNum:n,epochsLength:o}})=>{dt(n)||dt(o)?(f.unsubscribe(),t?u(t):l(e),setTimeout(()=>c.terminate(),100)):a&&a(n,o,e)}})}(t,n,e,o,r,i,a);return l=l.map(t=>function(t){const e=t.length;let n=0,o=0;for(let r=0;r<e;++r)n+=t[r],o+=Math.pow(t[r],2);const r=n/e,i=1/Math.sqrt(o/e-Math.pow(r,2));for(let n=0;n<e;++n)t[n]=(t[n]-r)*i;return t}(t)),l}(u.map(t=>t.entries),o,h,m,l,f,d[rt]?void 0:C))}catch(t){u(t)}}),E=await m;return y.close(),h.unsubscribe(),E}const b=await E();if(c&&b){const x=t.TaskBarProgressIndicator.create("Clustering embeddings ...");try{const _=await function(t,e,n,o){return r=this,i=void 0,l=function*(){return new Promise(function(r,i){const a=new Worker(new URL(s.p+s.u(682),s.b));a.postMessage({embedX:t,embedY:e,minPts:o,epsilon:n}),a.onmessage=({data:{error:t,clusters:e}})=>{a.terminate(),t?i(t):r(e)}})},new((a=void 0)||(a=Promise))(function(t,e){function n(t){try{s(l.next(t))}catch(t){e(t)}}function o(t){try{s(l.throw(t))}catch(t){e(t)}}function s(e){var r;e.done?t(e.value):(r=e.value,r instanceof a?r:new a(function(t){t(r)})).then(n,o)}s((l=l.apply(r,i||[])).next())});var r,i,a,l}(b[0],b[1],f.dbScanEpsilon??.01,f.dbScanMinPts??4),N=e.columns.getUnusedName("Cluster (DBSCAN)");e.columns.addNewString(N).init(t=>_[t].toString()),A&&(A.props.colorColumnName=N)}catch(M){I.shell.error("Clustering embeddings failed"),console.error(M)}finally{x.close()}}if(b){const T=e.columns.byName(w[0]),S=e.columns.byName(w[1]);if(T.init(t=>b[0][t]),S.init(t=>b[1][t]),h)try{const O=h.inputs[0].name,L=h.inputs[1].name;await h.prepare({[O]:T,[L]:S,...m}).call(!0)}catch(P){I.shell.error("Post-processing failed"),console.error(P)}if(A)return ot.setUpdateIndicator(A.root,!1),A.helpUrl="/help/compute/sequence-space",A}}catch(R){I.shell.error("Dimensionality reduction failed"),console.error(R),y.close(),A&&ot.setUpdateIndicator(A.root,!1)}};return new Promise(async(t,n)=>{try{if(d.fastRowCount&&e.rowCount>d.fastRowCount&&!d[rt])ot.dialog().add(ot.divText("Analysis might take several minutes. Do you want to continue?")).onOK(async()=>{try{const e=await y();t(e)}catch(t){n(t)}}).onCancel(()=>t(void 0)).show();else{const e=await y();t(e)}}catch(t){n(t)}})}var pt=function(t,e,n,o){return new(n||(n=Promise))(function(r,i){function s(t){try{l(o.next(t))}catch(t){i(t)}}function a(t){try{l(o.throw(t))}catch(t){i(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((o=o.apply(t,e||[])).next())})};const gt={SUBJ:"subj",STUDY:"study",SITE:"site",AGE:"age",SEX:"sex",RACE:"race",DISEASE:"disease",WEIGHT:"weight",HEIGHT:"height"};function vt(t,e,n){return pt(this,void 0,void 0,function*(){const o=I.data.demo.demog(100);I.shell.addTableView(o),E(!!(yield mt(o,t.map(t=>o.col(t)),e,n,t.map(()=>1),t.map(()=>{}),"EUCLIDEAN",!0,!0,{preprocessingFuncArgs:t.map(()=>({}))})),!0,"No scatterplot returned");const r=o.columns.names().filter(t=>t.toLowerCase().startsWith("embed"));E(r.length,2,"Wrong number of embeddings added"),E(!!o.columns.names().find(t=>t.toLowerCase().startsWith("cluster")),!0,"No cluster column added");for(const t of r){const e=o.col(t);E(new Array(e.length).fill(null).every((t,n)=>!e.isNone(n)&&!isNaN(e.get(n))),!0,"Embedding column has null-ish values")}yield new Promise(t=>setTimeout(t,500))})}b("Dimensionality reduction: UMAP",()=>{C("Numeric column",()=>pt(void 0,void 0,void 0,function*(){yield vt([gt.AGE],L.UMAP,[k.Difference])}),{timeout:3e4}),C("String column",()=>pt(void 0,void 0,void 0,function*(){yield vt([gt.SEX],L.UMAP,[P.Onehot])}),{timeout:3e4}),C("Numeric and string columns",()=>pt(void 0,void 0,void 0,function*(){yield vt([gt.SEX,gt.AGE],L.UMAP,[P.Onehot,k.Difference])})),C("All demog columns",()=>pt(void 0,void 0,void 0,function*(){const e=I.data.demo.demog(10).columns.toList().filter(t=>Object.values(gt).includes(t.name)),n=e.map(e=>e.type===t.COLUMN_TYPE.STRING?P.Onehot:k.Difference),o=e.map(t=>t.name);yield vt(o,L.UMAP,n)}))}),b("Dimensionality reduction: T-SNE",()=>{C("Numeric column",()=>pt(void 0,void 0,void 0,function*(){yield vt([gt.AGE],L.T_SNE,[k.Difference])}),{timeout:3e4}),C("String column",()=>pt(void 0,void 0,void 0,function*(){yield vt([gt.SEX],L.T_SNE,[P.Onehot])}),{timeout:3e4}),C("Numeric and string columns",()=>pt(void 0,void 0,void 0,function*(){yield vt([gt.SEX,gt.AGE],L.T_SNE,[P.Onehot,k.Difference])})),C("All demog columns",()=>pt(void 0,void 0,void 0,function*(){const e=I.data.demo.demog(10).columns.toList().filter(t=>Object.values(gt).includes(t.name)),n=e.map(e=>e.type===t.COLUMN_TYPE.STRING?P.Onehot:k.Difference),o=e.map(t=>t.name);yield vt(o,L.T_SNE,n)}))});const yt={i32:"HEAP32",f32:"HEAPF32"},At={i32:Int32Array,f32:Float32Array},wt={i32:2,f32:2},Ct={i32:DG.Column.fromInt32Array,f32:DG.Column.fromFloat32Array};class Et{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 bt extends Et{constructor(t,e,n=!1){super(t),this.type=e,this.toUpdate=n,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*At[this.type].BYTES_PER_ELEMENT)}isMemoryForBufferAllocated(){return 0!=this.buf}putDataToBuffer(t){if(this.isMemoryForBufferAllocated()){const e=this.type,n=wt[e],o=t[yt[e]];let r=null;const i=this.data;r="int"==i.type&&"i32"==e||"double"==i.type&&"f32"==e?i.getRawData():new At[e](i.getRawData()),r&&o.set(r,this.buf>>n)}}getDataFromBuffer(t){if(this.toUpdate&&this.isMemoryForBufferAllocated()){const e=this.type,n=t[yt[e]],o=this.buf,r=At[e].BYTES_PER_ELEMENT,i=this.data.getRawData();for(let t=0;t<this.numOfRows;t++)i[t]=n[o/r+t]}}freeBuffer(t){this.isMemoryForBufferAllocated()&&(t._free(this.buf),this.buf=0)}}class xt extends bt{constructor(t,e){super([],t,!0),this.numOfRows=e}putDataToBuffer(t){}getDataFromBuffer(t){if(this.toUpdate&&this.isMemoryForBufferAllocated()){const e=this.type,n=t[yt[e]],o=this.buf,r=Ct[e],i=new At[e](this.numOfRows);for(let t=0;t<i.length;t++)i[t]=n[o/i.BYTES_PER_ELEMENT+t];this.data=r("name",i)}}}class _t extends Et{constructor(t,e,n=!1){super(t),this.type=e,this.toUpdate=n,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*At[this.type].BYTES_PER_ELEMENT)}isMemoryForBufferAllocated(){return 0!=this.buf}putDataToBuffer(t){if(this.isMemoryForBufferAllocated()){const e=this.type,n=wt[e],o=t[yt[e]],r=At[e].BYTES_PER_ELEMENT;for(let t=0;t<this.numOfColumns;t++){let i=null;const s=this.data[t];i="int"==s.type&&"i32"==e||"double"==s.type&&"f32"==e?s.getRawData():new At[e](s.getRawData()),null!=i&&o.set(i,this.buf+t*this.numOfRows*r>>n)}}}getDataFromBuffer(t){if(this.toUpdate&&this.isMemoryForBufferAllocated()){const e=this.type,n=t[yt[e]],o=this.numOfRows,r=this.numOfColumns,i=new At[e](n.buffer,this.buf,o*r);for(let t=0;t<r;t++){const e=this.data[t].getRawData();for(let n=0;n<o;n++)e[n]=i[n+t*o]}}}freeBuffer(t){this.isMemoryForBufferAllocated()&&(t._free(this.buf),this.buf=0)}}class Nt extends _t{constructor(t,e,n){super([[]],t,!0),this.data=[],this.numOfColumns=n,this.numOfRows=e}putDataToBuffer(t){}getDataFromBuffer(t){if(this.toUpdate&&this.isMemoryForBufferAllocated()){const e=this.type,n=t[yt[e]],o=this.numOfRows,r=this.numOfColumns,i=At[e].BYTES_PER_ELEMENT,s=Ct[e],a=this.buf;for(let t=0;t<r;t++){const r=new At[e](o);for(let e=0;e<o;e++)r[e]=n[a/i+e+t*o];this.data.push(s((t+1).toString(),r))}}}}const Mt={intColumn:t=>new bt(t,"i32"),newIntColumn:t=>new xt("i32",t),intColumns:t=>new _t(t.toList(),"i32"),newIntColumns:(t,e)=>new Nt("i32",t,e),floatColumn:t=>new bt(t,"f32"),newFloatColumn:t=>new xt("f32",t),floatColumns:t=>new _t(t.toList(),"f32"),newFloatColumns:(t,e)=>new Nt("f32",t,e),int:t=>new Et(t),num:t=>new Et(t)},Tt={tableFromColumns:t=>DG.DataFrame.fromColumns(t.data),num:t=>t,int:t=>t,double:t=>t,column:t=>t.data};function St(t,e,n){const o=t[e],r=o.arguments,i=[];let s=0;for(const t in r){const e=r[t];if("_callResult"!=t){switch(e.type){case"floatColumns":case"int":case"num":case"floatColumn":case"intColumn":case"intColumns":e.data=Mt[e.type](n[s]),s++;break;case"newFloatColumns":case"newIntColumns":const t=r[e.numOfRows.ref].data[e.numOfRows.value],o=r[e.numOfColumns.ref].data[e.numOfColumns.value];e.data=Mt[e.type](t,o);break;case"newFloatColumn":case"newIntColumn":const i=r[e.numOfRows.ref].data[e.numOfRows.value];e.data=Mt[e.type](i)}i.push(r[t].data)}}const a=function(t,e,n,o){let r;for(const e of o)e.allocateMemoryForBuffer(t);let i=!0;for(const t of o)i&=t.isMemoryForBufferAllocated();if(i){const n=[],i=[];for(const e of o)e.complementArrOfParams(n),e.complementArrOfTypes(i),e.putDataToBuffer(t);const s="number";r=t.ccall(e,s,i,n);for(const e of o)e.getDataFromBuffer(t)}for(const e of o)e.freeBuffer(t);if(null!=r)return r}(t,e,0,i);r._callResult=Mt.num(a);const l=o.output;if("objects"!=l.type)return Tt[l.type](r[l.source].data);const u=[];for(const t of l.source)u.push(r[t].data.data);return u}const Ot="num",It="floatColumn",Lt="intColumn",Pt="floatColumns",Rt="newFloatColumns",Ft="intColumns",Dt="newIntColumns",Bt="newFloatColumn",kt="newIntColumn",Ut="numOfRows",Vt="numOfColumns",Gt="ref",$t="value",Ht="int",qt="double",Yt={intColumn:Int32Array,floatColumn:Float32Array,floatColumns:Float32Array,newFloatColumns:Float32Array,intColumns:Int32Array,newIntColumns:Int32Array,newFloatColumn:Float32Array,newIntColumn:Int32Array};function Wt(t,e){let n,o=[],r=0;for(const i in t){const s=t[i],a=s.type;if("_callResult"!==i){switch(a){case Ot:case Ht:case qt:s.data=e[r],r++;break;case Lt:case It:let o;const i=e[r],l=i.length;o=i.type===Ht&&a===Lt||i.type===qt&&a===It?i.getRawData().slice(0,l):new Yt[a](i.getRawData().slice(0,l)),s.data={array:o,numOfRows:l},r++;break;case kt:case Bt:let u=0;n=s[Ut][Gt],u=t[n].type===Ot?t[n].data:t[n].data[s[Ut][$t]],s.data={numOfRows:u},r++;break;case Ft:case Pt:let c=[];const f=e[r].byIndex(0).length;for(const t of e[r].toList())t.type===Ht&&a===Lt||t.type===qt&&a===It?c.push(t.getRawData().slice(0,f)):c.push(new Yt[a](t.getRawData().slice(0,f)));s.data={arrays:c,numOfRows:f,numOfColumns:c.length},r++;break;case Dt:case Rt:let d=0,h=0;n=s[Ut][Gt],d=t[n].type===Ot?t[n].data:t[n].data[s[Ut][$t]],n=s[Vt][Gt],h=t[n].type===Ot?t[n].data:t[n].data[s[Vt][$t]],s.data={numOfRows:d,numOfColumns:h},r++;break;default:return}o.push(s)}}return o}function jt(t,e){t.arguments._callResult=e.callResult,function(t,e){const n={newFloatColumns:DG.Column.fromFloat32Array,newIntColumns:DG.Column.fromInt32Array,newFloatColumn:DG.Column.fromFloat32Array,newIntColumn:DG.Column.fromInt32Array};let o=0;for(const r in t){const i=t[r];switch(i.type){case Ot:case Ht:case qt:case Lt:case It:case Pt:case Ft:break;case Bt:case kt:let t;null==i.name?t=(0).toString():a=i.name,i.column=n[i.type](t,e[o].array);break;case Dt:case Rt:let r=[],s=e[o].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++)r.push(n[i.type](a[t],e[o].arrays[t]));i.columns=r}o++}}(t.arguments,e.args);let n=function(t){let e=t.output;const n={newFloatColumns:"columns",newIntColumns:"columns",newFloatColumn:"column",newIntColumn:"column"};switch(e.type){case Ot:case Ht:case qt:return t.arguments[e.source];case"column":return t.arguments[e.source].column;case"tableFromColumns":return DG.DataFrame.fromColumns(t.arguments[e.source].columns);case"objects":let o=[];for(let r of e.source){let e=t.arguments[r];o.push(e[n[e.type]])}return o}}(t);return function(t){for(const e in t){const n=t[e];switch(n.type){case Ot:case Ht:case qt:case Lt:case It:case Ft:case Pt:break;case kt:case Bt:n.column=null;break;case Dt:case Rt:n.columns=null}}}(t.arguments),n}async function Xt(t,e,n){return new Promise((t,o)=>{const r=new Worker(new URL(s.p+s.u(128),s.b));r.postMessage(Wt(EDA.principalComponentAnalysisNipals.arguments,[e,n])),r.onmessage=function(e){r.terminate(),t(jt(EDA.principalComponentAnalysisNipals,e.data))}})}const zt=1e-6;function Kt(e){if(e.type!=t.COLUMN_TYPE.FLOAT&&e.type!=t.COLUMN_TYPE.INT)throw new Error("unsupported column type: "+e.type)}function Qt(t){if(t.stats.missingValueCount>0)throw new Error(`The column '${t.name}' has missing values.`)}function Zt(t,e){if(function(t,e){if(e<1)throw new Error("components must be positive.");if(e>t.length)throw new Error("components must not be greater than features count.");for(const e of t)Kt(e),Qt(e)}(t,e),t.length*t.byIndex(0).length>1e8)throw new Error("dataframe is too big.")}function Jt(t,e,n){return e?n?function(t){const e=t.rowCount;for(const n of t.columns)if(n.isNumerical){const t=n.stats.stdev,o=n.stats.avg,r=n.getRawData();if(t>0)for(let n=0;n<e;++n)r[n]=(r[n]-o)/t;else for(let t=0;t<e;++t)r[t]-=o}return t}(t):function(t){const e=t.rowCount;for(const n of t.columns)if(n.isNumerical){const t=n.stats.avg;if(Math.abs(t)>zt){const o=n.getRawData();for(let n=0;n<e;++n)o[n]-=t}}return t}(t):n?function(t){const e=t.rowCount;for(const n of t.columns)if(n.isNumerical){const t=n.stats.stdev;if(Math.abs(t-1)>zt&&t>0){const o=n.getRawData();for(let n=0;n<e;++n)o[n]/=t}}return t}(t):t}var te,ee,ne,oe,re,ie,se,ae;function le(e,n,o,r,i){return a=this,l=void 0,c=function*(){Zt(n,o);const a=e.rowCount,l=function(e){const n=[];for(const t of e)t.stats.stdev>0&&t.stats.missingValueCount<1&&n.push(t);return t.DataFrame.fromColumns(n)}(n),u=l.columns.length;if(0===u){const e=[];for(let n=0;n<o;++n)e.push(t.Column.fromFloat32Array(`${n+1}`,new Float32Array(a).fill(0)));return t.DataFrame.fromColumns(e)}const c=u<o?o-u:0,f=Math.min(o,u);let d;if(u>900)d=yield Xt(0,n,f);else{const t=yield async function(t,e,n){return new Promise((t,o)=>{const r=new Worker(new URL(s.p+s.u(860),s.b));r.postMessage(Wt(EDA.principalComponentAnalysis.arguments,[e,n,1,0])),r.onmessage=function(e){r.terminate(),0===e.data.callResult?t(jt(EDA.principalComponentAnalysis,e.data)):t(-1)}})}(0,n,f);d=-1!==t?Jt(t,r,i):yield Xt(0,n,f)}if(void 0===d)throw new Error("Failed to compute PCA");d=Jt(d,r,i);const h=d.columns,m=h.length;for(let e=0;e<c;++e)h.add(t.Column.fromFloat32Array(`${m+e+1}`,new Float32Array(a).fill(0)));return d},new((u=void 0)||(u=Promise))(function(t,e){function n(t){try{r(c.next(t))}catch(t){e(t)}}function o(t){try{r(c.throw(t))}catch(t){e(t)}}function r(e){var r;e.done?t(e.value):(r=e.value,r instanceof u?r:new u(function(t){t(r)})).then(n,o)}r((c=c.apply(a,l||[])).next())});var a,l,u,c}!function(t){t[t.COMPUTE_COMPONENTS=0]="COMPUTE_COMPONENTS",t[t.PERFORM_MVA=1]="PERFORM_MVA",t[t.DEMO=2]="DEMO"}(te||(te={})),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",t.PREDICT="Predictors must not contain a response variable",t.ENOUGH="Not enough of features",t.COMP_LIN_PLS="Components count must be less than the number of features",t.COMP_QUA_PLS="Too large components count for the quadratic PLS regression",t.COMP_ROWS="Components count must not exceed the number of rows",t.COMPONENTS="Components count must be at least 1",t.INV_INP="Invalid inputs",t.NULL_COMPS="Components count is not specified"}(ee||(ee={})),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",t.BROWSE="Browse",t.ANALYSIS="Features Analysis",t.QUADRATIC="Quadratic",t.BIAS="bias"}(ne||(ne={})),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",t.QUADRATIC="Specifies whether to include squared terms as additional predictors in the PLS model"}(oe||(oe={})),function(t){t.PLS="/help/explore/multivariate-analysis#pls-components",t.MVA="/help/explore/multivariate-analysis",t.MODEL="/help/explore/multivariate-analysis#observed-vs-predicted",t.COEFFS="/help/explore/multivariate-analysis#regression-coefficients",t.LOADINGS="/help/explore/multivariate-analysis#loadings",t.EXPL_VARS="/help/explore/multivariate-analysis#explained-variance",t.SCORES="/help/explore/multivariate-analysis#scores"}(re||(re={})),function(t){t[t.DEFAULT=3]="DEFAULT",t[t.MIN=1]="MIN"}(ie||(ie={})),function(t){t.PREFIX="PLS",t.SUFFIX="(predicted)",t.COMP="component",t.COMPS="components"}(se||(se={})),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"}(ae||(ae={}));const ue=[.49,.79,.99];var ce;!function(t){t.AXIS="#838383",t.CIRCLE="#0000FF",t.INVALID="#EB6767",t.VALID_TEXT="#4d5261",t.VALID_LINE="#dbdcdf"}(ce||(ce={})),[{caption:ne.MODEL,text:"Closer to the line means better price prediction."},{caption:ne.SCORES,text:"The latent factor values for each sample reflect the similarities and dissimilarities among observations."},{caption:ne.LOADINGS,text:"The impact of each feature on the latent factors: higher loading means stronger influence."},{caption:ne.REGR_COEFS,text:"Parameters of the obtained model: features make different contribution to the prediction."},{caption:ne.EXPL_VAR,text:"How well the latent components fit source data: closer to one means better fit."}].map(t=>`# ${t.caption}\n\n${t.text}`).join("\n\n"),re.MVA;function fe(t){return e=this,n=void 0,r=function*(){Zt(t.features,t.components),Kt(t.predict),Qt(t.predict);const e=yield async function(t,e,n,o){return new Promise((t,r)=>{const i=new Worker(new URL(s.p+s.u(412),s.b));i.postMessage(Wt(EDA.partialLeastSquareRegression.arguments,[e,n,o])),i.onmessage=function(e){i.terminate(),t(jt(EDA.partialLeastSquareRegression,e.data))}})}(t.table,t.features,t.predict,t.components);return{prediction:e[ae.PREDICTION],regressionCoefficients:e[ae.REGR_COEFFS],tScores:e[ae.T_SCORES],uScores:e[ae.U_SCORES],xLoadings:e[ae.X_LOADINGS],yLoadings:e[ae.Y_LOADINGS]}},new((o=void 0)||(o=Promise))(function(t,i){function s(t){try{l(r.next(t))}catch(t){i(t)}}function a(t){try{l(r.throw(t))}catch(t){i(t)}}function l(e){var n;e.done?t(e.value):(n=e.value,n instanceof o?n:new o(function(t){t(n)})).then(s,a)}l((r=r.apply(e,n||[])).next())});var e,n,o,r}Math.min,Math.max;var de=function(t,e,n,o){return new(n||(n=Promise))(function(r,i){function s(t){try{l(o.next(t))}catch(t){i(t)}}function a(t){try{l(o.throw(t))}catch(t){i(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((o=o.apply(t,e||[])).next())})};function he(e,n){return de(this,void 0,void 0,function*(){const o=e.length,r=n.length,i=n.stats.avg,s=n.stats.stdev,a=new Float32Array(o+1).fill(0);if(a[o]=i,0===s||1===r)return a;try{const r=[],l=[],u=new Float32Array(o),c=new Float32Array(o);let f=0,d=0;for(const t of e){const e=t.stats;e.stdev>0&&(r.push(f),l.push(t),u[d]=e.avg,c[d]=e.stdev,++d),++f}if(0===d)return a;const h=function(t,e,n,o,r,i,s){return St(EDA,"fitLinearRegressionParamsWithDataNormalizing",[t,e,n,o,r,i,s])}(t.DataFrame.fromColumns(l).columns,t.Column.fromFloat32Array("xAvgs",u,d),t.Column.fromFloat32Array("xStdevs",c,d),n,i,s,d+1).getRawData();for(let t=0;t<d;++t)a[r[t]]=h[t];a[o]=h[d]}catch(r){const i=yield function(e,n,o){return de(this,void 0,void 0,function*(){return(yield fe({table:t.DataFrame.fromColumns([n]),features:e,predict:n,components:o,names:void 0,isQuadratic:!1})).regressionCoefficients.getRawData()})}(e,n,pe(e.length,n.length));let s=0;for(let t=0;t<o;++t)a[t]=i[t],s+=i[t]*e.byIndex(t).stats.avg;a[o]-=s}return a})}function me(e,n){const o=e.length;if(o!==n.length-1)throw new Error("Incorrect parameters count");const r=e.byIndex(0),i=r.length,s=new Float32Array(i);let a=r.getRawData();const l=n[o];let u=n[0];for(let t=0;t<i;++t)s[t]=l+u*a[t];for(let t=1;t<o;++t){a=e.byIndex(t).getRawData(),u=n[t];for(let t=0;t<i;++t)s[t]+=u*a[t]}return t.Column.fromFloat32Array(e.getUnusedName("prediction"),s,i)}const pe=(t,e)=>e<=t?Math.min(10,e):Math.min(10,t);var ge;!function(t){t[t.MAX_SAMLPES=1e5]="MAX_SAMLPES",t[t.MAX_FEATURES=1e3]="MAX_FEATURES"}(ge||(ge={}));class ve{static isApplicable(t,e){for(const e of t)if(!e.matches("numerical"))return!1;return!!e.matches("numerical")}static isInteractive(t,e){return t.length<=ge.MAX_FEATURES&&e.length<=ge.MAX_SAMLPES}constructor(e){if(this.specn=null,e)try{const n=new Uint32Array(e.buffer,0,2),o=n[0],r=n[1],i=new Uint8Array(e.buffer,8,o),s=t.DataFrame.fromByteArray(i),a=s.rowCount,l=s.columns,u=l.length,c=new Uint8Array(e.buffer,8+o,r),f=t.DataFrame.fromByteArray(c);if(u<3)throw new Error("incorrect columns count");const d=l.byName(ne.FEATURES).toList(),h=new Float32Array(a);h.set(l.byName(ne.REGR_COEFS).getRawData());const m=u-2,p=new Array(m);for(let t=0;t<m;++t)p[t]=new Float32Array(a),p[t].set(l.byIndex(t+2).getRawData());this.specn={params:h,loadings:p,names:d,dim:a-1,components:u-2,scores:f}}catch(t){throw new Error(`Failed to load model: ${t instanceof Error?t.message:"the platform issue"}`)}}fit(e,n,o){return r=this,i=void 0,a=function*(){const r=yield fe({table:t.DataFrame.fromColumns([n]),features:e,predict:n,components:o,names:void 0,isQuadratic:!1}),i=e.names();i.push("_");const s=this.getRegrCoeffs(e,n,r.regressionCoefficients),a=this.getLoadings(o,r.xLoadings);this.specn={names:i,params:s,loadings:a,components:o,dim:e.length,scores:this.getScoresDf(r)},this.computeExplVars(n.length,o,r.yLoadings)},new((s=void 0)||(s=Promise))(function(t,e){function n(t){try{l(a.next(t))}catch(t){e(t)}}function o(t){try{l(a.throw(t))}catch(t){e(t)}}function l(e){var r;e.done?t(e.value):(r=e.value,r instanceof s?r:new s(function(t){t(r)})).then(n,o)}l((a=a.apply(r,i||[])).next())});var r,i,s,a}getLoadings(t,e){const n=Array(t),o=e[0].length+1;for(let r=0;r<t;++r)n[r]=new Float32Array(o),n[r].set(e[r].getRawData());return n}getRegrCoeffs(t,e,n){const o=t.length,r=new Float32Array(o+1),i=n.getRawData();let s=0;for(let e=0;e<o;++e)r[e]=i[e],s+=i[e]*t.byIndex(e).stats.avg;return r[o]=e.stats.avg-s,r}computeExplVars(t,e,n){if(null===this.specn)throw new Error("Failed to compute explained variances");const o=n.getRawData(),r=this.specn.loadings[0].length-1;let i=Math.pow(o[0],2)/t;this.specn.loadings[0][r]=i;for(let n=1;n<e;++n)i+=Math.pow(o[n],2)/t,this.specn.loadings[n][r]=i}toBytes(){if(null===this.specn)throw new Error("Failed to pack untrained model");const e=t.DataFrame.fromColumns([t.Column.fromStrings(ne.FEATURES,this.specn.names),t.Column.fromFloat32Array(ne.REGR_COEFS,this.specn.params)]);this.specn.loadings.forEach((n,o)=>e.columns.add(t.Column.fromFloat32Array(`${ne.XLOADING}${o+1}`,n)));const n=e.toByteArray(),o=n.length,r=this.specn.scores.toByteArray(),i=r.length,s=o+i+8,a=new Uint8Array(64*(Math.ceil(s/64)+1)),l=new Uint32Array(a.buffer,0,2);return l[0]=o,l[1]=i,a.set(n,8),a.set(r,8+o),a}predict(t){if(null===this.specn)throw new Error("Predicting failed: model is not trained");return me(t,this.specn.params)}loadingsParamsViewers(){if(null===this.specn)throw new Error("Failed to create loadings and parameters viewers: untrained model");const e=[],n=this.specn.dim,o=t.DataFrame.fromColumns([t.Column.fromStrings(ne.FEATURES,this.specn.names.slice(0,-1)),t.Column.fromFloat32Array(ne.REGR_COEFS,this.specn.params,n)]),r=o.columns,i=r.length,s=this.specn.components;return this.specn.loadings.forEach((e,r)=>o.columns.add(t.Column.fromFloat32Array(`${ne.XLOADING}${r+1}`,e,n))),e.push(t.Viewer.scatterPlot(o,{title:ne.LOADINGS,xColumnName:r.byIndex(i).name,yColumnName:r.byIndex(i+(s>1?1:0)).name,markerType:t.MARKER_TYPE.CIRCLE,labelFormColumnNames:[ne.FEATURES],help:re.LOADINGS})),e.push(t.Viewer.barChart(o,{title:ne.REGR_COEFS,splitColumnName:ne.FEATURES,valueColumnName:ne.REGR_COEFS,valueAggrType:t.AGG.AVG,help:re.COEFFS,showValueSelector:!1,showStackSelector:!1})),e}explVarsViewer(){if(null===this.specn)throw new Error("Failed to create exaplained variances viewer: untrained model");const e=this.specn.components,n=this.specn.dim,o=new Array(e),r=new Float32Array(e);o[0]=`${se.COMP} 1`,r[0]=this.specn.loadings[0][n];for(let t=1;t<e;++t)o[t]=`${se.COMPS} ${t+1}`,r[t]=this.specn.loadings[t][n];return t.Viewer.barChart(t.DataFrame.fromColumns([t.Column.fromStrings(se.COMPS,o),t.Column.fromFloat32Array(ne.EXPL_VAR,r)]),{title:ne.EXPL_VAR,splitColumnName:se.COMPS,valueColumnName:ne.EXPL_VAR,valueAggrType:t.AGG.AVG,help:re.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(e){const n=e.tScores,o=e.uScores;return n.forEach((t,e)=>t.name=`${ne.XSCORE}${e+1}`),o.forEach((t,e)=>t.name=`${ne.YSCORE}${e+1}`),t.DataFrame.fromColumns(n.concat(o))}getScoresScatter(){if(null===this.specn)throw new Error("Failed to create scores scatter: untrained model");const e=this.specn.scores.columns.names(),n=t.Viewer.scatterPlot(this.specn.scores,{title:ne.SCORES,xColumnName:e[0],yColumnName:e[1],markerType:t.MARKER_TYPE.CIRCLE,help:re.SCORES,showViewerFormulaLines:!0});return n.meta.formulaLines.addAll(function(t){const e=[],n=(t,n)=>{e.push({type:"line",formula:t,width:1,visible:!0,title:" ",min:-n,max:n,color:ce.CIRCLE})};return t.forEach(o=>{const r="${"+o+"}";e.push({type:"line",formula:`${r} = 0`,width:1,visible:!0,title:" ",color:ce.AXIS}),t.forEach(t=>{const e="${"+t+"}";ue.forEach(t=>{n(e+` = sqrt(${t*t} - ${r} * ${r})`,t),n(e+` = -sqrt(${t*t} - ${r} * ${r})`,t)})})}),e}(e)),n}}const ye=["Alpha","Beta","Gamma","Delta"];function Ae(t,e){if(t.length!==e.length)throw new Error(`Non-equal elements count: ${t.length} vs. ${e.length}`)}function we(e,n,o){const r=I.data.demo.randomWalk(e,n),i=r.columns,s=new Float32Array(n),a=new Array(n);for(let t=0;t<n;++t)a[t]=i.byIndex(t).getRawData();for(let r=0;r<o;++r){const o=new Float32Array(e);for(let t=0;t<n;++t)s[t]=Math.random();for(let t=0;t<e;++t)for(let e=0;e<n;++e)o[t]+=s[e]*a[e][t];i.add(t.Column.fromFloat32Array(`y${r}`,o))}return r}function Ce(t,e){Ae(t,e);let n=0;const o=t.length,r=t.getRawData(),i=e.getRawData();for(let t=0;t<o;++t)n=Math.max(n,Math.abs(r[t]-i[t]));return n}function Ee(e,n,o){const r=new Array(e),i=new Array(n);for(let t=0;t<n;++t){const n=new Float32Array(e);for(let t=0;t<e;++t)n[t]=Math.random();i[t]=n}const s=t.DataFrame.fromColumns(i.map((e,n)=>t.Column.fromFloat32Array(`#${n}`,e)));for(let t=0;t<e;++t)r[t]=i.slice(0,2).map(e=>e[t]>.5?"A":"B").join("");if(s.columns.add(t.Column.fromStrings("Labels",r)),o)for(let t=0;t<n;++t)for(let n=0;n<e;++n)i[t][n]+=1*(i[t][n]>0?1:-1);return s}function be(t,e){Ae(t,e);let n=0;const o=t.length;if(o<1)return 1;for(let r=0;r<o;++r)t.get(r)===e.get(r)&&++n;return n/o}var xe=function(t,e,n,o){return new(n||(n=Promise))(function(r,i){function s(t){try{l(o.next(t))}catch(t){i(t)}}function a(t){try{l(o.throw(t))}catch(t){i(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((o=o.apply(t,e||[])).next())})};const _e=100,Ne=9e3,Me=.1;b("Principal component analysis",()=>{C("Performance: 100K rows, 100 cols, 3 components",()=>xe(void 0,void 0,void 0,function*(){const t=I.data.demo.randomWalk(1e5,_e);yield le(t,t.columns,3,!1,!1)}),{timeout:Ne,benchmark:!0}),C("Performance: 1K rows, 5K cols, 3 components",()=>xe(void 0,void 0,void 0,function*(){const t=I.data.demo.randomWalk(1e3,5e3);yield le(t,t.columns,3,!1,!1)}),{timeout:Ne,benchmark:!0}),C("Correctness",()=>xe(void 0,void 0,void 0,function*(){const t=we(100,3,5);E(function(t){let e=0;const n=t.length,o=t.getRawData();for(let t=0;t<n;++t)e=Math.max(e,Math.abs(o[t]));return e}((yield le(t,t.columns,4,!1,!1)).columns.byIndex(3))<Me,!0,"Incorrect PCA computations")}),{timeout:Ne})}),b("Partial least squares regression",()=>{C("Performance: 100K rows, 100 cols, 3 components",()=>xe(void 0,void 0,void 0,function*(){const t=I.data.demo.randomWalk(1e5,_e),e=t.columns;yield fe({table:t,features:e,predict:e.byIndex(99),components:3,names:void 0,isQuadratic:!1})}),{timeout:Ne,benchmark:!0}),C("Correctness",()=>xe(void 0,void 0,void 0,function*(){const t=we(100,3,5),e=t.columns,n=e.byIndex(7),o=Ce(n,(yield fe({table:t,features:e,predict:n,components:3,isQuadratic:!1,names:void 0})).prediction);E(o<Me,!0,`Incorrect PLS computations, error is too big: ${o}; expected: < 0.1`)}),{timeout:Ne}),C("Predictive modeling: 100K samples, 100 features, 3 components",()=>xe(void 0,void 0,void 0,function*(){const t=we(1e5,3,98).columns,e=t.byIndex(_e);t.remove(e.name);const n=new ve;yield n.fit(t,e,3);const o=n.toBytes(),r=Ce(e,new ve(o).predict(t));E(r<Me,!0,`Incorrect PLS (ML) computations, error is too big: ${r}; expected: < 0.1`)}),{timeout:Ne,benchmark:!0})}),b("Linear regression",()=>{C("Performance: 100K samples, 100 features",()=>xe(void 0,void 0,void 0,function*(){const t=we(1e5,_e,1).columns,e=t.byIndex(_e),n=yield he(t,e),o=new Uint8Array(n.buffer);me(t,new Float32Array(o.buffer))}),{timeout:Ne,benchmark:!0}),C("Correctness",()=>xe(void 0,void 0,void 0,function*(){const t=we(100,2,1).columns,e=t.byIndex(2),n=yield he(t,e),o=new Uint8Array(n.buffer),r=me(t,new Float32Array(o.buffer)),i=Ce(r,r);E(i<Me,!0,`Incorrect linear regression computations, error is too big: ${i}; expected: < 0.1`)}),{timeout:Ne})});var Te=function(t,e,n,o){return new(n||(n=Promise))(function(r,i){function s(t){try{l(o.next(t))}catch(t){i(t)}}function a(t){try{l(o.throw(t))}catch(t){i(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((o=o.apply(t,e||[])).next())})};const Se="Avg-s",Oe="Stddev-s";var Ie;!function(t){t[t.MAX_SAMLPES=5e4]="MAX_SAMLPES",t[t.MAX_FEATURES=100]="MAX_FEATURES"}(Ie||(Ie={}));class Le{static isApplicable(e,n){for(const t of e)if(!t.matches("numerical"))return!1;return n.type===t.COLUMN_TYPE.STRING}static isInteractive(t,e){return t.length<=Ie.MAX_FEATURES&&e.length<=Ie.MAX_SAMLPES}constructor(e,n){if(this.params=void 0,this.classesCount=1,this.featuresCount=1,void 0!==e){const t=e.featuresCount,n=e.classesCount;if(t<1)throw new Error("Incorrect features count");if(n<1)throw new Error("Incorrect classes count");const o=t+1;this.avgs=new Float32Array(o),this.stdevs=new Float32Array(o),this.categories=new Array(o),this.featuresCount=t,this.classesCount=n}else{if(void 0===n)throw new Error("Softmax classifier not initialized");try{const e=new Uint32Array(n.buffer,0,1)[0],o=new Uint8Array(n.buffer,4,e),r=t.DataFrame.fromByteArray(o),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 e=0;e<a;++e){const n=i.byIndex(e);if(this.categories[e]=n.name,n.type!==t.COLUMN_TYPE.FLOAT)throw new Error(`Incorrect input column type. Expected: float, passed: ${n.type}`);this.params[e]=n.getRawData()}const l=i.byName(Se);if(l.type!==t.COLUMN_TYPE.FLOAT)throw new Error("incorrect average values column type");this.avgs=l.getRawData();const u=i.byName(Oe);if(u.type!==t.COLUMN_TYPE.FLOAT)throw new Error("incorrect standard deviations column type");this.stdevs=u.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 e=this.classesCount,n=new Array(e+2);for(let o=0;o<e;++o)n[o]=t.Column.fromFloat32Array(this.categories[o],this.params[o]);n[e]=t.Column.fromFloat32Array(Se,this.avgs),n[e+1]=t.Column.fromFloat32Array(Oe,this.stdevs);const o=t.DataFrame.fromColumns(n).toByteArray(),r=o.length,i=new Uint8Array(r+4);return new Uint32Array(i.buffer,0,1)[0]=r,i.set(o,4),i}fit(e,n){return Te(this,arguments,void 0,function*(e,n,o=1,r=100,i=.1,s=.001){if(e.length!==this.featuresCount)throw new Error("Training failes - incorrect features count");if(o<=0||r<1||i<=0||s<=0)throw new Error("Training failes - incorrect fitting hyperparameters");this.extractStats(e);const a=n.length,l=n.categories.length,u=n.categories;for(let t=0;t<l;++t)this.categories[t]=u[t];try{const u=function(t,e,n,o,r,i,s,a,l,u,c){return St(EDA,"fitSoftmax",[t,e,n,o,r,i,s,a,l,u,c])}(e,t.Column.fromFloat32Array("avgs",this.avgs,this.featuresCount),t.Column.fromFloat32Array("stdevs",this.stdevs,this.featuresCount),t.Column.fromInt32Array("targets",n.getRawData(),a),l,r,o,i,s,this.featuresCount+1,l).columns;this.params=new Array(l);for(let t=0;t<l;++t)this.params[t]=u.byIndex(t).getRawData()}catch(t){try{this.params=yield this.fitSoftmaxParams(e,n,r,o,i,s)}catch(t){throw new Error("Training failes")}}if(void 0===this.params)throw new Error("Training failes")})}extractStats(e){let n=0;for(const o of e){if(o.type!==t.COLUMN_TYPE.INT&&o.type!==t.COLUMN_TYPE.FLOAT)throw new Error("Training failes - incorrect features type");this.avgs[n]=o.stats.avg,this.stdevs[n]=o.stats.stdev,++n}}normalized(e){const n=e.byIndex(0).length,o=new Array(n);for(let t=0;t<n;++t)o[t]=new Float32Array(this.featuresCount);let r=0;for(const i of e){if(i.type!==t.COLUMN_TYPE.INT&&i.type!==t.COLUMN_TYPE.FLOAT)throw new Error("Training failes - incorrect features type");const e=i.getRawData(),s=this.avgs[r],a=this.stdevs[r];if(a>0)for(let t=0;t<n;++t)o[t][r]=(e[t]-s)/a;else for(let t=0;t<n;++t)o[t][r]=0;++r}return o}transposed(e){const n=e.byIndex(0).length,o=this.featuresCount,r=new Array(o);for(let t=0;t<o;++t)r[t]=new Float32Array(n);let i=0;for(const o of e){if(o.type!==t.COLUMN_TYPE.INT&&o.type!==t.COLUMN_TYPE.FLOAT)throw new Error("Training failes - incorrect features type");const e=o.getRawData(),s=this.avgs[i],a=this.stdevs[i];if(a>0)for(let t=0;t<n;++t)r[i][t]=(e[t]-s)/a;else for(let t=0;t<n;++t)r[i][t]=0;++i}return r}preprocessedTargets(e){if(e.type!==t.COLUMN_TYPE.STRING)throw new Error("Training failes - incorrect target type");const n=this.classesCount,o=e.length,r=e.getRawData(),i=new Array(o),s=new Uint32Array(n).fill(0);for(let t=0;t<o;++t)i[t]=new Uint8Array(n).fill(0);for(let t=0;t<o;++t)i[t][r[t]]=1,++s[r[t]];return{oneHot:i,weights:s}}predict(e){if(void 0===this.params)throw new Error("Non-trained model");if(e.length!==this.featuresCount)throw new Error("Predcition fails: incorrect features count");const n=this.normalized(e),o=n.length,r=this.featuresCount,i=this.classesCount;let s,a;const l=new Float32Array(i);let u,c,f;const d=new Array(o);for(let t=0;t<o;++t){s=n[t],u=0;for(let t=0;t<i;++t){a=this.params[t],u=a[r];for(let t=0;t<r;++t)u+=a[t]*s[t];l[t]=Math.exp(u)}c=l[0],f=0;for(let t=1;t<i;++t)c<l[t]&&(c=l[t],f=t);d[t]=this.categories[f]}return t.Column.fromStrings("predicted",d)}fitSoftmaxParams(t,e,n,o,r,i){return Te(this,void 0,void 0,function*(){const a=this.preprocessedTargets(e);return new Promise((l,u)=>{const c=new Worker(new URL(s.p+s.u(501),s.b));c.postMessage({features:this.normalized(t),transposed:this.transposed(t),oneHot:a.oneHot,classesWeights:a.weights,targetRaw:e.getRawData(),iterations:n,rate:o,penalty:r,tolerance:i}),c.onmessage=function(t){c.terminate(),l(t.data.params),console.log(`Loss: ${t.data.loss}`)}})})}}var Pe,Re,Fe;!function(t){t[t.ITERATIONS=20]="ITERATIONS",t[t.ETA=.3]="ETA",t[t.MAX_DEPTH=6]="MAX_DEPTH",t[t.LAMBDA=1]="LAMBDA",t[t.ALPHA=0]="ALPHA"}(Pe||(Pe={})),function(t){t[t.SAMLPES_HIGH=1e5]="SAMLPES_HIGH",t[t.SAMLPES_MID=5e4]="SAMLPES_MID",t[t.SAMPLES_LOW=1e4]="SAMPLES_LOW",t[t.FEATURES_HIGH=10]="FEATURES_HIGH",t[t.FEATURES_MID=20]="FEATURES_MID",t[t.FEATURES_LOW=100]="FEATURES_LOW"}(Re||(Re={})),function(t){t[t.MODEL=1e7]="MODEL",t[t.UTILS=1]="UTILS",t[t.PACK=128]="PACK",t[t.SIZE=4]="SIZE"}(Fe||(Fe={}));const De=t.FLOAT_NULL;var Be;!function(t){t.PREDICT="Prediction",t.TYPE="Type",t.PARAMS="Params count",t.CATS="Categories",t.CATS_SIZE="Categories size"}(Be||(Be={}));class ke{static isApplicable(t,e){for(const e of t)if(!e.matches("numerical"))return!1;return!(!e.matches("numerical")&&!e.matches("string"))}static isInteractive(t,e){const n=t.length,o=e.length;return o<=Re.SAMPLES_LOW?n<=Re.FEATURES_LOW:o<=Re.SAMLPES_MID?n<=Re.FEATURES_MID:o<=Re.SAMLPES_HIGH&&n<=Re.FEATURES_HIGH}constructor(e){var n;if(this.modelParams=void 0,this.targetType=void 0,this.targetCategories=void 0,e)try{let o=0;const r=new Uint32Array(e.buffer,o,1)[0];o+=Fe.SIZE;const i=t.DataFrame.fromByteArray(new Uint8Array(e.buffer,o,r));o+=r,this.targetType=i.get(Be.TYPE,0);const s=i.get(Be.PARAMS,0),a=i.get(Be.CATS_SIZE,0);if(a>0){const r=t.DataFrame.fromByteArray(new Uint8Array(e.buffer,o,a));this.targetCategories=null===(n=r.col(Be.CATS))||void 0===n?void 0:n.toList()}o+=a,o=4*Math.ceil(o/4),this.modelParams=new Int32Array(e.buffer,o,s)}catch(t){throw new Error(`Failed to load model: ${t instanceof Error?t.message:"the platform issue"}`)}}fit(e,n){return o=this,r=arguments,a=function*(e,n,o=Pe.ITERATIONS,r=Pe.ETA,i=Pe.MAX_DEPTH,a=Pe.LAMBDA,l=Pe.ALPHA){this.targetType=n.type,this.targetType===t.COLUMN_TYPE.STRING&&(this.targetCategories=n.categories),this.modelParams=yield async function(t,e,n,o,r,i,a,l,u,c){return new Promise((f,d)=>{const h=e.length,m=t.length,p=new Float32Array(h*m);let g,v;for(let e=0;e<m;++e){v=t.byIndex(e).getRawData(),g=e*h;for(let t=0;t<h;++t)p[t+g]=v[t]}const y=new Worker(new URL(s.p+s.u(990),s.b));y.postMessage({features:p,target:e.getRawData(),samplesCount:h,featuresCount:m,modelReserve:u,utilsLength:c,iterations:o,eta:r,maxDepth:i,lambda:a,alpha:l,missingValue:n}),y.onmessage=function(t){y.terminate(),f(t.data.params)}})}(e,n,De,o,r,i,a,l,Fe.MODEL,Fe.UTILS)},new((i=void 0)||(i=Promise))(function(t,e){function n(t){try{l(a.next(t))}catch(t){e(t)}}function s(t){try{l(a.throw(t))}catch(t){e(t)}}function l(e){var o;e.done?t(e.value):(o=e.value,o instanceof i?o:new i(function(t){t(o)})).then(n,s)}l((a=a.apply(o,r||[])).next())});var o,r,i,a}predict(e){if(void 0===this.modelParams)throw new Error("Failed to apply non-trained model");const n=function(t,e,n){const o=t.byIndex(0).length,r=t.length,i=n.length;let s=XGBoostModule.HEAPF32;const a=XGBoostModule.HEAP32,l=XGBoostModule._malloc(o*r*4),u=XGBoostModule._malloc(4*o),c=XGBoostModule._malloc(4*i);for(let e=0;e<r;++e){const n=t.byIndex(e).getRawData();for(let t=0;t<o;++t)s[l/4+t+e*o]=n[t]}for(let t=0;t<i;++t)a[c/4+t]=n[t];XGBoostModule._predict(l,o,r,e,c,i,u,o),s=XGBoostModule.HEAPF32;const f=new Float32Array(o);for(let t=0;t<o;++t)f[t]=s[u/4+t];return XGBoostModule._free(l),XGBoostModule._free(u),XGBoostModule._free(c),f}(e,De,this.modelParams);switch(this.targetType){case t.COLUMN_TYPE.STRING:return this.stringColPrediction(n);case t.COLUMN_TYPE.INT:return this.intColPrediction(n);case t.COLUMN_TYPE.BIG_INT:return this.bigIntColPrediction(n);default:return t.Column.fromFloat32Array(Be.PREDICT,n)}}toBytes(){if(void 0===this.modelParams||void 0===this.targetType)throw new Error("Failed to pack non-trained model");const e=void 0!==this.targetCategories?t.DataFrame.fromColumns([t.Column.fromList(t.COLUMN_TYPE.STRING,Be.CATS,this.targetCategories)]).toByteArray():void 0,n=void 0!==e?e.length:0,o=this.modelParams.length*this.modelParams.BYTES_PER_ELEMENT,r=t.DataFrame.fromColumns([t.Column.fromStrings(Be.TYPE,[this.targetType]),t.Column.fromInt32Array(Be.PARAMS,new Int32Array([this.modelParams.length])),t.Column.fromInt32Array(Be.CATS_SIZE,new Int32Array([n]))]).toByteArray(),i=r.length,s=64*Math.ceil((Fe.SIZE+i+n+o+Fe.PACK)/64),a=new Uint8Array(s);let l=0;return new Uint32Array(a.buffer,l,1)[0]=i,l+=Fe.SIZE,a.set(r,l),l+=i,n>0&&a.set(e,l),l+=n,l=4*Math.ceil(l/4),a.set(new Uint8Array(this.modelParams.buffer),l),a}stringColPrediction(e){const n=e.length;if(void 0===this.targetCategories)throw new Error("Predicting fails: undefined categories");const o=new Array(n),r=this.targetCategories.length-1,i=t=>Math.max(0,Math.min(t,r));for(let t=0;t<n;++t)o[t]=this.targetCategories[i(Math.round(e[t]))];return t.Column.fromList(t.COLUMN_TYPE.STRING,Be.PREDICT,o)}intColPrediction(e){const n=e.length,o=new Int32Array(n);for(let t=0;t<n;++t)o[t]=Math.round(e[t]);return t.Column.fromInt32Array(Be.PREDICT,o,n)}bigIntColPrediction(e){const n=e.length,o=new BigInt64Array(n);for(let t=0;t<n;++t)o[t]=BigInt(Math.round(e[t]));return t.Column.fromBigInt64Array(Be.PREDICT,o)}}var Ue=function(t,e,n,o){return new(n||(n=Promise))(function(r,i){function s(t){try{l(o.next(t))}catch(t){i(t)}}function a(t){try{l(o.throw(t))}catch(t){i(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((o=o.apply(t,e||[])).next())})};const Ve=100,Ge=8e3;var $e;b("Softmax",()=>{C("Performance: 50K samples, 100 features",()=>Ue(void 0,void 0,void 0,function*(){const t=Ee(5e4,Ve,!1).columns,e=t.byIndex(Ve);t.remove(e.name);const n=new Le({classesCount:e.categories.length,featuresCount:t.length});yield n.fit(t,e);const o=n.toBytes();new Le(void 0,o).predict(t)}),{timeout:Ge,benchmark:!0}),C("Correctness",()=>Ue(void 0,void 0,void 0,function*(){const t=Ee(50,2,!0).columns,e=t.byIndex(2);t.remove(e.name);const n=new Le({classesCount:e.categories.length,featuresCount:t.length});yield n.fit(t,e);const o=n.toBytes(),r=be(e,new Le(void 0,o).predict(t));E(r>.9,!0,`Softmax failed, too small accuracy: ${r}; expected: <= 0.9`)}),{timeout:Ge})}),b("XGBoost",()=>{C("Performance: 50K samples, 100 features",()=>Ue(void 0,void 0,void 0,function*(){const t=Ee(5e4,Ve,!1).columns,e=t.byIndex(Ve);t.remove(e.name);const n=new ke;yield n.fit(t,e);const o=n.toBytes();new ke(o).predict(t)}),{timeout:Ge,benchmark:!0}),C("Correctness",()=>Ue(void 0,void 0,void 0,function*(){const t=Ee(50,2,!0).columns,e=t.byIndex(2);t.remove(e.name);const n=new ke;yield n.fit(t,e);const o=n.toBytes(),r=be(e,new ke(o).predict(t));E(r>.9,!0,`XGBoost failed, too small accuracy: ${r}; expected: <= 0.9`)}),{timeout:Ge})}),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"}($e||($e={}));const He="copy";var qe,Ye;!function(t){t.KNN_IMPUTER="k-NN Imputation",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"}(qe||(qe={})),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 k-NN 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",t.RUN="Run imputation using the k-NN method"}(Ye||(Ye={}));const We=[t.COLUMN_TYPE.INT,t.COLUMN_TYPE.FLOAT,t.COLUMN_TYPE.STRING,t.COLUMN_TYPE.DATE_TIME,t.COLUMN_TYPE.QNUM];function je(e){switch(e.type){case t.COLUMN_TYPE.INT:return t.INT_NULL;case t.COLUMN_TYPE.FLOAT:case t.COLUMN_TYPE.QNUM:case t.COLUMN_TYPE.DATE_TIME:return t.FLOAT_NULL;case t.COLUMN_TYPE.STRING:return e.max;default:throw new Error($e.UNSUPPORTED_COLUMN_TYPE)}}var Xe,ze,Ke;function Qe(e){switch(e){case t.COLUMN_TYPE.STRING:case t.COLUMN_TYPE.DATE_TIME:return{defaultWeight:Ke.WEIGHT,defaultMetric:Xe.ONE_HOT,availableMetrics:[Xe.ONE_HOT]};case t.COLUMN_TYPE.INT:case t.COLUMN_TYPE.FLOAT:case t.COLUMN_TYPE.QNUM:return{defaultWeight:Ke.WEIGHT,defaultMetric:Xe.DIFFERENCE,availableMetrics:[Xe.DIFFERENCE,Xe.ONE_HOT]};default:throw new Error($e.UNSUPPORTED_COLUMN_TYPE)}}!function(t){t.ONE_HOT="One-hot",t.DIFFERENCE="Difference"}(Xe||(Xe={})),function(t){t.EUCLIDEAN="Euclidean",t.MANHATTAN="Manhattan"}(ze||(ze={})),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"}(Ke||(Ke={}));const Ze=e=>{C(`${e} dist, 100K rows, 15 cols, 75 missing vals`,()=>{return n=void 0,o=void 0,i=function*(){const n=function(e){const n=ye.length,o=[];let r=0;const i=new Map;for(let n=0;n<5;++n){const s=new Int32Array(e),a=`int #${n+1}`,l=[];for(let t=0;t<e;++t)s[t]=Math.floor(10*Math.random());for(let n=0;n<5;++n)r=Math.floor(e*Math.random()),s[r]=t.INT_NULL,l.push(r);o.push(t.Column.fromInt32Array(a,s)),i.set(a,l)}for(let n=0;n<5;++n){const s=new Float32Array(e),a=`float #${n+1}`,l=[];for(let t=0;t<e;++t)s[t]=10*Math.random();for(let n=0;n<5;++n)r=Math.floor(e*Math.random()),s[r]=t.FLOAT_NULL,l.push(r);o.push(t.Column.fromFloat32Array(a,s)),i.set(a,l)}for(let s=0;s<5;++s){const a=new Array(e),l=`str #${s+1}`,u=[];for(let t=0;t<e;++t)a[t]=ye[Math.floor(Math.random()*n)];const c=t.Column.fromStrings(l,a);for(let t=0;t<5;++t)r=Math.floor(e*Math.random()),c.set(r,null),u.push(r);o.push(c),i.set(l,u)}return{df:t.DataFrame.fromColumns(o),misValsIds:i}}(1e5),o=n.df,r=o.columns.names(),i=new Map,s=n.misValsIds;for(const t of o.columns){const e=Qe(t.type);i.set(t.name,{weight:e.defaultWeight,type:e.defaultMetric})}const a=function(e,n,o,r,i,s,a){if(s<1)throw new Error($e.INCORRECT_NEIGHBORS);if(e.rowCount<2)throw new Error($e.KNN_NOT_ENOUGH_OF_ROWS);if(0===n.length)throw new Error($e.KNN_NO_TARGET_COLUMNS);if(0===o.size)throw new Error($e.KNN_NO_FEATURE_COLUMNS);1===o.size&&n.forEach(t=>{if(o.has(t))throw new Error(`${$e.KNN_NO_FEATURE_COLUMNS} can be used for the column '${t}'`)}),n.forEach(t=>{if(!r.has(t))throw new Error(`${$e.KNN_FAILS}: ${$e.WRONG_PREDICTIONS}`)});const l=e.columns;n.forEach(t=>{if(!We.includes(l.byName(t).type))throw new Error($e.UNSUPPORTED_COLUMN_TYPE)}),o.forEach((t,n)=>{if(!We.includes(e.getCol(n).type))throw new Error($e.UNSUPPORTED_COLUMN_TYPE)});const u=new Map;return n.forEach(n=>{const c=l.byName(n),f=je(c),d=c.length,h=c.getRawData(),m=new Uint16Array(c.categories.length),p=[],g=[],v=[],y=[];o.forEach((t,e)=>{if(e!==c.name){const n=l.byName(e);switch(p.push(n.getRawData()),g.push(je(n)),t.type){case Xe.DIFFERENCE:v.push((e,n)=>t.weight*Math.abs(e-n));break;case Xe.ONE_HOT:v.push((e,n)=>t.weight*(e===n?0:1))}}});const A=p.length,w=new Uint32Array(p.length),C=new Float32Array(p.length);let E=0;const b=new Array(s);let x=0,_=0,N=0,M=0,T=0;const S=(t,e)=>{w.forEach((n,o)=>{C[o]=v[n](p[n][t],p[n][e])})},O=i===ze.EUCLIDEAN?()=>{let t=0;for(let e=0;e<E;++e)t+=C[e]*C[e];return Math.sqrt(t)}:()=>{let t=0;for(let e=0;e<E;++e)t+=Math.abs(C[e]);return Math.sqrt(t)},L=t=>{if(h[t]===f)return!1;for(let e=0;e<E;++e)if(p[w[e]][t]===g[w[e]])return!1;return!0},P=e=>{if((t=>{E=0;for(let e=0;e<A;++e)p[e][t]!==g[e]&&(w[E]=e,++E)})(e),0===E)throw new Error(`${$e.KNN_IMPOSSIBLE_IMPUTATION}: the column "${c.name}", row ${e+1}`);x=0;for(let t=0;t<d;++t)if(L(t)&&t!==e){S(e,t);const n=O();if(x<s)b[x]={index:t,dist:n},++x;else{_=0,N=b[0].dist;for(let t=1;t<x;++t)N<b[t].dist&&(N=b[t].dist,_=t);n<N&&(b[_]={index:t,dist:n})}}if(0===x)throw new Error(`${$e.KNN_IMPOSSIBLE_IMPUTATION}: the column "${c.name}", row ${e+1}`);if(c.type===t.COLUMN_TYPE.STRING)return(()=>{m.forEach((t,e,n)=>n[e]=0);let t=0;for(t=0;t<x;++t)++m[h[b[t].index]];let e=m[0],n=0;return m.forEach((t,o)=>{t>e&&(e=t,n=o)}),n})();M=0;for(let t=0;t<x;++t)M+=h[b[t].index];return T=M/x,c.type===t.COLUMN_TYPE.INT?Math.round(T):T};if(a){for(const t of r.get(n))try{h[t]=P(t)}catch(e){y.push(t),e instanceof Error||I.shell.error($e.CORE_ISSUE)}y.length>0&&u.set(n,y),c.set(0,c.get(0))}else{const t=c.clone();let o=1,i=`${n}(${He})`;for(;e.columns.contains(i);)i=`${n}(${He} ${o})`,++o;t.name=i;const s=t.getRawData();for(const t of r.get(n))try{s[t]=P(t)}catch(e){y.push(t),e instanceof Error||I.shell.error($e.CORE_ISSUE)}y.length>0&&u.set(i,y),t.set(0,t.get(0)),e.columns.add(t)}}),u}(o,r,i,s,e,5,!0);let l=0;a.forEach((t,e)=>l+=t.length),E(l,0,`Failed to impute ${l} missing values`)},new((r=void 0)||(r=Promise))(function(t,e){function s(t){try{l(i.next(t))}catch(t){e(t)}}function a(t){try{l(i.throw(t))}catch(t){e(t)}}function l(e){var n;e.done?t(e.value):(n=e.value,n instanceof r?n:new r(function(t){t(n)})).then(s,a)}l((i=i.apply(n,o||[])).next())});var n,o,r,i},{timeout:1e4,benchmark:!0})};b("Missing values imputation",()=>{Ze(ze.EUCLIDEAN),Ze(ze.MANHATTAN)});var Je,tn=s(6572);function en(t){if(t<=0||t>=1)throw new Error(Je.INCORRECT_SIGNIFICANCE_LEVEL)}function nn(t){const e=t.size;return e<=1?0:(t.sumOfSquares-Math.pow(t.sum,2)/e)/(e-1)}function on(t,e,n){en(n);const o=nn(t),r=nn(e);return 0===o||0===r?o===r:o/r<tn.centralF.inv(1-n,t.size-1,e.size-1)}!function(t){t.NON_EQUAL_FACTORS_VALUES_SIZE="non-equal sizes of factor and values arrays",t.INCORRECT_SIGNIFICANCE_LEVEL="incorrect significance level",t.NON_EQUAL_VARIANCES="non-equal variances",t.NON_NORMAL_DISTRIB="non-normal distribution",t.UNSUPPORTED_COLUMN_TYPE="unsupported feature column type",t.INCORRECT_CATEGORIES_COL_TYPE="incorrect categories column type",t.SINGLE_FACTOR="single category features",t.CATS_EQUAL_SIZE="single value in each category",t.NO_FEATURE_VARIATION="no feature variation",t.NO_FEATURE_VARIATION_WITHIN_GROUPS="no feature variation within groups"}(Je||(Je={}));class rn{constructor(t,e,n){if(this.nullsCount=0,t.length!==e.length)throw new Error(Je.NON_EQUAL_FACTORS_VALUES_SIZE);if(!(e.stats.stdev>0))throw new Error(Je.NO_FEATURE_VARIATION);this.setStats(t,e,n)}areVarsEqual(t){const e=this.catCount;if(1===e)return!0;const n={sum:this.sums[0],sumOfSquares:this.sumsOfSquares[0],size:this.subSampleSizes[0]};for(let o=1;o<e;++o)if(!on(n,{sum:this.sums[o],sumOfSquares:this.sumsOfSquares[o],size:this.subSampleSizes[o]},t))return!1;return!0}getOneWayAnova(){let t=0,e=0,n=0,o=this.catCount,r=o;for(let i=0;i<o;++i)0!==this.subSampleSizes[i]?(t+=this.sums[i],e+=this.sumsOfSquares[i],n+=Math.pow(this.sums[i],2)/this.subSampleSizes[i]):--r;if(o=r,1===o)throw new Error(Je.SINGLE_FACTOR);const i=this.size-this.nullsCount;if(i===o)throw new Error(Je.CATS_EQUAL_SIZE);const s=e-Math.pow(t,2)/i,a=n-Math.pow(t,2)/i,l=s-a;if(0===l)throw new Error(Je.NO_FEATURE_VARIATION_WITHIN_GROUPS);const u=o-1,c=i-o,f=a/u,d=l/c,h=f/d;return{ssBn:a,ssWn:l,ssTot:s,dfBn:u,dfWn:c,dfTot:i-1,msBn:f,msWn:d,fStat:h,pValue:1-tn.centralF.cdf(h,u,c)}}setStats(e,n,o){const r=n.type,i=n.length,s=je(n);switch(r){case t.COLUMN_TYPE.INT:case t.COLUMN_TYPE.FLOAT:const r=o;this.catCount=r,this.size=i;const a=n.getRawData(),l=e.getRawData(),u=new Float64Array(r).fill(0),c=new Float64Array(r).fill(0),f=new Int32Array(r).fill(0);let d;if(e.type==t.COLUMN_TYPE.BOOL){let t=0,e=0,n=l[0];const o=8*l.BYTES_PER_ELEMENT-1;for(let r=0;r<i;++r)d=1&n>>e,a[r]!==s?(u[d]+=a[r],c[d]+=Math.pow(a[r],2),++f[d]):++this.nullsCount,++e,e>o&&(e=0,++t,n=l[t])}else{const t=e.stats.missingValueCount>0?je(e):-1;for(let e=0;e<i;++e)d=l[e],d!==t&&a[e]!==s?(u[d]+=a[e],c[d]+=Math.pow(a[e],2),++f[d]):++this.nullsCount}this.sums=u,this.sumsOfSquares=c,this.subSampleSizes=f;break;default:throw new Error(Je.UNSUPPORTED_COLUMN_TYPE)}}}function sn(t,e,n,o=!0){en(n);const r=t.stats.uniqueCount;if(r<2)throw new Error(Je.SINGLE_FACTOR);const i=new rn(t,e,r);if(o&&!i.areVarsEqual(n))throw new Error(Je.NON_EQUAL_VARIANCES);const s=i.getOneWayAnova();return{anovaTable:s,fCritical:tn.centralF.inv(1-n,s.dfBn,s.dfWn),significance:n}}var an=function(t,e,n,o){return new(n||(n=Promise))(function(r,i){function s(t){try{l(o.next(t))}catch(t){i(t)}}function a(t){try{l(o.throw(t))}catch(t){i(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((o=o.apply(t,e||[])).next())})};const ln=.05,un=!1,cn=t.Column.fromList(t.COLUMN_TYPE.INT,"features",[9,12,4,8,7,4,6,8,2,10,1,3,4,5,2]),fn=t.Column.fromStrings("features",["A","A","A","A","A","B","B","B","B","B","C","C","C","C","C"]);var dn;!function(t){t[t.DF_BN=2]="DF_BN",t[t.DF_TOT=14]="DF_TOT",t[t.DF_WN=12]="DF_WN",t[t.SS_BN=63.333]="SS_BN",t[t.SS_TOT=147.333]="SS_TOT",t[t.SS_WN=84]="SS_WN",t[t.MS_BN=31.666]="MS_BN",t[t.MS_WN=7]="MS_WN",t[t.F_STAT=4.523]="F_STAT",t[t.F_CRIT=3.885]="F_CRIT",t[t.P_VAL=.034]="P_VAL"}(dn||(dn={})),b("ANOVA",()=>{C("Performance: 1M rows demog",()=>an(void 0,void 0,void 0,function*(){const t=I.data.demo.demog(1e6),e=t.col("race"),n=t.col("height");new rn(e,n,e.stats.uniqueCount).areVarsEqual(ln),sn(e,n,ln,un)}),{timeout:4e3,benchmark:!0}),C("Correctness",()=>an(void 0,void 0,void 0,function*(){const t=sn(fn,cn,ln,un),e=t.anovaTable;E(e.dfBn,dn.DF_BN,"Incorrect degrees of freedom: dfBn"),E(e.dfTot,dn.DF_TOT,"Incorrect degrees of freedom: dfTot"),E(e.dfWn,dn.DF_WN,"Incorrect degrees of freedom: dfWn");const n=(t,e)=>Math.abs(t-e)<.01;E(n(e.ssBn,dn.SS_BN),!0,"Incorrect sum of squares: ssBn"),E(n(e.ssTot,dn.SS_TOT),!0,"Incorrect sum of squares: ssTot"),E(n(e.ssWn,dn.SS_WN),!0,"Incorrect sum of squares: ssWn"),E(n(e.msBn,dn.MS_BN),!0,"Incorrect mean squares: msBn"),E(n(e.msWn,dn.MS_WN),!0,"Incorrect mean squares: msWn"),E(n(e.fStat,dn.F_STAT),!0,"Incorrect F-statistics value"),E(n(e.pValue,dn.P_VAL),!0,"Incorrect p-value"),E(n(t.fCritical,dn.F_CRIT),!0,"Incorrect F-critical")}),{timeout:4e3})});const hn=rxjs;function mn(t){return"numerical"===t.functionType}function pn(t=1,e=0,n=1){return{functionType:"numerical",weight:t,mode:"freeform",min:e,max:n,line:[]}}function gn(t=1,e){return{functionType:"categorical",weight:t,categories:null!=e?e:[{name:"Category 1",desirability:1}]}}function vn(t){return t.functionType?t:t.categories?{...t,functionType:"categorical"}:{...t,functionType:"numerical"}}const yn=["Average","Sum","Product","Geomean","Min","Max"],An="Average";class wn{constructor(t,e=!1,n=!1){this.onChanged=new hn.Subject,this.supportsModeDialog=!0,this.desirabilityInputs=[],this.form=null,this.columnCategories=null,this._prop=t,this.design=e,this.showControls=n,this.root=ot.divV([],"statistics-mpo-cat-editor"),this.buildForm()}buildForm(){var t;const e=null!==(t=this._prop.categories)&&void 0!==t?t:[];this.form&&(ot.empty(this.root),this.form=null,this.desirabilityInputs=[]),this.design?this.buildDesignForm(e):this.buildViewForm(e)}createDesirabilityInput(t,e){var n;const o=ot.input.float(t,{value:null!==(n=e.desirability)&&void 0!==n?n:.5,min:0,max:1,format:"#0.000",onValueChanged:t=>{e.desirability=t,this.onChanged.next(this._prop)}});return this.desirabilityInputs.push(o),o}buildViewForm(t){for(const e of t)this.createDesirabilityInput(e.name,e);this.form=ot.form(this.desirabilityInputs),this.root.append(this.form)}buildDesignForm(t){const e=ot.divH([ot.divText("Name","statistics-mpo-cat-col-header statistics-mpo-cat-name"),ot.divText("Score","statistics-mpo-cat-col-header statistics-mpo-cat-desirability"),...this.showControls?[ot.div([],{style:{width:"40px"}})]:[]],"statistics-mpo-cat-row statistics-mpo-cat-header-row"),n=t.map((t,e)=>this.buildCategoryRow(t,e));this.form=ot.divV([e,...n]),this.root.append(this.form)}buildCategoryRow(t,e){const n=this.columnCategories?ot.input.choice("",{items:this.columnCategories,nullable:!0,value:t.name||null,onValueChanged:e=>{t.name=null!=e?e:"",this.onChanged.next(this._prop)}}):ot.input.string("",{value:t.name,onValueChanged:e=>{t.name=e,this.onChanged.next(this._prop)}});n.root.classList.add("statistics-mpo-cat-name");const o=this.createDesirabilityInput("",t);o.root.classList.add("statistics-mpo-cat-desirability");const r=[n.root,o.root];if(this.showControls){const t=ot.icons.add(()=>{const t={name:this.columnCategories?"":`Category ${this._prop.categories.length+1}`,desirability:1};this._prop.categories.splice(e+1,0,t),this.buildForm(),this.onChanged.next(this._prop)}),n=ot.icons.delete(()=>{this._prop.categories.splice(e,1),this.buildForm(),this.onChanged.next(this._prop)});r.push(ot.divH([t,n],"statistics-mpo-control-buttons"))}return ot.divH(r,"statistics-mpo-cat-row")}redrawAll(t=!0){this.buildForm(),t&&this.onChanged.next(this._prop)}setChoices(t){this.columnCategories=t,this.buildForm()}setColumn(t){var e,n;if(!t)return;this.columnCategories=t.isCategorical?[...t.categories]:null;const o=new Map(null!==(n=null===(e=this._prop.categories)||void 0===e?void 0:e.map(t=>[t.name,t.desirability]))&&void 0!==n?n:[]);this._prop.categories=t.categories.map(t=>{var e;return{name:t,desirability:null!==(e=o.get(t))&&void 0!==e?e:1}}),this.buildForm()}}let Cn;const En=10,bn=10,xn=20,_n=30,Nn={line:t.Color.toHtml(t.Color.filteredRows),handle:t.Color.toHtml(t.Color.selectedRows),barFill:t.Color.toHtml(t.Color.histogramBar),barStroke:t.Color.toHtml(t.Color.lightGray)};class Mn{constructor(t,e,n,o){this.minX=t,this.maxX=e,this.width=n,this.height=o,this.plotWidth=n-_n-bn,this.plotHeight=o-En-xn,this.scaleX=this.maxX-this.minX===0?1:this.plotWidth/(this.maxX-this.minX),this.scaleY=this.plotHeight}toCanvasCoords(t){return{x:_n+(t[0]-this.minX)*this.scaleX,y:En+this.plotHeight-t[1]*this.scaleY}}toDataCoords(t,e){let n=this.minX+(t-_n)/this.scaleX,o=(En+this.plotHeight-e)/this.scaleY;return n=Math.max(this.minX,Math.min(this.maxX,n)),o=Math.max(0,Math.min(1,o)),{x:n,y:o}}}class Tn{constructor(t,e,n){this.root=ot.div([],"statistics-mpo-line-editor"),this.onChanged=new hn.Subject,this.supportsModeDialog=!0,this.ignoreNextClick=!1,this.dragScaleX=0,this.dragScaleY=0,this._prop=t,this._width=e,this._height=n,this.ensureDefaultLine(),this.root.style.width=`${e}px`,this.root.style.height=`${n}px`,this.root.style.position="relative",requestAnimationFrame(()=>this.initKonva(e,n))}ensureDefaultLine(){var t,e;if(this._prop.line.length>0)return;const n=null!==(t=this._prop.min)&&void 0!==t?t:0,o=null!==(e=this._prop.max)&&void 0!==e?e:1;this._prop.line=[[n,.5],[o,.5]]}updateDragScales(){const t=this._width-_n-bn,e=this._height-En-xn;this.dragScaleX=(this.getMaxX()-this.getMinX())/t,this.dragScaleY=1/e}isInPlotArea(t,e,n){return t.x>=_n&&t.x<=e-bn&&t.y>=En&&t.y<=n-xn}async initKonva(t,e){var n;if(!this.root.parentElement)return void console.warn("Konva container not attached to DOM yet.");const o=await async function(){return Cn||(Cn=(await s.e(397).then(s.t.bind(s,5778,23))).default),Cn}();this.barsLayer=new o.Layer,this.stage=new o.Stage({container:this.root,width:t,height:e}),this.stage.add(this.barsLayer),this.layer=new o.Layer,this.stage.add(this.layer);const r=this.getMinX(),i=this.getMaxX();this.drawAxes(r,i,t,e),this.konvaLine=new o.Line({points:[],stroke:Nn.line,strokeWidth:2,lineCap:"round",lineJoin:"round"}),this.layer.add(this.konvaLine),this.pointsGroup=new o.Group,this.layer.add(this.pointsGroup),this.redrawFn=(t=!0)=>{const e=this.getMinX(),n=this.getMaxX();"freeform"===this._prop.mode&&this._prop.freeformLine&&(this._prop.line=this._prop.freeformLine),"freeform"!==this._prop.mode&&(this._prop.freeformLine||(this._prop.freeformLine=[...this._prop.line]),this._prop.line=this.computeLine()),this.pointsGroup.destroyChildren();const r=[],i=new Mn(e,n,this._width,this._height),s=[...this._prop.line.keys()].sort((t,e)=>this._prop.line[t][0]-this._prop.line[e][0]);s.map(t=>this._prop.line[t]).forEach((t,a)=>{const l=i.toCanvasCoords([t[0],t[1]]);if(r.push(l.x,l.y),"freeform"!==this._prop.mode)return;const u=new o.Circle({x:l.x,y:l.y,radius:3,fill:"white",stroke:Nn.line,strokeWidth:1,draggable:!0,hitStrokeWidth:5});u.setAttr("_dataIndex",s[a]),u.on("dragmove",t=>{const o=t.target,r=o.position(),a=o.getAttr("_dataIndex"),l=s.indexOf(a),u=l>0?this._prop.line[s[l-1]][0]:e,c=l<s.length-1?this._prop.line[s[l+1]][0]:n,f=n-e===0?0:.001*(n-e),d=i.toCanvasCoords([u+(l>0?f:0),0]).x,h=i.toCanvasCoords([c-(l<s.length-1?f:0),0]).x;r.x=Math.max(d,Math.min(h,r.x));const m=this._height-xn;r.y=Math.max(10,Math.min(m,r.y)),o.position(r);const p=i.toDataCoords(r.x,r.y);this._prop.line[a][0]=p.x,this._prop.line[a][1]=p.y;const g=this._prop.line.map((t,e)=>{if(e===a)return[r.x,r.y];{const e=i.toCanvasCoords([t[0],t[1]]);return[e.x,e.y]}}).flat();this.konvaLine.points(g),this.layer.batchDraw()}),u.on("dragend",()=>{var t;this._prop.line.sort((t,e)=>t[0]-e[0]),null===(t=this.redrawFn)||void 0===t||t.call(this)}),u.on("contextmenu",t=>{var e;if(t.evt.preventDefault(),this._prop.line.length<=2)return void I.shell.warning("Cannot remove points, minimum of 2 required.");this.ignoreNextClick=!0;const n=t.target.getAttr("_dataIndex");n>=0&&(null==this._prop.min&&(this._prop.min=this.getMinX()),null==this._prop.max&&(this._prop.max=this.getMaxX()),this._prop.line.splice(n,1),null===(e=this.redrawFn)||void 0===e||e.call(this))}),u.on("mouseenter",t=>{this.stage.container().style.cursor="pointer";const e=t.target.position(),n=i.toDataCoords(e.x,e.y),o=`X: ${n.x.toFixed(2)}, Y: ${n.y.toFixed(2)}<br><br>Drag to move, double-click to edit, right-click to delete`;ot.tooltip.show(o,t.evt.clientX,t.evt.clientY)}),u.on("mouseleave",()=>{this.stage.container().style.cursor="default",ot.tooltip.hide()}),u.on("dblclick dbltap",t=>{this.ignoreNextClick=!0,ot.tooltip.hide();const e=t.target.getAttr("_dataIndex");this.showPointEditor(e,t.evt.clientX,t.evt.clientY)}),this.pointsGroup.add(u)}),this.konvaLine.points(r),this.layer.batchDraw(),this.addSpecialHandle(this._width,this._height),t&&this.onChanged.next(this._prop.line)},this.stage.on("click tap",t=>{var e,n;if(this.ignoreNextClick)return void(this.ignoreNextClick=!1);if(t.target instanceof o.Circle||0!==t.evt.button)return;const r=null===(e=this.stage)||void 0===e?void 0:e.getPointerPosition();if(!r)return;const i=this.getMinX(),s=this.getMaxX();if(!this.isInPlotArea(r,this.stage.width(),this.stage.height()))return;const a=new Mn(i,s,this.stage.width(),this.stage.height()).toDataCoords(r.x,r.y);this._prop.line.push([a.x,a.y]),this._prop.line.sort((t,e)=>t[0]-e[0]),null===(n=this.redrawFn)||void 0===n||n.call(this)}),this.stage.on("mousemove",t=>{if(!this.stage)return;const e=this.stage.getPointerPosition();e&&"freeform"!==this._prop.mode&&(this.isInPlotArea(e,this._width,this._height)?this.stage.container().style.cursor="grab":this.stage.container().style.cursor="default")}),this.stage.on("mouseout",()=>ot.tooltip.hide()),this.enableCurveDrag(),this.updateDragScales(),ot.onSizeChanged(this.root).subscribe(t=>{const{clientWidth:e,clientHeight:n}=this.root;e>0&&n>0&&this.resize(e,n)}),this.pendingBarValues&&(this.drawBars(this.pendingBarValues),this.pendingBarValues=void 0),null===(n=this.redrawFn)||void 0===n||n.call(this,!1)}get line(){return this._prop.line}computeLine(){var t,e,n,o,r,i,s,a;if("freeform"===this._prop.mode)return this._prop.line;const l=this.getMinX(),u=this.getMaxX(),c=[];for(let f=0;f<=60;f++){const d=l+f/60*(u-l);let h=0;if("gaussian"===this._prop.mode){null!==(t=(r=this._prop).mean)&&void 0!==t||(r.mean=(l+u)/2),null!==(e=(i=this._prop).sigma)&&void 0!==e||(i.sigma=(u-l)/6);const n=(d-this._prop.mean)/this._prop.sigma;h=Math.exp(-.5*n*n)}if("sigmoid"===this._prop.mode){null!==(n=(s=this._prop).x0)&&void 0!==n||(s.x0=(l+u)/2),null!==(o=(a=this._prop).k)&&void 0!==o||(a.k=10);const t=this._prop.x0,e=this._prop.k;h=1/(1+Math.exp(-e*(d-t)))}c.push([d,h])}return c}drawAxes(t,e,n,o){const r=getComputedStyle(document.documentElement).getPropertyValue("--grey-2").trim()||"#DBDCDF";this.layer.add(new Cn.Line({points:[_n,o-xn,n-bn,o-xn],stroke:r,strokeWidth:1}),new Cn.Line({points:[_n,En,_n,o-xn],stroke:r,strokeWidth:1}),new Cn.Text({x:_n,y:o-xn+3,text:t.toFixed(1),fontSize:9,fill:"grey"}),new Cn.Text({x:n-bn-15,y:o-xn+3,text:e.toFixed(1),fontSize:9,fill:"grey"}))}getMinX(){var t,e;return null!==(e=null!==(t=this._prop.min)&&void 0!==t?t:Math.min(...this._prop.line.map(t=>t[0])))&&void 0!==e?e:0}getMaxX(){var t,e;return null!==(e=null!==(t=this._prop.max)&&void 0!==t?t:Math.max(...this._prop.line.map(t=>t[0])))&&void 0!==e?e:1}getDefaultMean(){return(this.getMinX()+this.getMaxX())/2}getDefaultSigma(){return Math.max(.01,(this.getMaxX()-this.getMinX())/6)}getDefaultX0(){return(this.getMinX()+this.getMaxX())/2}getDefaultK(){return 10}redrawAll(t=!0){if(!this.stage||!this.layer||!this.redrawFn)return;const e=this.stage.width(),n=this.stage.height(),o=this.getMinX(),r=this.getMaxX();this.layer.destroyChildren(),this.drawAxes(o,r,e,n),this.layer.add(this.konvaLine,this.pointsGroup),this.redrawFn(t),this.barValues&&this.drawBars()}resize(t,e){t===this._width&&e===this._height||(this._width=t,this._height=e,this.stage&&(this.stage.width(t),this.stage.height(e),this.updateDragScales(),this.redrawAll(!1)))}drawBars(t){var e;if(t&&(this.barValues=t),!this.barsLayer)return void(this.pendingBarValues=t);if(this.barsLayer.destroyChildren(),!this.barValues||0===this.barValues.length)return;const n=this.barsLayer.getStage();if(!n)return void(this.pendingBarValues=t);const o=n.width(),r=n.height(),i=this.getMinX(),s=this.getMaxX();if(s===i)return;const a=o-_n-bn,l=r-En-xn,u=Math.max(1e-9,(s-i)/20),c=new Array(20).fill(0);(null!==(e=this.barValues)&&void 0!==e?e:[]).forEach(t=>{const e=Math.min(Math.floor((t-i)/u),19);c[e]++});const f=Math.max(...c)||1;c.forEach((t,e)=>{const n=_n+e*u/(s-i)*a,o=u/(s-i)*a-1,r=t/f*l,c=new Cn.Rect({x:n,y:En+l-r,width:o,height:r,fill:Nn.barFill,opacity:.25,stroke:Nn.barStroke,strokeWidth:.5});this.barsLayer.add(c)}),this.barsLayer.batchDraw()}enableCurveDrag(){if(!this.stage)return;let t=!1,e=null,n=0,o=0,r=0,i=0;this.stage.on("mousedown touchstart",s=>{var a,l,u,c;if("freeform"===this._prop.mode)return;if(!s.evt)return;const f=this.stage.getPointerPosition();f&&this.isInPlotArea(f,this._width,this._height)&&(t=!0,e=f,n=null!==(a=this._prop.mean)&&void 0!==a?a:(this.getMinX()+this.getMaxX())/2,o=null!==(l=this._prop.sigma)&&void 0!==l?l:(this.getMaxX()-this.getMinX())/6,r=null!==(u=this._prop.x0)&&void 0!==u?u:(this.getMinX()+this.getMaxX())/2,i=null!==(c=this._prop.k)&&void 0!==c?c:10,this.stage.container().style.cursor="grabbing")}),this.stage.on("mousemove touchmove",s=>{var a,l;if(!t||!e)return;const u=this.stage.getPointerPosition();if(!u)return;const c=u.x-e.x,f=u.y-e.y;"gaussian"===this._prop.mode&&(this._prop.mean=n+c*this.dragScaleX,this._prop.sigma=Math.max(.01,o+-f*this.dragScaleY*(this.getMaxX()-this.getMinX()))),"sigmoid"===this._prop.mode&&(this._prop.x0=r+c*this.dragScaleX,this._prop.k=Math.max(.1,i+-f*this.dragScaleY*50)),this._prop.line=this.computeLine(),null===(a=this.redrawFn)||void 0===a||a.call(this),null===(l=this.onParamsChanged)||void 0===l||l.call(this,this._prop)}),this.stage.on("mouseup touchend",()=>{t=!1,e=null,this.stage.container().style.cursor="default"})}addSpecialHandle(t,e){var n,o;if("freeform"===this._prop.mode)return;const r=this.getMinX(),i=this.getMaxX(),s=new Mn(r,i,t,e);let a=(r+i)/2,l=.5;"gaussian"===this._prop.mode?(a=null!==(n=this._prop.mean)&&void 0!==n?n:(r+i)/2,l=1):"sigmoid"===this._prop.mode&&(a=null!==(o=this._prop.x0)&&void 0!==o?o:(r+i)/2,l=.5);const u=s.toCanvasCoords([a,l]);this.specialHandle?(this.specialHandle.getLayer()||this.layer.add(this.specialHandle),this.specialHandle.position(u)):(this.specialHandle=new Cn.Circle({x:u.x,y:u.y,radius:7,fill:Nn.handle,draggable:!0,hitStrokeWidth:15}),this.specialHandle.on("dragmove",t=>{var e,n;const o=t.target.position(),r=s.toDataCoords(o.x,o.y);var i;"gaussian"===this._prop.mode?(this._prop.mean=r.x,this._prop.sigma=Math.max(.01,Math.abs(r.y-1))):"sigmoid"===this._prop.mode&&(this._prop.x0=r.x,this._prop.k=(i=30*Math.abs(r.y-.5),Math.max(.1,Math.min(30,i)))),this._prop.line=this.computeLine(),null===(e=this.redrawFn)||void 0===e||e.call(this),null===(n=this.onParamsChanged)||void 0===n||n.call(this,this._prop)}),this.layer.add(this.specialHandle)),this.layer.batchDraw()}showPointEditor(t,e,n){const o=this._prop.line[t],r=ot.input.float("X",{value:o[0],min:this.getMinX(),max:this.getMaxX(),format:"#0.00",step:.01}),i=ot.input.float("Y",{value:o[1],min:0,max:1,format:"#0.00",step:.01}),s=()=>{u.removeEventListener("keydown",l),f.remove()},a=()=>{const e=r.value,n=i.value;null==e||null==n||isNaN(e)||isNaN(n)||(this._prop.line[t]=[e,n],this.redrawAll())},l=t=>{"Enter"===t.key&&(a(),s()),"Escape"===t.key&&s()},u=ot.inputs([r,i]);u.style.overflow="hidden",u.addEventListener("keydown",l);const c=this.root.getBoundingClientRect(),f=ot.showPopup(u,this.root,{dx:e-c.left,dy:n-c.bottom,smart:!1})}setRange(t,e){const n=this.getMinX(),o=this.getMaxX()-n,r=e-t;if(0!==o&&0!==r){const e=r/o,i=o=>t+(o-n)*e;null!=this._prop.mean&&(this._prop.mean=i(this._prop.mean)),null!=this._prop.sigma&&(this._prop.sigma*=e),null!=this._prop.x0&&(this._prop.x0=i(this._prop.x0)),null!=this._prop.k&&(this._prop.k/=e);for(const t of this._prop.line)t[0]=i(t[0]);if(this._prop.freeformLine)for(const t of this._prop.freeformLine)t[0]=i(t[0])}this._prop.min=t,this._prop.max=e,this.updateDragScales(),this.redrawAll(!1)}setColumn(t){if(!t)return;const e=t.toList();this.drawBars(e)}}class Sn{static create(t,e=300,n=80,o=!1){return mn(t)?new Tn(t,e,n):new wn(t,o,!1)}}const On=["freeform","gaussian","sigmoid"],In=["numerical","categorical"];function Ln(t){return ot.divText(t,"statistics-mpo-section-header")}class Pn{constructor(t,e,n,o,r){this.propertyName=t,this.prop=e,this.onUpdate=n,this.onTypeChanged=o,this.mappedCol=r}static strategyToLabel(t){switch(t){case"default":return"Use default score";case"skip":return"Skip property";default:return"Exclude row"}}buildDefaultScoreInput(t){const e=t.missingValues,n=ot.input.float("Default score",{value:"default"===(null==e?void 0:e.strategy)?e.score:0,min:0,max:1,format:"#0.000",onValueChanged:e=>{t.missingValues={strategy:"default",score:e},this.onUpdate({missingValues:t.missingValues})}});n.root.style.display="default"===(null==e?void 0:e.strategy)?"":"none";const o=ot.input.choice("If missing",{items:["Exclude row","Use default score","Skip property"],value:Pn.strategyToLabel(null==e?void 0:e.strategy),onValueChanged:e=>{var o;const r="Use default score"===e;t.missingValues="Skip property"===e?{strategy:"skip"}:r?{strategy:"default",score:null!==(o=n.value)&&void 0!==o?o:0}:{strategy:"exclude"},n.root.style.display=r?"":"none",this.onUpdate({missingValues:t.missingValues})}});return o.setTooltip("How to handle missing values:<br>• <b>Exclude row</b> — assign an MPO score of 0 to the row<br>• <b>Use default score</b> — use a fixed fallback desirability value<br>• <b>Skip property</b> — calculate the score from the remaining properties"),n.setTooltip("Desirability score (0–1) to use as fallback."),ot.form([o,n])}show(){const t=structuredClone(this.prop),e=ot.dialog({title:this.propertyName});e.root.classList.add("statistics-mpo-desirability-dialog");const n=ot.divV([]),o={[t.functionType]:structuredClone(t)},r=[];let i;const s=ot.input.choice("Type",{items:[...In],value:this.prop.functionType,onValueChanged:e=>{var n;if(e!==this.prop.functionType){if(o[this.prop.functionType]=structuredClone(this.prop),o[e])this.prop=structuredClone(o[e]);else if("categorical"===e){const e=(null===(n=this.mappedCol)||void 0===n?void 0:n.isCategorical)?this.mappedCol.categories.map(t=>({name:t,desirability:1})):void 0;this.prop=gn(t.weight,e)}else this.prop=pn(t.weight);c()}}}),a=()=>{var t,e,o;const s=this.prop;null!==(t=s.mode)&&void 0!==t||(s.mode="freeform");const a=new Tn(s,355,103);(null===(e=this.mappedCol)||void 0===e?void 0:e.isNumerical)&&a.setColumn(this.mappedCol);const l=ot.input.choice("Mode",{items:On,value:s.mode,onValueChanged:t=>{s.mode=t,this.onUpdate({mode:s.mode}),d(),a.redrawAll(!1)}}),u=[{key:"min",label:"Min",fallback:()=>a.getMinX()},{key:"max",label:"Max",fallback:()=>a.getMaxX()},{key:"mean",label:"Mean",fallback:()=>a.getDefaultMean()},{key:"sigma",label:"Sigma",fallback:()=>a.getDefaultSigma(),transform:t=>Math.max(.01,t)},{key:"x0",label:"x0",fallback:()=>a.getDefaultX0()},{key:"k",label:"k",fallback:()=>a.getDefaultK(),transform:t=>Math.max(.1,t)}],c=new Map;for(const t of u)c.set(t.key,ot.input.float(t.label,{value:null!==(o=s[t.key])&&void 0!==o?o:t.fallback(),format:"#0.000",onValueChanged:e=>{const n=t.transform?t.transform(null!=e?e:t.fallback()):null!=e?e:t.fallback();s[t.key]=n,this.onUpdate({[t.key]:n}),a.redrawAll(!1)}}));c.get("min").setTooltip("Minimum property value"),c.get("max").setTooltip("Maximum property value");const f=ot.form([c.get("min"),c.get("max"),c.get("mean"),c.get("sigma"),c.get("x0"),c.get("k")]);f.classList.add("statistics-mpo-param-grid");const d=()=>{c.get("mean").root.classList.toggle("statistics-mpo-hidden","gaussian"!==s.mode),c.get("sigma").root.classList.toggle("statistics-mpo-hidden","gaussian"!==s.mode),c.get("x0").root.classList.toggle("statistics-mpo-hidden","sigmoid"!==s.mode),c.get("k").root.classList.toggle("statistics-mpo-hidden","sigmoid"!==s.mode)};d(),a.onParamsChanged=t=>{Object.assign(s,t),(()=>{var t;for(const e of u)c.get(e.key).value=null!==(t=s[e.key])&&void 0!==t?t:e.fallback()})(),this.onUpdate(t)},r.push(a.onChanged.subscribe(t=>{s.line=t,"freeform"===s.mode&&this.onUpdate({line:t})})),i=l.root,a.root.classList.add("statistics-mpo-plot"),n.append(a.root,Ln("PARAMETERS"),f)},l=()=>{var t;const e=this.prop,o=new wn(e,!0,!0);(null===(t=this.mappedCol)||void 0===t?void 0:t.isCategorical)&&o.setChoices([...this.mappedCol.categories]),r.push(o.onChanged.subscribe(()=>this.onUpdate(this.prop))),n.append(Ln("CATEGORIES"),o.root)},u=()=>{for(const t of r)t.unsubscribe();r.length=0},c=()=>{u(),ot.empty(n),i=void 0,mn(this.prop)?a():l();const t=[];this.mappedCol||t.push(s.root),i&&t.push(i),t.length>0&&n.prepend(ot.divH(t,"statistics-mpo-dialog-header-row")),n.append(Ln("MISSING VALUES"),this.buildDefaultScoreInput(this.prop))};c(),e.add(n),e.onOK(()=>{var n;u(),this.prop.functionType!==t.functionType?null===(n=this.onTypeChanged)||void 0===n||n.call(this,this.prop):this.onUpdate(this.prop),e.close()}),e.onCancel(()=>{u(),this.prop=t,this.onUpdate(t),e.close()}),e.show()}}var Rn=s(5072),Fn=s.n(Rn),Dn=s(7825),Bn=s.n(Dn),kn=s(7659),Un=s.n(kn),Vn=s(5056),Gn=s.n(Vn),$n=s(540),Hn=s.n($n),qn=s(1113),Yn=s.n(qn),Wn=s(6801),jn={};jn.styleTagTransform=Yn(),jn.setAttributes=Gn(),jn.insert=Un().bind(null,"head"),jn.domAPI=Bn(),jn.insertStyleElement=Hn(),Fn()(Wn.A,jn),Wn.A&&Wn.A.locals&&Wn.A.locals;class Xn{constructor(t,e=!1,n=!1){this.root=ot.div([]),this.onChanged=new hn.Subject,this.design=!1,this.preview=!1,this.rows={},this.rowIds={},this.rowSubs=new Map,this.propertyOrder=[],this.columnMapping={},this.dataFrame=t,this.design=e,this.preview=n,this.aggregationInput=ot.input.choice("Aggregation",{items:yn,value:An,nullable:!1,onValueChanged:t=>{this.profile&&(this.profile.aggregation=t),this.emitChange()}}),this.aggregationInput.setTooltip("Score aggregation method")}newRowId(){return crypto.randomUUID()}setProfile(t){var e,n;if(t)for(const n of Object.keys(t.properties)){const o=vn(t.properties[n]);mn(o)&&(null!==(e=o.mode)&&void 0!==e||(o.mode="freeform")),t.properties[n]=o}for(const t of this.rowSubs.values())t.unsubscribe();this.rowSubs.clear(),this.profile=t,this.aggregationInput.value=null!==(n=null==t?void 0:t.aggregation)&&void 0!==n?n:An,this.columnMapping={},this.rows={},this.rowIds={},this.propertyOrder=t?Object.keys(t.properties):[];for(const t of this.propertyOrder)this.rowIds[t]=this.newRowId();this.render()}getProfile(){return this.profile}setDesignMode(t){this.design!==t&&(this.design=t,this.rows={},this.render())}setPreviewMode(t){this.preview!==t&&(this.preview=t,this.rows={},this.render())}render(){if(ot.empty(this.root),!this.profile)return this.renderEmpty("No profile specified.");const t=this.propertyOrder.map(t=>{const e=this.rowIds[t];return this.rows[e]||(this.rows[e]=this.buildRow(t,e,this.profile.properties[t])),this.rows[e]});if(!t.length)return this.preview||this.root.append(this.buildHeader()),this.design?this.renderDesignEmpty():this.renderEmpty("No properties defined.");this.preview||this.root.append(this.buildHeader()),this.root.append(ot.divV(t))}renderEmpty(t){this.root.append(ot.divText(t))}renderDesignEmpty(){const t=ot.iconFA("chart-line"),e=ot.h3("No properties yet"),n=ot.p("Select a dataset to auto-populate properties from its numerical columns, or add them manually."),o=ot.link("+ Add Property",()=>this.addProperty()),r=ot.divV([t,e,n,o],"statistics-mpo-empty-state");this.root.append(r)}addProperty(){if(!this.profile)return;const t=`NewProperty${Object.keys(this.profile.properties).length+1}`,e=this.newRowId();this.profile.properties[t]=pn(),this.rowIds[t]=e,this.propertyOrder.push(t),this.rows={},this.render(),this.emitChange()}buildHeader(){return ot.divH([ot.divText("Property","statistics-mpo-header-property"),ot.divText("Weight","statistics-mpo-header-weight"),ot.divText("Desirability","statistics-mpo-header-desirability")],"statistics-mpo-header")}buildRow(t,e,n){var o;const r=ot.divH([],"statistics-mpo-row");r.dataset.rowId=e;const i=this.resolveColumn(t);if(i){const e=this.correctPropertyType(n,i);e&&(n=e,this.profile.properties[t]=n)}const s=Sn.create(n,300,80,this.design);s.root.classList.add("statistics-mpo-editor-fill"),null===(o=this.rowSubs.get(e))||void 0===o||o.unsubscribe(),this.rowSubs.set(e,s.onChanged.subscribe(()=>this.emitChange()));const a=this.buildPropertyCell(e,t),l=this.buildWeightCell(e,n),u=this.buildColumnSelector(e,t,s),c=this.design?this.buildModeGear(e,n,s):null,f=this.design?this.buildRowControls(e):null;return r.append(ot.divV([a,u].filter(Boolean),"statistics-mpo-property-cell"),l,ot.divH([s.root,c].filter(Boolean))),f&&r.append(f),r}buildPropertyCell(t,e){if(this.dataFrame){const t=ot.divText(e);return ot.tooltip.bind(t,()=>e),t}let n=e;const o=ot.input.string("",{value:e,onValueChanged:t=>{t&&t!==n&&(this.renameProperty(n,t),n=t)}});return ot.tooltip.bind(o.input,()=>n),o.root}buildWeightCell(t,e){var n;const o=this.getPropertyNameByRowId(t),r=[],i=ot.input.float("",{value:e.weight,min:0,max:1,format:"#0.000",onValueChanged:t=>{o&&this.mutateProperty(o,e=>e.weight=Math.max(0,Math.min(1,null!=t?t:0)))}});if(i.root.classList.add("statistics-mpo-weight-input"),r.push(i.root),this.dataFrame){const t=this.getNumericalColumnNames();let s=!!e.weightColumn&&t.includes(e.weightColumn);const a=ot.input.choice("",{items:t,nullable:!0,value:null!==(n=e.weightColumn)&&void 0!==n?n:"",onValueChanged:t=>{o&&this.mutateProperty(o,e=>e.weightColumn=t||void 0)}}),l=()=>{i.root.classList.toggle("statistics-mpo-hidden",s),a.root.classList.toggle("statistics-mpo-hidden",!s),u.classList.toggle("statistics-mpo-weight-toggle-active",s)},u=ot.iconFA("columns",()=>{s=!s,l(),!s&&o?this.mutateProperty(o,t=>{delete t.weightColumn}):s&&o&&a.value&&this.mutateProperty(o,t=>t.weightColumn=a.value||void 0)});u.classList.add("statistics-mpo-weight-toggle"),ot.tooltip.bind(u,()=>s?"Switch to manual weight":"Use weight from column"),l(),r.push(a.root,u)}return ot.divH(r,"statistics-mpo-weight-cell")}buildColumnSelector(t,e,n){var o,r;if(!this.dataFrame)return null;const i=this.getEligibleColumnNames(),s=null!==(o=this.columnMapping[e])&&void 0!==o?o:null;if(s){const t=this.dataFrame.col(s);null===(r=n.setColumn)||void 0===r||r.call(n,t)}const a=ot.input.choice("",{items:i,nullable:!0,value:null!=s?s:"",onValueChanged:o=>{var r;this.columnMapping[e]=null!=o?o:null;const i=o?this.dataFrame.col(o):null;i&&this.switchPropertyType(e,t,i)||(null===(r=n.setColumn)||void 0===r||r.call(n,i),this.emitChange())}});return a.root}getEligibleColumnNames(){return this.dataFrame?Array.from(this.dataFrame.columns).filter(t=>!t.isCategorical||t.categories.length<=20).map(t=>t.name):[]}getNumericalColumnNames(){return this.dataFrame?Array.from(this.dataFrame.columns.numerical).map(t=>t.name):[]}resolveColumn(t){var e,n,o;if(!this.dataFrame)return null;const r=this.getEligibleColumnNames(),i=null!==(n=null!==(e=this.columnMapping[t])&&void 0!==e?e:r.find(e=>e.toLowerCase()===t.toLowerCase()))&&void 0!==n?n:null;return i&&(this.columnMapping[t]=i),i&&null!==(o=this.dataFrame.col(i))&&void 0!==o?o:null}correctPropertyType(t,e){if(mn(t)&&e.isCategorical){const n=e.categories.map(t=>({name:t,desirability:1}));return gn(t.weight,n)}return!mn(t)&&e.isNumerical?pn(t.weight,e.min,e.max):null}switchPropertyType(t,e,n){if(!this.profile)return!1;const o=this.correctPropertyType(this.profile.properties[t],n);return!!o&&(this.profile.properties[t]=o,this.rebuildRow(t,e),!0)}rebuildRow(t,e){const n=this.rows[e],o=this.buildRow(t,e,this.profile.properties[t]);this.rows[e]=o,(null==n?void 0:n.parentNode)&&n.replaceWith(o),this.emitChange()}buildModeGear(t,e,n){const o=ot.icons.settings(()=>{var o,r;const i=this.getPropertyNameByRowId(t);if(!i)return;const s=this.columnMapping[i],a=s&&null!==(r=null===(o=this.dataFrame)||void 0===o?void 0:o.col(s))&&void 0!==r?r:null;this.openModeDialog(i,t,e,n,a)});return o.classList.add("statistics-mpo-gear"),o}buildRowControls(t){const e=ot.icons.add(()=>this.insertRowAfterRow(t)),n=ot.icons.delete(()=>this.deleteRow(t));return ot.divH([e,n],"statistics-mpo-control-buttons")}openModeDialog(t,e,n,o,r=null){new Pn(t,n,e=>{var n;const r=null===(n=this.profile)||void 0===n?void 0:n.properties[t];r&&Object.assign(r,e),o.redrawAll()},n=>{this.profile&&(this.profile.properties[t]=n,this.rebuildRow(t,e))},r).show()}getPropertyNameByRowId(t){var e;return null===(e=Object.entries(this.rowIds).find(([,e])=>e===t))||void 0===e?void 0:e[0]}renameProperty(t,e){var n;if(!this.profile||this.profile.properties[e])return;const o=this.rowIds[t];this.profile.properties[e]=this.profile.properties[t],delete this.profile.properties[t],this.columnMapping[e]=null!==(n=this.columnMapping[t])&&void 0!==n?n:null,delete this.columnMapping[t];const r=this.propertyOrder.indexOf(t);r>=0&&(this.propertyOrder[r]=e),delete this.rowIds[t],this.rowIds[e]=o,this.emitChange()}deleteRow(t){var e;const n=this.getPropertyNameByRowId(t);if(!n||!this.profile)return;delete this.profile.properties[n],delete this.columnMapping[n],delete this.rowIds[n],null===(e=this.rowSubs.get(t))||void 0===e||e.unsubscribe(),this.rowSubs.delete(t);const o=this.propertyOrder.indexOf(n);o>=0&&this.propertyOrder.splice(o,1);const r=this.rows[t];delete this.rows[t],0===this.propertyOrder.length?this.render():null==r||r.remove(),this.emitChange()}insertRowAfterRow(t){var e;if(!this.profile)return;const n=this.getPropertyNameByRowId(t);if(!n)return;const o=`NewProperty${Object.keys(this.profile.properties).length+1}`,r=this.newRowId();this.profile.properties[o]=pn(),this.rowIds[o]=r;const i=this.propertyOrder.indexOf(n);this.propertyOrder.splice(i+1,0,o);const s=this.buildRow(o,r,this.profile.properties[o]);this.rows[r]=s,null===(e=this.rows[t])||void 0===e||e.after(s),this.emitChange()}mutateProperty(t,e){var n;const o=null===(n=this.profile)||void 0===n?void 0:n.properties[t];o&&(e(o),this.emitChange())}emitChange(){this.onChanged.next(),I.events.fireCustomEvent("grok-mpo-score-changed",{})}}var zn=s(4884),Kn={};Kn.styleTagTransform=Yn(),Kn.setAttributes=Gn(),Kn.insert=Un().bind(null,"head"),Kn.domAPI=Bn(),Kn.insertStyleElement=Hn(),Fn()(zn.A,Kn),zn.A&&zn.A.locals&&zn.A.locals;const Qn="pMPO is not applicable",Zn="Failed to compute pMPO parameters",Jn="desired",to="non-desired",eo="Mean",no="p-value",oo=new Map([["desAvg",`${eo}(${Jn})`],["desStd",`Std(${Jn})`],["nonDesAvg",`${eo}(${to})`],["nonDesStd",`Std(${to})`],["tstat","t-statistics"],["pValue",no]]),ro="Descriptor",io=ro+" Statistics",so="Selected",ao="Weight",lo="pMPO score",uo="Desirability Curve",co=.001,fo=.001,ho=.53,mo=.01,po=.05,go=.01,vo="0.000";var yo;!function(t){t.SELECTED="rgb(26, 146, 26)",t.SKIPPED="rgb(208, 57, 67)"}(yo||(yo={}));const Ao="System:AppData/Chem/mpo",wo=[0,.25,.5,1,1.5,2,2.5,3,4,5],Co=wo.slice(1).map(t=>-t).reverse().concat(wo),Eo=wo.concat([.12,.37,.63,.75,.88,1.25,1.75,2.25,2.75]).sort(),bo=Eo.slice(1).map(t=>-t).reverse().concat(Eo),xo="TPR (Sensitivity)",_o="FPR (1 - Specificity)",No=101,Mo=new Float32Array(Array.from({length:No},(t,e)=>e/100)),To="System:AppData/Eda/drugs-props-train.csv",So="System:AppData/Eda/drugs-props-train-scores.csv",Oo=new Map([["tolerance",.001],["maxIter",25],["nonZeroParam",1e-4],["initialScale",.02],["scaleReflaction",1],["scaleExpansion",2],["scaleContraction",-.5]]),Io=new Float32Array([.5,go]),Lo=new Float32Array([1,1]);var Po;!function(t){t.GREATER=">",t.LESS="<",t.GREATER_OR_EQUAL="≥",t.LESS_OR_EQUAL="≤",t.DEFAULT="≤"}(Po||(Po={}));const Ro=[Po.GREATER,Po.LESS,Po.GREATER_OR_EQUAL,Po.LESS_OR_EQUAL],Fo=["perfect","good","true","t","g","active","a","yes","y"];function Do(t,e){const n=t.groupBy([e.name]).getGroups();let o,r;for(const t in n)t.toLowerCase().includes("true")?o=n[t]:r=n[t];return{desired:o,nonDesired:r}}function Bo(t,e){const n=t.length,o=e.length;if(n<2||o<2)throw new Error(`Failed to compute the "${t.name}" descriptor statistics: \n both samples must have at least two observations.`);const r=t.stats.avg,i=e.stats.avg,s=t.stats.variance,a=e.stats.variance,l=t.stats.stdev,u=e.stats.stdev,c=Math.sqrt(s/n+a/o);if(0===c)throw new Error(`Failed to compute the "${t.name}" descriptor statistics: \n zero variance.`);const f=(r-i)/c,d=Math.pow(s/n+a/o,2)/(s*s/(n*n*(n-1))+a*a/(o*o*(o-1))),h=2*(1-tn.studentt.cdf(Math.abs(f),d));return{desAvg:r,desStd:l,desLen:n,nonDesAvg:i,nonDesStd:u,nonSesLen:o,min:Math.min(t.stats.min,e.stats.min),max:Math.max(t.stats.max,e.stats.max),tstat:f,pValue:h}}function ko(e,n,o){if(e.length!==n.length)throw new Error("Failed to compute confusion matrix: columns have different lengths.");if(e.type!==t.COLUMN_TYPE.BOOL)throw new Error("Failed to compute confusion matrix: desirability column must be boolean.");if(!n.isNumerical)throw new Error("Failed to compute confusion matrix: prediction column must be numerical.");let r=0,i=0,s=0,a=0;const l=e.getRawData(),u=n.getRawData();let c=0,f=0,d=l[0];for(let t=0;t<n.length;++t)1==(d>>>f&1)?u[t]>=o?++r:++a:u[t]>=o?++s:++i,++f,f>=32&&(f=0,++c,d=l[c]);return{TP:r,TN:i,FP:s,FN:a}}function Uo(t,e){if(t.length!==e.length)throw new Error("Failed to compute AUC: TPR and FPR arrays have different lengths.");let n=0;for(let o=1;o<t.length;++o)n+=Math.abs(e[o]-e[o-1])*((t[o]+t[o-1])/2);return n}function Vo(t,e){const n=new Float32Array(No),o=new Float32Array(No);let r=-1,i=-1,s=Mo[0];for(let a=0;a<No;++a){const l=ko(t,e,Mo[a]);n[a]=l.TP+l.FN>0?l.TP/(l.TP+l.FN):0,o[a]=l.FP+l.TN>0?l.FP/(l.FP+l.TN):0,i=n[a]-o[a],i>r&&(r=i,s=Mo[a])}return{auc:Uo(n,o),threshold:s,tpr:n,fpr:o}}var Go,$o,Ho,qo,Yo;!function(t){t.MIN="minimize",t.MAX="maximize"}(Go||(Go={})),function(t){t.OPTIMAL="optimal",t.NON_OPT="non-optimal"}($o||($o={})),function(t){t[t.FORM=.15]="FORM",t[t.VIEWER=.5]="VIEWER"}(Ho||(Ho={})),function(t){t.OPT="Pareto optimality",t.SIZE="Pareto size"}(qo||(qo={})),function(t){t[t.OPTIMAL=8]="OPTIMAL",t[t.NON_OPT=4]="NON_OPT"}(Yo||(Yo={}));const Wo=[t.Color.darkGreen,t.Color.yellow,t.Color.darkRed];function jo(t){return t===Go.MIN?[...Wo]:[...Wo].reverse()}function Xo(e,n=!0){const o=ot.label("Color scale:");o.style.paddingRight="7px";const r=[o],i=ot.label(n?"min":"worst"),s=ot.label(". . ."),a=ot.label(n?"max":"best"),l=jo(e),u=[i,s,a].map((e,n)=>(1!==n&&(e.style.fontWeight="bold",e.style.color=t.Color.toRgb(l[n])),e.style.marginRight="5px",e));return r.push(...u),ot.divH(r)}var zo=function(t,e,n,o){return new(n||(n=Promise))(function(r,i){function s(t){try{l(o.next(t))}catch(t){i(t)}}function a(t){try{l(o.throw(t))}catch(t){i(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((o=o.apply(t,e||[])).next())})};function Ko(e){const n=e.size,o=new Map;oo.forEach((t,e)=>{o.set(e,new Float64Array(n))});const r=[...e.keys()],i=[t.Column.fromStrings(ro,r),t.Column.fromInt32Array(uo,new Int32Array(n)),t.Column.fromFloat32Array(ao,new Float32Array(n).fill(t.FLOAT_NULL))];r.forEach((t,n)=>{const r=e.get(t);null!=r&&oo.forEach((t,e)=>{const i=r[e];o.get(e)[n]=i})}),oo.forEach((e,n)=>{i.push(t.Column.fromFloat64Array(e,o.get(n)))});const s=t.DataFrame.fromColumns(i);return s.name=io,s}function Qo(t,e){const n=[],o=t.col(ro);if(null==o)throw new Error(`No column "${ro} in the table with descriptors statistics.`);const r=o.toList(),i=t.col(no);if(null==i)throw new Error(`No column "${no} in the table with descriptors statistics.`);const s=i.getRawData();for(let o=0;o<t.rowCount;++o)s[o]<e&&n.push(r[o]);return n}function Zo(t,e,n,o){const r=ot.div();r.classList.add("eda-pmpo-tooltip-line");const i=ot.div();i.classList.add("eda-pmpo-box"),i.style.backgroundColor=yo.SELECTED;const s=ot.span([]);s.textContent=`- ${n}`,r.appendChild(i),r.appendChild(s);const a=ot.div();a.classList.add("eda-pmpo-tooltip-line");const l=ot.div();l.classList.add("eda-pmpo-box"),l.style.backgroundColor=yo.SKIPPED;const u=ot.span([]);return u.textContent=`- ${o}`,a.appendChild(l),a.appendChild(u),ot.divV([ot.h2(t),ot.divText(e),r,a])}function Jo(t,e){const n=[];for(let o=0;o<e.length;++o)for(let r=o+1;r<e.length;++r)n.push([e[o],e[r],Math.pow(t.byName(e[o]).stats.corr(t.byName(e[r])),2)]);return n}function tr(t,e,n,o,r){const i=r.sort((t,e)=>e[2]-t[2]),s=new Set(e);return i.filter(t=>t[2]>o).forEach(t=>{const[e,o,r]=t,i=n.get(e).pValue,a=n.get(o).pValue,l=n.get(e).tstat,u=n.get(o).tstat;i>a?s.delete(e):i<a||Math.abs(l)>Math.abs(u)?s.delete(o):s.delete(e)}),[...s]}function er(t,e,n,o){const r=new Map;let i=0;return n.forEach(n=>{const s=t.rowCount,a=e.rowCount,l=t.col(n);if(null==l)throw new Error(Zn+`: no column "${n}" in the desired table.`);const u=e.col(n);if(null==u)throw new Error(Zn+`: no column "${n}" in the non-desired table.`);const c=l.stats.avg,f=l.stats.stdev*Math.sqrt((s-1)/s),d=u.stats.avg,h=u.stats.stdev*Math.sqrt((a-1)/a),m=(g=f,y=h,(p=c)<(v=d)?{cutoff:(v-p)/(g+y)*g+p,cutoffDesired:Math.max(p,v-y),cutoffNotDesired:Math.max(p+g,v)}:{cutoff:(p-v)/(g+y)*y+v,cutoffDesired:Math.min(v+y,p),cutoffNotDesired:Math.max(v,p-g)});var p,g,v,y;const A=Math.exp(-Math.pow(m.cutoff-c,2)/(2*Math.pow(f,2))),w=function(t,e,n,o){const r=1/(2*Math.pow(e,2))-1/(2*Math.pow(o,2)),i=n/Math.pow(o,2)-t/Math.pow(e,2),s=Math.pow(t,2)/(2*Math.pow(e,2))-Math.pow(n,2)/(2*Math.pow(o,2))-Math.log(o/e);if(Math.abs(r)<1e-12)return Math.abs(i)<1e-12?[]:[-s/i];const a=i*i-4*r*s;if(a<0)return[];const l=Math.sqrt(a);return[(-i+l)/(2*r),(-i-l)/(2*r)]}(c,f,d,h),C=Math.pow(A,-1)-1,E=Math.pow(o,-1)-1,b=Math.pow(10,Math.log10(E/C)/(-1*(d-m.cutoff)));let x=null;if(w.length>0){for(const t of w){const e=Math.min(c,d),n=Math.max(c,d);if(e-1e-8<=t&&t<=n+1e-8){x=t;break}}null==x&&(x=w[0])}else x=m.cutoff;const _=m.cutoffNotDesired,N=function(t,e,n,o,r=.05){let i;if(e<=0)i=n===t?1:0;else{const o=1/(e*Math.sqrt(2*Math.PI)),r=-.5*Math.pow((n-t)/e,2);i=o*Math.exp(r)}i=Math.max(i,1e-12);const s=Math.max(1/i-1,1e-12),a=1/r-1,l=o-n;let u;if(Math.abs(l)<1e-12)u=1;else{const t=a/s;if(t<=0)u=1;else try{u=Math.exp(-Math.log(t)/l)}catch(t){u=1}}return{pX0:i,b:s,c:u}}(c,f,x,_,o),M=Math.abs(c-d)/(f+h);i+=M,r.set(n,{desAvg:c,desStd:f,nonDesAvg:d,nonDesStd:h,min:Math.min(l.stats.min,u.stats.min),max:Math.max(l.stats.max,u.stats.max),cutoff:m.cutoff,cutoffDesired:m.cutoffDesired,cutoffNotDesired:m.cutoffNotDesired,pX0:N.pX0,b:C,c:b,zScore:M,weight:M,intersections:w,x0:x,xBound:_,inflection:A})}),r.forEach(t=>{t.weight=t.zScore/i}),r}function nr(t,e,n,o,r){return{type:"MPO Desirability Profile",name:n,description:o,properties:or(t,e,r)}}function or(t,e,n){const o={};return t.forEach((t,r)=>{const i=sr(t,n);o[r]={weight:t.weight,line:ir(t,e,n),min:Math.min(...i),max:Math.max(...i)}}),o}function rr(t,e,n){return function(t,e,n){return Math.exp(-Math.pow(t-e,2)/(2*Math.pow(n,2)))}(t,e.desAvg,e.desStd)*(n?function(t,e,n,o){return o>0?1/(1+n*Math.pow(o,-(t-e))):1/(1+n)}(t,e.cutoff,e.b,e.c):1)}function ir(t,e,n){return sr(t,n).map(n=>[n,rr(n,t,e)])}function sr(t,e){const n=function(t,e,n){return n?Co.map(n=>t+n*e):bo.map(n=>t+n*e)}(t.desAvg,t.desStd,e);if(e){const e=Math.min(t.min,t.desAvg-3*t.desStd),o=Math.max(t.max,t.desAvg+3*t.desStd);return n.filter(t=>e<=t&&t<=o).sort()}return n}class ar extends Error{constructor(t){super(t),this.name="PmpoError"}}function lr(t,e,n){const o=t.stats.min,r=t.stats.max;switch(n){case Po.LESS:return r>=e&&o<e;case Po.LESS_OR_EQUAL:return r>e&&o<=e;case Po.GREATER:return o<=e&&r>e;default:return o<e&&r>=e}}function ur(t){const e=t.filter(t=>Fo.includes(t));return e.length>0?e:[t[0]]}function cr(t,e,n,o){for(let r=0;r<e;r++){let i=0;for(let t=0;t<e+1;t++)t!=n&&(i+=o[t][r]);t[r]=i/e}}function fr(t,e,n,o,r,i,s,a){for(let l=0;l<i;l++)e[l]=t[l],e[l]+=r*(t[l]-o[n][l]),e[l]<s[l]?e[l]=s[l]:e[l]>a[l]&&(e[l]=a[l])}function dr(t,e,n,o,r,i){return s=this,a=void 0,u=function*(){const s=o.get("tolerance"),a=o.get("maxIter"),l=o.get("scaleReflaction"),u=o.get("scaleExpansion"),c=o.get("scaleContraction"),f=n.length+1,d=n.length,[h,m]=function(t,e,n,o,r){const i=n.length+1,s=n.length,a=e.get("nonZeroParam"),l=e.get("initialScale"),u=new Array(i),c=new Array(i);for(let e=0;e<i;e++){u[e]=new Float32Array(s);for(let t=0;t<s;t++)u[e][t]=n[t],0!=e&&e-1===t&&(0==n[t]?u[e][t]=a:u[e][t]+=l*n[e-1],u[e][t]<o[t]?u[e][t]=o[t]:u[e][t]>r[t]&&(u[e][t]=r[t]));c[e]=t(u[e])}return[u,c]}(e,o,n,r,i),p=new Array(f);for(let t=0;t<f;t++)p[t]=t;const g=p.length-1;let v=0,y=0,A=0,w=0;const C=new Float32Array(d),E=new Float32Array(d),b=new Float32Array(d),x=new Float32Array(d),_=new Array(a);if(f>1){let n=0;for(;p.sort((t,e)=>m[t]-m[e]),n=Math.min(100,Math.floor(100*v/a)),t.update(n,`Optimizing pMPO... (${n}%)`),yield new Promise(t=>setTimeout(t,1)),!(t.canceled||v>a);){if(0==v&&(y=m[0],A=2*m[p[0]]),_[v]=y,++v,y=m[p[0]],A-y>s)w=0;else if(++w,w>2*f)break;A=y,cr(C,d,p[g],h),fr(C,E,p[g],h,l,d,r,i);const t=e(E);if(t<m[p[g]]){fr(C,b,p[g],h,u,d,r,i);const n=e(b);if(n<t){m[p[g]]=n;for(let t=0;t<d;t++)h[p[g]][t]=b[t];continue}m[p[g]]=t;for(let t=0;t<d;t++)h[p[g]][t]=E[t];continue}fr(C,x,p[g],h,c,d,r,i);const n=e(x);if(!(n<m[p[g]]))break;m[p[g]]=n;for(let t=0;t<d;t++)h[p[g]][t]=x[t]}for(let t=v;t<a;t++)_[t]=m[p[0]]}return{optimalPoint:h[p[0]],iterations:v}},new((l=void 0)||(l=Promise))(function(t,e){function n(t){try{r(u.next(t))}catch(t){e(t)}}function o(t){try{r(u.throw(t))}catch(t){e(t)}}function r(e){var r;e.done?t(e.value):(r=e.value,r instanceof l?r:new l(function(t){t(r)})).then(n,o)}r((u=u.apply(s,a||[])).next())});var s,a,l,u}var hr=function(t,e,n,o){return new(n||(n=Promise))(function(r,i){function s(t){try{l(o.next(t))}catch(t){i(t)}}function a(t){try{l(o.throw(t))}catch(t){i(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((o=o.apply(t,e||[])).next())})};class mr{static isApplicable(t,e,n,o,r,i=!1){const s=e.length,a=t=>{i&&I.shell.warning(Qn+t)};if(n<fo)return a(`: too small p-value threshold - ${n}, minimum - 0.001`),!1;if(o<mo)return a(`: too small R² threshold - ${o}, minimum - 0.01`),!1;if(r<go)return a(`: too small q-cutoff - ${r}, minimum - 0.01`),!1;if(s<10)return a(`: not enough of samples - ${s}, minimum - 10`),!1;if(0===e.stats.stdev)return a(`: "${e.name}" has a single category.`),!1;let l=0;for(const e of t){if(!e.isNumerical)return a(`: "${e.name}" is not numerical.`),!1;if(e.stats.missingValueCount===e.length)return a(`: "${e.name}" contains only missing values.`),!1;e.stats.stdev>0&&++l}return!(l<1&&(a(": not enough of non-constant descriptors."),1))}static isTableValid(e,n=!0){if(e.rowCount<2)return n&&I.shell.warning(Qn+`. Not enough of samples: ${e.rowCount}, minimum: 2.`),!1;let o=0;for(const n of e.columns)(n.isNumerical||n.type===t.TYPE.BOOL)&&n.stats.stdev>0&&++o;return!(o<2&&(n&&I.shell.warning(Qn+": not enough of non-constant columns."),1))}static fit(e,n,o,r,i,s,a=!0){if(a&&!mr.isApplicable(n,o,r,i,s))throw new Error("Failed to train pMPO model: the method is not applicable to the inputs");const l=n.names(),{desired:u,nonDesired:c}=Do(e,o),f=new Map;l.forEach(t=>{f.set(t,Bo(u.col(t),c.col(t)))});const d=Ko(f);!function(t,e){const n=t.col(no);if(null==n)return;const o={};o[`<${e}`]=yo.SELECTED,o[`>=${e}`]=yo.SKIPPED,n.meta.colors.setConditional(o)}(d,r);const h=Qo(d,r);if(h.length<1)throw new ar("Cannot train pMPO model: all descriptors have high p-values (not significant).");const m=Jo(n,h),p=tr(0,h,f,i,m);return function(e,n){if(n.length<1)throw new Error("Empty list of selected descriptors.");const o=e.rowCount,r=new Array(o),i=e.col(ro);if(null==i)throw new Error(`No column "${ro} in the table with descriptors statistics.`);const s=i.toList();let a=!0;const l={};for(let t=0;t<o;++t)a=n.includes(s[t]),r[t]=a,l[s[t]]=a?yo.SELECTED:yo.SKIPPED;i.colors.setCategorical(l),e.columns.add(t.Column.fromList(t.COLUMN_TYPE.BOOL,so,r))}(d,p),function(e,n,o,r){const i=new Map;n.forEach(e=>{i.set(e,new Float32Array(n.length).fill(t.FLOAT_NULL))});const s=e.col(ro).toList();o.forEach(t=>{const[e,n,o]=t;i.get(e)[s.indexOf(n)]=o,i.get(n)[s.indexOf(e)]=o,i.get(e)[s.indexOf(e)]=1,i.get(n)[s.indexOf(n)]=1}),r.forEach(n=>{e.columns.add(t.Column.fromFloat32Array(n,i.get(n)))})}(d,l,m,p),function(t,e,n){e.forEach(e=>{const o=t.col(e);if(null==o)return;const r={};r[`>=${n}`]=yo.SKIPPED,r[`<${n}`]=yo.SELECTED,o.meta.colors.setConditional(r)})}(d,l,i),{params:er(u,c,p,s),descrStatsTable:d,selectedByPvalue:h,selectedByCorr:p}}static predict(e,n,o,r){const i=e.rowCount,s=new Float64Array(i).fill(0),a=[];return n.forEach((t,n)=>{const r=e.col(n),l=t.b,u=t.c,c=t.cutoff;let f=t.weight;const d=t.desAvg,h=t.desStd,m=1/(2*Math.pow(h,2));if(null==r)throw new Error(`Failed to apply pMPO: inconsistent data, no column "${n}" in the table "${e.name}"`);r.stats.missingValueCount>0&&a.push(r);const p=r.getRawData();if(o)if(u>0)for(let t=0;t<i;++t)s[t]+=f*Math.exp(-Math.pow(p[t]-d,2)*m)/(1+l*Math.pow(u,-(p[t]-c)));else{f/=1+l;for(let t=0;t<i;++t)s[t]+=f*Math.exp(-Math.pow(p[t]-d,2)*m)}else for(let t=0;t<i;++t)s[t]+=f*Math.exp(-Math.pow(p[t]-d,2)*m)}),t.Column.fromFloat64Array(r,s)}constructor(e,n){var o;this.params=null,this.desirabilityProfile=null,this.initTable=t.DataFrame.create(),this.statGrid=t.Viewer.grid(this.initTable,{showTitle:!0,title:io}),this.predictionName=lo,this.boolPredictionName="",this.desirabilityProfileRoots=new Map,this.tresholdedColumn=null,this.threshColTooltip=null,this.rocCurve=t.Viewer.scatterPlot(this.initTable,{showTitle:!0,showSizeSelector:!1,showColorSelector:!1}),this.confusionMatrix=t.Viewer.fromType("Confusion matrix",this.initTable,{xColumnName:"control",yColumnName:"control",showTitle:!0,title:"Confusion Matrix",descriptionPosition:"Bottom",description:"Confusion matrix for the predicted vs actual desirability labels.",descriptionVisibilityMode:"Always"}),this.table=e,this.view=null!=n?n:null!==(o=I.shell.tableView(e.name))&&void 0!==o?o:I.shell.addTableView(e),this.desirabilityColumns=this.getDesirabilityColumns(),this.numericCols=this.getValidNumericCols(),this.predictionName=e.columns.getUnusedName(lo),this.missingValsIndeces=function(t){const e=new Map;for(const n of t){if(!We.includes(n.type))throw new Error($e.UNSUPPORTED_COLUMN_TYPE);if(0===n.stats.missingValueCount)continue;const t=[],o=je(n);n.getRawData().forEach((e,n)=>{e===o&&t.push(n)}),e.set(n.name,t)}return e}(this.numericCols)}setRibbons(){const t=this.view.getRibbonPanels();t.length<1||this.view.setRibbonPanels(t.slice(1))}updateStatisticsGrid(t,e,n,o){const r=this.statGrid;r.dataFrame=t,r.setOptions({showTitle:!0,title:t.name}),r.sort([so],[!1]),r.col(no).format="scientific",r.col(ro).isTextColorCoded=!0,r.col(no).isTextColorCoded=!0,e.forEach(t=>{const e=r.col(t);null!=e&&(e.isTextColorCoded=!0,e.format="0.000")}),r.onCellTooltip((t,i,s)=>{if(t.isColHeader){const n=t.tableColumn;if(null==n)return!1;const o=n.name;switch(o){case ro:return ot.tooltip.show(Zo(ro,"Use of descriptors in model construction:","selected","excluded"),i,s),!0;case uo:return ot.tooltip.show(ot.divV([ot.h2(uo),ot.divText("Desirability profile charts for each descriptor. Only profiles for selected descriptors are shown.")]),i,s),!0;case ao:return ot.tooltip.show(ot.divV([ot.h2(ao),ot.divText("Weights of selected descriptors.")]),i,s),!0;case no:return ot.tooltip.show(Zo(no,"Filtering descriptors by p-value:","selected","excluded"),i,s),!0;default:return!!e.includes(o)&&(ot.tooltip.show(Zo(o,`Correlation of ${o} with other descriptors, measured by R²:`,"weakly correlated","highly correlated"),i,s),!0)}}else if(t.isTableCell){const a=t.tableColumn;if(null==a)return!1;const l=a.name,u=t.value;if(l===ro)return o.includes(u)?ot.tooltip.show("Selected for model construction.",i,s):n.includes(u)?ot.tooltip.show("Excluded due to a high correlation with other descriptors.",i,s):ot.tooltip.show("Excluded due to a high p-value.",i,s),!0;{const o=r.cell(ro,t.gridRow).value;if(l===ao)return!this.desirabilityProfileRoots.has(o)&&(n.includes(o)?ot.tooltip.show(`No weight: <b>${o}</b> is excluded due to a high correlation with other descriptors.`,i,s):ot.tooltip.show(`No weight: <b>${o}</b> is excluded due to a high p-value.`,i,s),!0);if(e.includes(l)&&!n.includes(o))return ot.tooltip.show(`<b>${o}</b> is excluded due to a high p-value; so correlation with <b>${l}</b> is not needed.`,i,s),!0}return!1}});const i=r.col(uo);r.setOptions({rowHeight:75}),i.width=305,i.cellType="html",r.onCellPrepare(t=>{if(null==t.tableColumn)return;if(null==t.tableColumn)return;if(!t.isTableCell)return;if(t.tableColumn.name!==uo)return;const e=r.cell(ro,t.gridRow).value,o=this.desirabilityProfileRoots.get(e);if(null!=o)t.element=o;else{const o=n.includes(e),r=o?"highly correlated with other descriptors":"statistically insignificant",i=o?`No chart shown: <b>${e}</b> is excluded due to a high correlation with other descriptors.`:`No chart shown: <b>${e}</b> is excluded due to a high p-value.`,s=ot.divText(r);s.style.color=yo.SKIPPED,s.classList.add("eda-pmpo-centered-text"),ot.tooltip.bind(s,i),t.element=s}})}updateGrid(){const t=this.view.grid,e=this.predictionName;t.sort([this.predictionName],[!1]);const n=t.col(e);n.format="0.0000",n.isTextColorCoded=!0,t.onCellTooltip((t,n,o)=>{var r;if(t.isColHeader&&t.tableColumn)return t.tableColumn.name===e?(ot.tooltip.show(ot.divV([ot.h2(lo),ot.divText("Scores computed using the trained probabilistic multi-parameter optimization (pMPO) model."),Xo(Go.MAX,!1)]),n,o),!0):null!=this.tresholdedColumn&&t.tableColumn.name===this.tresholdedColumn.name&&(ot.tooltip.show(ot.markdown(null!==(r=this.threshColTooltip)&&void 0!==r?r:""),n,o),!0)})}updateDesirabilityProfileData(t,e){if(null==this.params)return;this.desirabilityProfileRoots.forEach(t=>t.remove()),this.desirabilityProfileRoots.clear();const n=nr(this.params,e,"","",!0);this.desirabilityProfile=nr(this.params,e,"","",!1);const o=t.col(ro).toList(),r=t.col(ao).getRawData(),i=n.properties,s=Object.keys(i);for(const t of s)r[o.indexOf(t)]=i[t].weight;const a=new Xn;a.setProfile(n);const l=a.root.querySelector("div.d4-flex-col.ui-div");null!=l&&l.querySelectorAll("div.d4-flex-row.ui-div.statistics-mpo-row").forEach((t,e)=>{const n=t.querySelector(".statistics-mpo-line-editor");n&&(n.style.width="100%",n.style.height="100%",this.desirabilityProfileRoots.set(s[e],n))})}updateRocCurve(e,n){const o=Vo(e,n),r=t.DataFrame.fromColumns([t.Column.fromFloat32Array("Threshold",Mo),t.Column.fromFloat32Array(_o,o.fpr),t.Column.fromFloat32Array(xo,o.tpr)]);return r.meta.formulaLines.addLine({title:"Non-informative baseline",formula:`\${${xo}} = \${${_o}}`,width:1,style:"dashed",min:0,max:1}),this.rocCurve.dataFrame=r,this.rocCurve.setOptions({xColumnName:_o,yColumnName:xo,linesOrderColumnName:_o,linesWidth:5,markerType:"dot",title:`ROC Curve (AUC = ${o.auc.toFixed(3)})`}),o.threshold}updateConfusionMatrix(t,e,n){this.confusionMatrix.dataFrame=t,this.confusionMatrix.setOptions({xColumnName:e,yColumnName:this.boolPredictionName,description:`Threshold: ${n.toFixed(3)} (optimized via Youden's J)`,title:e+" Confusion Matrix"})}getIndecesOfMissingValues(t){const e=[];return t.forEach(t=>{const n=this.missingValsIndeces.get(t);null!=n&&e.push(...n)}),e}setNulls(e,n){const o=e.getRawData();n.forEach(e=>o[e]=t.FLOAT_NULL)}fitAndUpdateViewers(e,n,o,r,i,s,a){const l=mr.fit(e,n,o,r,i,s);this.params=l.params;const u=l.descrStatsTable,c=l.selectedByPvalue,f=l.selectedByCorr,d=n.names(),h=mr.predict(e,this.params,a,this.predictionName),m=this.getIndecesOfMissingValues(f);this.setNulls(h,m),h.colors.setLinear(jo(Go.MAX),{min:h.stats.min,max:h.stats.max}),e.columns.remove(this.predictionName),e.columns.add(h),this.updateGrid(),this.updateDesirabilityProfileData(u,a),this.updateStatisticsGrid(u,d,c,f);const p=this.updateRocCurve(o,h),g=o.name;e.columns.remove(this.boolPredictionName),this.boolPredictionName=e.columns.getUnusedName(g+"(predicted)");const v=function(e,n,o){if(!e.isNumerical)throw new Error("Failed to compute confusion matrix: prediction column must be numerical.");const r=e.length,i=new Array(r),s=e.getRawData();for(let t=0;t<r;++t)i[t]=s[t]>=n;return t.Column.fromList(t.COLUMN_TYPE.BOOL,o,i)}(h,p,this.boolPredictionName);e.columns.add(v),this.updateConfusionMatrix(e,g,p),this.view.dataFrame.selection.setAll(!1,!0)}runTrainingApp(){const e=this.view.dockManager;e.dock(this.getInputForm(!0).form,t.DOCK_TYPE.LEFT,null,void 0,.1);const n=e.findNode(this.view.grid.root);if(null==n)throw new Error("Failed to train pMPO: missing a grid in the table view.");const o=e.dock(this.statGrid,t.DOCK_TYPE.DOWN,n,void 0,.5),r=e.dock(this.rocCurve,t.DOCK_TYPE.RIGHT,o,void 0,.3);e.dock(this.confusionMatrix,t.DOCK_TYPE.RIGHT,r,void 0,.2),this.setRibbons()}getPmpoAppItems(){return{statsGrid:this.statGrid,rocCurve:this.rocCurve,confusionMatrix:this.confusionMatrix,controls:this.getInputForm(!1),profile:this.desirabilityProfile}}getInputForm(e){const n=ot.form([]);n.append(ot.h2("Training data"));const o=function(e){for(const n of e)if(n.type===t.COLUMN_TYPE.BOOL&&n.stats.stdev>0)return n;for(const t of e)if(t.isNumerical&&t.stats.stdev>0)return t;return e[0]}(this.desirabilityColumns),r=()=>{if(null!=this.tresholdedColumn&&(this.table.columns.remove(this.tresholdedColumn.name),this.tresholdedColumn=null),l.value.type===t.COLUMN_TYPE.BOOL)return l.value;const e=l.value.type===t.COLUMN_TYPE.STRING?function(e,n){const o=new Array(e.length),r=e.getRawData(),i=e.categories;for(let t=0;t<e.length;++t)o[t]=n.includes(i[r[t]]);const s=i.filter(t=>!n.includes(t)),a=`✅ ${n.join(", ")}`,l=`❌ ${s.join(", ")}`;return{column:t.Column.fromList(t.COLUMN_TYPE.BOOL,"",o),tooltip:`Desirability based on the selected categories:\n\n **${a}**\n\n **${l}**`}}(l.value,h.value):function(e,n,o){const r=new Array(e.length),i=e.getRawData(),s=function(t){switch(t){case Po.LESS:return(t,e)=>t<e;case Po.LESS_OR_EQUAL:return(t,e)=>t<=e;case Po.GREATER:return(t,e)=>t>e;case Po.GREATER_OR_EQUAL:return(t,e)=>t>=e;default:throw new Error(`Unsupported sign: ${t}`)}}(o);for(let t=0;t<e.length;++t)r[t]=s(i[t],n);return{column:t.Column.fromList(t.COLUMN_TYPE.BOOL,"",r),tooltip:`Desirability based on the condition:\n\n **${e.name} ${o} ${n}**`}}(l.value,f.value,c.value);return this.tresholdedColumn=e.column,this.threshColTooltip=e.tooltip,this.tresholdedColumn.name=this.table.columns.getUnusedName("Desirability"),this.table.columns.add(this.tresholdedColumn),this.tresholdedColumn},i=()=>{if(w())try{this.fitAndUpdateViewers(this.table,t.DataFrame.fromColumns(s.value).columns,r(),b.value,x.value,_.value,g.value)}catch(t){if(t instanceof ar)I.shell.warning(t.message),ot.tooltip.bind(l.input,t.message),ot.tooltip.bind(s.input,t.message);else{const e=t instanceof Error?t.message:Zn+": the platform issue.";I.shell.error(e),ot.tooltip.bind(l.input,e),ot.tooltip.bind(s.input,e)}l.input.classList.add("d4-invalid"),s.input.classList.add("d4-invalid")}},s=ot.input.columns("Descriptors",{table:this.table,nullable:!1,available:this.numericCols.map(t=>t.name),checked:this.numericCols.filter(t=>t.name!==o.name&&t.stats.stdev>0&&t.stats.missingValueCount<t.length).map(t=>t.name),tooltipText:"Descriptor columns used for model construction.",onValueChanged:t=>{null!=t&&(y=!1,C())}});n.append(s.root),s.addValidator(()=>{if(null==s.value||s.value.length<1)return"Select at least one descriptor column.";if(null!=l.value&&s.value.includes(l.value))return"Desirability column cannot be used as a descriptor.";const t=s.value.filter(t=>0===t.stats.stdev).map(t=>t.name);if(t.length>0)return`Descriptor columns with zero variance: ${t.join(", ")}`;const e=s.value.filter(t=>t.stats.missingValueCount===t.length).map(t=>t.name);return e.length>0?`Descriptor columns with only missing values: ${e.join(", ")}`:null});const a=e=>{if(e.type===t.COLUMN_TYPE.BOOL)d.hidden=!0;else{d.hidden=!1;const n=e.type===t.COLUMN_TYPE.STRING;f.root.hidden=n,c.root.hidden=n}},l=ot.input.column("Desirability",{nullable:!1,value:o,table:this.table,filter:t=>this.desirabilityColumns.includes(t),tooltipText:"Desirability column.",onValueChanged:t=>{null!=t&&(m(),a(t),u=!0,f.value=Math.round(100*t.stats.avg)/100,u=!1,y=!1,C())}});n.append(l.root),l.addValidator(()=>{if(null==l.value)return"Select a desirability column.";if(null!=s.value&&s.value.includes(l.value))return"Desirability column cannot be used as a descriptor.";if(l.value.type===t.COLUMN_TYPE.BOOL){if(0===l.value.stats.stdev)return"All desirability values are the same - scoring is not feasible."}else if(l.value.type===t.COLUMN_TYPE.STRING){if(l.value.categories.length<2)return"String desirability column must have at least 2 categories."}else{if(0===l.value.stats.stdev)return l.value.stats.missingValueCount<l.value.length?"All desirability values are the same - scoring is not feasible.":"Empty column cannot be used as desirability column.";if(null==f.value)return"Specify non-null desirability threshold.";if(!lr(l.value,f.value,c.value))return`All compounds are either desired or non-desired for ${l.value.name} ${c.value} ${f.value}. Adjust the threshold or condition.`}return null});let u=!1;const c=ot.input.choice("Condition",{value:Po.DEFAULT,items:Ro,nullable:!1,tooltipText:"How to compare numeric Desirability column values against the threshold.",onValueChanged:t=>{y=!1,C()}}),f=ot.input.float("Threshold",{value:Math.round(100*o.stats.avg)/100,nullable:!1,tooltipText:"Boundary value that separates desired from non-desired compounds.",format:"0.00",onValueChanged:t=>{if(null!=t){if(u)return;y=!1,C()}}});f.addValidator(()=>null==l.value||l.value.type===t.COLUMN_TYPE.BOOL||l.value.type===t.COLUMN_TYPE.STRING?null:null==f.value?"Specify non-null desirability threshold.":lr(l.value,f.value,c.value)?null:"Adjust the threshold to get both desired and non-desired groups.");const d=ot.divV([c.root,f.root]);n.append(d);let h=null;const m=()=>{var e;null!=h&&(h.root.remove(),h=null),(null===(e=l.value)||void 0===e?void 0:e.type)===t.COLUMN_TYPE.STRING&&(h=ot.input.multiChoice("Preferred",{value:ur(l.value.categories),items:l.value.categories,nullable:!1,tooltipText:"Select which categories should be treated as desirable.",onValueChanged:t=>{if(null!=t){if(u)return;y=!1,C()}}}),h.addValidator(()=>null==h.value||0===h.value.length?"Select at least one preferable category.":null!=l.value&&h.value.length===l.value.categories.length?"At least one category must be non-preferable.":null),d.append(h.root))};a(l.value);const p=ot.h2("Settings");n.append(p),ot.tooltip.bind(p,"Settings of the pMPO model.");const g=ot.input.bool("σ correction",{value:!0,tooltipText:"Use the sigmoidal correction to the weighted Gaussian scores.",onValueChanged:t=>{y=!1,C()}});n.append(g.root);const v=this.table.rowCount<=1e4;let y=!1;const A=()=>hr(this,void 0,void 0,function*(){if(yield new Promise(t=>setTimeout(t,50)),w())if(y)i();else{const e=yield this.getOptimalSettings(t.DataFrame.fromColumns(s.value).columns,r(),g.value);"success"===e.state?(b.value=Math.max(e.pValTresh,fo),x.value=Math.max(e.r2Tresh,mo),_.value=Math.max(e.qCutoff,go),y=!0,i()):I.shell.warning(e.msg)}}),w=()=>{const t=[s.validate(),l.validate(),f.validate(),b.validate(),x.validate(),_.validate()];return null!=h&&t.push(h.validate()),t.every(t=>t)},C=()=>{E.value?A():i()},E=ot.input.bool("Auto-tuning",{value:!1,tooltipText:"Automatically select optimal p-value, R², and q-cutoff by maximizing AUC.",onValueChanged:t=>hr(this,void 0,void 0,function*(){N(!t),y||(t?yield A():i())})});n.append(E.root);const b=ot.input.float("p-value",{nullable:!1,min:fo,max:1,step:.001,value:co,format:vo,tooltipText:"P-value threshold. Descriptors with p-values above this threshold are excluded.",onValueChanged:t=>{E.value||(y=!1,null!=t&&t>=fo&&t<=1&&i())}});n.append(b.root),b.addValidator(()=>null==b.value?"P-value is required.":b.value<fo||b.value>1?"P-value must be between 0.001 and 1.":null);const x=ot.input.float("R²",{format:vo,nullable:!1,min:mo,value:ho,max:1,step:.01,tooltipText:"Squared correlation threshold. Descriptors with squared correlation above this threshold are considered highly correlated. Among them, the descriptor with the lower p-value is retained.",onValueChanged:t=>{E.value||(y=!1,null!=t&&t>=mo&&t<=1&&i())}});n.append(x.root),x.addValidator(()=>null==x.value?"R² is required.":x.value<mo||x.value>1?"R² must be between 0.01 and 1.":null);const _=ot.input.float("q-cutoff",{format:vo,nullable:!1,min:go,value:po,max:1,step:.01,tooltipText:"Q-cutoff for the pMPO model computation.",onValueChanged:t=>{E.value||(y=!1,null!=t&&t>=go&&t<=1&&i())}});n.append(_.root),_.addValidator(()=>null==_.value?"Q-cutoff is required.":_.value<go||_.value>1?"Q-cutoff must be between 0.01 and 1.":null);const N=t=>{b.enabled=t,x.enabled=t,_.enabled=t};setTimeout(()=>{i(),v?E.value=!0:i()},10);const M=ot.button("Save",()=>hr(this,void 0,void 0,function*(){null!=this.params?function(t,e,n){zo(this,void 0,void 0,function*(){const o=ot.input.string("Name",{value:e,nullable:!1}),r=ot.input.textArea("Description",{value:" ",nullable:!0}),i=ot.input.bool("Desirability Profile",{value:!0,tooltipText:"Save the model as an MPO Desirability Profile. If disabled, the model is saved in the pMPO format."}),s=ot.dialog({title:"Save model"}).add(o).add(r).add(i).addButton("Save",()=>zo(this,void 0,void 0,function*(){try{const e=yield I.dapi.files.list(Ao),s=new Set(e.map(t=>t.name)),a=function(t,e){return function(t,e,n){const o=n(t);if(!e.has(o))return o;let r=2;for(;e.has(n(t,r));)r++;return n(t,r)}(t.trim().replace(/[\s/\\]+/g,"-").replace(/^-|-$/g,"")||"profile",e,(t,e)=>e?`${t}-${e}.json`:`${t}.json`)}(o.value,s),l=`${Ao}/${a}`,u=JSON.stringify(i.value?nr(t,n,o.value,r.value,!1):{type:"Probabilistic MPO Model",name:o.value,description:r.value,properties:Object.fromEntries(t)},null,2);yield I.dapi.files.writeAsText(l,u),I.events.fireCustomEvent("chem-mpo-profile-changed",{}),I.shell.info(`Saved to ${l}`)}catch(t){I.shell.error(`Failed to save: ${t instanceof Error?t.message:"the platform issue"}.`)}s.close()})).show();s.getButton("Save").disabled=!o.validate(),o.onInput.subscribe(()=>s.getButton("Save").disabled=!o.validate())})}(this.params,this.table.name,g.value):I.shell.warning("Failed to save pMPO model: null parameters.")}),"Save model as platform file.");e&&n.append(M);const T=ot.div([n]);return T.classList.add("eda-pmpo-input-form"),{form:T,saveBtn:M}}static validateInputs(e){var n;const o=new Map,{descriptors:r,desirability:i,threshold:s,sign:a,desirableCategories:l,pValue:u,r2:c,qCutoff:f}=e;if(null==u||null==c||null==f)return{valid:!1,errors:o};if(u<=0||u>1||c<0||c>1||f<=0||f>1)return{valid:!1,errors:o};if(null==r||null==i)return{valid:!1,errors:o};if(r.length<1)return o.set("descriptors","Select at least one descriptor column."),{valid:!1,errors:o};if(r.includes(i)){const t="Desirability column cannot be used as a descriptor.";return o.set("descriptors",t),o.set("desirability",t),{valid:!1,errors:o}}const d=r.filter(t=>0===t.stats.stdev).map(t=>t.name);d.length>0&&o.set("descriptors",()=>ot.markdown(`Descriptor columns with zero variance cannot be used: **${d.join(", ")}**`));const h=r.filter(t=>t.stats.missingValueCount===t.length).map(t=>t.name);if(h.length>0&&o.set("descriptors",()=>ot.markdown(`Descriptor columns with only missing values cannot be used: **${h.join(", ")}**`)),i.type===t.COLUMN_TYPE.BOOL)0===i.stats.stdev&&o.set("desirability","All desirability values are the same - scoring is not feasible.");else if(i.type===t.COLUMN_TYPE.STRING){const t=i.categories.length,e=null!==(n=null==l?void 0:l.length)&&void 0!==n?n:0;t<2?o.set("desirability","String desirability column must have at least 2 categories."):0===e?o.set("desirability","Select at least one preferable category."):e===t&&o.set("desirability","At least one category must be non-preferable.")}else 0===i.stats.stdev?o.set("desirability",i.stats.missingValueCount<i.length?"All desirability values are the same - scoring is not feasible.":"Empty column cannot be used as desirability column."):null==s?o.set("desirability","Specify non-null desirability threshold."):lr(i,s,a)||(o.set("desirability",()=>ot.markdown(`All compounds are either desired or non-desired for\n <div align="center">\n **${i.name} ${a} ${s}.**\n </div>\n Adjust the threshold or condition to get both groups.`)),o.set("threshold","Adjust the threshold to get both desired and non-desired groups."));return{valid:!o.size,errors:o}}getDesirabilityColumns(){const e=[];for(const n of this.table.columns)(n.type===t.COLUMN_TYPE.BOOL||n.isNumerical||n.type===t.COLUMN_TYPE.STRING)&&e.push(n);return e}getValidNumericCols(){const t=[];for(const e of this.table.columns)e.isNumerical&&t.push(e);return t}getOptimalSettings(e,n,o){return hr(this,void 0,void 0,function*(){const r=t.TaskBarProgressIndicator.create("Optimizing... ",{cancelable:!0});try{const t=e.names(),{desired:i,nonDesired:s}=Do(this.table,n),a=new Map;t.forEach(t=>{a.set(t,Bo(i.col(t),s.col(t)))});const l=Qo(Ko(a),co);if(l.length<1)return r.close(),{pValTresh:0,r2Tresh:0,qCutoff:0,state:"failed",msg:"No descriptors passed the p-value threshold filter."};const u=Jo(e,l),c=t=>{const e=tr(0,l,a,t[0],u),r=er(i,s,e,t[1]),c=mr.predict(this.table,r,o,this.predictionName);return 1-Vo(n,c).auc},f=yield dr(r,c,new Float32Array([ho,po]),Oo,Io,Lo),d=!r.canceled;return r.close(),d?{pValTresh:co,r2Tresh:f.optimalPoint[0],qCutoff:f.optimalPoint[1],state:"success",msg:"Optimization completed successfully."}:{pValTresh:0,r2Tresh:0,qCutoff:0,state:"canceled",msg:"Auto-tuning was canceled by the user."}}catch(t){return r.close(),{pValTresh:0,r2Tresh:0,qCutoff:0,state:"failed",msg:t instanceof Error?t.message:"Optimization failed due to an unexpected error."}}})}}function pr(e){return n=this,o=arguments,i=function*(e,n=!0){const o=yield I.dapi.files.readCsv(To),r=new gr(o,"Drug","CNS","Smiles").getGenerated(e);if(!n){r.columns.add(t.Column.fromList(t.COLUMN_TYPE.BOOL,"Const bool",new Array(e).fill(!0))),r.columns.add(t.Column.fromInt32Array("Const int",new Int32Array(e).fill(1)));const n=r.columns.toList().find(t=>t.isNumerical);if(n){const e=n.clone();e.name=`${n.name} (missing)`;for(let n=0;n<Math.min(5,e.length);++n)e.set(n,t.FLOAT_NULL);r.columns.add(e)}r.columns.add(t.Column.fromFloat32Array("Nulls",new Float32Array(e).fill(t.FLOAT_NULL)));const o=function(e,n){const o=e.toList(),r=new Array(n),i=new Array(n);for(let t=0;t<n;++t)r[t]=o[t]?"active":"non-active",i[t]=o[t]?Math.random()<.5?"perfect":"good":Math.random()<.5?"bad":"worst";return[t.Column.fromList(t.COLUMN_TYPE.STRING,"CNS (strings)",r),t.Column.fromList(t.COLUMN_TYPE.STRING,"CNS (4 categories)",i),t.Column.fromList(t.COLUMN_TYPE.STRING,"Single category",new Array(n).fill("Unknown"))]}(r.col("CNS"),e);for(const t of o)r.columns.add(t)}return r},new((r=void 0)||(r=Promise))(function(t,e){function s(t){try{l(i.next(t))}catch(t){e(t)}}function a(t){try{l(i.throw(t))}catch(t){e(t)}}function l(e){var n;e.done?t(e.value):(n=e.value,n instanceof r?n:new r(function(t){t(n)})).then(s,a)}l((i=i.apply(n,o||[])).next())});var n,o,r,i}class gr{constructor(t,e,n,o){this.sourceDf=t,this.drugName=e,this.desirabilityColName=n,this.smilesColName=o;const r=t.columns.toList().filter(t=>t.isNumerical).map(t=>t.name),{desired:i,nonDesired:s}=Do(t,t.col(n));this.descriptorStats=new Map,r.forEach(t=>{this.descriptorStats.set(t,Bo(i.col(t),s.col(t)))}),this.desiredProbability=i.rowCount/t.rowCount}getGenerated(e){if(e<=1)throw new Error("Failed to generate pMPO data: sample count must be greater than 1.");let n;if(e<=this.sourceDf.rowCount){const o=t.BitSet.create(this.sourceDf.rowCount);for(let t=0;t<e;++t)o.set(t,!0);n=this.sourceDf.clone(o)}else n=this.getClonedSourceDfWithFloatNumericCols().append(this.getSyntheticTable(e-this.sourceDf.rowCount));for(const e of n.columns)if(e.type===t.COLUMN_TYPE.BOOL&&0===e.stats.stdev){let t=e.get(0);e.set(0,!t),t=e.get(1),e.set(1,!t)}return n}getSyntheticTable(e){const n=new Array(e);for(let t=0;t<e;++t)n[t]=Math.random()<this.desiredProbability;const o=[this.getDrugColumn(e),this.getSmilesColumn(e),t.Column.fromList(t.COLUMN_TYPE.BOOL,this.desirabilityColName,n)];return this.descriptorStats.forEach((r,i)=>{const s=new Float32Array(e);for(let t=0;t<e;++t)n[t]?s[t]=tn.normal.sample(r.desAvg,r.desStd):s[t]=tn.normal.sample(r.nonDesAvg,r.nonDesStd);o.push(t.Column.fromFloat32Array(i,s))}),t.DataFrame.fromColumns(o)}getDrugColumn(e){return t.Column.fromList(t.COLUMN_TYPE.STRING,this.drugName,Array.from({length:e},(t,e)=>`Synthetic drug ${e+1}`))}getSmilesColumn(e){return t.Column.fromList(t.COLUMN_TYPE.STRING,this.smilesColName,Array.from({length:e},()=>"C"))}getClonedSourceDfWithFloatNumericCols(){const e=[];this.sourceDf.columns.toList().forEach(n=>{n.isNumerical?e.push(n.clone().convertTo(t.COLUMN_TYPE.FLOAT)):e.push(n.clone())});const n=t.DataFrame.fromColumns(e);return n.name=this.sourceDf.name,n}}var vr=function(t,e,n,o){return new(n||(n=Promise))(function(r,i){function s(t){try{l(o.next(t))}catch(t){i(t)}}function a(t){try{l(o.throw(t))}catch(t){i(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((o=o.apply(t,e||[])).next())})};const yr="CNS",Ar=["TPSA","TPSA_S","HBA","HBD","MW","nAtoms","cLogD_ACD_v15","mapKa","cLogP_Biobyte","mbpKa","cLogP_ACD_v15","ALogP98"],wr="Score",Cr="Drug",Er="Sigmoidal",br=[Er,"Gaussian"];function xr(e=20){const n=Math.floor(e/2),o=[],r=new Float64Array(e),i=new Float64Array(e),s=new Float64Array(e);for(let t=0;t<e;t++){o.push(t<n);const e=t<n?t:t-n,a=e/Math.max(n-1,1);r[t]=t<n?9+2*a:1+2*a,i[t]=t<n?18+4*a:3+4*a,s[t]=5+.1*e}return t.DataFrame.fromColumns([t.Column.fromList(t.COLUMN_TYPE.BOOL,"des",o),t.Column.fromFloat64Array("d1",r),t.Column.fromFloat64Array("d2",i),t.Column.fromFloat64Array("d3",s)])}function _r(e,n){return t.DataFrame.fromColumns(e.columns.byNames(n)).columns}function Nr(){const t=xr();return{descriptors:t.columns.byNames(["d1","d2"]),desirability:t.col("des"),threshold:null,sign:Po.DEFAULT,desirableCategories:null,pValue:co,r2:ho,qCutoff:po}}function Mr(t,e,n,o){if(0===n)return[];const r=t.length;if(e.length!==r)throw new Error("Sense array length must match number of dimensions");const i=new Uint32Array(n);for(let t=0;t<n;t++)i[t]=t;i.sort((n,o)=>e[0]===Go.MIN?t[0][n]-t[0][o]:t[0][o]-t[0][n]);const s=Array(n).fill(!0),a=[];null==o||o.forEach(t=>s[t]=!1);for(const n of i){if(!s[n])continue;let o=!1;for(const i of a){let s=!0,a=!1;for(let o=0;o<r;o++){const r=t[o][i],l=t[o][n];e[o]===Go.MIN?(r>l&&(s=!1),r<l&&(a=!0)):(r<l&&(s=!1),r>l&&(a=!0))}if(s&&a){o=!0;break}}o?s[n]=!1:a.push(n)}return s}b("Probabilistic MPO: Computation",()=>{br.forEach(e=>{const n=e==Er;C("Correctness: "+e,()=>vr(void 0,void 0,void 0,function*(){let o=null,r=null,i=null,s=[],a=null,l=null,u=null,c=null;try{if(o=yield I.dapi.files.readCsv(To),r=yield I.dapi.files.readCsv(So),i=o.col(yr),s=o.columns.byNames(Ar),null==i)throw new Error;const f=mr.fit(o,t.DataFrame.fromColumns(s).columns,i,co,ho,po),d=mr.predict(o,f.params,n,wr);a=o.col(Cr),l=r.col(Cr),u=r.col(e),c=function(t,e,n,o){let r=0;const i=t.toList(),s=n.toList(),a=e.getRawData(),l=o.getRawData();return i.forEach((t,e)=>{const n=s.indexOf(t);if(n<0)throw new Error(`Failed to compare pMPO scores: the "${t}" drug is missing in the reference data.`);r=Math.max(r,Math.abs(a[e]-l[n]))}),r}(a,d,l,u)}catch(t){I.shell.error(t.message)}E(null!==o,!0,"Failed to load the source data: "+To),E(null!==r,!0,"Failed to load the scores data: "+So),E(null!==i,!0,"Inconsistent source data: no column "+yr),E(s.length,Ar.length,"Inconsistent source data: no enough of columns"),E(null!==a,!0,"Inconsistent source data: no column "+Cr),E(null!==l,!0,"Inconsistent reference data: no column "+Cr),E(null!==u,!0,"Inconsistent reference data: no column "+wr),E(null!==c,!0,"Failed to compare pMPO scores with the reference data"),E(c<1e-6,!0,"Max absolute deviation of pMPO scores exceeds the threshold (0.000001)")}),{timeout:1e4})}),C("Performance: 100K drugs, "+Ar.length+" descriptors",()=>vr(void 0,void 0,void 0,function*(){let e=null,n=null,o=[];try{if(e=yield pr(1e5),n=e.col(yr),o=e.columns.byNames(Ar),null==n)throw new Error;const r=mr.fit(e,t.DataFrame.fromColumns(o).columns,n,co,ho,po);mr.predict(e,r.params,!0,wr)}catch(t){I.shell.error(t.message)}E(null!==e,!0,"Failed to load the source data: "+To),E(null!==n,!0,"Inconsistent source data: no column "+yr),E(o.length,Ar.length,"Inconsistent source data: no enough of columns")}),{timeout:1e4})}),b("Probabilistic MPO: API",()=>{C("isApplicable: rejects p-value below minimum",()=>vr(void 0,void 0,void 0,function*(){const t=xr(),e=t.col("des"),n=_r(t,["d1","d2"]);E(mr.isApplicable(n,e,1e-4,ho,po),!1)})),C("isApplicable: rejects R² below minimum",()=>vr(void 0,void 0,void 0,function*(){const t=xr(),e=t.col("des"),n=_r(t,["d1","d2"]);E(mr.isApplicable(n,e,co,.001,po),!1)})),C("isApplicable: rejects q-cutoff below minimum",()=>vr(void 0,void 0,void 0,function*(){const t=xr(),e=t.col("des"),n=_r(t,["d1","d2"]);E(mr.isApplicable(n,e,co,ho,.001),!1)})),C("isApplicable: rejects too few samples",()=>vr(void 0,void 0,void 0,function*(){const t=xr(8),e=t.col("des"),n=_r(t,["d1","d2"]);E(mr.isApplicable(n,e,co,ho,po),!1)})),C("isApplicable: rejects single-category desirability",()=>vr(void 0,void 0,void 0,function*(){const e=t.DataFrame.fromColumns([t.Column.fromList(t.COLUMN_TYPE.BOOL,"des",new Array(20).fill(!0)),t.Column.fromFloat64Array("d1",Float64Array.from({length:20},(t,e)=>e+1)),t.Column.fromFloat64Array("d2",Float64Array.from({length:20},(t,e)=>2*e))]),n=e.col("des"),o=_r(e,["d1","d2"]);E(mr.isApplicable(o,n,co,ho,po),!1)})),C("isApplicable: rejects non-numerical descriptor",()=>vr(void 0,void 0,void 0,function*(){const e=t.DataFrame.fromColumns([t.Column.fromList(t.COLUMN_TYPE.BOOL,"des",Array.from({length:20},(t,e)=>e<10)),t.Column.fromFloat64Array("d1",Float64Array.from({length:20},(t,e)=>e+1)),t.Column.fromStrings("strCol",Array.from({length:20},(t,e)=>"a"+e))]),n=e.col("des"),o=_r(e,["d1","strCol"]);E(mr.isApplicable(o,n,co,ho,po),!1)})),C("isApplicable: rejects all-constant descriptors",()=>vr(void 0,void 0,void 0,function*(){const e=t.DataFrame.fromColumns([t.Column.fromList(t.COLUMN_TYPE.BOOL,"des",Array.from({length:20},(t,e)=>e<10)),t.Column.fromFloat64Array("c1",new Float64Array(20).fill(5)),t.Column.fromFloat64Array("c2",new Float64Array(20).fill(3))]),n=e.col("des"),o=_r(e,["c1","c2"]);E(mr.isApplicable(o,n,co,ho,po),!1)})),C("isApplicable: accepts valid data at minimum sample count",()=>vr(void 0,void 0,void 0,function*(){const t=xr(10),e=t.col("des"),n=_r(t,["d1","d2"]);E(mr.isApplicable(n,e,co,ho,po),!0)})),C("isTableValid: rejects table with 1 row",()=>vr(void 0,void 0,void 0,function*(){const e=t.DataFrame.fromColumns([t.Column.fromFloat64Array("a",new Float64Array([1])),t.Column.fromFloat64Array("b",new Float64Array([2]))]);E(mr.isTableValid(e,!1),!1)})),C("isTableValid: rejects all-constant numeric columns",()=>vr(void 0,void 0,void 0,function*(){const e=t.DataFrame.fromColumns([t.Column.fromFloat64Array("a",new Float64Array(10).fill(5)),t.Column.fromFloat64Array("b",new Float64Array(10).fill(3))]);E(mr.isTableValid(e,!1),!1)})),C("isTableValid: rejects single non-constant numeric column",()=>vr(void 0,void 0,void 0,function*(){const e=t.DataFrame.fromColumns([t.Column.fromFloat64Array("a",Float64Array.from({length:10},(t,e)=>e)),t.Column.fromFloat64Array("b",new Float64Array(10).fill(3))]);E(mr.isTableValid(e,!1),!1)})),C("isTableValid: accepts two non-constant numeric columns",()=>vr(void 0,void 0,void 0,function*(){const e=t.DataFrame.fromColumns([t.Column.fromFloat64Array("a",Float64Array.from({length:10},(t,e)=>e)),t.Column.fromFloat64Array("b",Float64Array.from({length:10},(t,e)=>2*e))]);E(mr.isTableValid(e,!1),!0)})),C("fit: returns non-empty params",()=>vr(void 0,void 0,void 0,function*(){const t=xr();E(mr.fit(t,_r(t,["d1","d2"]),t.col("des"),co,ho,po).params.size>0,!0,"Expected non-empty params")})),C("fit: weights sum to 1",()=>vr(void 0,void 0,void 0,function*(){const t=xr(),e=mr.fit(t,_r(t,["d1","d2"]),t.col("des"),co,ho,po);let n=0;e.params.forEach(t=>n+=t.weight),E(Math.abs(n-1)<1e-10,!0,`Weights sum ${n} should equal 1.0`)})),C("fit: selectedByCorr is subset of selectedByPvalue",()=>vr(void 0,void 0,void 0,function*(){const t=xr(),e=mr.fit(t,_r(t,["d1","d2","d3"]),t.col("des"),co,ho,po);E(e.selectedByCorr.every(t=>e.selectedByPvalue.includes(t)),!0,"selectedByCorr must be a subset of selectedByPvalue")})),C("fit: statistics table row count matches descriptor count",()=>vr(void 0,void 0,void 0,function*(){const t=["d1","d2","d3"],e=xr();E(mr.fit(e,_r(e,t),e.col("des"),co,ho,po).descrStatsTable.rowCount,t.length)})),C("fit: throws on non-applicable data",()=>vr(void 0,void 0,void 0,function*(){const t=xr(8);let e=!1;try{mr.fit(t,_r(t,["d1","d2"]),t.col("des"),co,ho,po)}catch(t){e=!0}E(e,!0,"Expected fit to throw on non-applicable data")})),C("fit: throws when no descriptors pass p-value filter",()=>vr(void 0,void 0,void 0,function*(){const e=t.DataFrame.fromColumns([t.Column.fromList(t.COLUMN_TYPE.BOOL,"des",Array.from({length:20},(t,e)=>e<10)),t.Column.fromFloat64Array("d1",Float64Array.from({length:20},(t,e)=>e%10+1)),t.Column.fromFloat64Array("d2",Float64Array.from({length:20},(t,e)=>2*(e%10+1)))]);let n=!1;try{mr.fit(e,_r(e,["d1","d2"]),e.col("des"),co,ho,po)}catch(t){n=!0}E(n,!0,"Expected fit to throw when no descriptors pass p-value filter")})),C("predict: returns column with correct length",()=>vr(void 0,void 0,void 0,function*(){const t=xr(),e=mr.fit(t,_r(t,["d1","d2"]),t.col("des"),co,ho,po);E(mr.predict(t,e.params,!0,wr).length,t.rowCount)})),C("predict: scores are non-negative",()=>vr(void 0,void 0,void 0,function*(){const t=xr(),e=mr.fit(t,_r(t,["d1","d2"]),t.col("des"),co,ho,po),n=mr.predict(t,e.params,!0,wr).getRawData();let o=!0;for(let t=0;t<n.length;t++)if(n[t]<0){o=!1;break}E(o,!0,"All scores should be non-negative")})),C("predict: scores do not exceed 1",()=>vr(void 0,void 0,void 0,function*(){const t=xr(),e=mr.fit(t,_r(t,["d1","d2"]),t.col("des"),co,ho,po),n=mr.predict(t,e.params,!0,wr).getRawData();let o=0;for(let t=0;t<n.length;t++)o=Math.max(o,n[t]);E(o<=1+1e-10,!0,`Max score ${o} should not exceed 1.0`)})),C("predict: sigmoid and Gaussian modes produce different scores",()=>vr(void 0,void 0,void 0,function*(){const t=xr(),e=mr.fit(t,_r(t,["d1","d2"]),t.col("des"),co,ho,po),n=mr.predict(t,e.params,!0,"sig").getRawData(),o=mr.predict(t,e.params,!1,"gau").getRawData();let r=!1;for(let e=0;e<t.rowCount;e++)if(Math.abs(n[e]-o[e])>1e-12){r=!0;break}E(r,!0,"Sigmoid and Gaussian modes should produce different scores")})),C("predict: throws for missing column",()=>vr(void 0,void 0,void 0,function*(){const e=xr(),n=mr.fit(e,_r(e,["d1","d2"]),e.col("des"),co,ho,po),o=t.DataFrame.fromColumns([t.Column.fromFloat64Array("other",Float64Array.from({length:5},(t,e)=>e))]);let r=!1;try{mr.predict(o,n.params,!0,wr)}catch(t){r=!0}E(r,!0,"Expected predict to throw for missing column")})),C("validateInputs: rejects null p-value",()=>vr(void 0,void 0,void 0,function*(){const t=Nr();t.pValue=null;const e=mr.validateInputs(t);E(e.valid,!1),E(e.errors.size,0,"No input-specific errors for null settings")})),C("validateInputs: rejects null R²",()=>vr(void 0,void 0,void 0,function*(){const t=Nr();t.r2=null,E(mr.validateInputs(t).valid,!1)})),C("validateInputs: rejects null q-cutoff",()=>vr(void 0,void 0,void 0,function*(){const t=Nr();t.qCutoff=null,E(mr.validateInputs(t).valid,!1)})),C("validateInputs: rejects p-value out of range",()=>vr(void 0,void 0,void 0,function*(){const t=Nr();t.pValue=0,E(mr.validateInputs(t).valid,!1),t.pValue=1.5,E(mr.validateInputs(t).valid,!1)})),C("validateInputs: rejects R² out of range",()=>vr(void 0,void 0,void 0,function*(){const t=Nr();t.r2=-.1,E(mr.validateInputs(t).valid,!1),t.r2=1.5,E(mr.validateInputs(t).valid,!1)})),C("validateInputs: rejects q-cutoff out of range",()=>vr(void 0,void 0,void 0,function*(){const t=Nr();t.qCutoff=0,E(mr.validateInputs(t).valid,!1),t.qCutoff=1.5,E(mr.validateInputs(t).valid,!1)})),C("validateInputs: rejects null descriptors",()=>vr(void 0,void 0,void 0,function*(){const t=Nr();t.descriptors=null,E(mr.validateInputs(t).valid,!1)})),C("validateInputs: rejects null desirability",()=>vr(void 0,void 0,void 0,function*(){const t=Nr();t.desirability=null,E(mr.validateInputs(t).valid,!1)})),C("validateInputs: rejects empty descriptors",()=>vr(void 0,void 0,void 0,function*(){const t=Nr();t.descriptors=[];const e=mr.validateInputs(t);E(e.valid,!1),E(e.errors.has("descriptors"),!0)})),C("validateInputs: rejects desirability among descriptors",()=>vr(void 0,void 0,void 0,function*(){const t=xr(),e=t.col("des"),n=mr.validateInputs({descriptors:[t.col("d1"),e],desirability:e,threshold:null,sign:Po.DEFAULT,desirableCategories:null,pValue:co,r2:ho,qCutoff:po});E(n.valid,!1),E(n.errors.has("descriptors"),!0),E(n.errors.has("desirability"),!0)})),C("validateInputs: rejects zero-variance descriptors",()=>vr(void 0,void 0,void 0,function*(){const e=t.DataFrame.fromColumns([t.Column.fromList(t.COLUMN_TYPE.BOOL,"des",Array.from({length:20},(t,e)=>e<10)),t.Column.fromFloat64Array("d1",Float64Array.from({length:20},(t,e)=>e+1)),t.Column.fromFloat64Array("constCol",new Float64Array(20).fill(5))]),n=mr.validateInputs({descriptors:[e.col("d1"),e.col("constCol")],desirability:e.col("des"),threshold:null,sign:Po.DEFAULT,desirableCategories:null,pValue:co,r2:ho,qCutoff:po});E(n.valid,!1),E(n.errors.has("descriptors"),!0)})),C("validateInputs: accepts valid boolean desirability",()=>vr(void 0,void 0,void 0,function*(){const t=Nr(),e=mr.validateInputs(t);E(e.valid,!0),E(e.errors.size,0)})),C("validateInputs: rejects all-true boolean desirability",()=>vr(void 0,void 0,void 0,function*(){const e=t.DataFrame.fromColumns([t.Column.fromList(t.COLUMN_TYPE.BOOL,"des",new Array(20).fill(!0)),t.Column.fromFloat64Array("d1",Float64Array.from({length:20},(t,e)=>e+1)),t.Column.fromFloat64Array("d2",Float64Array.from({length:20},(t,e)=>2*e))]),n=mr.validateInputs({descriptors:[e.col("d1"),e.col("d2")],desirability:e.col("des"),threshold:null,sign:Po.DEFAULT,desirableCategories:null,pValue:co,r2:ho,qCutoff:po});E(n.valid,!1),E(n.errors.has("desirability"),!0)})),C("validateInputs: rejects string desirability with single category",()=>vr(void 0,void 0,void 0,function*(){const e=t.DataFrame.fromColumns([t.Column.fromStrings("des",new Array(20).fill("active")),t.Column.fromFloat64Array("d1",Float64Array.from({length:20},(t,e)=>e+1)),t.Column.fromFloat64Array("d2",Float64Array.from({length:20},(t,e)=>2*e))]),n=mr.validateInputs({descriptors:[e.col("d1"),e.col("d2")],desirability:e.col("des"),threshold:null,sign:Po.DEFAULT,desirableCategories:["active"],pValue:co,r2:ho,qCutoff:po});E(n.valid,!1),E(n.errors.has("desirability"),!0)})),C("validateInputs: rejects no selected categories",()=>vr(void 0,void 0,void 0,function*(){const e=t.DataFrame.fromColumns([t.Column.fromStrings("des",Array.from({length:20},(t,e)=>e<10?"active":"inactive")),t.Column.fromFloat64Array("d1",Float64Array.from({length:20},(t,e)=>e+1)),t.Column.fromFloat64Array("d2",Float64Array.from({length:20},(t,e)=>2*e))]),n=mr.validateInputs({descriptors:[e.col("d1"),e.col("d2")],desirability:e.col("des"),threshold:null,sign:Po.DEFAULT,desirableCategories:[],pValue:co,r2:ho,qCutoff:po});E(n.valid,!1),E(n.errors.has("desirability"),!0)})),C("validateInputs: rejects all categories selected",()=>vr(void 0,void 0,void 0,function*(){const e=t.DataFrame.fromColumns([t.Column.fromStrings("des",Array.from({length:20},(t,e)=>e<10?"active":"inactive")),t.Column.fromFloat64Array("d1",Float64Array.from({length:20},(t,e)=>e+1)),t.Column.fromFloat64Array("d2",Float64Array.from({length:20},(t,e)=>2*e))]),n=mr.validateInputs({descriptors:[e.col("d1"),e.col("d2")],desirability:e.col("des"),threshold:null,sign:Po.DEFAULT,desirableCategories:["active","inactive"],pValue:co,r2:ho,qCutoff:po});E(n.valid,!1),E(n.errors.has("desirability"),!0)})),C("validateInputs: accepts valid string desirability",()=>vr(void 0,void 0,void 0,function*(){const e=t.DataFrame.fromColumns([t.Column.fromStrings("des",Array.from({length:20},(t,e)=>e<10?"active":"inactive")),t.Column.fromFloat64Array("d1",Float64Array.from({length:20},(t,e)=>e<10?e+10:e)),t.Column.fromFloat64Array("d2",Float64Array.from({length:20},(t,e)=>e<10?3*e:e))]),n=mr.validateInputs({descriptors:[e.col("d1"),e.col("d2")],desirability:e.col("des"),threshold:null,sign:Po.DEFAULT,desirableCategories:["active"],pValue:co,r2:ho,qCutoff:po});E(n.valid,!0),E(n.errors.size,0)})),C("validateInputs: rejects constant numeric desirability",()=>vr(void 0,void 0,void 0,function*(){const e=t.DataFrame.fromColumns([t.Column.fromFloat64Array("des",new Float64Array(20).fill(5)),t.Column.fromFloat64Array("d1",Float64Array.from({length:20},(t,e)=>e+1)),t.Column.fromFloat64Array("d2",Float64Array.from({length:20},(t,e)=>2*e))]),n=mr.validateInputs({descriptors:[e.col("d1"),e.col("d2")],desirability:e.col("des"),threshold:5,sign:Po.DEFAULT,desirableCategories:null,pValue:co,r2:ho,qCutoff:po});E(n.valid,!1),E(n.errors.has("desirability"),!0)})),C("validateInputs: rejects null threshold for numeric desirability",()=>vr(void 0,void 0,void 0,function*(){const e=t.DataFrame.fromColumns([t.Column.fromFloat64Array("des",Float64Array.from({length:20},(t,e)=>e)),t.Column.fromFloat64Array("d1",Float64Array.from({length:20},(t,e)=>e+1)),t.Column.fromFloat64Array("d2",Float64Array.from({length:20},(t,e)=>2*e))]),n=mr.validateInputs({descriptors:[e.col("d1"),e.col("d2")],desirability:e.col("des"),threshold:null,sign:Po.DEFAULT,desirableCategories:null,pValue:co,r2:ho,qCutoff:po});E(n.valid,!1),E(n.errors.has("desirability"),!0)})),C("validateInputs: rejects threshold producing single group",()=>vr(void 0,void 0,void 0,function*(){const e=t.DataFrame.fromColumns([t.Column.fromFloat64Array("des",Float64Array.from({length:20},(t,e)=>e)),t.Column.fromFloat64Array("d1",Float64Array.from({length:20},(t,e)=>e+1)),t.Column.fromFloat64Array("d2",Float64Array.from({length:20},(t,e)=>2*e))]),n=mr.validateInputs({descriptors:[e.col("d1"),e.col("d2")],desirability:e.col("des"),threshold:100,sign:Po.LESS_OR_EQUAL,desirableCategories:null,pValue:co,r2:ho,qCutoff:po});E(n.valid,!1),E(n.errors.has("desirability"),!0),E(n.errors.has("threshold"),!0)})),C("validateInputs: accepts valid numeric desirability with threshold",()=>vr(void 0,void 0,void 0,function*(){const e=t.DataFrame.fromColumns([t.Column.fromFloat64Array("des",Float64Array.from({length:20},(t,e)=>e)),t.Column.fromFloat64Array("d1",Float64Array.from({length:20},(t,e)=>e+1)),t.Column.fromFloat64Array("d2",Float64Array.from({length:20},(t,e)=>2*e))]),n=mr.validateInputs({descriptors:[e.col("d1"),e.col("d2")],desirability:e.col("des"),threshold:10,sign:Po.LESS_OR_EQUAL,desirableCategories:null,pValue:co,r2:ho,qCutoff:po});E(n.valid,!0),E(n.errors.size,0)}))});var Tr=function(t,e,n,o){return new(n||(n=Promise))(function(r,i){function s(t){try{l(o.next(t))}catch(t){i(t)}}function a(t){try{l(o.throw(t))}catch(t){i(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((o=o.apply(t,e||[])).next())})};const Sr=5e3,Or=1e6,Ir="1M points, 2D";function Lr(t,e,n=42){const o=[];let r=n;const i=()=>(r=(1664525*r+1013904223)%4294967296,r/4294967296);for(let n=0;n<e;n++){const e=new Float32Array(t);for(let o=0;o<t;o++)e[o]=100*i()+10*n;o.push(e)}return o}function Pr(t,e){const n=[];for(let o=0;o<t;o++)"all-min"===e?n.push(Go.MIN):"all-max"===e?n.push(Go.MAX):n.push(o%2==0?Go.MIN:Go.MAX);return n}function Rr(t,e){const n=Math.floor(t*e),o=new Set,r=Math.floor(t/n);for(let t=0;t<n;t++)o.add(t*r);return o}function Fr(t,e){if(t.length!==e)throw new Error(`Invalid mask length: expected ${e}, got ${t.length}`);const n=t.filter(t=>t).length;if(0===n)throw new Error("No optimal points found");n===e&&I.shell.warning("All points are optimal - data may be degenerate")}b("Pareto optimization",()=>{C(`Performance: ${Ir}`,()=>Tr(void 0,void 0,void 0,function*(){var t;let e=null,n=null;try{e=Mr(Lr(Or,2),Pr(2,"mixed"),Or),Fr(e,Or)}catch(t){n=t,I.shell.error(n.message)}E(null!==e,!0,"Failed to compute Pareto mask"),E(null===n,!0,null!==(t=null==n?void 0:n.message)&&void 0!==t?t:"")}),{timeout:Sr}),C(`Performance: ${Ir}, all minimize`,()=>Tr(void 0,void 0,void 0,function*(){var t;let e=null,n=null;try{e=Mr(Lr(Or,2),Pr(2,"all-min"),Or),Fr(e,Or)}catch(t){n=t,I.shell.error(n.message)}E(null!==e,!0,"Failed to compute Pareto mask"),E(null===n,!0,null!==(t=null==n?void 0:n.message)&&void 0!==t?t:"")}),{timeout:Sr}),C(`Performance: ${Ir}, all maximize`,()=>Tr(void 0,void 0,void 0,function*(){var t;let e=null,n=null;try{e=Mr(Lr(Or,2),Pr(2,"all-max"),Or),Fr(e,Or)}catch(t){n=t,I.shell.error(n.message)}E(null!==e,!0,"Failed to compute Pareto mask"),E(null===n,!0,null!==(t=null==n?void 0:n.message)&&void 0!==t?t:"")}),{timeout:Sr}),C(`Performance: ${Ir} with 10% null indices`,()=>Tr(void 0,void 0,void 0,function*(){var t;let e=null,n=null;try{const t=Lr(Or,2),n=Pr(2,"mixed"),o=Rr(Or,.1);e=Mr(t,n,Or,o),Fr(e,Or)}catch(t){n=t,I.shell.error(n.message)}E(null!==e,!0,"Failed to compute Pareto mask"),E(null===n,!0,null!==(t=null==n?void 0:n.message)&&void 0!==t?t:"")}),{timeout:Sr}),C(`Performance: ${Ir} with 25% null indices`,()=>Tr(void 0,void 0,void 0,function*(){var t;let e=null,n=null;try{const t=Lr(Or,2),n=Pr(2,"mixed"),o=Rr(Or,.25);e=Mr(t,n,Or,o),Fr(e,Or)}catch(t){n=t,I.shell.error(n.message)}E(null!==e,!0,"Failed to compute Pareto mask"),E(null===n,!0,null!==(t=null==n?void 0:n.message)&&void 0!==t?t:"")}),{timeout:Sr}),C("Edge case: Empty dataset",()=>Tr(void 0,void 0,void 0,function*(){var t;let e=null,n=null;try{e=Mr([new Float32Array(0),new Float32Array(0)],Pr(2,"mixed"),0)}catch(t){n=t,I.shell.error(n.message)}E(null!==e,!0,"Failed to compute Pareto mask"),E(e.length,0,"Empty dataset should return empty mask"),E(null===n,!0,null!==(t=null==n?void 0:n.message)&&void 0!==t?t:"")}),{timeout:Sr}),C("Edge case: Single point",()=>Tr(void 0,void 0,void 0,function*(){var t;let e=null,n=null;try{e=Mr([new Float32Array([1]),new Float32Array([2])],Pr(2,"mixed"),1)}catch(t){n=t,I.shell.error(n.message)}E(null!==e,!0,"Failed to compute Pareto mask"),E(e.length,1,"Single point dataset should return mask with one element"),E(e[0],!0,"Single point should be optimal"),E(null===n,!0,null!==(t=null==n?void 0:n.message)&&void 0!==t?t:"")}),{timeout:Sr}),C("Edge case: All identical points",()=>Tr(void 0,void 0,void 0,function*(){var t;let e=null,n=null;try{const t=100;e=Mr([new Float32Array(t).fill(5),new Float32Array(t).fill(10)],Pr(2,"mixed"),t)}catch(t){n=t,I.shell.error(n.message)}E(null!==e,!0,"Failed to compute Pareto mask"),E(e.length,100,"Should return mask with correct length"),E(e.filter(t=>t).length>0,!0,"At least some identical points should be optimal"),E(null===n,!0,null!==(t=null==n?void 0:n.message)&&void 0!==t?t:"")}),{timeout:Sr})});var Dr=function(t,e,n,o){return new(n||(n=Promise))(function(r,i){function s(t){try{l(o.next(t))}catch(t){i(t)}}function a(t){try{l(o.throw(t))}catch(t){i(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof n?e:new n(function(t){t(e)})).then(s,a)}l((o=o.apply(t,e||[])).next())})};const Br=new t.Package;function kr(e,s,a){return Dr(this,void 0,void 0,function*(){const d=yield function(t){var e,s,a;return n(this,void 0,void 0,function*(){const d=(null==t?void 0:t.nodeOptions)?t.nodeOptions.package:grok.functions.getCurrentCall().func.package;if(!d)throw new Error("Can't run tests outside of the package");const h=null===(e=d.packageOwner)||void 0===e?void 0:e.match(/<([^>]*)>/),m=h?h[1]:"";null!=d&&(yield _(d));const p=[];console.log("Running tests..."),console.log(t),null!=t||(t={}),null!==(s=(a=t).testContext)&&void 0!==s||(a.testContext=new A),grok.shell.clearLastError();const g=function(){const t=[];return console.log=(...e)=>{t.push(...e),i(...e)},console.info=(...e)=>{t.push(...e),l(...e)},console.warn=(...e)=>{t.push(...e),u(...e)},console.error=(...e)=>{t.push(...e),c(...e)},t}();yield function(t,e){var o,r,s,a,f,h;return n(this,void 0,void 0,function*(){try{let l=null!=(null==e?void 0:e.skipToCategory),u=!1;for(const[c,g]of Object.entries(t)){if(null===(o=e.exclude)||void 0===o?void 0:o.some(t=>c.startsWith(t)))continue;if(null!=(null==e?void 0:e.category)&&!c.toLowerCase().startsWith(null==e?void 0:e.category.toLowerCase().trim()))continue;if(l)if(u)l=!1;else{if(null==(null==e?void 0:e.skipToCategory)||c.toLowerCase().trim()!==(null==e?void 0:e.skipToCategory.toLowerCase().trim()))continue;u=!0}const t=null===(r=g.tests)||void 0===r?void 0:r.every(t=>{var n;return(null===(n=t.options)||void 0===n?void 0:n.skipReason)||null!=(null==e?void 0:e.test)&&e.test.toLowerCase()!==t.name.toLowerCase()});if(!t){const t=(null!==(s=g.tests)&&void 0!==s?s:[]).filter(t=>{var n;return(null===(n=t.options)||void 0===n?void 0:n.skipReason)||null!=(null==e?void 0:e.test)&&e.test.toLowerCase()!==t.name.toLowerCase()}).length;i(`Package testing: Started {{${c}}}${t>0?` skipped {{${t}}}`:""}`),g.beforeStatus=yield v(g.before,c)}let A,w=null!==(a=g.tests)&&void 0!==a?a:[];e.stressTest&&(w=w.filter(t=>{var e;return null===(e=t.options)||void 0===e?void 0:e.stressTest}),w=T(w)),(null!==(h=null===(f=e.tags)||void 0===f?void 0:f.length)&&void 0!==h?h:0)>0&&(w=w.filter(t=>{var n,o;return null===(o=null===(n=t.options)||void 0===n?void 0:n.tags)||void 0===o?void 0:o.some(t=>{var n;return(null!==(n=null==e?void 0:e.tags)&&void 0!==n?n:[]).includes(t)})})),g.beforeStatus?(A=Array.from(w.map(t=>({date:(new Date).toISOString(),category:c,name:t.name,success:!1,result:"before() failed",ms:0,skipped:!1,logs:"",owner:m,package:d.name,widgetsDifference:0,flaking:DG.Test.isReproducing}))),A.forEach(t=>n(this,void 0,void 0,function*(){return yield grok.shell.reportTest("package",t)}))):A=yield y(g,e,l);const C=A.filter(t=>"skipped"!=t.result);if(t||(g.afterStatus=yield v(g.after,c)),g.afterStatus&&(i(`Package testing: Category after() {{${c}}} failed`),i(`Package testing: Result for {{${c}}} after: ${g.afterStatus}`),C.push({date:(new Date).toISOString(),category:c,name:"after",success:!1,result:g.afterStatus,ms:0,skipped:!1,logs:"",owner:m,package:d.name,widgetsDifference:0,flaking:DG.Test.isReproducing})),g.beforeStatus&&(i(`Package testing: Category before() {{${c}}} failed`),i(`Package testing: Result for {{${c}}} before: ${g.beforeStatus}`),C.push({date:(new Date).toISOString(),category:c,name:"before",success:!1,result:g.beforeStatus,ms:0,skipped:!1,logs:"",owner:m,package:d.name,widgetsDifference:0,flaking:DG.Test.isReproducing})),p.push(...C),e.returnOnFail&&C.some(t=>!t.success&&!t.skipped&&t.name!==e.skipToTest))break}}finally{console.log=i,console.info=l,console.warn=u,console.error=c}if(e.testContext.catchUnhandled&&!DG.Test.isInBenchmark){yield S(1e3);const t=yield grok.shell.lastError;if(null!=t){const e={logs:"",date:(new Date).toISOString(),category:"Unhandled exceptions",name:"Exception",result:null!=t?t:"",success:!t,ms:0,skipped:!1,owner:null!=m?m:"",package:d.name,widgetsDifference:0};i(`Package testing: Unhandled Exception: ${t}`),p.push(Object.assign(Object.assign({},e),{flaking:DG.Test.isReproducing&&!t})),e.package=d.name,yield grok.shell.reportTest("package",e)}}})}(f,t);for(let t of p)t.result=t.result.toString().replace(/"/g,"'"),null!=t.logs&&(t.logs=t.logs.toString().replace(/"/g,"'"));return p;function v(t,e){return n(this,void 0,void 0,function*(){let o;try{void 0!==t&&(yield O(()=>n(this,void 0,void 0,function*(){yield t()}),1e5,`before ${e}: timeout error`))}catch(t){o=yield N(t)}return o})}function y(t,e,i){var s,a,l,u,c,f,h,p,v,y,A,C,E,b,x,_,N,T;return n(this,void 0,void 0,function*(){let n=null!==(s=t.tests)&&void 0!==s?s:[];const S=[],O=w();if(t.clear){let s=i&&null!=e.skipToTest;for(let i=0;i<n.length;i++){n[i].options&&void 0===(null===(a=n[i].options)||void 0===a?void 0:a.benchmark)&&(n[i].options||(n[i].options={}),n[i].options.benchmark=null!==(l=t.benchmarks)&&void 0!==l&&l);let C=n[i];if(e.test&&e.test.toLowerCase()!==C.name.toLowerCase())continue;if(s){if(null==(null==e?void 0:e.skipToTest)||C.name.toLowerCase().trim()!==(null==e?void 0:e.skipToTest.toLowerCase().trim()))continue;s=!1}(null==C?void 0:C.options)&&(C.options.owner=null!==(h=null!==(f=null!==(c=null===(u=n[i].options)||void 0===u?void 0:u.owner)&&void 0!==c?c:null==t?void 0:t.owner)&&void 0!==f?f:m)&&void 0!==h?h:"");let E=yield M(C,null==e?void 0:e.test,g,DG.Test.isInBenchmark?null!==(v=null===(p=n[i].options)||void 0===p?void 0:p.benchmarkTimeout)&&void 0!==v?v:r:null!==(A=null===(y=n[i].options)||void 0===y?void 0:y.timeout)&&void 0!==A?A:o,d.name,e.verbose);if(E&&(S.push(Object.assign(Object.assign({},E),{widgetsDifference:w()-O})),e.returnOnFail&&e.skipToTest!==C.name&&!E.success&&!E.skipped))return S;e.nodeOptions||(grok.shell.closeAll(),DG.Balloon.closeAll())}}else{let o=i&&null!=e.skipToTest;for(let i=0;i<n.length;i++){let s=n[i];if(e.test&&e.test.toLowerCase()!==s.name.toLowerCase())continue;if(o){null!=(null==e?void 0:e.skipToTest)&&s.name.toLowerCase().trim()===(null==e?void 0:e.skipToTest.toLowerCase().trim())&&(o=!1);continue}(null==s?void 0:s.options)&&(s.options.owner=null!==(x=null!==(b=null!==(E=null===(C=n[i].options)||void 0===C?void 0:C.owner)&&void 0!==E?E:null==t?void 0:t.owner)&&void 0!==b?b:m)&&void 0!==x?x:"");let a=yield M(s,null==e?void 0:e.test,g,DG.Test.isInBenchmark?null!==(N=null===(_=n[i].options)||void 0===_?void 0:_.benchmarkTimeout)&&void 0!==N?N:r:null===(T=n[i].options)||void 0===T?void 0:T.timeout,d.name,e.verbose);if(a&&(S.push(Object.assign(Object.assign({},a),{widgetsDifference:w()-O})),e.returnOnFail&&e.skipToTest!==s.name&&!a.success&&!a.skipped))return S}}return S})}function w(){var t;if("undefined"!=typeof process)return 0;let e=-1;try{e=DG.Widget.getAll().length}catch(e){console.warn(null!==(t=e.message)&&void 0!==t?t:e)}return e}})}({category:e,test:s,testContext:a});return t.DataFrame.fromObjects(d)})}function Ur(){return Dr(this,void 0,void 0,function*(){yield _(Br,Br.getModule("package-test.js"))})}})(),eda_test=a})();
2
2
  //# sourceMappingURL=package-test.js.map