@datagrok/bio 2.11.13 → 2.11.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/23.js +2 -0
- package/dist/23.js.map +1 -0
- package/dist/282.js +2 -0
- package/dist/282.js.map +1 -0
- package/dist/356.js +2 -0
- package/dist/356.js.map +1 -0
- package/dist/361.js +1 -1
- package/dist/361.js.map +1 -1
- package/dist/40.js +2 -0
- package/dist/40.js.map +1 -0
- package/dist/562.js +2 -0
- package/dist/562.js.map +1 -0
- package/dist/586.js +2 -0
- package/dist/586.js.map +1 -0
- package/dist/65.js +2 -0
- package/dist/65.js.map +1 -0
- package/dist/796.js +2 -0
- package/dist/796.js.map +1 -0
- package/dist/8473fcbfb6e85ca6c852.wasm +0 -0
- package/dist/{931.js → 935.js} +3 -3
- package/dist/935.js.map +1 -0
- package/dist/9a8fbf37666e32487835.wasm +0 -0
- package/dist/package-test.js +1 -1
- package/dist/package-test.js.map +1 -1
- package/dist/package.js +1 -1
- package/dist/package.js.map +1 -1
- package/package.json +4 -4
- package/scripts/sequence_generator.py +24 -22
- package/src/demo/bio05-helm-msa-sequence-space.ts +53 -13
- package/src/demo/utils.ts +2 -1
- package/src/function-edtiors/split-to-monomers-editor.ts +2 -2
- package/src/package.ts +82 -177
- package/src/tests/pepsea-tests.ts +1 -1
- package/src/tests/sequence-space-utils.ts +6 -2
- package/src/tests/similarity-diversity-tests.ts +16 -4
- package/src/utils/cell-renderer.ts +1 -1
- package/src/utils/helm-to-molfile.ts +1 -1
- package/src/utils/monomer-lib.ts +1 -1
- package/src/utils/pepsea.ts +16 -1
- package/src/viewers/vd-regions-viewer.ts +42 -16
- package/src/viewers/web-logo-viewer.ts +40 -20
- package/dist/1.js +0 -2
- package/dist/1.js.map +0 -1
- package/dist/190.js +0 -2
- package/dist/190.js.map +0 -1
- package/dist/381.js +0 -2
- package/dist/381.js.map +0 -1
- package/dist/770.js +0 -2
- package/dist/770.js.map +0 -1
- package/dist/868.js +0 -2
- package/dist/868.js.map +0 -1
- package/dist/931.js.map +0 -1
- package/src/utils/err-info.ts +0 -28
- /package/dist/{931.js.LICENSE.txt → 935.js.LICENSE.txt} +0 -0
package/dist/package-test.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/*! For license information please see package-test.js.LICENSE.txt */
|
|
2
|
-
var bio_test;(()=>{var t={2012:(t,e,s)=>{"use strict";s.d(e,{f:()=>r});var n=s(9976);class r extends n.B{static get Lesk(){return void 0===this.lesk&&(this.lesk=this.makePalette([[["G","A","S","T"],"orange"],[["C","V","I","L","P","F","Y","M","W"],"all_green"],[["N","Q","H"],"magenta"],[["D","E"],"red"],[["K","R"],"all_blue"]],!1,r)),this.lesk}static get GrokGroups(){return void 0===this.grokGroups&&(this.grokGroups=this.makePalette([[["C","U"],"yellow"],[["G","P"],"red"],[["A","V","I","L","M","F","Y","W"],"all_green"],[["R","H","K"],"light_blue"],[["D","E"],"dark_blue"],[["S","T","N","Q"],"orange"]],!1,r)),this.grokGroups}static get RasMol(){return void 0===this.rasMol&&(this.rasMol=new r({D:"#E60A0A",E:"#E60A0A",C:"#E6E600",M:"#E6E600",K:"#145AFF",R:"#145AFF",S:"#FA9600",T:"#FA9600",F:"#3232AA",Y:"#3232AA",N:"#00DCDC",Q:"#00DCDC",G:"#EBEBEB",L:"#0F820F",V:"#0F820F",I:"#0F820F",A:"#C8C8C8",W:"#B45AB4",H:"#8282D2",P:"#DC9682",others:"#BEA06E"})),this.rasMol}get(t){const e=t in r.aaSynonyms?r.aaSynonyms[t]:t;return super.get(e)}}r.aaSynonyms={MeNle:"L",MeA:"A",MeG:"G",MeF:"F"};class i{static getPalette(t="grok"){switch(t){case"grok":return r.GrokGroups;case"lesk":return r.Lesk;default:throw new Error(`ChemPalette: scheme \`${t}\` does not exist`)}}static getInnerOuter(t){let e=0,s="",n="";for(const r of t)"("==r?e++:")"==r?e--:e?s+=r:n+=r;return isNaN(parseInt(s))?[n,s]:[n,""]}static getColorAAPivot(t="",e="grok"){const s=this.getPalette(e);let[n,r]=this.getInnerOuter(t);if(n=n.length>6?`${n.slice(0,3)}...`:n,r=r.length>6?`${r.slice(0,3)}...`:r,1==t.length||"("==t[1]){const e=t[0]?.toUpperCase();return e in s?[s.get(e),e,r,1]:[this.undefinedColor,n,r,1]}if("d"==t[0]&&t[1]in s&&(2==t.length||"("==t[2])){const e=t[1]?.toUpperCase();return e in s?[s.get(e),e,r,2]:[this.undefinedColor,n,r,2]}if(t.substring(0,3)in this.AAFullNames&&(3==t.length||"("==t[3])){const e=this.AAFullNames[t.substring(0,3)];return e in s?[s.get(e),e,r,3]:[this.undefinedColor,n,r,3]}if(t[0]?.toLowerCase()==t[0]&&t.substring(1,3)in this.AAFullNames&&(4==t.length||"("==t[4])){const e=this.AAFullNames[t.substring(1,3)];return e in s?[s.get(e),e,r,4]:[this.undefinedColor,n,r,4]}return[this.undefinedColor,n,r,0]}}i.SemType="Aminoacids",i.SemTypeMultipleAlignment="AminoacidsMultipleAlignment",i.undefinedColor="rgb(100,100,100)",i.Names={G:"Glycine",L:"Leucine",Y:"Tyrosine",S:"Serine",E:"Glutamic acid",Q:"Glutamine",D:"Aspartic acid",N:"Asparagine",F:"Phenylalanine",A:"Alanine",K:"Lysine",R:"Arginine",H:"Histidine",C:"Cysteine",V:"Valine",P:"Proline",W:"Tryptophan",I:"Isoleucine",M:"Methionine",T:"Threonine"},i.AASmiles={G:"NCC(=O)O",L:"N[C@H](CC(C)C)C(=O)O",Y:"NC(CC1=CC=C(O)C=C1)C(=O)O",S:"NC(CO)C(=O)O",E:"N[C@@H](CCC(O)=O)C(=O)O",Q:"N[C@@H](CCC(N)=O)C(=O)O",D:"N[C@@H](CC(O)=O)C(=O)O",N:"N[C@@H](CC(N)=O)C(=O)O",F:"NC(CC1=CC=CC=C1)C(=O)O",A:"N[C@H](C)C(=O)O",K:"NC(CCCCN)C(=O)O",R:"N[C@H](CCCNC(=N)C)C(=O)O",H:"NC(CC1=CN=C[N]1)C(=O)O",C:"N[C@@H](CS)C(=O)O",V:"NC(C(C)C)C(=O)O",P:"N(CCC1)C1C(=O)O",W:"N[C@@H](Cc1c2ccccc2n([H])c1)C(=O)O",I:"N[C@H]([C@H](C)CC)C(=O)O",M:"NC(CCSC)C(=O)O",T:"NC(C(O)C)C(=O)O"},i.AASmilesTruncated={G:"*C*",L:"CC(C)C[C@H](*)*",Y:"C1=CC(=CC=C1CC(*)*)O",S:"OCC(*)C*",E:"*[C@@H](CCC(O)=O)*",Q:"*N[C@@H](CCC(N)=O)*",D:"*[C@@H](CC(O)=O)*",N:"*[C@@H](CC(N)=O)*",F:"C1=CC=C(C=C1)CC(*)*",A:"C[C@H](*)*",K:"C(CCN)CC(*)*",R:"*[C@H](CCCNC(=N)C)*",H:"C1=C(NC=N1)CC(*)*",C:"C([C@@H](*)*)S",V:"CC(C)C(*)*",P:"C1CCN(*)C1*",W:"*[C@@H](Cc1c2ccccc2n([H])c1)*",I:"CC[C@H](C)[C@H](*)*",M:"CSCCC(*)*",T:"CC(O)C(*)*"},i.AAFullNames={Ala:"A",Arg:"R",Asn:"N",Asp:"D",Cys:"C",Gln:"Q",Glu:"E",Gly:"G",His:"H",Ile:"I",Leu:"L",Lys:"K",Met:"M",Phe:"F",Pro:"P",Ser:"S",Thr:"T",Trp:"W",Tyr:"Y",Val:"V"}},6584:(t,e,s)=>{"use strict";s.d(e,{BX:()=>i,nW:()=>l,tW:()=>c,tb:()=>h});var n=s(4469);const r="Libraries",i="System:AppData/Bio/libraries/",o={explicit:["HELMCoreLibrary.json"],exclude:[]};let a=Promise.resolve();async function l(){let t;return a=a.then((async()=>{const e=await n.dapi.userDataStorage.getValue(r,"Settings",!0);t=e?JSON.parse(e):{exclude:[],explicit:[]},t.exclude=t.exclude instanceof Array?t.exclude:[],t.explicit=t.explicit instanceof Array?t.explicit:[],console.debug(`Bio: getUserLibSettings()\n${JSON.stringify(t,void 0,2)}`)})),await a,t}async function c(t){a=a.then((async()=>{console.debug(`Bio: setUserLibSettings()\n${JSON.stringify(t,void 0,2)}`),await n.dapi.userDataStorage.postValue(r,"Settings",JSON.stringify(t),!0)})),await a}async function h(){await c(o)}},7228:(t,e,s)=>{"use strict";s.d(e,{JN:()=>l,PF:()=>h,Qx:()=>c,Xk:()=>a});var n=s(976),r=s(4469),i=s(1047),o=(s(499),s(8457));function a(t){const e=[];for(let s=0;s<t.rowCount;s++){const n={};Object.keys(i.K4).forEach((e=>{if("symbol"===e){const r=t.get(i.K4[e],s);n[e]="."===r?t.get(i.At,s):r}else if("rgroups"===e){const r=t.get(i.K4[e],s).split("\n"),o=[];r.forEach((t=>{const e={},s=t.substring(t.lastIndexOf("]")+1),n=t.match(/\[R(\d+)\]/)[1];e.capGroupSmiles="H"===s?`[*:${n}][H]`:`O[*:${n}]`,e.alternateId="H"===s?`R${n}-H`:`R${n}-OH`,e.capGroupName="H"===s?"H":"OH",e.label=`R${n}`,o.push(e)})),n[e]=o}else i.K4[e]&&(n[e]=t.get(i.K4[e],s))})),e.push(n)}return e}async function l(){const t=n.Func.find({package:"Bio",name:"getMonomerLibHelper"});if(0===t.length)throw new Error('Package "Bio" must be installed for MonomerLibHelper.');return(await t[0].prepare().call()).getOutputParamValue()}async function c(t,e){t instanceof n.Column&&(t=(0,o.O)(t).columns.toList());const s=(await l()).getBioLib(),i=new Array(t.length),a=t[0].length,c=new Float32Array(a);for(let o=0;o<t.length;++o){const l=e[o],h=s.getMonomer("PEPTIDE",l)?.smiles??"",u=t[o],m=u.getRawData(),d=u.categories,g=d.indexOf("");if(i[o]={categories:d,data:m,emptyIndex:g},void 0===l)continue;const p=n.Column.fromStrings("smiles",d.map((t=>s.getMonomer("PEPTIDE",t)?.smiles??""))),f=(n.DataFrame.fromColumns([p]),(await r.chem.getSimilarities(p,h)).getRawData());for(let t=0;t<a;++t){const e=m[t];c[t]+=""!==l&&e!==g?f[e]:""===l&&e===g?1:0}}for(let s=0;s<c.length;++s){let r=c[s]/e.length;for(let o=0;o<t.length;++o){const t=i[o];if(o>=e.length&&t.data[s]!==t.emptyIndex||t.data[s]===t.emptyIndex&&o<e.length){r=n.FLOAT_NULL;break}}c[s]=r}return n.Column.fromFloat32Array("Similarity",c)}async function h(t){const e=(await l()).getBioLib(),s=[],i={},o=t.map((t=>e.getMonomer("PEPTIDE",t)?.smiles??"")),a=n.Column.fromStrings("smiles",o);for(let e=0;e<o.length;++e){i[t[e]]=e;const n=o[e],l=""===n?new Array(o.length).fill(0):(await r.chem.getSimilarities(a,n)).getRawData();l[e]=1,s[e]=Array.from(l)}return{scoringMatrix:s,alphabetIndexes:i}}},8601:(t,e,s)=>{"use strict";s.d(e,{i0:()=>m});var n=s(4469),r=s(976),i=s(6414),o=s.n(i),a=s(1821),l=s(499);const c={V2K_RGP_SHIFT:8,V2K_RGP_LINE:"M RGP",V2K_A_LINE:"A ",V3K_COUNTS_SHIFT:14,V3K_IDX_SHIFT:7,V3K_HEADER_FIRST_LINE:"\nDatagrok macromolecule handler\n\n",V3K_HEADER_SECOND_LINE:" 0 0 0 0 0 0 999 V3000\n",V3K_BEGIN_CTAB_BLOCK:"M V30 BEGIN CTAB\n",V3K_END_CTAB_BLOCK:"M V30 END CTAB\n",V3K_BEGIN_COUNTS_LINE:"M V30 COUNTS ",V3K_COUNTS_LINE_ENDING:" 0 0 0\n",V3K_BEGIN_ATOM_BLOCK:"M V30 BEGIN ATOM\n",V3K_END_ATOM_BLOCK:"M V30 END ATOM\n",V3K_BEGIN_BOND_BLOCK:"M V30 BEGIN BOND\n",V3K_END_BOND_BLOCK:"M V30 END BOND\n",V3K_BOND_CONFIG:" CFG=",V3K_BEGIN_DATA_LINE:"M V30 ",V3K_END:"M END",PRECISION_FACTOR:1e4,DEOXYRIBOSE:"d",RIBOSE:"r",PHOSPHATE:"p",OXYGEN:"O",HYDROGEN:"H"};var h=s(1047);function u(t){return Math.round(c.PRECISION_FACTOR*t)/c.PRECISION_FACTOR}async function m(t,e,i){if(0===r.Func.find({package:"Chem",name:"getRdKitModule"}).length)return{col:null,warnings:['Transformation to atomic level requires the package "Chem" installed.']};if(e.semType!==r.SEMTYPE.MACROMOLECULE)return{col:null,warnings:[`Only the ${r.SEMTYPE.MACROMOLECULE} columns can be converted to atomic level, the chosen column has semType '${e.semType}'`]};let u=e;const m=l.Cn.getOrCreate(e);m.isHelm()&&(u=m.convert(a.r2.SEPARATOR,"."),u.name=e.name);const g=l.Cn.getOrCreate(u).alphabet;let p;if("PT"===g||"UN"===g)p="PEPTIDE";else{if("RNA"!==g&&"DNA"!==g)return{col:null,warnings:[`Unexpected column's '${u.name}' alphabet '${g}'.`]};p="RNA"}const f=function(t){const e=t.length,s=new Array(e),n=l.Cn.getOrCreate(t).getSplitter();for(let r=0;r<e;++r){const e=t.get(r);s[r]=e?o()(n(e)).filter((t=>""!==t)).toArray():[]}return s}(u),y=await async function(t,e,s,r){const i=function(t,e,s){const n=new Map;for(const r of t.getMonomerSymbolsByType(e)){const i=t.getMonomer(e,r);if("RNA"===e&&("Branch"===i.monomerType||"DNA"===s&&i.symbol===c.DEOXYRIBOSE||"RNA"===s&&i.symbol===c.RIBOSE||i.symbol===c.PHOSPHATE)||"PEPTIDE"===e&&"Branch"!==i.monomerType){const t={};h.rx.forEach((e=>{t[e]=i[e]})),n.set(i.symbol,t)}}return n}(e,s,r),o=new Map,a=await n.functions.call("Chem:getRdKitModule"),l={value:null};if("RNA"===s){const t="RNA"===r?[c.RIBOSE,c.PHOSPHATE]:[c.DEOXYRIBOSE,c.PHOSPHATE];for(const e of t)d(o,e,i,a,s,l)}for(let e=0;e<t.length;++e){const n=t[e];for(const t of n)if(""!==t)try{d(o,t,i,a,s,l)}catch(e){const s=e instanceof Error?e.message:e.toString(),n=e instanceof Error?e.stack:void 0;throw console.error(`bio lib: getMonomersDictFromLib() sym='${t}', error:\n${s}\n${n}`),new Error(`Can't get monomer '${t}' from library: ${s}`)}}return o}(f,i,p,g),w=u.length,{molfileList:b,molfileWarningList:T}=await async function(t,e,n,r,i){const o=Math.max(navigator.hardwareConcurrency-2,1),a=new Array(o).fill(null).map((()=>new Worker(new URL(s.p+s.u(79),s.b)))),l=i/o;let c=[],h=[];const u=new Array(o);for(let s=0;s<o;s++){const c=Math.floor(s*l),h=s===o-1?i:Math.floor((s+1)*l);a[s].postMessage({monomerSequencesArray:t,monomersDict:e,alphabet:n,polymerType:r,start:c,end:h}),u[s]=new Promise((t=>{a[s].onmessage=({data:{molfileList:e,molfileWarningList:s}})=>{t({molfileList:e,molfileWarningList:s})}}))}return(await Promise.all(u)).forEach((t=>{c=c.concat(...t.molfileList),h=h.concat(...t.molfileWarningList)})),setTimeout((()=>{a.forEach((t=>{t.terminate()}))}),0),{molfileList:c,molfileWarningList:h}}(f,y,g,p,w);if(T.length>.05*w)throw new Error("Too many errors getting molfiles.");const C=`molfile(${u.name})`,A=t.columns.getUnusedName(C),S=r.Column.fromStrings(A,b);return S.semType=r.SEMTYPE.MOLECULE,S.setTag(r.TAGS.UNITS,r.UNITS.Molecule.MOLBLOCK),{col:S,warnings:T}}function d(t,e,s,n,r,i){if(!t.has(e)){const o=function(t,e,s,n,r){if(e.has(t)){const i=e.get(t),o=function(t){const e=[];for(const s of t){let t=s.capGroupSmiles;t||(t=s.capGroupSMILES),t=t.replace(/(\[|\]|\*|:|\d)/g,""),e.push(t)}return e}(i.rgroups),a=function(t){const e=new Map;let s=t.indexOf(c.V2K_A_LINE,0),n=s;for(;-1!==s;){n=t.indexOf("\n",s);const r=parseInt(t.substring(s,n).replace(/^A\s+/,""));s=t.indexOf("R",n),n=t.indexOf("\n",s);const i=parseInt(t.substring(s,n).replace(/^R/,""));e.set(r,i),s=t.indexOf(c.V2K_A_LINE,n)}for(s=t.indexOf(c.V2K_RGP_LINE,0),n=t.indexOf("\n",s);-1!==s;){s+=c.V2K_RGP_SHIFT,n=t.indexOf("\n",s);const r=t.substring(s,n).replaceAll(/\s+/g," ").split(" ").map((t=>parseInt(t))).slice(1);for(let t=0;t<r.length;t+=2){if(e.has(r[t])&&e.get(r[t])!==r[t+1])throw new Error(`r-group index ${r[t]} has already been added with a different value`);e.set(r[t],r[t+1])}s=t.indexOf(c.V2K_RGP_LINE,n)}return e}(i.molfile),l=function(t,e){const s=e.get_mol(t),n=s.get_v3Kmolblock();return s.delete(),n}(function(t){let e=t.indexOf(c.V2K_A_LINE,0);-1===e&&(e=t.indexOf(c.V2K_RGP_LINE));const s=t.indexOf(c.V3K_END,e);return t.substring(0,e)+t.substring(s)}(i.molfile),s),h=function(t){let e=(t=t.replaceAll("\r","")).indexOf(c.V3K_BEGIN_COUNTS_LINE)+c.V3K_COUNTS_SHIFT,s=t.indexOf(" ",e+1);const n=parseInt(t.substring(e,s));return e=s+1,s=t.indexOf(" ",e+1),{atomCount:n,bondCount:parseInt(t.substring(e,s))}}(l),m=function(t,e){const s=new Array(e),n=new Float32Array(e),r=new Float32Array(e),i=new Array(e);let o=t.indexOf(c.V3K_BEGIN_ATOM_BLOCK);o=t.indexOf("\n",o);let a=o;for(let l=0;l<e;l++){o=t.indexOf(c.V3K_BEGIN_DATA_LINE,o)+c.V3K_IDX_SHIFT,a=t.indexOf(" ",o),o=a+1,a=t.indexOf(" ",o),s[l]=t.substring(o,a);const e=new Array(2);for(let s=0;s<2;++s)o=a+1,a=t.indexOf(" ",o),e[s]=parseFloat(t.substring(o,a));n[l]=e[0],r[l]=e[1],o=a,a=t.indexOf("\n",o)+1,i[l]=t.slice(o,a),o=a}return{atomTypes:s,x:n,y:r,kwargs:i}}(l,h.atomCount),d=function(t,e){const s=new Uint32Array(e),n=new Array(e),r=new Map,i=new Map;let o=t.indexOf(c.V3K_BEGIN_BOND_BLOCK);o=t.indexOf("\n",o);let a=o;for(let l=0;l<e;++l){const e=new Array(3);o=t.indexOf(c.V3K_BEGIN_DATA_LINE,a)+c.V3K_IDX_SHIFT,a=t.indexOf(" ",o);for(let s=0;s<3;++s)o=a+1,a=Math.min(t.indexOf("\n",o),t.indexOf(" ",o)),e[s]=parseInt(t.slice(o,a));s[l]=e[0],n[l]=e.slice(1);const h=t.indexOf("\n",o);let u=t.slice(a,h),m=u.indexOf(c.V3K_BOND_CONFIG);if(-1!==m){m=u.indexOf("=",m)+1;let t=u.indexOf(" ",m);-1===t&&(t=u.length);const e=parseInt(u.slice(m,t));r.set(l,e);const s=c.V3K_BOND_CONFIG+e.toString();u=u.replace(s,"")}u||i.set(l,u)}return{bondTypes:s,atomPairs:n,bondConfiguration:r,kwargs:i}}(l,h.bondCount),y={atoms:m,bonds:d,meta:g(m,d,o,a)};return"PEPTIDE"===n?function(t){const e=t.meta.terminalNodes[0]-1,s=t.meta.rNodes[0]-1,n=t.atoms.x,r=t.atoms.y;S(t,-n[e],-r[e]);const i=T(n[s],r[s]);C(t.atoms,-i),n[t.meta.rNodes[1]-1]<0&&function(t){A(t,!1)}(t);const o=function(t){const e=function(t){const e=new Map;for(const s of t.bonds.atomPairs)for(let t=0;t<2;t++){const n=s[t],r=s[(t+1)%2];e.has(n)?e.get(n)?.push(r):e.set(n,new Array(1).fill(r))}return e}(t);let s=0;const n=t.atoms.atomTypes.length;let r=0;for(;0===s;){const i=e.get(t.meta.terminalNodes[1])[r];if(t.atoms.atomTypes[i-1]===c.OXYGEN&&i!==t.meta.rNodes[1]&&(s=i),r++,r>n)throw new Error(`Search for double-bonded Oxygen in ${t} has exceeded the limit of ${n}`)}return s}(t);!function(t,e){t.atoms.y[t.meta.rNodes[1]-1]<0&&t.atoms.y[e-1]<0&&(function(t){A(t,!0)}(t),C(t.atoms,-function(t,e){return T(t,e)+Math.PI/2}(t.atoms.x[t.meta.terminalNodes[1]-1],t.atoms.y[t.meta.terminalNodes[1]-1])))}(t,o),function(t,e){const s=t.atoms.x;s[t.meta.rNodes[1]-1]>s[e-1]&&function(t,e,s){const n=e-1,r=s-1,i=t.atoms.x,o=t.atoms.y,a=i[n],l=o[n];i[n]=i[r],o[n]=o[r],i[r]=a,o[r]=l}(t,e,t.meta.rNodes[1])}(t,o)}(y):t===c.RIBOSE||t===c.DEOXYRIBOSE?function(t,e){const s=t.atoms.x,n=t.atoms.y;let r=t.meta.terminalNodes[0]-1;const i=t.meta.rNodes[1]-1;S(t,-s[r],-n[r]);const o=T(s[i],n[i]);C(t.atoms,3*Math.PI/2-o),e.value=function(t){const e=t.atoms.x,s=t.atoms.y,n=t.meta.rNodes[2]-1,r=t.meta.terminalNodes[2]-1,i=e[n]-e[r],o=s[n]-s[r];return Math.atan(o/i)+Math.PI/2}(t),r=t.meta.terminalNodes[0]-1,S(t,-s[r],-n[r])}(y,r):t===c.PHOSPHATE?function(t){const e=t.meta.terminalNodes[0]-1,s=t.meta.rNodes[0]-1,n=t.atoms.x,r=t.atoms.y;S(t,-n[e],-r[e]);const i=T(n[s],r[s]);C(t.atoms,Math.PI/2-i)}(y):function(t,e){const s=t.atoms.x,n=t.atoms.y,r=t.meta.terminalNodes[0]-1,i=t.meta.rNodes[0]-1;S(t,-s[r],-n[r]);const o=T(s[i],n[i]),a=e.value;if(!a)throw new Error("The value of sugarBranchToOYAngle is null");C(t.atoms,Math.PI-o+a);const l=function(t,e){return u(Math.sqrt((t.x-e.x)**2+(t.y-e.y)**2))}({x:s[t.meta.rNodes[0]-1],y:n[t.meta.rNodes[0]-1]},{x:s[t.meta.terminalNodes[0]-1],y:n[t.meta.terminalNodes[0]-1]});if(1!=l)for(let t=0;t<s.length;++t)s[t]=u(s[t]/l),n[t]=u(n[t]/l)}(y,r),function(t,e,s){"PEPTIDE"===t?(f(e,t),w(e,e.meta.rNodes[1])):s===c.RIBOSE||s===c.DEOXYRIBOSE?(w(e,e.meta.rNodes[1]),e.meta.rNodes[1]=e.meta.terminalNodes[1],p(e.bonds,e.meta),f(e,t),w(e,e.meta.rNodes[1]),w(e,e.meta.rNodes[0]),w(e,e.meta.rNodes[2])):s===c.PHOSPHATE&&(e.meta.terminalNodes[0]=e.meta.rNodes[0],S(e,-e.atoms.x[e.meta.terminalNodes[0]-1],-e.atoms.y[e.meta.terminalNodes[0]-1]),f(e,t),w(e,e.meta.rNodes[1]))}(n,y,t),function(t){let e=0;for(;e<t.atoms.atomTypes.length;)t.atoms.atomTypes[e]===c.HYDROGEN&&(w(t,e+1),--e),++e}(y),y}return null}(e,s,n,r,i);if(!o)throw new Error(`Monomer with symbol '${e}' is absent the monomer library`);t.set(e,o)}}function g(t,e,s,n){const r={backboneShift:null,branchShift:null,terminalNodes:[],rNodes:[]};return function(t,e,s){for(const[n,r]of s)t.atomTypes[n-1]=e[r-1]}(t,s,n),function(t,e){e.rNodes=Array.from(t.keys());for(let s=0;s<e.rNodes.length;s++)for(const n of[1,2])if(t.get(e.rNodes[s])===n){const t=e.rNodes[n-1];e.rNodes[n-1]=e.rNodes[s],e.rNodes[s]=t}}(n,r),p(e,r),r}function p(t,e){const s=e.rNodes;e.terminalNodes=new Array(s.length).fill(0);const n=e.terminalNodes,r=t.atomPairs;let i=0,o=0;for(;i<r.length&&o<n.length;){for(let t=0;t<n.length;++t)for(let e=0;e<2;++e)r[i][e]===s[t]&&(n[t]=r[i][(e+1)%2],s.length,++o);++i}}function f(t,e){t.meta.rNodes.length>1&&(t.meta.backboneShift=y(t,t.meta.rNodes[1]-1,t.meta.terminalNodes[0]-1)),"RNA"===e&&t.meta.rNodes.length>2&&(t.meta.branchShift=y(t,t.meta.rNodes[2]-1,t.meta.terminalNodes[0]-1))}function y(t,e,s){return[u(t.atoms.x[e]-t.atoms.x[s]),u(t.atoms.y[e]-t.atoms.y[s])]}function w(t,e){if(void 0!==e){const s=e-1,n=t.atoms,r=t.bonds,i=t.meta;n.atomTypes.splice(s,1),n.x=b(Float32Array,n.x,s,1),n.y=b(Float32Array,n.y,s,1),n.kwargs.splice(s,1);for(let t=0;t<i.terminalNodes.length;++t)i.terminalNodes[t]>e?--i.terminalNodes[t]:i.terminalNodes[t]===e&&(i.terminalNodes[t]=-1);for(let t=0;t<i.rNodes.length;++t)i.rNodes[t]>e?--i.rNodes[t]:i.rNodes[t]===e&&(i.rNodes[t]=-1);let o=0;for(;o<r.atomPairs.length;){const t=r.atomPairs[o][0],s=r.atomPairs[o][1];t===e||s===e?(r.atomPairs.splice(o,1),r.bondTypes=b(Uint32Array,r.bondTypes,o,1),r.bondConfiguration.has(o)&&r.bondConfiguration.delete(o),r.kwargs.has(o)&&r.kwargs.delete(o),--o):(r.atomPairs[o][0]=t>e?t-1:t,r.atomPairs[o][1]=s>e?s-1:s),++o}let a=Array.from(r.bondConfiguration.keys());a.forEach((t=>{if(r.bondConfiguration.has(t)&&t>s){const e=r.bondConfiguration.get(t);r.bondConfiguration.delete(t),r.bondConfiguration.set(t-1,e)}})),a=Array.from(r.kwargs.keys()),a.forEach((t=>{if(r.kwargs.has(t)&&t>s){const e=r.kwargs.get(t);r.kwargs.delete(t),r.kwargs.set(t-1,e)}}))}}function b(t,e,s,n){const r=new t(e.length-n);let i=0,o=0;for(;i<e.length;)i===s&&(i+=n),r[o]=e[i],++o,++i;return r}function T(t,e){let s;if(0===t)s=e>0?0:Math.PI;else if(0===e)s=t>0?-Math.PI/2:Math.PI/2;else{const n=e/t,r=Math.atan(n);s=t<0?Math.PI/2+r:-Math.PI/2+r}return s}function C(t,e){if(0!==e){const s=t.x,n=t.y,r=Math.cos(e),i=Math.sin(e);for(let t=0;t<s.length;++t){const e=s[t];s[t]=u(e*r-n[t]*i),n[t]=u(e*i+n[t]*r)}}}function A(t,e){if(e){const e=t.atoms.y;for(let t=0;t<e.length;t++)e[t]=-e[t]}else{const e=t.atoms.x;for(let t=0;t<e.length;t++)e[t]=-e[t]}const s=t.bonds.bondConfiguration;for(const[t,e]of s){const n=1===e?3:1;s.set(t,n)}}function S(t,e,s){const n=t.atoms.x,r=t.atoms.y;for(let t=0;t<n.length;++t)n[t]=u(n[t]+e),void 0!==s&&(r[t]=u(r[t]+s))}},6137:(t,e,s)=>{"use strict";s.d(e,{J:()=>r,V:()=>i});var n=s(9976);class r extends n.B{static get Chromatogram(){return void 0===this.chromatogram&&(this.chromatogram=new r({A:"green",C:"blue",G:"black",T:"red",U:"red",others:"gray"})),this.chromatogram}}class i{}i.SemType="Nucleotides",i.SemTypeMultipleAlignment="NucleotidesMultipleAlignment",i.Names={A:"Adenine",C:"Cytosine",G:"Guanine",T:"Thymine",U:"Uracil"}},9976:(t,e,s)=>{"use strict";s.d(e,{B:()=>n});class n{static makePalette(t,e=!1,s=n){const r={};return t.forEach((t=>{const s=t[0],n=t[1];s.forEach(((t,s)=>{r[t]=this.colourPalette[n][e?0:s]}))})),new s(r)}constructor(t){this._palette=t}get(t){return this._palette[t]}}n.undefinedColor="rgb(100,100,100)",n.colourPalette={orange:["rgb(255,187,120)","rgb(245,167,100)","rgb(235,137,70)","rgb(205, 111, 71)"],all_green:["rgb(44,160,44)","rgb(74,160,74)","rgb(23,103,57)","rgb(30,110,96)","rgb(60,131,95)","rgb(24,110,79)","rgb(152,223,138)","rgb(182, 223, 138)","rgb(152, 193, 138)"],all_blue:["rgb(31,119,180)","rgb(23,190,207)","rgb(122, 102, 189)","rgb(158,218,229)","rgb(141, 124, 217)","rgb(31, 120, 150)"],magenta:["rgb(162,106,192)","rgb(197,165,224)","rgb(208,113,218)"],red:["rgb(214,39,40)","rgb(255,152,150)"],st_blue:["rgb(23,190,207)","rgb(158,218,229)","rgb(31,119,180)"],dark_blue:["rgb(31,119,180)","rgb(31, 120, 150)"],light_blue:["rgb(23,190,207)","rgb(158,218,229)","rgb(108, 218, 229)","rgb(23,190,227)"],lilac_blue:["rgb(124,102,211)","rgb(149,134,217)","rgb(97, 81, 150)"],dark_green:["rgb(23,103,57)","rgb(30,110,96)","rgb(60,131,95)","rgb(24,110,79)"],green:["rgb(44,160,44)","rgb(74,160,74)"],light_green:["rgb(152,223,138)","rgb(182, 223, 138)","rgb(152, 193, 138)"],st_green:["rgb(44,160,44)","rgb(152,223,138)","rgb(39, 174, 96)","rgb(74,160,74)"],pink:["rgb(247,182,210)"],brown:["rgb(140,86,75)","rgb(102, 62, 54)"],gray:["rgb(127,127,127)","rgb(199,199,199)","rgb(196,156,148)","rgb(222, 222, 180)"],yellow:["rgb(188,189,34)"],white:["rgb(230,230,230)"]}},7331:(t,e,s)=>{"use strict";s.d(e,{UE:()=>c,kQ:()=>o});var n=s(976),r=s(9976);class i{static hashCode(t){let e=0;if(0===t.length)return e;for(let s=0;s<t.length;s++)e=(e<<5)-e+t.charCodeAt(s),e|=0;return e}}class o{}class a extends o{get(t){return"#666666"}}class l extends o{static buildPalette(){return[].concat(...Object.values(r.B.colourPalette))}get(t){const e=i.hashCode(t)%l.palette.length;return function(t){if(null==t)return"rgb(100,100,100)";const e=n.Color.fromHtml(t),s=n.Color.g(e),r=n.Color.r(e),i=n.Color.b(e),o=Math.sqrt(Math.pow(0-r,2)+Math.pow(0-s,2)+Math.pow(0-i,2));return o>210?`rgb(${r/o*210},${s/o*210},${i/o*210})`:n.Color.toRgb(e)}(l.palette[e])}}l.palette=l.buildPalette();class c extends r.B{static get Gray(){return void 0===this.gray&&(this.gray=new a),this.gray}static get Color(){return void 0===this.color&&(this.color=new l),this.color}}},9611:(t,e,s)=>{"use strict";s.d(e,{A:()=>c});var n=s(4469),r=s(976),i=s(6414),o=s.n(i),a=s(8447);const l={DNA:"RNA",RNA:"RNA",PT:"PEPTIDE",UN:"PEPTIDE"};class c{get updated(){return this._updated}constructor(t,e,s){this.grid=t,this.col=e,this.propsProvider=s,this._monomerLengthList=null,this.separatorWidth=5,this._updated=!1,this._monomerLengthMap={},this._monomerStructureMap={},this.subs=[],this._splitter=(0,a.Mj)(this.col),this.props=this.propsProvider(),this._rowsProcessed=r.BitSet.create(this.col.length),this.grid&&(this.subs.push(e.dataFrame.onDataChanged.subscribe((()=>{this.props=this.propsProvider(),this._monomerLengthList=null,this._rowsProcessed=r.BitSet.create(this.col.length)}))),this.subs.push(n.events.onViewRemoved.subscribe((t=>{this.grid?.view?.id===t.id&&this.destroy()}))))}destroy(){for(const t of this.subs)t.unsubscribe()}getCellMonomerLengths(t){const e=this.props.unitsHandler.isMsa()?this.getCellMonomerLengthsForSeqMsa():this.getCellMonomerLengthsForSeq(t),s=new Array(e.length+1);s[0]=5;for(let t=1;t<s.length;t++)s[t]=s[t-1]+e[t-1];return[e,s]}getCellMonomerLengthsForSeq(t){null===this._monomerLengthList&&(this._monomerLengthList=new Array(this.col.length).fill(null),this._updated=!0);let e=this._monomerLengthList[t];if(null===e){const s=this.getSeqMonList(t);e=this._monomerLengthList[t]=new Array(s.length);for(const[t,n]of o().enumerate(s)){const s=this.props.monomerToShort(t,this.props.monomerLengthLimit),r=(this.props.unitsHandler.isSeparator()?this.separatorWidth:this.props.separatorWidth)+s.length*this.props.monomerCharWidth;e[n]=r}this._updated=!0}return e}getCellMonomerLengthsForSeqMsa(){var t;null===this._monomerLengthList&&(this._monomerLengthList=new Array(1).fill(null),this._updated=!0),(t=this._monomerLengthList)[0]??(t[0]=new Array(0));const e=this._monomerLengthList[0],s=Math.max(Math.floor((this.grid?.vertScroll.min??0)-10),0),n=Math.min(Math.ceil((this.grid?.vertScroll.max??0)+10),this.col.length);for(let t=s;t<n;t++){if(this._rowsProcessed.get(t))continue;const s=this.getSeqMonList(t);s.length>e.length&&e.push(...new Array(s.length-e.length).fill(0));for(const[t,n]of o().enumerate(s)){const s=this.props.monomerToShort(t,this.props.monomerLengthLimit),r=this.props.separatorWidth+s.length*this.props.monomerCharWidth;e[n]=Math.max(e[n]??0,r)}this._updated=!0}return e}getPosition(t,e){const[s,n]=this.getCellMonomerLengths(t),r=this.col.get(t),i=o()(this._splitter(r)).toArray();if(0===i.length)return null;let a=100,l=null,c=i.length,h=!1,u=0;if(n[0]<=e&&e<n.slice(-1)[0])for(;!h;)if(u=Math.floor((c+(l??0))/2),e>=n[u]&&e<=n[u+1]?(l=u,h=!0):e<n[u]?c=u-1:e>n[u+1]&&(l=u+1),l==c&&(h=!0),--a<=0)throw new Error(`Get position for pointer x = ${e} searching has not converged on ${JSON.stringify(n)}. `);return l}getSeqMonList(t){const e=this.col.get(t);return e?o()(this._splitter(e)).toArray():[]}getMonomer(t){const e=this.props.unitsHandler.alphabet??"UN",s=l[e];return this.props.monomerLib?.getMonomer(s,t)??null}setMonomerLengthLimit(t){this.props.monomerLengthLimit=t,this._updated=!0}setSeparatorWidth(t){this.props.separatorWidth=t,this._updated=!0}isMsa(){return this.props.unitsHandler.isMsa()}}},1047:(t,e,s)=>{"use strict";s.d(e,{$3:()=>c,At:()=>r,K4:()=>a,Wc:()=>i,Z2:()=>l,nJ:()=>o,pU:()=>h,rx:()=>n});const n=["symbol","molfile","rgroups","name"],r="MonomerName",i={symbol:"Short Name",name:"Medium Name",smiles:"SMILES"},o=[{capGroupSmiles:"[*:1][H]",alternateId:"R1-H",capGroupName:"H",label:"R1"},{capGroupSmiles:"O[*:2]",alternateId:"R2-OH",capGroupName:"OH",label:"R2"},{capGroupSmiles:"[*:3][H]",alternateId:"R3-H",capGroupName:"H",label:"R3"}],a={monomerType:null,smiles:null,name:"MonomerName",author:null,molfile:"molecule",naturalAnalog:"MonomerNaturalAnalogCode",rgroups:"MonomerCaps",createDate:null,id:null,polymerType:"MonomerType",symbol:"MonomerCode"},l={monomerType:"Backbone",smiles:"",name:"",author:"Datagrok",molfile:"",naturalAnalog:"",rgroups:[],createDate:null,id:0,polymerType:"PEPTIDE",symbol:""},c="p",h=new RegExp(`[rd]\\((\\w)\\)${c}?`,"g")},5226:(t,e,s)=>{"use strict";s.d(e,{i:()=>o});var n=s(976),r=s(499),i=s(1821);class o{get descriptionsArray(){return this._descriptionsArray}get sequencesArray(){return this._sequencesArray}parseMacromolecule(t,e){return this._fileContent.slice(t,e).split(/\s/).join("")}parseColumns(){const t=/^>(.*)$/gm;let e,s=0;for(;e=t.exec(this._fileContent);){const n=this._fileContent.substring(e.index+1,t.lastIndex);this._descriptionsArray.push(n),0!==s&&this._sequencesArray.push(this.parseMacromolecule(s,e.index)),s=t.lastIndex+1}this._sequencesArray.push(this.parseMacromolecule(s,-1))}importFasta(){const t=n.Column.fromStrings("description",this.descriptionsArray),e=n.Column.fromStrings("sequence",this.sequencesArray);return e.semType=n.SEMTYPE.MACROMOLECULE,e.setTag(n.TAGS.UNITS,i.r2.FASTA),r.Cn.getOrCreate(e),[n.DataFrame.fromColumns([t,e])]}constructor(t){this._descriptionsArray=[],this._sequencesArray=[],this._fileContent=t,this.parseColumns()}}},1821:(t,e,s)=>{"use strict";s.d(e,{BM:()=>o,CI:()=>i,XS:()=>l,r2:()=>n,se:()=>a});var n,r=s(6286);!function(t){t.FASTA="fasta",t.SEPARATOR="separator",t.HELM="helm"}(n||(n={}));const i=", ",o=/(?:\[([A-Za-z0-9_\-,()]+)\])|([A-Za-z\-])/g,a=new class{constructor(){this.fasta={peptide:new Set(["G","L","Y","S","E","Q","D","N","F","A","K","R","H","C","V","P","W","I","M","T"]),dna:new Set(["A","C","G","T"]),rna:new Set(["A","C","G","U"])}}},l=[new r.L("PT",a.fasta.peptide,.5),new r.L("DNA",a.fasta.dna,.55),new r.L("RNA",a.fasta.rna,.55)]},8447:(t,e,s)=>{"use strict";s.d(e,{CI:()=>n.CI,GU:()=>r.GU,KX:()=>r.KX,Mj:()=>r.Mj,XS:()=>n.XS,dQ:()=>r.dQ,gM:()=>r.gM,gP:()=>r.gP,kB:()=>r.kB,py:()=>r.py,r2:()=>n.r2,up:()=>r.up});var n=s(1821),r=s(585)},6286:(t,e,s)=>{"use strict";s.d(e,{L:()=>n,d:()=>r});class n{constructor(t,e,s){this.name=t,this.alphabet=e,this.cutoff=s}}class r extends n{constructor(t,e,s){super(t.name,t.alphabet,t.cutoff),this.freq=e,this.similarity=s}}},585:(t,e,s)=>{"use strict";s.d(e,{Ar:()=>y,FJ:()=>f,GU:()=>E,KX:()=>v,Mj:()=>A,dQ:()=>_,gM:()=>M,gP:()=>T,jY:()=>g,kB:()=>p,py:()=>L,up:()=>P,vU:()=>C,w4:()=>N});var n=s(976),r=s(6414),i=s.n(r),o=s(6286),a=s(1821),l=s(499),c=s(3659),h=s(850),u=s(2012),m=s(6137),d=s(7331);function g(t,e,s){return t.categories,function(t,e){const s={};let n=!0,r=null;for(const i of t)if(null==r?r=i.length:i.length!==r&&(n=!1),i.length>=e)for(const t of i)t in s||(s[t]=0),s[t]+=1;return{freq:s,sameLength:n}}(i()(t.getRawData()).map((e=>s(t.categories[e]))),e)}function p(t){return i()(t.toString().matchAll(a.BM)).map((t=>t[2]??t[1])).toArray()}function f(t){return t||[]}function y(t,e=undefined){return s=>s?s.replaceAll('"-"',"").replaceAll("'-'","").split(t,e):[]}const w=/(PEPTIDE1|DNA1|RNA1)\{([^}]+)}/g,b=/\[([^\[\]]+)]/g;function T(t){w.lastIndex=0;const e=w.exec(t.toString()),s=e?e[2]:null;return(s?s.split("."):[]).map((t=>{b.lastIndex=0;const e=b.exec(t);return e&&e.length>=2?e[1]:t}))}function C(t,e,s=undefined){if(t.toLowerCase().startsWith(a.r2.FASTA))return p;if(t.toLowerCase().startsWith(a.r2.SEPARATOR))return y(e,s);if(t.toLowerCase().startsWith(a.r2.HELM))return T;throw new Error(`Unexpected units ${t} .`)}function A(t){return l.Cn.getOrCreate(t).getSplitter()}const S=/([^\W_]+)/g;function E(t,e){if(t.length<=e)return t;const s=t.match(S),n=t.length>e||(s?.length??0)>1,r=s?.[0]??" ";return n?r.substring(0,e-1)+"…":r}function M(t){switch(t){case"DNA":return a.se.fasta.dna;case"RNA":return a.se.fasta.rna;case"PT":return a.se.fasta.peptide;default:throw new Error(`Unsupported alphabet '${t}'.`)}}function v(t,e,s="-"){const n=new Set([...new Set(Object.keys(t)),...e]);n.delete(s);const r=[],i=[];for(const s of n)r.push(s in t?t[s]:0),i.push(e.has(s)?1:0);const o=new c.OW(r),a=new c.OW(i);return(0,h.MA)(o,a)/((0,h.$G)(o)*(0,h.$G)(a))}function N(t,e,s="-"){const n=e.map((e=>{const n=v(t,e.alphabet,s);return new o.d(e,t,n)}));let r;const i=Math.max(...n.map((t=>t.similarity>t.cutoff?t.similarity:-1)));return r=i>0?n.find((t=>t.similarity===i)).name:"UN",r}function _(t,e=5){let s;return s=t.semType==n.SEMTYPE.MACROMOLECULE?l.Cn.getOrCreate(t).alphabet:N(g(t,e,p).freq,a.XS),L(s)}function L(t){switch(t){case"PT":return u.f.GrokGroups;case"DNA":case"RNA":return m.J.Chromatogram;default:return d.UE.Color}}function P(t){const e=t.columns.bySemTypeAll(n.SEMTYPE.MACROMOLECULE);let s=e.find((t=>{const e=t.getTag(n.TAGS.UNITS);return!!e&&-1!==e.indexOf("MSA")}))??null;return!s&&e.length>0&&(s=e[0]),s}},8457:(t,e,s)=>{"use strict";s.d(e,{O:()=>a});var n=s(976),r=s(6414),i=s.n(r),o=s(585);function a(t){const e=(0,o.Mj)(t),s=t=>{const e=l.columns.addNewString((t+1).toString());return r.push(e),e},r=[],a=t.length,l=n.DataFrame.create(a);for(let n=0;n<a;++n){const o=t.get(n);if(null==o)continue;const a=e(o);for(const[t,e]of i().enumerate(a))((r[e]??null)||s(e)).set(n,t||"-",!1)}return l}},499:(t,e,s)=>{"use strict";s.d(e,{Cn:()=>d,_9:()=>m});var n=s(976),r=s(6414),i=s.n(r),o=s(8447),a=s(585),l=s(489),c=s(7228),h=s(1047);const u=new class{constructor(){this.uh=`units-handler.${n.SEMTYPE.MACROMOLECULE}`}},m={[o.r2.FASTA]:"-",[o.r2.SEPARATOR]:"",[o.r2.HELM]:"*"};class d{static setUnitsToFastaColumn(t){if(t.column.semType!==n.SEMTYPE.MACROMOLECULE||t.column.getTag(n.TAGS.UNITS)!==o.r2.FASTA)throw new Error(`The column of notation '${o.r2.FASTA}' must be '${n.SEMTYPE.MACROMOLECULE}'.`);t.column.setTag(n.TAGS.UNITS,o.r2.FASTA),d.setTags(t)}static setUnitsToSeparatorColumn(t,e){if(t.column.semType!==n.SEMTYPE.MACROMOLECULE||t.column.getTag(n.TAGS.UNITS)!==o.r2.SEPARATOR)throw new Error(`The column of notation '${o.r2.SEPARATOR}' must be '${n.SEMTYPE.MACROMOLECULE}'.`);if(!e)throw new Error(`The column of notation '${o.r2.SEPARATOR}' must have the separator tag.`);t.column.setTag(n.TAGS.UNITS,o.r2.SEPARATOR),t.column.setTag("separator",e),d.setTags(t)}static setUnitsToHelmColumn(t){if(t.column.semType!==n.SEMTYPE.MACROMOLECULE)throw new Error(`The column of notation '${o.r2.HELM}' must be '${n.SEMTYPE.MACROMOLECULE}'`);t.column.setTag(n.TAGS.UNITS,o.r2.HELM),d.setTags(t)}static setTags(t){const e=t.column.getTag(n.TAGS.UNITS),s=t.stats;if(Object.keys(s.freq).some((t=>t.length>1)),[o.r2.FASTA,o.r2.SEPARATOR].includes(e)){if(!t.column.getTag("alphabet")&&0===Object.keys(s.freq).length)throw new Error("Alphabet is empty and not annotated.");let e=t.column.getTag("aligned");null===e&&(e=s.sameLength?"SEQ.MSA":"SEQ",t.column.setTag("aligned",e));let n=t.column.getTag("alphabet");if(null===n&&(n=(0,a.w4)(s.freq,o.XS),t.column.setTag("alphabet",n)),"UN"===n){const e=Object.keys(s.freq).length,n=Object.keys(s.freq).some((t=>t.length>1));t.column.setTag(".alphabetSize",e.toString()),t.column.setTag(".alphabetIsMultichar",n?"true":"false")}}}get column(){return this._column}get units(){return this._units}get notation(){return this._notation}get defaultGapSymbol(){return this._defaultGapSymbol}get separator(){const t=this.column.getTag("separator")??void 0;if(this.notation===o.r2.SEPARATOR&&void 0===t)throw new Error(`Separator is mandatory for column '${this.column.name}' of notation '${this.notation}'.`);return t}get aligned(){const t=this.column.getTag("aligned");if(!t&&(this.isFasta()||this.isSeparator()))throw new Error("Tag aligned not set");return t}get alphabet(){const t=this.column.getTag("alphabet");if(!t&&(this.isFasta()||this.isSeparator()))throw new Error("Tag alphabet not set");return t}get helmCompatible(){return this.column.getTag(".isHelmCompatible")}getAlphabetSize(){if(this.notation==o.r2.HELM||"UN"==this.alphabet){const t=this.column.getTag(".alphabetSize");let e;if(t)e=parseInt(t);else{const t=this.stats;e=Object.keys(t.freq).length}return e}switch(this.alphabet){case"PT":return 20;case"DNA":case"RNA":return 4;case"NT":return console.warn("Unexpected alphabet 'NT'."),4;default:throw new Error(`Unexpected alphabet '${this.alphabet}'.`)}}getAlphabetIsMultichar(){return this.notation===o.r2.HELM||"UN"===this.alphabet&&"true"===this.column.getTag(".alphabetIsMultichar")}get splitted(){if(null===this._splitted){const t=this.getSplitter(),e=this._column.length;this._splitted=new Array(e);const s=this._column.getRawData(),n=this._column.categories;for(let r=0;r<e;r++){const e=n[s[r]];this._splitted[r]=t(e)}}return this._splitted}get stats(){if(null===this._stats){const t={};let e=!0,s=null;for(const n of this.splitted){null==s?s=n.length:n.length!==s&&(e=!1);for(const e of n)e in t||(t[e]=0),t[e]+=1}this._stats={freq:t,sameLength:e}}return this._stats}get maxLength(){return null===this._maxLength&&(this._maxLength=0===this.splitted.length?0:Math.max(...this.splitted.map((t=>t.length)))),this._maxLength}get posList(){if(null===this._posList){const t=this.column.getTag(".positionNames");this._posList=t?t.split(o.CI).map((t=>t.trim())):i().count(1).take(this.maxLength).map((t=>t.toString())).toArray()}return this._posList}isFasta(){return this.notation===o.r2.FASTA}isSeparator(){return this.notation===o.r2.SEPARATOR}isHelm(){return this.notation===o.r2.HELM}isRna(){return"RNA"===this.alphabet}isDna(){return"DNA"===this.alphabet}isPeptide(){return"PT"===this.alphabet}isMsa(){return!!this.aligned&&this.aligned.toUpperCase().includes("MSA")}isHelmCompatible(){return"true"===this.helmCompatible}isGap(t){return!t||this.units===o.r2.FASTA&&t===m[o.r2.FASTA]||this.units===o.r2.HELM&&t===m[o.r2.HELM]}getNotation(){if(this.units.toLowerCase().startsWith(o.r2.FASTA))return o.r2.FASTA;if(this.units.toLowerCase().startsWith(o.r2.SEPARATOR))return o.r2.SEPARATOR;if(this.units.toLowerCase().startsWith(o.r2.HELM))return o.r2.HELM;throw new Error(`Column '${this.column.name}' has unexpected notation '${this.units}'.`)}getHelmWrappers(){return[this.isDna()||this.isRna()||this.isHelmCompatible()?"RNA1{":"PEPTIDE1{",this.isDna()?"d(":this.isRna()?"r(":"",this.isDna()||this.isRna()?")p":"","}$$$$"]}getNewColumn(t,e){const s=this.column,r=s.length,i=t.toLowerCase()+"("+s.name+")",a=s.dataFrame.columns.getUnusedName(i),l=n.Column.fromList("string",a,new Array(r).fill(""));if(l.semType=n.SEMTYPE.MACROMOLECULE,l.setTag(n.TAGS.UNITS,t),t===o.r2.SEPARATOR){if(!e)throw new Error(`Notation '${o.r2.SEPARATOR}' requires separator value.`);l.setTag("separator",e)}l.setTag(n.TAGS.CELL_RENDERER,"Macromolecule");const c=s.getTag("aligned");c&&l.setTag("aligned",c);const h=s.getTag("alphabet");null!=h&&l.setTag("alphabet",h);let u=s.getTag(".alphabetSize");null!=h&&u&&l.setTag(".alphabetSize",u);const m=s.getTag(".alphabetIsMultichar");return null!=h&&void 0!==m&&l.setTag(".alphabetIsMultichar",m),t==o.r2.HELM&&(u=this.getAlphabetSize().toString(),l.setTag(".alphabetSize",u)),l}static getNewColumn(t){const e=d.getOrCreate(t),s=e.notation;return e.getNewColumn(s)}static unitsStringIsValid(t){return t=t.toLowerCase(),[o.r2.FASTA,o.r2.SEPARATOR,o.r2.HELM].some((e=>t.startsWith(e.toLowerCase())))}static getNewColumnFromParams(t,e,s){if(!d.unitsStringIsValid(s))throw new Error("Invalid format of 'units' parameter");const r=n.Column.fromList("string",e,new Array(t).fill(""));return r.semType=n.SEMTYPE.MACROMOLECULE,r.setTag(n.TAGS.UNITS,s),r}getSplitter(t){if(this.units.toLowerCase().startsWith(o.r2.FASTA))return null===this.column.getTag("alphabet")||this.getAlphabetIsMultichar()?a.kB:a.FJ;if(this.units.toLowerCase().startsWith(o.r2.SEPARATOR))return(0,a.Ar)(this.separator,t);if(this.units.toLowerCase().startsWith(o.r2.HELM))return a.gP;throw new Error(`Unexpected units ${this.units} .`)}getDistanceFunctionName(){if(!this.isFasta())throw new Error("Only FASTA notation is supported");return this.isMsa()?l.U.HAMMING:(this.alphabet,l.U.LEVENSHTEIN)}getDistanceFunction(){return l.o[this.getDistanceFunctionName()]()}async checkHelmCompatibility(){if(this.column.tags.has(".isHelmCompatible"))return"true"===this.column.getTag(".isHelmCompatible");const t=(await(0,c.JN)()).getBioLib().getMonomerSymbolsByType("PEPTIDE".toString()),e=new Set(t),s=(0,a.Ar)(this.separator);for(const t of this.column.categories){const n=s(t);for(const t of n)if(!e.has(t))return this.column.setTag(".isHelmCompatible","false"),!1}return this.column.setTag(".isHelmCompatible","true"),!0}get splitter(){return null===this._splitter&&(this._splitter=(0,a.Mj)(this.column)),this._splitter}toFasta(t){return t===o.r2.FASTA}toSeparator(t){return t===o.r2.SEPARATOR}toHelm(t){return t===o.r2.HELM}convertHelmToFastaSeparator(t,e,s,n){n||(n=this.toFasta(e)?m[o.r2.FASTA]:m[o.r2.SEPARATOR]),s||(s=this.toFasta(e)?"":this.separator);const r=t.startsWith("RNA"),i=this.splitter(t),a=[];for(let t=0;t<i.length;t++){let s=i[t];if(r&&(s=s.replace(h.pU,"")),s===m[o.r2.HELM])a.push(n);else if(this.toFasta(e)&&s.length>1){const t="["+s+"]";a.push(t)}else a.push(s)}return a.join(s)}convert(t,e){const s=this.getConverter(t,e),n=this.getNewColumn(t,e);return n.init((t=>s(this.column.get(t)))),n}getRegion(t,e,s){const n=this.getNewColumn(this.notation,this.separator);n.name=s,Math.max(...this.splitted.map((t=>t.length)));const r=t??0,i=e??this.maxLength-1,a=this.getJoiner(),l=i-r+1;n.init((t=>{const e=this.splitted[t],s=new Array(l);for(let t=0;t<l;++t){const n=r+t;s[t]=n<e.length?e[n]:m[this.notation]}return a(s)}));const c=t=>{const e=t.split(",").map((t=>t.trim())),s=new Array(l);for(let t=0;t<l;++t){const n=r+t;s[t]=n<e.length?e[n]:"?"}return s.join(o.CI)},h=this.column.getTag(".positionNames");h&&n.setTag(".positionNames",c(h));const u=this.column.getTag(".positionLabels");return u&&n.setTag(".positionLabels",c(u)),n}getJoiner(){const t=this;if(this.notation===o.r2.FASTA)return function(e){return g(t,e)};if(this.notation===o.r2.SEPARATOR)return function(e){return p(t,e,t.separator)};if(this.notation===o.r2.HELM){const e="DNA"===t.alphabet||"RNA"===t.alphabet;return function(s){return f(t,s,e)}}throw new Error}getConverter(t,e=undefined){if(t===o.r2.SEPARATOR&&!e)throw new Error(`Target separator is not specified for target units '${o.r2.SEPARATOR}'.`);const s=this;if(t===o.r2.FASTA)return function(t){return function(t,e){const s=t.isHelm()?y(t,e):t.getSplitter()(e);return g(t,s)}(s,t)};if(t===o.r2.HELM)return function(t){return function(t,e){const s=e.startsWith("DNA")||e.startsWith("RNA"),n=t.getSplitter()(e);return f(t,n,s)}(s,t)};if(t===o.r2.SEPARATOR)return function(t){return function(t,e,s){const n=t.isHelm()?y(t,e):t.getSplitter()(e);return p(t,n,s)}(s,t,e)};throw new Error}constructor(t){if(this._splitter=null,this._splitted=null,this._stats=null,this._maxLength=null,this._posList=null,t.type!==n.TYPE.STRING)throw new Error(`Unexpected column type '${t.type}', must be '${n.TYPE.STRING}'.`);this._column=t;const e=this._column.getTag(n.TAGS.UNITS);if(null==e)throw new Error("Units are not specified in column");if(this._units=e,this._notation=this.getNotation(),this._defaultGapSymbol=this.isFasta()?m[o.r2.FASTA]:this.isHelm()?m[o.r2.HELM]:m[o.r2.SEPARATOR],!this.column.tags.has("aligned")||!this.column.tags.has("alphabet")||!this.column.tags.has(".alphabetIsMultichar")&&!this.isHelm()&&"UN"===this.alphabet)if(this.isFasta())d.setUnitsToFastaColumn(this);else if(this.isSeparator()){const e=t.getTag("separator");d.setUnitsToSeparatorColumn(this,e)}else{if(!this.isHelm())throw new Error(`Unexpected units '${this.column.getTag(n.TAGS.UNITS)}'.`);d.setUnitsToHelmColumn(this)}if(!this.column.tags.has(".alphabetIsMultichar"))if(this.isHelm())this.column.setTag(".alphabetIsMultichar","true");else if(["UN"].includes(this.alphabet))throw new Error(`For column '${this.column.name}' of alphabet '${this.alphabet}' tag '.alphabetIsMultichar' is mandatory.`)}static getOrCreate(t){let e=t.temp[u.uh];return e||(e=t.temp[u.uh]=new d(t)),e}}function g(t,e){const s=new Array(e.length);for(const[n,r]of i().enumerate(e)){let i=n;t.isHelm()&&(i=n.replace(h.pU,"$1")),t.isGap(i)?i=m[o.r2.FASTA]:i.length>1&&(i="["+e[r]+"]"),s[r]=i}return s.join("")}function p(t,e,s){const n=new Array(e.length);for(const[s,r]of i().enumerate(e)){let e=s;t.isGap(e)&&(e=m[o.r2.SEPARATOR]),n[r]=e}return n.map((t=>t??"")).join(s)}function f(t,e,s){const[n,r,a,l]=t.getHelmWrappers();return`${n}${i()(e).map((e=>{let n=e;return n=t.isGap(n)?m[o.r2.HELM]:s?n.replace(h.pU,"$1"):1==e.length?`${r}${e}${a}`:`${r}[${e}]${a}`,n})).toArray().join(".")}${l}`}function y(t,e){const s=t.getSplitter()(e),n=new Array(s.length),r=e.startsWith("DNA"),o=e.startsWith("RNA");for(const[t,e]of i().enumerate(s)){let s=t;(r||o)&&(s=s.replace(h.pU,"$1"),s=s===h.$3?null:s),n[e]=s}return n.filter((t=>null!==t))}},9298:(t,e,s)=>{"use strict";s.d(e,{Ct:()=>l,DX:()=>n,ES:()=>r,dE:()=>a,iD:()=>o,vS:()=>h,vw:()=>i});var n,r,i,o,a,l,c=s(976);!function(t){t.tooltipWebLogo=".tooltipWebLogo"}(n||(n={})),function(t){t.Entropy="Entropy",t.full="100%"}(r||(r={})),function(t){t.TOP="top",t.MIDDLE="middle",t.BOTTOM="bottom"}(i||(i={})),function(t){t.LEFT="left",t.CENTER="center",t.RIGHT="right"}(o||(o={})),function(t){t.AUTO="auto",t.ON="on",t.OFF="off"}(a||(a={})),function(t){t.Filtered="Filtered",t.Selected="Selected"}(l||(l={}));const h=new class{constructor(){this.sequenceColumnName=null,this.valueAggrType=c.AGG.TOTAL_COUNT,this.valueColumnName="Activity",this.startPositionName=null,this.endPositionName=null,this.skipEmptySequences=!0,this.skipEmptyPositions=!1,this.shrinkEmptyTail=!0,this.backgroundColor=4294967295,this.positionHeight=r.Entropy,this.positionWidth=16,this.verticalAlignment=i.MIDDLE,this.horizontalAlignment=o.CENTER,this.fixWidth=!1,this.fitArea=!0,this.minHeight=50,this.maxHeight=100,this.showPositionLabels=!0,this.positionMarginState=a.AUTO,this.positionMargin=0,this.filterSource=l.Filtered}}},922:(t,e,s)=>{"use strict";s.d(e,{_:()=>l});class n{constructor(t){this.init(t)}init(t){this.fileContent=t.replace(/\r/g,""),this._atomCount=void 0,this._atomTypes=void 0,this._bondCount=void 0,this._bondTypes=void 0,this.xyzAtomCoordinates=void 0,this._pairsOfBondedAtoms=void 0}get atomCount(){return void 0===this._atomCount&&this.setAtomAndBondCounts(),this._atomCount}get bondCount(){return void 0===this._bondCount&&this.setAtomAndBondCounts(),this._bondCount}get x(){var t;return null!==(t=this.xyzAtomCoordinates)&&void 0!==t||(this.xyzAtomCoordinates=this.parseAtomCoordinates()),this.xyzAtomCoordinates.x}get y(){var t;return null!==(t=this.xyzAtomCoordinates)&&void 0!==t||(this.xyzAtomCoordinates=this.parseAtomCoordinates()),this.xyzAtomCoordinates.y}get z(){var t;return null!==(t=this.xyzAtomCoordinates)&&void 0!==t||(this.xyzAtomCoordinates=this.parseAtomCoordinates()),this.xyzAtomCoordinates.z}get atomTypes(){var t;return null!==(t=this._atomTypes)&&void 0!==t||(this._atomTypes=this.parseAtomTypes()),this._atomTypes}get pairsOfBondedAtoms(){var t;return null!==(t=this._pairsOfBondedAtoms)&&void 0!==t||(this._pairsOfBondedAtoms=this.parseBondedAtomPairs()),this._pairsOfBondedAtoms}get bondTypes(){var t;return null!==(t=this._bondTypes)&&void 0!==t||(this._bondTypes=this.parseBondTypes()),this._bondTypes}setAtomAndBondCounts(){const{atomCount:t,bondCount:e}=this.parseAtomAndBondCounts();this._atomCount=t,this._bondCount=e}getNextColumnIdx(t){for(;!this.isWhitespace(t);)++t;for(;this.isWhitespace(t);)++t;return t}shiftIdxToSpecifiedColumn(t,e){let s=t;const n=this.isWhitespace(s)?e:e-1;for(let t=0;t<n;t++)s=this.getNextColumnIdx(s);return s}parseAtomTypes(){const t=this.atomCount,e=new Array(t);let s=this.getAtomBlockIdx();for(let n=0;n<t;n++)s=this.shiftIdxToAtomType(s),e[n]=this.parseAtomType(s),s=this.getNextLineIdx(s);return e}parseAtomCoordinates(){const t=new Float32Array(this.atomCount),e=new Float32Array(this.atomCount),s=new Float32Array(this.atomCount);let n=this.getAtomBlockIdx();for(let r=0;r<this.atomCount;r++){n=this.shiftIdxToXColumn(n);for(const i of[t,e,s])i[r]=this.parseFloatValue(n),n=this.getNextColumnIdx(n);n=this.getNextLineIdx(n)}return{x:t,y:e,z:s}}parseBondedAtomPairs(){const t=new Array(this.bondCount);let e=this.getBondBlockIdx();for(let s=0;s<this.bondCount;s++){e=this.shiftIdxToBondedAtomsPair(e);const n=new Uint16Array(2);n[0]=this.parseIntValue(e),e=this.getNextColumnIdx(e),n[1]=this.parseIntValue(e),t[s]=n,e=this.getNextLineIdx(e)}return t}parseBondTypes(){const t=this.bondCount,e=new Uint16Array(t);let s=this.getBondBlockIdx();for(let n=0;n<t;n++)s=this.shiftIdxToBondType(s),e[n]=this.parseIntValue(s),s=this.getNextLineIdx(s);return e}isWhitespace(t){const e=this.fileContent[t];return" "===e||"\t"===e}getNextLineIdx(t){return"\n"!==this.fileContent[t]?this.fileContent.indexOf("\n",t)+1:t+1}parseFloatValue(t){return this.parseNumericValue(parseFloat,t)}parseIntValue(t){return this.parseNumericValue(parseInt,t)}parseNumericValue(t,e){let s=e+1;for(;!this.isWhitespace(s);)++s;return t(this.fileContent.substring(e,s))}}class r extends n{constructor(t){super(t),this.init(t)}init(t){super.init(t)}parseAtomType(t){let e=t,s=e;return this.isQuote(e)?(s=this.getNextIdenticalChar(e),e++):s=this.fileContent.indexOf(" ",s),this.fileContent.substring(e,s)}isQuote(t){const e=this.fileContent[t].charCodeAt(0);return 39===e||34===e}getNextIdenticalChar(t){const e=this.fileContent[t];return e?this.fileContent.indexOf(e,t+1):-1}isQuery(){return this.isQueryOrFragment(((t,e)=>{return 39===t||34===t||76===t&&!((s=this.fileContent.charCodeAt(e+1))>64&&s<91||s>96&&s<123);var s}))}isFragment(){return this.isQueryOrFragment((t=>82===t||42===t))}isQueryOrFragment(t){const e=this.atomCount;let s=this.getAtomBlockIdx();for(let n=0;n<e;n++){if(s=this.shiftIdxToAtomType(s),t(this.fileContent.charCodeAt(s),s))return!0;s=this.getNextLineIdx(s)}return!1}}var i;!function(t){t.HEADER="V2000",t[t.NUM_OF_HEADER_LINES=3]="NUM_OF_HEADER_LINES",t[t.NUM_OF_COUNTS_DIGITS=3]="NUM_OF_COUNTS_DIGITS",t[t.ATOM_TYPE_COL=4]="ATOM_TYPE_COL",t[t.FIRST_BONDED_ATOM_COL=1]="FIRST_BONDED_ATOM_COL",t[t.BOND_TYPE_COL=3]="BOND_TYPE_COL",t[t.RGP_SHIFT=8]="RGP_SHIFT",t.RGP_LINE="M RGP",t.A_LINE="A ",t.END="M END"}(i||(i={}));class o extends r{constructor(t){super(t)}static validate(t){return-1!==t.indexOf(i.HEADER)&&-1!==t.indexOf(i.END)}shiftIdxToAtomType(t){return this.shiftIdxToSpecifiedColumn(t,i.ATOM_TYPE_COL)}getCountsLineIdx(){let t=0;for(let e=0;e<i.NUM_OF_HEADER_LINES;++e)t=this.getNextLineIdx(t);return t}getAtomBlockIdx(){let t=this.getCountsLineIdx();return t=this.getNextLineIdx(t),t}shiftIdxToXColumn(t){return this.getNextColumnIdx(t)}shiftIdxToBondedAtomsPair(t){return this.shiftIdxToSpecifiedColumn(t,i.FIRST_BONDED_ATOM_COL)}shiftIdxToBondType(t){return this.shiftIdxToSpecifiedColumn(t,i.BOND_TYPE_COL)}getBondBlockIdx(){let t=this.getAtomBlockIdx();for(let e=0;e<this.atomCount;e++)t=this.getNextLineIdx(t);return t}parseAtomAndBondCounts(){let t=this.getCountsLineIdx(),e=t+i.NUM_OF_COUNTS_DIGITS;const s=parseInt(this.fileContent.substring(t,e));return t=e,e+=i.NUM_OF_COUNTS_DIGITS,{atomCount:s,bondCount:parseInt(this.fileContent.substring(t,e))}}}class a extends r{constructor(t){super(t),this.init(t)}shiftIdxToAtomType(t){return this.shiftIdxToSpecifiedColumn(t,4)}getCountsLineIdx(){return this.fileContent.indexOf("M V30 COUNTS ")}getAtomBlockIdx(){let t=this.fileContent.indexOf("M V30 BEGIN ATOM");return t=this.getNextLineIdx(t),t}shiftIdxToXColumn(t){let e=this.shiftIdxToAtomType(t);return this.isQuote(e)?(e=this.getNextIdenticalChar(e),e=this.getNextColumnIdx(e),e):this.shiftIdxToSpecifiedColumn(t,5)}shiftIdxToBondedAtomsPair(t){return this.shiftIdxToSpecifiedColumn(t,5)}shiftIdxToBondType(t){return this.shiftIdxToSpecifiedColumn(t,4)}getBondBlockIdx(){return this.getNextLineIdx(this.fileContent.indexOf("M V30 BEGIN BOND"))}static validate(t){return-1!==t.indexOf("V3000")&&-1!==t.indexOf("M END")}parseAtomAndBondCounts(){let t=this.fileContent.indexOf("M V30 COUNTS ")+14,e=this.fileContent.indexOf(" ",t+1);const s=parseInt(this.fileContent.substring(t,e));return t=e+1,e=this.fileContent.indexOf(" ",t+1),{atomCount:s,bondCount:parseInt(this.fileContent.substring(t,e))}}}class l{constructor(){}static getInstance(t){if(o.validate(t))return new o(t);if(a.validate(t))return new a(t);throw new Error("Malformed molfile")}}},2669:(t,e,s)=>{"use strict";s.d(e,{m:()=>n});class n{constructor(t=!0,e=!0){const n=navigator.hardwareConcurrency;this._workerCount=t?Math.max(n-2,1):1,this._workers=new Array(this._workerCount).fill(null).map((()=>new Worker(new URL(s.p+s.u(868),s.b)))),this._terminateOnComplete=e}async calc(t,e,s=!0,n){return new Promise((async(r,i)=>{try{const i=t.length,o=new Array(this._workerCount),a=i*(i-1)/2;this._workerCount=Math.min(this._workerCount,a);const l=a/this._workerCount,c=new Float32Array(a);let h=0,u=1,m=0,d=Number.MIN_VALUE;for(let s=0;s<this._workerCount;s++){const r=Math.floor(s*l),g=s===this._workerCount-1?a:Math.floor((s+1)*l),p=h,f=u;s!==this._workerCount-1&&(h=i-2-Math.floor(Math.sqrt(-8*g+4*i*(i-1)-7)/2-.5),u=g-i*h+Math.floor((h+1)*(h+2)/2)),this._workers[s].postMessage({values:t,fnName:e,startRow:p,startCol:f,chunckSize:g-r,opts:n}),o[s]=new Promise(((t,e)=>{this._workers[s].onmessage=({data:{error:n,distanceMatrixData:i,min:o,max:a}})=>{this._terminateOnComplete&&this._workers[s].terminate(),n?e(n):(c.set(i,r),o<m&&(m=o),a>d&&(d=a),t())}}))}await Promise.all(o),s&&c.forEach(((t,e)=>{c[e]=(t-m)/(d-m)})),r(c)}catch(t){i(t)}}))}terminate(){this._workers.forEach((t=>t.terminate()))}}},3914:(t,e,s)=>{"use strict";s.d(e,{H:()=>r});var n=s(6814);class r{get data(){return this._data}get size(){return this._size}constructor(t,e){if(null==e){if(null==t)throw new Error("Arguments error: data or size is required.");if(this._data=t,this._size=(1+Math.sqrt(1+8*this._data.length))/2,this._size!=Math.floor(this._size))throw new Error(`Invalid data length ${this._data.length} leads to non integer size ${this._size}`)}else{this._size=e;const s=e*(e-1)/2;if(t){if(t.length!=s)throw new Error(`Invalid data length. Observations size ${e} requires data length ${s}.`);this._data=t}else this._data=new Float32Array(s)}}_linearizeIJ(t,e){if(!(t<e))throw new Error("i must be less than j");return this._size*t+e-Math.floor((t+2)*(t+1)/2)}get(t,e){return t==e?0:t<e?this._data[this._linearizeIJ(t,e)]:this._data[this._linearizeIJ(e,t)]}set(t,e,s){this._data[this._linearizeIJ(t,e)]=s}static calc(t,e){const s=t.length,i=new r(void 0,s);for(let r=0;r<s;r++)for(let o=r+1;o<s;o++)i.set(r,o,(0,n.k)(t[r])||(0,n.k)(t[o])?1:e(t[r],t[o]));return i}square(){for(let t=0;t<this._data.length;t++)this._data[t]=this._data[t]**2}add(t){if(this._size!==t._size)throw new Error(`Matrices must have the same size. This size: ${this._size}, other size: ${t._size}`);for(let e=0;e<this._data.length;e++)this._data[e]+=t._data[e]}sqrt(){for(let t=0;t<this._data.length;t++)this._data[t]=Math.sqrt(this._data[t])}normalize(){let t=0,e=this._data[0];for(let s=0;s<this._data.length;s++)this._data[s]<t&&(t=this._data[s]),this._data[s]>e&&(e=this._data[s]);const s=e-t;for(let n=0;n<this._data.length;n++)this._data[n]=0===s?this._data[n]-t:(this._data[n]-t)/(e-t)}}},6254:(t,e,s)=>{"use strict";function n(t,e){const s=r(e);function n(t,e){const n=Number(t),r=Number(e);return s(n,r)}const i={get:(t,s,r)=>"length"===s?e:new Proxy(t,function(t){return{get:(e,s,r)=>t===s?0:e[Number(t)>Number(s)?n(s,t):n(t,s)]}}(s))};return new Proxy(t,i)}function r(t){return(e,s)=>t*e+s-Math.floor((e+2)*(e+1)/2)}s.d(e,{_:()=>n,y:()=>r})},2590:(t,e,s)=>{"use strict";s.d(e,{_:()=>o});var n=s(5697),r=s(6361),i=s(6814);class o{constructor(){this._workerCount=Math.max(navigator.hardwareConcurrency-2,1)}async calc(t,e,n,r={}){const i=t.length*(t.length-1)/2,o=Math.floor(i/this._workerCount),a=t.length>2e4?await this.getMinimalThreshold(t,e,r):0;n<a&&(console.log(`using threshold ${a}`),n=a),r.threshold=n;const l=new Array(this._workerCount),c=new Array(this._workerCount).fill(null).map((()=>new Worker(new URL(s.p+s.u(381),s.b))));for(let s=0;s<this._workerCount;s++)l[s]=new Promise(((a,l)=>{const h=s*o,u=s===this._workerCount-1?i:(s+1)*o;u<=h&&a({i:new Int32Array(0),j:new Int32Array(0),distance:new Float32Array(0),idx:s}),c[s].postMessage({values:t,startIdx:h,endIdx:u,threshold:n,fnName:e,opts:r}),c[s].onmessage=({data:{error:t,i:e,j:n,distance:r}})=>{t?(c[s].terminate(),l(t)):(c[s].terminate(),a({i:e,j:n,distance:r,idx:s}))}}));const h=await Promise.all(l),u=h.reduce(((t,e)=>t+e.i.length),0),m=new Int32Array(u),d=new Int32Array(u),g=new Float32Array(u);let p=0;for(const t of h)m.set(t.i,p),d.set(t.j,p),g.set(t.distance,p),p+=t.i.length;return{i:m,j:d,distance:g}}async getMinimalThreshold(t,e,n={}){const r=new Array(this._workerCount).fill(null).map((()=>new Worker(new URL(s.p+s.u(770),s.b)))),i=t.slice();for(let t=i.length-1;t>0;t--){const e=Math.floor(Math.random()*(t+1));[i[t],i[e]]=[i[e],i[t]]}try{const s=t.length*(t.length-1)/2,o=Math.floor(s/this._workerCount),a=Math.floor(Math.min(s/1e3,1e6)/this._workerCount),l=new Array(this._workerCount);for(let t=0;t<this._workerCount;t++)l[t]=new Promise(((l,c)=>{const h=t*o,u=t===this._workerCount-1?s:(t+1)*o;r[t].postMessage({values:i,startIdx:h,endIdx:u,sampleLength:a,fnName:e,opts:n}),r[t].onmessage=({data:{error:e,distance:s}})=>{r[t].terminate(),e?c(e):l({distance:s})}}));const c=await Promise.all(l),h=c.reduce(((t,e)=>t+e.distance.length),0),u=new Float32Array(h);let m=0;for(const t of c)u.set(t.distance,m),m+=t.distance.length;return u.sort(),1-u[Math.floor(7e7/s*u.length)]}catch(t){return r?.forEach((t=>t?.terminate())),console.error(t),.5}}static calcSync(t,e,s,o){const a=[],l=[],c=[];let h=0,u=0,m=0;const d=t.length*(t.length-1)/2;for(;h<d;){const d=(0,i.k)(t[u])||(0,i.k)(t[m])?1:s(t[u],t[m]);(Object.values(r.gk).some((t=>t===e))?(0,n.Om)(d):1-d)>=o&&(a.push(u),l.push(m),c.push(d)),h++,m++,m===t.length&&(u++,m=u+1)}return{i:new Int32Array(a),j:new Int32Array(l),distance:new Float32Array(c)}}}},6814:(t,e,s)=>{"use strict";s.d(e,{k:()=>n});const n=t=>null==t},5697:(t,e,s)=>{"use strict";s.d(e,{Dz:()=>w,FV:()=>c,KR:()=>l,MI:()=>T,NB:()=>g,Om:()=>C,UX:()=>d,WI:()=>m,Zd:()=>u,_h:()=>h,aW:()=>f,bX:()=>S,eo:()=>A,fX:()=>b,kg:()=>o,s:()=>p,yU:()=>y});var n=s(9657),r=s(1040),i=s(489);r.gk.Tanimoto,r.gk.Dice,r.gk.Asymmetric,r.gk.BraunBlanquet,r.gk.Cosine,r.gk.Kulczynski,r.gk.McConnaughey,r.gk.RogotGoldberg,r.gk.Russel,r.gk.Sokal,r.gk.Hamming,r.gk.Euclidean,r.gk.Tanimoto,r.gk.Dice,r.gk.Asymmetric,r.gk.BraunBlanquet,r.gk.Cosine,r.gk.Kulczynski,r.gk.McConnaughey,r.gk.RogotGoldberg,r.gk.Russel,r.gk.Sokal,r.gk.Hamming,r.gk.Euclidean;const o=[r.gk.Tanimoto,r.gk.Dice,r.gk.Cosine];function a(t,e){const s=t.trueCount()+e.trueCount();if(0==s)return 1;const n=t.andWithCountBits(e,!0);return n/(s-n)}function l(t,e){return A(a(t,e))}function c(t,e){return A(a(new n.Z(t,32*t.length),new n.Z(e,32*e.length)))}function h(t,e){return A(function(t,e){const s=t.trueCount()+e.trueCount();return 0==s?0:2*t.andWithCountBits(e,!0)/s}(t,e))}function u(t,e){return A(function(t,e){const s=t.trueCount()*e.trueCount();return 0==s?0:t.andWithCountBits(e,!0)/Math.sqrt(s)}(t,e))}function m(t,e){return Math.sqrt(t.trueCount()+e.trueCount()-2*t.andWithCountBits(e,!0))}function d(t,e){return t.trueCount()+e.trueCount()-2*t.andWithCountBits(e,!0)}function g(t,e){return A(function(t,e){const s=t.trueCount()+e.trueCount(),n=t.andWithCountBits(e,!0);return n/(2*s-3*n)}(t,e))}function p(t,e){return A(function(t,e){const s=t.trueCount()+e.trueCount(),n=t.trueCount()*e.trueCount();return 0==n?0:t.andWithCountBits(e,!0)*s/(2*n)}(t,e))}function f(t,e){return A(function(t,e){const s=t.trueCount()+e.trueCount(),n=t.trueCount()*e.trueCount();return 0==n?0:(t.andWithCountBits(e,!0)*s-n)/n}(t,e))}function y(t,e){return A(function(t,e){const s=Math.min(t.trueCount(),e.trueCount());return 0==s?0:t.andWithCountBits(e,!0)/s}(t,e))}function w(t,e){return A(function(t,e){const s=Math.max(t.trueCount(),e.trueCount());return 0==s?0:t.andWithCountBits(e,!0)/s}(t,e))}function b(t,e){return A(function(t,e){return 0==t.length?0:t.andWithCountBits(e,!0)/t.length}(t,e))}function T(t,e){return A(function(t,e){const s=t.andWithCountBits(e,!0),n=t.countBits(!0)+e.countBits(!0),r=t.length,i=r-n+s;return s==r||i==r?1:s/n+i/(2*r-n)}(t,e))}function C(t){return 1/(1+t)}function A(t){return 0===t?3402823e32:1/t-1}function S(t,e){return Math.abs(t-e)}r.gk.Tanimoto,r.gk.Asymmetric,r.gk.Cosine,r.gk.Sokal,i.U.HAMMING,i.U.LEVENSHTEIN,i.U.MONOMER_CHEMICAL_DISTANCE,i.U.NEEDLEMANN_WUNSCH},779:(t,e,s)=>{"use strict";function n(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,s=t.scoringMatrix,n=Math.min(...Object.keys(e).map((t=>t.charCodeAt(0))))+1,r=new Float32Array((s.length+n)*(s.length+n));return Object.entries(e).forEach((([t,n])=>{const i=s[n];Object.entries(e).forEach((([e,n])=>{r[t.charCodeAt(0)*s.length+e.charCodeAt(0)]=i[n]}))})),(t,e)=>r[t.charCodeAt(0)*s.length+e.charCodeAt(0)]}(),s=t?.threshold??0;return(t,n)=>{let r=0;const i=t.length,o=n.length,a=Math.max(i,o)*(1-s);i!==o&&(r=Math.abs(i-o));let l=0;for(let s=0;s<Math.min(i,o);s++)if(t[s]!==n[s]&&(l+=e(t[s],n[s]),l>a))return 1;return l+=r,l/=Math.max(i,o),l}}s.d(e,{j:()=>n})},489:(t,e,s)=>{"use strict";s.d(e,{U:()=>n.U,o:()=>n.o});var n=s(5540)},458:(t,e,s)=>{"use strict";s.d(e,{r:()=>r});var n=s(1811);function r(){return(t,e)=>(0,n.T)(t,e)/Math.max(t.length,e.length)}},5540:(t,e,s)=>{"use strict";s.d(e,{U:()=>n,o:()=>a});var n,r=s(779),i=s(458),o=s(6683);!function(t){t.HAMMING="Hamming",t.LEVENSHTEIN="Levenshtein",t.NEEDLEMANN_WUNSCH="Needlemann-Wunsch",t.MONOMER_CHEMICAL_DISTANCE="Monomer chemical distance"}(n||(n={}));const a={[n.HAMMING]:r.j,[n.LEVENSHTEIN]:i.r,[n.NEEDLEMANN_WUNSCH]:o.n,[n.MONOMER_CHEMICAL_DISTANCE]:r.j}},6683:(t,e,s)=>{"use strict";s.d(e,{n:()=>r});const n={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}};function r(t){const e=new Uint16Array(65536),{gapOpen:s,gapExtend:r,scoringMatrix:i,alphabetIndexes:o}={...n,...t};Object.entries(o).forEach((([t,s])=>e[t.charCodeAt(0)]=s));const a=[new Float32Array(1e4),new Float32Array(1e4)];return(t,n)=>{const o=new Array(t.length+1).fill(!1),l=new Array(t.length+1).fill(!1);let c=0,h=1;for(let e=1;e<t.length+1;e++)a[0][e]=-s-(e-1)*r,a[1][e]=0;for(let u=1;u<n.length+1;u++){a[h][0]=-s-(u-1)*r;for(let m=1;m<t.length+1;m++){const d=a[c][m-1]+i[e[t.charCodeAt(m-1)]][e[n.charCodeAt(u-1)]],g=a[c][m]-(o[m]?r:s),p=a[h][m-1]-(l[m-1]?r:s);a[h][m]=Math.max(d,p,g),a[h][m]===d?(o[m]=!1,l[m]=!1):a[h][m]===p?(o[m]=!1,l[m]=!0):(o[m]=!0,l[m]=!1)}c=h,h=(h+1)%2}const u=Math.max(t.length,n.length);return(u-a[c][t.length])/u}}},116:(t,e,s)=>{"use strict";var n;s.d(e,{AL:()=>n}),s(7659),s(3659),s(850),s(9006),s(7861),s(9657),s(1729),s(2669),s(3914),s(6254),s(2590),s(952),function(t){t.UMAP="UMAP",t.T_SNE="t-SNE"}(n||(n={}))},9006:(t,e,s)=>{"use strict";s.d(e,{Ek:()=>l,a1:()=>a,nR:()=>c});var n=s(850),r=s(4588),i=s(6254),o=s(2669);class a{constructor(t){this.steps=t?.steps??0,this.cycles=t?.cycles??1e6,this.cutoff=t?.cutoff??0,this.lambda=t?.lambda??2,this.dlambda=t?.dlambda??.01,this.lambda2=this.lambda/2,this.dlambda2=this.dlambda/2,this.epsilon=t?.epsilon??1e-10,this.distanceFunction=t?.distance??n.dP,this.distance=new Float32Array,this.distanceFunctionName=t?.distanceFunctionName}async initDistance(t){this.dmIndexFunct=(0,i.y)(t.length);const e=new o.m(!0,!1);this.distance=await e.calc(t,this.distanceFunctionName),e.terminate()}calcDistance(t,e,s){return this.distance[this.dmIndexFunct(e,s)]}async embed(t){const e=t.length,s=(0,n.kO)(e,a.dimension,40);let i=this.lambda2;0===this.steps&&(this.steps=t.length-1),await this.initDistance(t);for(let o=0;o<this.cycles;++o){for(let o=0;o<this.steps;++o){const o=(0,r.I)(e);let a=(0,r.I)(e);for(;o==a;)a=(0,r.I)(e);const l=s[o],c=s[a],h=this.calcDistance(t,o,a),u=(0,n.dP)(l,c);if(0==this.cutoff||h<=this.cutoff||u<h){const t=i*(h-u)/(u+this.epsilon),e=(0,n.On)(l,c,-1);s[o]=(0,n.On)(l,e,t),s[a]=(0,n.On)(c,e,-t)}}if(i-=this.dlambda2,i<=0)break}return s}}a.dimension=2;class l extends a{async embed(t){const e=t.length,s=(0,n.kO)(e,l.dimension,40);let i=this.lambda;await this.initDistance(t);for(let o=0;o<this.cycles;++o){const o=(0,r.I)(e),a=s[o];for(let r=0;r<e;++r){if(o==r)continue;const e=s[r],l=this.calcDistance(t,o,r),c=(0,n.dP)(a,e);if(0==this.cutoff||l<=this.cutoff||c<l){const t=i*(l-c)/(c+this.epsilon),o=(0,n.On)(a,e,-1);s[r]=(0,n.On)(e,o,-t)}}if(i-=this.dlambda,i<=0)break}return s}}class c extends a{constructor(t){super(t),this.cycles=t?.cycles??1e3,this.steps=t?.steps??1e5,this.radiusPercent=t?.radiusPercent??1,this.maxDistance=t?.maxDistance??null,this.maxDistanceSteps=t?.maxDistanceSteps??null}async embed(t){const e=t.length,s=(0,n.kO)(e,c.dimension,40);if(await this.initDistance(t),null===this.maxDistanceSteps&&(this.maxDistanceSteps=e*Math.floor((e-1)/2)),null===this.maxDistance){this.maxDistance=-1e37;for(let s=0;s<this.maxDistanceSteps;s++){const s=(0,r.I)(e);let n=(0,r.I)(e);for(;s==n;)n=(0,r.I)(e);const i=this.calcDistance(t,s,n);i>this.maxDistance&&(this.maxDistance=i)}}let i=this.lambda;const o=0==this.radiusPercent?this.maxDistance:this.maxDistance*this.radiusPercent;for(let a=0;a<this.cycles;++a){for(let a=0;a<this.steps;++a){const a=(0,r.I)(e);let l=(0,r.I)(e);for(;a==l;)l=(0,r.I)(e);const c=s[a],h=s[l],u=this.calcDistance(t,a,l),m=(0,n.dP)(c,h);if(u<=o||m<u){const t=.5*i*(u-m)/(m+this.epsilon),e=(0,n.On)(c,h,-1);s[a]=(0,n.On)(c,e,t),s[l]=(0,n.On)(h,e,-t)}}if(i-=(this.lambda-this.dlambda)/(this.cycles-1),i<this.dlambda)break}return s}}},1040:(t,e,s)=>{"use strict";var n,r,i,o,a,l;s.d(e,{CF:()=>r,Qe:()=>a,W:()=>n,Yc:()=>l,gd:()=>o,gk:()=>i}),function(t){t.Levenshtein="Levenshtein",t.JaroWinkler="Jaro-Winkler",t.Manhattan="Manhattan"}(n||(n={})),function(t){t.Euclidean="Euclidean"}(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"}(i||(i={})),function(t){t.TanimotoIntArray="TanimotoIntArray"}(o||(o={})),function(t){t.Vector="Vector",t.String="String",t.BitArray="BitArray",t.MacroMolecule="MacroMolecule",t.Number="Number",t.IntArray="IntArray"}(a||(a={})),function(t){t.NumericDistance="NumericDistance"}(l||(l={}))},6361:(t,e,s)=>{"use strict";s.d(e,{gk:()=>n.gk});var n=s(1040);s(7861)},7861:(t,e,s)=>{"use strict";s.d(e,{sQ:()=>f});var n=s(1811),r=s(3979),i=s(5697),o=s(850),a=s(489),l=s(1040);const c={[l.CF.Euclidean]:o.dP},h={[l.W.Levenshtein]:n.T,[l.W.JaroWinkler]:r.H$,[l.W.Manhattan]:function(t,e){if(t.length!==e.length)return 1;{let s=0;for(let n=1;n<t.length;n++)s+=t[n]==e[n]?0:1;return s/t.length}}},u={[l.gk.Tanimoto]:i.KR,[l.gk.Dice]:i._h,[l.gk.Asymmetric]:i.yU,[l.gk.BraunBlanquet]:i.Dz,[l.gk.Cosine]:i.Zd,[l.gk.Kulczynski]:i.s,[l.gk.McConnaughey]:i.aW,[l.gk.RogotGoldberg]:i.MI,[l.gk.Russel]:i.fX,[l.gk.Sokal]:i.NB,[l.gk.Hamming]:i.UX,[l.gk.Euclidean]:i.WI},m={[l.gd.TanimotoIntArray]:i.FV},d={[l.Yc.NumericDistance]:i.bX},g={[l.Qe.Vector]:{[l.CF.Euclidean]:c[l.CF.Euclidean]},[l.Qe.String]:{[l.W.Levenshtein]:h[l.W.Levenshtein],[l.W.JaroWinkler]:h[l.W.JaroWinkler],[l.W.Manhattan]:h[l.W.Manhattan]},[l.Qe.BitArray]:{[l.gk.Tanimoto]:u[l.gk.Tanimoto],[l.gk.Dice]:u[l.gk.Dice],[l.gk.Asymmetric]:u[l.gk.Asymmetric],[l.gk.BraunBlanquet]:u[l.gk.BraunBlanquet],[l.gk.Cosine]:u[l.gk.Cosine],[l.gk.Kulczynski]:u[l.gk.Kulczynski],[l.gk.McConnaughey]:u[l.gk.McConnaughey],[l.gk.RogotGoldberg]:u[l.gk.RogotGoldberg],[l.gk.Russel]:u[l.gk.Russel],[l.gk.Sokal]:u[l.gk.Sokal]},[l.Qe.MacroMolecule]:{[a.U.HAMMING]:a.o[a.U.HAMMING],[a.U.LEVENSHTEIN]:a.o[a.U.LEVENSHTEIN],[a.U.NEEDLEMANN_WUNSCH]:a.o[a.U.NEEDLEMANN_WUNSCH],[a.U.MONOMER_CHEMICAL_DISTANCE]:a.o[a.U.MONOMER_CHEMICAL_DISTANCE]},[l.Qe.Number]:{[l.Yc.NumericDistance]:d[l.Yc.NumericDistance]},[l.Qe.IntArray]:{[l.gd.TanimotoIntArray]:m[l.gd.TanimotoIntArray]}},p=Object.keys(g).reduce(((t,e)=>{for(const s of Object.keys(g[e]))t[s]=e;return t}),{});function f(t){return"BitArray"==p[t]}},6490:(t,e,s)=>{"use strict";s.d(e,{M6:()=>i,SB:()=>l,Sr:()=>a,VA:()=>r,XV:()=>o,oi:()=>c,w5:()=>u});var n=s(9533);function r(t,e){const s=s=>n.cS(t).map((()=>n.VI(e,s))),r=[];return r.push(s(-1)),r.push(s(1/0)),r.push(s(0)),r}function i(t,e,s){const r=n.ll(t);for(let i=0;i<t;i++){let t=!0,o=0;for(;t;){o=n.AH(e,s);let a=!1;for(let t=0;t<i;t++)if(o===r[t]){a=!0;break}a||(t=!1)}r[i]=o}return r}function o(t,e,s,n,r){e=Math.floor(e);const i=t[0][e],o=t[1][e];if(t[2][e],s>=o[0])return 0;for(let t=0;t<i.length;t++)if(n===i[t])return 0;return a(t,e,s,n,r)}function a(t,e,s,n,r){const i=t[0][e],o=t[1][e],a=t[2][e];if(s>=o[0])return 0;o[0]=s,i[0]=n,a[0]=r;let l=0,c=0;for(;;){const e=2*l+1,n=e+1,r=t[0][0].length;if(e>=r)break;if(n>=r){if(!(o[e]>s))break;c=e}else if(o[e]>=o[n]){if(!(s<o[e]))break;c=e}else{if(!(s<o[n]))break;c=n}o[l]=o[c],i[l]=i[c],a[l]=a[c],l=c}return o[l]=s,i[l]=n,a[l]=r,1}function l(t,e,s,i,a){const l=r(e,i);for(let r=0;r<e;r++)for(let e=0;e<s;e++){if(t[0][r][e]<0)continue;const s=t[0][r][e],i=t[2][r][e],c=n.mH(a);o(l,r,c,s,i),o(l,s,c,r,i),t[2][r][e]=0}return l}function c(t){const e=t[0],s=t[1];for(let t=0;t<e.length;t++){const n=e[t],r=s[t];for(let t=0;t<n.length-1;t++){const e=n.length-t-1,s=r.length-t-1,i=n[0];n[0]=n[e],n[e]=i;const o=r[0];r[0]=r[s],r[s]=o,h(r,n,s,0)}}return{indices:e,weights:s}}function h(t,e,s,n){for(;2*n+1<s;){const r=2*n+1,i=r+1;let o=n;if(t[o]<t[r]&&(o=r),i<s&&t[o]<t[i]&&(o=i),o===n)break;{const s=t[n];t[n]=t[o],t[o]=s;const r=e[n];e[n]=e[o],e[o]=r,n=o}}}function u(t,e){const s=t[0][e],n=t[1][e],r=t[2][e];let i=1/0,o=-1;for(let t=0;t>s.length;t++)1===r[t]&&n[t]<i&&(i=n[t],o=t);return o>=0?(r[o]=0,Math.floor(s[o])):-1}},1729:(t,e,s)=>{"use strict";s.d(e,{u:()=>n.uB});var n=s(3585)},952:(t,e,s)=>{"use strict";function n(t,e,s,n,r){function i(t,e,s,n){if(s>t[t.length-1])return;let r=t.length-2;for(r=t.length-2;r>=0&&!(s>t[r]);r--);t.splice(t.length-1,1),t.splice(r+1,0,s),e.splice(e.length-1,1),e.splice(r+1,0,n)}console.time("knnGraph");const o=new Array(r).fill(null).map((()=>new Array(n).fill(1))),a=new Array(r).fill(null).map((()=>new Array(n).fill(1)));for(let n=0;n<t.length;n++)i(a[t[n]],o[t[n]],s[n],e[n]),i(a[e[n]],o[e[n]],s[n],t[n]);return console.timeEnd("knnGraph"),{knnIndexes:o,knnDistances:a}}function r(t,e,s){function n(t,e,s,n){if(s>t[t.length-1])return;let r=t.length-2;for(r=t.length-2;r>=0&&!(s>t[r]);r--);t.splice(t.length-1,1),t.splice(r+1,0,s),e.splice(e.length-1,1),e.splice(r+1,0,n)}console.time("knnGraph");const r=new Array(s).fill(null).map((()=>new Array(e).fill(1))),i=new Array(s).fill(null).map((()=>new Array(e).fill(1)));let o=0,a=1;for(let e=0;e<t.length;e++)n(i[o],r[o],t[e],a),n(i[a],r[a],t[e],o),a++,a>=s&&(o++,a=o+1);return console.timeEnd("knnGraph"),{knnIndexes:r,knnDistances:i}}s.d(e,{J:()=>n,N:()=>r})},6802:(t,e,s)=>{"use strict";s.d(e,{$X:()=>l,A7:()=>r,Fv:()=>m,Hp:()=>p,IH:()=>a,NT:()=>o,RH:()=>u,cf:()=>h,gW:()=>c,p4:()=>i});var n=s(9533);class r{constructor(t,e,s,n){if(this.entries=new Map,this.nRows=0,this.nCols=0,t.length!==e.length||t.length!==s.length)throw new Error("rows, cols and values arrays must all have the same length");this.nRows=n[0],this.nCols=n[1];for(let n=0;n<s.length;n++){const r=t[n],i=e[n];this.checkDims(r,i);const o=this.makeKey(r,i);this.entries.set(o,{value:s[n],row:r,col:i})}}makeKey(t,e){return`${t}:${e}`}checkDims(t,e){if(!(t<this.nRows&&e<this.nCols))throw new Error("row and/or col specified outside of matrix dimensions")}set(t,e,s){this.checkDims(t,e);const n=this.makeKey(t,e);this.entries.has(n)?this.entries.get(n).value=s:this.entries.set(n,{value:s,row:t,col:e})}get(t,e,s=0){const n=this.makeKey(t,e);return this.entries.has(n)?this.entries.get(n).value:s}getAll(t=!0){const e=new Array(this.entries.size).fill(null);let s=0;return this.entries.forEach((t=>{e[s++]=t})),t&&e.sort(((t,e)=>t.row===e.row?t.col-e.col:t.row-e.row)),e}getDims(){return[this.nRows,this.nCols]}getRows(){return Array.from(this.entries,(([t,e])=>e.row))}getCols(){return Array.from(this.entries,(([t,e])=>e.col))}getValues(){return Array.from(this.entries,(([t,e])=>e.value))}forEach(t){this.entries.forEach((e=>t(e.value,e.row,e.col)))}map(t){const e=new Float32Array(this.entries.size);let s=0;this.entries.forEach((n=>{e[s++]=t(n.value,n.row,n.col)}));const n=[this.nRows,this.nCols];return new r(this.getRows(),this.getCols(),e,n)}toArray(){const t=n.cS(this.nRows).map((()=>n.ll(this.nCols)));return this.entries.forEach((e=>{t[e.row][e.col]=e.value})),t}}function i(t){const e=t.getRows(),s=t.getCols(),n=t.getValues(),i=s.length,o=new Int32Array(i),a=new Int32Array(i),l=new Float32Array(i);o.set(e),a.set(s),l.set(n);const c=[t.nCols,t.nRows];return new r(a,o,l,c)}function o(t,e){return g(t,e,((t,e)=>t*e))}function a(t,e){return g(t,e,((t,e)=>t+e))}function l(t,e){return g(t,e,((t,e)=>t-e))}function c(t,e){return g(t,e,((t,e)=>t>e?t:e))}function h(t,e){return t.map((t=>t*e))}function u(t){const e=new Set,s=t.getValues(),n=t.getRows(),i=t.getCols();for(let t=0;t<s.length;t++)0===s[t]&&e.add(t);const o=(t,s)=>!e.has(s),a=s.filter(o),l=n.filter(o),c=i.filter(o);return new r(l,c,a,t.getDims())}function m(t,e="l2"){const s=d[e],n=new Map;t.forEach(((t,e,s)=>{const r=n.get(e)||[];r.push(s),n.set(e,r)}));const i=new r([],[],[],t.getDims());for(let e of n.keys()){const r=n.get(e).sort(),o=s(r.map((s=>t.get(e,s))));for(let t=0;t<o.length;t++)i.set(e,r[t],o[t])}return i}const d={max:t=>{let e=-1/0;for(let s=0;s<t.length;s++)e=t[s]>e?t[s]:e;return t.map((t=>t/e))},l1:t=>{let e=0;for(let s=0;s<t.length;s++)e+=t[s];return t.map((t=>t/e))},l2:t=>{let e=0;for(let s=0;s<t.length;s++)e+=t[s]**2;return t.map((t=>Math.sqrt(t**2/e)))}};function g(t,e,s){const n=new Set,i=[],o=[],a=[],l=(n,r)=>{i.push(n),o.push(r);const l=s(t.get(n,r),e.get(n,r));a.push(l)},c=t.getValues(),h=t.getRows(),u=t.getCols();for(let t=0;t<c.length;t++){const e=h[t],s=u[t],r=`${e}:${s}`;n.add(r),l(e,s)}const m=e.getValues(),d=e.getRows(),g=e.getCols();for(let t=0;t<m.length;t++){const e=d[t],s=g[t],r=`${e}:${s}`;n.has(r)||l(e,s)}const p=[t.nRows,t.nCols];return new r(i,o,a,p)}function p(t){const e=[];t.forEach(((t,s,n)=>{e.push({value:t,row:s,col:n})})),e.sort(((t,e)=>t.row===e.row?t.col-e.col:t.row-e.row));const s=[],n=[],r=[];let i=-1;for(let t=0;t<e.length;t++){const{row:o,col:a,value:l}=e[t];o!==i&&(i=o,r.push(t)),s.push(a),n.push(l)}return{indices:s,values:n,indptr:r}}},1595:(t,e,s)=>{"use strict";s.d(e,{WX:()=>a,gK:()=>h,n_:()=>c,vF:()=>l});var n=s(6490),r=s(6802),i=s(4972),o=s(9533);function a(t,e){return function(s,r,i,a=10,l=50,c=.001,h=.5,u=!0){const m=s.length,d=n.VA(s.length,i);for(let r=0;r<s.length;r++){const o=n.M6(i,s.length,e);for(let e=0;e<o.length;e++){const i=t(s[r],s[o[e]]);n.XV(d,r,i,o[e],1),n.XV(d,o[e],i,r,1)}}if(u)for(let e=0;e<r.length;e++)for(let i=0;i<r[e].length&&!(r[e][i]<0);i++)for(let o=i+1;o<r[e].length&&!(r[e][o]<0);o++){const a=t(s[r[e][i]],s[r[e][o]]);n.XV(d,r[e][i],a,r[e][o],1),n.XV(d,r[e][o],a,r[e][i],1)}for(let r=0;r<a;r++){const r=n.SB(d,m,i,l,e);let a=0;for(let i=0;i<m;i++)for(let c=0;c<l;c++){let u=Math.floor(r[0][i][c]);if(!(u<0||o.mH(e)<h))for(let e=0;e<l;e++){const o=Math.floor(r[0][i][e]),l=r[2][i][c],h=r[2][i][e];if(o<0||!l&&!h)continue;const m=t(s[u],s[o]);a+=n.XV(d,u,m,o,1),a+=n.XV(d,o,m,u,1)}}if(a<=c*i*s.length)break}return n.oi(d)}}function l(t){return{initFromRandom:function(e,s,r,i,a){for(let l=0;l<r.length;l++){const c=o.M6(e,s.length,a);for(let e=0;e<c.length;e++){if(c[e]<0)continue;const o=t(s[c[e]],r[l]);n.XV(i,l,o,c[e],1)}}},initFromTree:function(e,s,r,o,a){for(let l=0;l<r.length;l++){const c=i.ii(r[l],e,a);for(let e=0;e<c.length;e++){if(c[e]<0)return;const i=t(s[c[e]],r[l]);n.XV(o,l,i,c[e],1)}}}}}function c(t){return function(e,s,i,o){const{indices:a,indptr:l}=r.Hp(s);for(let s=0;s<o.length;s++){const r=new Set(i[0][s]);for(;;){const c=n.w5(i,s);if(-1===c)break;const h=a.slice(l[c],l[c+1]);for(const a of h){if(a===c||-1===a||r.has(a))continue;const l=t(e[a],o[s]);n.Sr(i,s,l,a,1),r.add(a)}}}return i}}function h(t,e,s,r,i,o,a){const l=n.VA(s.length,r);if(i(r,e,s,l,a),t)for(let n of t)o(n,e,s,l,a);return l}},4972:(t,e,s)=>{"use strict";s.d(e,{HO:()=>h,Zv:()=>i,ii:()=>m});var n=s(9533);class r{constructor(t,e,s,n){this.hyperplanes=t,this.offsets=e,this.children=s,this.indices=n}}function i(t,e,s,i){const h=Math.max(10,e),u=n.w6(s).map(((e,s)=>function(t,e=30,s,r){return o(t,n.w6(t.length),e,s,r)}(t,h,s,i))),m=u.map((t=>function(t,e){const s=l(t),i=c(t),o=n.w6(s).map((()=>t.hyperplane?1:0)),h=n.ll(s),u=n.w6(s).map((()=>[-1,-1])),m=n.w6(i).map((()=>n.w6(e).map((()=>-1))));return a(t,o,h,u,m,0,0),new r(o,h,u,m)}(t,h)));return m}function o(t,e,s=30,r,i){if(e.length>s){const a=function(t,e,s){let r=n.AH(e.length,s),i=n.AH(e.length,s);i+=r===i?1:0,i%=e.length;const o=e[r],a=e[i];let l=0,c=0;c=t[o]-t[a],l-=c*(t[o]+t[a])/2;let h=0,u=0;const m=n.ll(e.length);for(let r=0;r<e.length;r++){let i=l;i+=c*t[e[r]],0===i?(m[r]=n.AH(2,s),0===m[r]?h+=1:u+=1):i>0?(m[r]=0,h+=1):(m[r]=1,u+=1)}const d=n.ll(h),g=n.ll(u);h=0,u=0;for(let t=0;t<m.length;t++)0===m[t]?(d[h]=e[t],h+=1):(g[u]=e[t],u+=1);return{indicesLeft:d,indicesRight:g,hyperplane:c,offset:l}}(t,e,i),{indicesLeft:l,indicesRight:c,hyperplane:h,offset:u}=a;return{leftChild:o(t,l,s,r+1,i),rightChild:o(t,c,s,r+1,i),isLeaf:!1,hyperplane:h,offset:u}}return{indices:e,isLeaf:!0}}function a(t,e,s,n,r,i,o){if(t.isLeaf)return n[i][0]=-o,r[o].splice(0,t.indices.length,...t.indices),{nodeNum:i,leafNum:o+=1};{e[i]=t.hyperplane,s[i]=t.offset,n[i][0]=i+1;const l=i;let c=a(t.leftChild,e,s,n,r,i+1,o);return i=c.nodeNum,o=c.leafNum,n[l][1]=i+1,c=a(t.rightChild,e,s,n,r,i+1,o),{nodeNum:c.nodeNum,leafNum:c.leafNum}}}function l(t){return t.isLeaf?1:1+l(t.leftChild)+l(t.rightChild)}function c(t){return t.isLeaf?1:c(t.leftChild)+c(t.rightChild)}function h(t){if(t.length>0){const e=[];for(let s of t)e.push(...s.indices);return e}return[[-1]]}function u(t,e,s,r){let i=e;return i+=t*s,0===i?n.AH(2,r):i>0?0:1}function m(t,e,s){let n=0;for(;e.children[n][0]>0;)n=0===u(e.hyperplanes[n],e.offsets[n],t,s)?e.children[n][0]:e.children[n][1];const r=-1*e.children[n][0];return e.indices[r]}},3585:(t,e,s)=>{"use strict";s.d(e,{uB:()=>u});var n=s(6490),r=s(6802),i=s(1595),o=s(4972),a=s(9533),l=s(3107);const c=1e-5,h=.001;class u{get neighbors(){return this.nNeighbors}constructor(t={}){this.learningRate=1,this.localConnectivity=1,this.minDist=.1,this.nComponents=2,this.nEpochs=0,this.nNeighbors=15,this.negativeSampleRate=5,this.random=Math.random,this.repulsionStrength=1,this.setOpMixRatio=1,this.spread=1,this.transformQueueSize=4,this.targetMetric="categorical",this.targetWeight=.5,this.targetNNeighbors=this.nNeighbors,this.distanceFn=m,this.isInitialized=!1,this.rpForest=[],this.embedding=[],this.optimizationState=new d;const e=e=>{void 0!==t[e]&&(this[e]=t[e])};e("distanceFn"),e("learningRate"),e("localConnectivity"),e("minDist"),e("nComponents"),e("nEpochs"),e("nNeighbors"),e("negativeSampleRate"),e("random"),e("repulsionStrength"),e("setOpMixRatio"),e("spread"),e("transformQueueSize")}fit(t){return this.initializeFit(t),this.optimizeLayout(),this.embedding}async fitAsync(t,e=(()=>!0)){return this.initializeFit(t),await this.optimizeLayoutAsync(e),this.embedding}setSupervisedProjection(t,e={}){this.Y=t,this.targetMetric=e.targetMetric||this.targetMetric,this.targetWeight=e.targetWeight||this.targetWeight,this.targetNNeighbors=e.targetNNeighbors||this.targetNNeighbors}setPrecomputedKNN(t,e){this.knnIndices=t,this.knnDistances=e}initializeFit(t){if(t.length<=this.nNeighbors)throw new Error(`Not enough data points (${t.length}) to create nNeighbors: ${this.nNeighbors}. Add more data points or adjust the configuration.`);if(this.X===t&&this.isInitialized)return this.getNEpochs();if(this.X=t,!this.knnIndices&&!this.knnDistances){const e=this.nearestNeighbors(t);this.knnIndices=e.knnIndices,this.knnDistances=e.knnDistances}this.graph=this.fuzzySimplicialSet(t,this.nNeighbors,this.setOpMixRatio),this.makeSearchFns(),this.searchGraph=this.makeSearchGraph(t),this.processGraphForSupervisedProjection();const{head:e,tail:s,epochsPerSample:n}=this.initializeSimplicialSetEmbedding();return this.optimizationState.head=e,this.optimizationState.tail=s,this.optimizationState.epochsPerSample=n,this.initializeOptimization(),this.prepareForOptimizationLoop(),this.isInitialized=!0,this.getNEpochs()}makeSearchFns(){const{initFromTree:t,initFromRandom:e}=i.vF(this.distanceFn);this.initFromTree=t,this.initFromRandom=e,this.search=i.n_(this.distanceFn)}makeSearchGraph(t){const e=this.knnIndices,s=this.knnDistances,n=[t.length,t.length],i=new r.A7([],[],[],n);for(let t=0;t<e.length;t++){const n=e[t],r=s[t];for(let e=0;e<n.length;e++){const s=n[e],o=r[e];o>0&&i.set(t,s,o)}}const o=r.p4(i);return r.gW(i,o)}transform(t){const e=this.X;if(void 0===e||0===e.length)throw new Error("No data has been fit.");let s=Math.floor(this.nNeighbors*this.transformQueueSize);s=Math.min(e.length,s);const o=i.gK(this.rpForest,e,t,s,this.initFromRandom,this.initFromTree,this.random),l=this.search(e,this.searchGraph,o,t);let{indices:c,weights:h}=n.oi(l);c=c.map((t=>t.slice(0,this.nNeighbors))),h=h.map((t=>t.slice(0,this.nNeighbors)));const u=Math.max(0,this.localConnectivity-1),{sigmas:m,rhos:d}=this.smoothKNNDistance(h,this.nNeighbors,u),{rows:g,cols:p,vals:f}=this.computeMembershipStrengths(c,h,m,d),y=[t.length,e.length];let w=new r.A7(g,p,f,y);const b=r.Fv(w,"l1"),T=r.Hp(b),C=t.length,A=function(t,e,s){const n=a.ll(t.length).map((t=>a.ll(s[0].length)));for(let r=0;r<t.length;r++)for(let i=0;i<t[0].length;i++)for(let o=0;o<s[0].length;o++){const a=t[r][i];n[r][o]+=e[r][i]*s[a][o]}return n}(a.HU(T.indices,C,this.nNeighbors),a.HU(T.values,C,this.nNeighbors),this.embedding),S=this.nEpochs?this.nEpochs/3:w.nRows<=1e4?100:30,E=w.getValues().reduce(((t,e)=>e>t?e:t),0);w=w.map((t=>t<E/S?0:t)),w=r.RH(w);const M=this.makeEpochsPerSample(w.getValues(),S),v=w.getRows(),N=w.getCols();return this.assignOptimizationStateParameters({headEmbedding:A,tailEmbedding:this.embedding,head:v,tail:N,currentEpoch:0,nEpochs:S,nVertices:w.getDims()[1],epochsPerSample:M}),this.prepareForOptimizationLoop(),this.optimizeLayout()}processGraphForSupervisedProjection(){const{Y:t,X:e}=this;if(t){if(t.length!==e.length)throw new Error("Length of X and y must be equal");if("categorical"===this.targetMetric){const e=this.targetWeight<1?1/(1-this.targetWeight)*2.5:1e12;this.graph=this.categoricalSimplicialSetIntersection(this.graph,t,e)}}}step(){const{currentEpoch:t}=this.optimizationState;return t<this.getNEpochs()&&this.optimizeLayoutStep(t),this.optimizationState.currentEpoch}getEmbedding(){return this.embedding}nearestNeighbors(t){const{distanceFn:e,nNeighbors:s}=this,n=i.WX(e,this.random),r=5+Math.floor(.5==(a=t.length**.5/20)?0:Math.round(a));var a;const l=Math.max(5,Math.floor(Math.round((t=>Math.log(t)/Math.log(2))(t.length))));this.rpForest=o.Zv(t,s,r,this.random);const c=o.HO(this.rpForest),{indices:h,weights:u}=n(t,c,s,l);return{knnIndices:h,knnDistances:u}}fuzzySimplicialSet(t,e,s=1){const{knnIndices:n=[],knnDistances:i=[],localConnectivity:o}=this,{sigmas:a,rhos:l}=this.smoothKNNDistance(i,e,o),{rows:c,cols:h,vals:u}=this.computeMembershipStrengths(n,i,a,l),m=[t.length,t.length],d=new r.A7(c,h,u,m),g=r.p4(d),p=r.NT(d,g),f=r.$X(r.IH(d,g),p),y=r.cf(f,s),w=r.cf(p,1-s);return r.IH(y,w)}categoricalSimplicialSetIntersection(t,e,s,n=1){let i=function(t,e,s=1,n=5){return t.map(((t,r,i)=>-1===e[r]||-1===e[i]?t*Math.exp(-s):e[r]!==e[i]?t*Math.exp(-n):t))}(t,e,n,s);return i=r.RH(i),function(t){t=r.Fv(t,"max");const e=r.p4(t),s=r.NT(e,t);return t=r.IH(t,r.$X(e,s)),r.RH(t)}(i)}smoothKNNDistance(t,e,s=1,n=64,r=1){const i=Math.log(e)/Math.log(2)*r,o=a.ll(t.length),l=a.ll(t.length);for(let e=0;e<t.length;e++){let r=0,u=1/0,m=1;const d=t[e],g=d.filter((t=>t>0));if(g.length>=s){let t=Math.floor(s),n=s-t;t>0?(o[e]=g[t-1],n>c&&(o[e]+=n*(g[t]-g[t-1]))):o[e]=n*g[0]}else g.length>0&&(o[e]=a.Fp(g));for(let s=0;s<n;s++){let s=0;for(let n=1;n<t[e].length;n++){const r=t[e][n]-o[e];s+=r>0?Math.exp(-r/m):1}if(Math.abs(s-i)<c)break;s>i?(u=m,m=(r+u)/2):(r=m,u===1/0?m*=2:m=(r+u)/2)}if(l[e]=m,o[e]>0){const t=a.J6(d);l[e]<h*t&&(l[e]=h*t)}else{const s=a.J6(t.map(a.J6));l[e]<h*s&&(l[e]=h*s)}}return{sigmas:l,rhos:o}}computeMembershipStrengths(t,e,s,n){const r=t.length,i=t[0].length,o=a.ll(r*i),l=a.ll(r*i),c=a.ll(r*i);for(let a=0;a<r;a++)for(let r=0;r<i;r++){let h=0;-1!==t[a][r]&&(h=t[a][r]===a?0:e[a][r]-n[a]<=0?1:Math.exp(-(e[a][r]-n[a])/s[a]),o[a*i+r]=a,l[a*i+r]=t[a][r],c[a*i+r]=h)}return{rows:o,cols:l,vals:c}}initializeSimplicialSetEmbedding(){const t=this.getNEpochs(),{nComponents:e}=this,s=this.graph.getValues();let n=0;for(let t=0;t<s.length;t++){const e=s[t];n<s[t]&&(n=e)}const r=this.graph.map((e=>e<n/t?0:e));this.embedding=a.ll(r.nRows).map((()=>a.ll(e).map((()=>20*a.mH(this.random)-10))));const i=[],o=[],l=[],c=r.getAll();for(let t=0;t<c.length;t++){const e=c[t];e.value&&(i.push(e.value),l.push(e.row),o.push(e.col))}return{head:o,tail:l,epochsPerSample:this.makeEpochsPerSample(i,t)}}makeEpochsPerSample(t,e){const s=a.VI(t.length,-1),n=a.Fp(t),r=t.map((t=>t/n*e));return r.forEach(((t,n)=>{t>0&&(s[n]=e/r[n])})),s}assignOptimizationStateParameters(t){Object.assign(this.optimizationState,t)}prepareForOptimizationLoop(){const{repulsionStrength:t,learningRate:e,negativeSampleRate:s}=this,{epochsPerSample:n,headEmbedding:r,tailEmbedding:i}=this.optimizationState,o=r[0].length,a=r.length===i.length,l=n.map((t=>t/s)),c=[...l],h=[...n];this.assignOptimizationStateParameters({epochOfNextSample:h,epochOfNextNegativeSample:c,epochsPerNegativeSample:l,moveOther:a,initialAlpha:e,alpha:e,gamma:t,dim:o})}initializeOptimization(){const t=this.embedding,e=this.embedding,{head:s,tail:n,epochsPerSample:r}=this.optimizationState,i=this.getNEpochs(),o=this.graph.nCols,{a:c,b:h}=function(t,e){const s=a.GE(0,3*t,300).map((t=>t<e?1:t)),n=a.ll(s.length).map(((n,r)=>s[r]>=e?Math.exp(-(s[r]-e)/t):n)),r={x:s,y:n},{parameterValues:i}=(0,l.Z)(r,(([t,e])=>s=>1/(1+t*s**(2*e))),{damping:1.5,initialValues:[.5,.5],gradientDifference:.1,maxIterations:100,errorTolerance:.01}),[o,c]=i;return{a:o,b:c}}(this.spread,this.minDist);this.assignOptimizationStateParameters({headEmbedding:t,tailEmbedding:e,head:s,tail:n,epochsPerSample:r,a:c,b:h,nEpochs:i,nVertices:o})}optimizeLayoutStep(t){const{optimizationState:e}=this,{head:s,tail:n,headEmbedding:r,tailEmbedding:i,epochsPerSample:o,epochOfNextSample:l,epochOfNextNegativeSample:c,epochsPerNegativeSample:h,moveOther:u,initialAlpha:m,alpha:d,gamma:f,a:y,b:w,dim:b,nEpochs:T,nVertices:C}=e;for(let e=0;e<o.length;e++){if(l[e]>t)continue;const m=s[e],T=n[e],A=r[m],S=i[T],E=p(A,S);let M=0;E>0&&(M=-2*y*w*Math.pow(E,w-1),M/=y*Math.pow(E,w)+1);for(let t=0;t<b;t++){const e=g(M*(A[t]-S[t]),4);A[t]+=e*d,u&&(S[t]+=-e*d)}l[e]+=o[e];const v=Math.floor((t-c[e])/h[e]);for(let t=0;t<v;t++){const t=a.AH(C,this.random),e=i[t],s=p(A,e);let n=0;if(s>0)n=2*f*w,n/=(.001+s)*(y*Math.pow(s,w)+1);else if(m===t)continue;for(let t=0;t<b;t++){let s=4;n>0&&(s=g(n*(A[t]-e[t]),4)),A[t]+=s*d}}c[e]+=v*h[e]}return e.alpha=m*(1-t/T),e.currentEpoch+=1,r}optimizeLayoutAsync(t=(()=>!0)){return new Promise(((e,s)=>{const n=async()=>{try{const{nEpochs:s,currentEpoch:r}=this.optimizationState;this.embedding=this.optimizeLayoutStep(r);const i=this.optimizationState.currentEpoch,o=!1===t(i),a=i===s;if(o||a)return e(a);setTimeout((()=>n()),0)}catch(t){s(t)}};setTimeout((()=>n()),0)}))}optimizeLayout(t=(()=>!0)){let e=!1,s=[];for(;!e;){const{nEpochs:n,currentEpoch:r}=this.optimizationState;s=this.optimizeLayoutStep(r);const i=this.optimizationState.currentEpoch,o=!1===t(i);e=i===n||o}return s}getNEpochs(){const t=this.graph;if(this.nEpochs>0)return this.nEpochs;if(!t)return 200;const e=t.nRows;return e<=2500?500:e<=5e3?400:e<=7500?300:200}}function m(t,e){return Math.abs(t-e)}class d{constructor(){this.currentEpoch=0,this.headEmbedding=[],this.tailEmbedding=[],this.head=[],this.tail=[],this.epochsPerSample=[],this.epochOfNextSample=[],this.epochOfNextNegativeSample=[],this.epochsPerNegativeSample=[],this.moveOther=!0,this.initialAlpha=1,this.alpha=1,this.gamma=1,this.a=1.5769434603113077,this.b=.8950608779109733,this.dim=2,this.nEpochs=500,this.nVertices=0}}function g(t,e){return t>e?e:t<-e?-e:t}function p(t,e){let s=0;for(let n=0;n<t.length;n++)s+=Math.pow(t[n]-e[n],2);return s}},9533:(t,e,s)=>{"use strict";function n(t,e){return Math.floor(e()*t)}function r(t){return t()}function i(t){const e=[];for(let s=0;s<t;s++)e.push(void 0);return e}function o(t){return i(t).map(((t,e)=>e))}function a(t,e){return i(t).map((()=>e))}function l(t){return a(t,0)}function c(t,e,s){return i(s).map(((n,r)=>t+r*((e-t)/(s-1))))}function h(t){return function(t){return t.reduce(((t,e)=>t+e))}(t)/t.length}function u(t){let e=0;for(let s=0;s<t.length;s++)e=t[s]>e?t[s]:e;return e}function m(t,e,s){const r=l(t);for(let i=0;i<t;i++){let t=!0;for(;t;){const o=n(e,s);let a=!1;for(let t=0;t<i;t++)if(o===r[t]){a=!0;break}a||(t=!1),r[i]=o}}return r}function d(t,e,s){const n=[];let r=0,i=0;if(t.length!==e*s)throw new Error("Array dimensions must match input length.");for(let o=0;o<e;o++){const e=[];for(let n=0;n<s;n++)e.push(t[i]),i+=1;n.push(e),r+=1}return n}s.d(e,{AH:()=>n,Fp:()=>u,GE:()=>c,HU:()=>d,J6:()=>h,M6:()=>m,VI:()=>a,cS:()=>i,ll:()=>l,mH:()=>r,w6:()=>o})},9657:(t,e,s)=>{"use strict";s.d(e,{Z:()=>n});class n{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 s=t,r=n._createBuffer(s);if(e)for(let t=0;t<r.length;t++)r[t]=-1;this._data=r,this._length=s}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,s,n){if(t<e||t>s)throw new Error(`Argument ${n} (${t}) out of range (${e}, ${s})`)}copy(t,e,s){for(let n=0;n<s;n++)e[n]=t[n]}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 s=new n(t._length);s._length=t._length,s._data=n._createBuffer(s._length),s._version=0;const r=t.lengthInInts;for(let n=0;n<r;n++)s._data[n]=t._data[n]&e._data[n];return s}static _createBuffer(t){return new Uint32Array(Math.floor((t+31)/32))}static fromValues(t){const e=new n(t.length);e._version=0;for(let s=0;s<e._length;s++)t[s]&&(e._data[Math.floor(s/32)]|=1<<(s%32&31));return e}static fromSeq(t,e){const s=new n(t);for(let n=0;n<t;++n)s.setBit(n,e(n));return s._version=0,s}static fromString(t){return n.fromSeq(t.length,(e=>"1"==t.charAt(e)))}static fromUint32Array(t,e){const s=new n(t);return s._data=e,s}static fromBytes(t){const e=t.length,s=new n(8*e);s._data=new Uint32Array(Math.floor((e+3)/4)),s._length=8*e;let r=0,i=0;for(;e-i>=4;)s._data[r++]=255&t[i]|(255&t[i+1])<<8|(255&t[i+2])<<16|(255&t[i+3])<<24,i+=4;return e-i==3&&(s._data[r]=(255&t[i+2])<<16),e-i==2&&(s._data[r]|=(255&t[i+1])<<8),e-i==1&&(s._data[r]|=255&t[i]),s._version=0,s}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 n(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 s=t?-1:0,n=this.lengthInInts;for(let t=0;t<n;t++)this._data[t]=s;this.incrementVersion(e)}setIndexes(t,e=!0,s=!0,n=!0){s&&this.setAll(!e,!1);for(const s of t)this.setFast(s,e);this.incrementVersion(n)}everyIndex(t,e=!0){for(const s of t)if(this.getBit(s)!=e)return!1;return!0}anyIndex(t,e=!0){for(const s of t)if(this.getBit(s)==e)return!0;return!1}setWhere(t,e=!0,s=!0,n=!0,r=!0){if(s&&r&&this.setAll(!e,!1),r)for(let s=0;s<this._length;s++)t(s)&&this.setFast(s,e);else for(let s=0;s<this._length;s++)this.setFast(s,t(s)?e:!e);this.incrementVersion(n)}getRange(t,e){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(e,0,this._length,"to");const s=[];for(let n=t;n<e;++n)s.push(this.getBit(n));return n.fromValues(s)}getRangeAsList(t,e){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(e,0,this._length,"to");const s=[];for(let n=t;n<e;++n)s.push(this.getBit(n));return s}setRange(t,e,s,n=!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(s)for(let t=r;t<=i;t++)this.setTrue(t);else for(let t=r;t<=i;t++)this.setFalse(t);return this.incrementVersion(n),this}setRandom(t,e,s=!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 s=0;s<t;){const t=Math.floor(Math.random()*this._length);this.getBit(t)!=e&&(this.setFast(t,e),s++)}this.incrementVersion(s)}and(t,e=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let e=0,s=this.lengthInInts;e<s;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 s=this.lengthInInts;for(let e=0;e<s;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,s=this.lengthInInts;e<s;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,s=this.lengthInInts;e<s;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,s=this.lengthInInts;e<s;e++)this._data[e]^=t._data[e];return this.incrementVersion(e),this}insertAt(t,e,s=!1){if(this.assureInRange(t,0,this._length,"pos"),0==e)return;const n=this._length;this.setLength(this._length+e);for(let s=n-1;s>=t;s--)this.setBit(s+e,this.getBit(s));for(let n=t;n<t+e;n++)this.setBit(n,s)}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 s=t;s<this._length-e;s++)this.setBit(s,this.getBit(s+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 s=0;for(let n=-1;-1!=(n=t.findNext(n,!e));)this.setFast(s++,this.getBit(n));this._length=s,this._version++}return this}getBit(t){return 0!=(this._data[Math.floor(t/32)]&1<<(31&t))}setBit(t,e,s=!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+=n._onBitCount[255&t];let s=this._data[e];const r=31&this._length;for(0!=r&&(s&=~(4294967295<<r));0!=s;s>>>=8)this._selectedCount+=n._onBitCount[255&s];this._selectedCountVersion=this._version}return t?this._selectedCount:this._length-this._selectedCount}countWhere(t){let e=0;if(this.trueCount()==this._length)for(let s=0;s<this._length;s++)e+=t(s)?1:0;else for(let s=-1;-1!=(s=this.findNext(s,!0));)e+=t(s)?1:0;return e}andWithCountBits(t,e){if(0==this._length)return 0;let s=0;const r=this.lengthInInts;let i=0;for(;i<r-1;i++)for(let e=this._data[i]&t._data[i];0!=e;e>>>=8)s+=n._onBitCount[255&e];let o=this._data[i]&t._data[i];const a=31&this._length;for(0!=a&&(o&=~(4294967295<<a));0!=o;o>>>=8)s+=n._onBitCount[255&o];return e?s:this._length-s}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 s=31&(t=t<0?0:t+1);const r=this.lengthInInts;for(let i=Math.floor(t/32);i<r;i++){let r=e?this._data[i]:~this._data[i];if(0!=s)r&=4294967295<<s&4294967295,s=0;else if(!e&&-4294967296==r)continue;for(let e=0;0!=r;e+=8,r>>>=8){const s=n._firstOnBit[255&r];if(s>=0)return(t=s+32*i+e)>=this._length?-1:t}}return-1}findPrev(t,e=!0){if(0==t)return-1;this.assureInRange(t,-1,this._length,"index");let s=1+(t=t<0?this._length-1:t-1)&31;for(let r=Math.floor(t/32);r>=0;r--){let t=e?this._data[r]:~this._data[r];0!=s&&(t&=~(4294967295<<s),s=0);for(let e=24;0!=t;e-=8,t<<=8){const s=n._lastOnBit[t>>>24];if(s>=0)return s+32*r+e}}return-1}}n._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]),n._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]),n._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])},4588:(t,e,s)=>{"use strict";function n(t){return Math.random()*t}function r(t){return Math.floor(n(t))}s.d(e,{I:()=>r,t:()=>n})},1061:(t,e,s)=>{"use strict";s.d(e,{AB:()=>x,Bu:()=>y,QK:()=>l,W3:()=>A,Wh:()=>T,X5:()=>E,bb:()=>S,ci:()=>v,f6:()=>C,gw:()=>_,jh:()=>b,l_:()=>w,ow:()=>L,zg:()=>f});var n=s(4469),r=s(976),i=function(t,e,s,n){return new(s||(s=Promise))((function(r,i){function o(t){try{l(n.next(t))}catch(t){i(t)}}function a(t){try{l(n.throw(t))}catch(t){i(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof s?e:new s((function(t){t(e)}))).then(o,a)}l((n=n.apply(t,e||[])).next())}))};const o=3e4,a=108e5,l={},c="Auto Tests",h="Demo",u={};let m;var d;!function(t){t.notNull=function(t,e){if(null==t)throw new Error(`${null==e?"Value":e} not defined`)}}(d||(d={}));class g{constructor(t,e){this.catchUnhandled=!0,this.report=!1,void 0!==t&&(this.catchUnhandled=t),void 0!==e&&(this.report=e)}}class p{constructor(t,e,s,n){var r;this.category=t,this.name=e,null!=n||(n={}),null!==(r=n.timeout)&&void 0!==r||(n.timeout=o),this.options=n,this.test=()=>i(this,void 0,void 0,(function*(){return new Promise(((t,e)=>i(this,void 0,void 0,(function*(){let n="";try{n=yield s()}catch(t){e(t)}t(n)}))))}))}}function f(t,e,s,n=0){return i(this,void 0,void 0,(function*(){let r;return new Promise(((i,o)=>{r=t.subscribe((t=>{try{e(t)}catch(t){o(t)}r.unsubscribe(),i("OK")})),setTimeout((()=>{r.unsubscribe(),o("timeout")}),n),s()}))}))}function y(t,e,s){null==l[m]&&(l[m]={}),null==l[m].tests&&(l[m].tests=[]),l[m].tests.push(new p(m,t,e,s))}function w(t,e=!0,s){if(s=s?`${s}, `:"",t!==e)throw new Error(`${s}Expected "${e}", got "${t}"`)}function b(t,e,s=.001,n){if(t===Number.POSITIVE_INFINITY&&e===Number.POSITIVE_INFINITY||t===Number.NEGATIVE_INFINITY&&e===Number.NEGATIVE_INFINITY||t===Number.NaN&&e===Number.NaN||isNaN(t)&&isNaN(e))return;const r=Math.abs(t-e)<s;if(w(r,!0,`${null!=n?n:""} (tolerance = ${s})`),!r)throw new Error(`Expected ${e}, got ${t} (tolerance = ${s})`)}function T(t,e){for(const[s,n]of Object.entries(e)){if(!t.hasOwnProperty(s))throw new Error(`Expected property "${s}" not found`);const e=t[s];if(e instanceof Array&&n instanceof Array)C(e,n);else if(e instanceof Object&&n instanceof Object)T(e,n);else if(Number.isFinite(e)&&Number.isFinite(n))b(e,n);else if(e!=n)throw new Error(`Expected (${n}) for key '${s}', got (${e})`)}}function C(t,e){const s=t.length,n=e.length;if(s!=n)throw new Error(`Arrays are of different length: actual array length is ${s} and expected array length is ${n}`);for(let n=0;n<s;n++)if(t[n]instanceof Array&&e[n]instanceof Array)C(t[n],e[n]);else if(t[n]instanceof Object&&e[n]instanceof Object)T(t[n],e[n]);else if(t[n]!=e[n])throw new Error(`Expected ${e[n]} at position ${n}, got ${t[n]}`)}function A(t,e,s){var n;m=t,e(),l[m]&&(l[m].clear=null===(n=null==s?void 0:s.clear)||void 0===n||n,l[m].timeout=null==s?void 0:s.timeout)}function S(t){null==l[m]&&(l[m]={}),l[m].before=t}function E(t){null==l[m]&&(l[m]={}),l[m].after=t}function M(t,e){return t.replace(new RegExp(e.name,"gi"),e.nqName)}function v(t){var e,s,o,a,m;return i(this,void 0,void 0,(function*(){const d=null===(s=null===(e=n.functions.getCurrentCall())||void 0===e?void 0:e.func)||void 0===s?void 0:s.package;yield function(t,e){return i(this,void 0,void 0,(function*(){if(u[t])return;const e=l;if(void 0!==e[c]||void 0!==e[h]||Object.keys(e).find((t=>t.startsWith(c))))return void(u[t]=!0);const s=[],r=[],o=yield n.dapi.functions.filter(`package.id = "${t}"`).list(),a=new RegExp(/skip:\s*([^,\s]+)|wait:\s*(\d+)|cat:\s*([^,\s]+)/g);for(const t of o){const o=t.options.test,l=t.options.demoPath;if(o&&Array.isArray(o)&&o.length)for(let r=0;r<o.length;r++){const l=o[r].matchAll(a),h={};Array.from(l).forEach((t=>{t[0].startsWith("skip")?h.skip=t[1]:t[0].startsWith("wait")?h.wait=parseInt(t[2]):t[0].startsWith("cat")&&(h.cat=t[3])}));const u=new p(c,1===o.length?t.name:`${t.name} ${r+1}`,(()=>i(this,void 0,void 0,(function*(){const e=yield n.functions.eval(M(o[r],t));if(h.wait&&(yield _(h.wait)),"boolean"==typeof e&&!e)throw`Failed: ${o[r]}, expected true, got ${e}`}))),{skipReason:h.skip});if(h.cat){const t=c+": "+h.cat;u.category=t,void 0===e[t]&&(e[t]={tests:[],clear:!0}),e[t].tests.push(u)}else s.push(u)}if(l){const e=t.options.demoWait?parseInt(t.options.demoWait):void 0,s=new p(h,t.friendlyName,(()=>i(this,void 0,void 0,(function*(){if(n.shell.lastError="",yield t.apply(),yield _(e||2e3),n.shell.lastError)throw new Error(n.shell.lastError)}))),{skipReason:t.options.demoSkip});r.push(s)}}u[t]=!0,s.length&&(e[c]={tests:s,clear:!0}),r.length&&(e[h]={tests:r,clear:!0})}))}(d.id);const f=[];console.log("Running tests"),null!=t||(t={}),null!==(o=(m=t).testContext)&&void 0!==o||(m.testContext=new g),n.shell.lastError="";for(const[e,s]of Object.entries(l)){if(null!=(null==t?void 0:t.category)&&!e.toLowerCase().startsWith(null==t?void 0:t.category.toLowerCase()))continue;console.log(`Started ${e} category`);try{s.before&&(yield s.before())}catch(t){s.beforeStatus=t.toString()}const i=null!==(a=s.tests)&&void 0!==a?a:[],o=[];if(s.clear)for(let e=0;e<i.length;e++)o.push(yield N(i[e],null==t?void 0:t.test,s.timeout,d.name)),n.shell.closeAll(),r.Balloon.closeAll();else for(let e=0;e<i.length;e++)o.push(yield N(i[e],null==t?void 0:t.test,s.timeout,d.name));const l=(yield Promise.all(o)).filter((t=>"skipped"!=t.result));try{s.after&&(yield s.after())}catch(t){s.afterStatus=t.toString()}s.afterStatus&&l.push({category:e,name:"init",result:s.afterStatus,success:!1,ms:0,skipped:!1}),s.beforeStatus&&l.push({category:e,name:"init",result:s.beforeStatus,success:!1,ms:0,skipped:!1}),f.push(...l)}if(t.testContext.catchUnhandled&&(yield _(1e3),n.shell.lastError.length>0&&f.push({category:"Unhandled exceptions",name:"exceptions",result:n.shell.lastError,success:!1,ms:0,skipped:!1})),t.testContext.report){const t=new r.Logger,e=f.filter((t=>t.success)).length,s=f.filter((t=>t.skipped)).length,n=f.filter((t=>!t.success)),i="Package @package tested: @successful successful, @skipped skipped, @failed failed tests",o={successful:e,skipped:s,failed:n.length,package:d};for(const t of n)Object.assign(o,{[`${t.category} | ${t.name}`]:t.result});t.log(i,o,"package-tested")}return f}))}function N(t,e,s,l){var c,h,u,m,d;return i(this,void 0,void 0,(function*(){let i;const g=null!=e&&t.name.toLowerCase()!==e.toLowerCase(),p=(null===(c=t.options)||void 0===c?void 0:c.skipReason)||g,f=g?"skipped":null===(h=t.options)||void 0===h?void 0:h.skipReason;p||console.log(`Started ${t.category} ${t.name}`);const y=Date.now();try{if(p)i={success:!0,result:f,ms:0,skipped:!0};else{let e=(null===(u=t.options)||void 0===u?void 0:u.timeout)===o&&s?s:null===(m=t.options)||void 0===m?void 0:m.timeout;e=r.Test.isInBenchmark&&e===o?a:e,i={success:!0,result:null!==(d=yield P(t.test,e))&&void 0!==d?d:"OK",ms:0,skipped:!1}}}catch(t){i={success:!1,result:t.toString(),ms:0,skipped:!1}}if(i.ms=Date.now()-y,p||console.log(`Finished ${t.category} ${t.name} for ${i.ms} ms`),i.category=t.category,i.name=t.name,!g){let e={success:i.success,result:i.result,ms:i.ms,skipped:i.skipped,type:"package",packageName:l,category:t.category,test:t.name};if(i.result.constructor==Object){const t=Object.keys(i.result).reduce(((t,e)=>Object.assign(Object.assign({},t),{["result."+e]:i.result[e]})),{});e=Object.assign(Object.assign({},e),t)}n.log.usage(`${l}: ${t.category}: ${t.name}`,e,`test-package ${l}: ${t.category}: ${t.name}`)}return i}))}function _(t){return i(this,void 0,void 0,(function*(){yield new Promise((e=>setTimeout(e,t)))}))}function L(t,e="Timeout exceeded",s=500,n=50){return i(this,void 0,void 0,(function*(){return new Promise(((r,i)=>{setTimeout((()=>{clearInterval(o),i(new Error(e))}),s);const o=setInterval((()=>{t()&&(clearInterval(o),r())}),n)}))}))}function P(t,e){return i(this,void 0,void 0,(function*(){let s=null;const n=new Promise(((t,n)=>{s=setTimeout((()=>{n("EXECUTION TIMEOUT")}),e)}));try{return yield Promise.race([t(),n])}finally{s&&clearTimeout(s)}}))}const I=r.DataFrame.fromColumns([r.Column.fromStrings("col",["val1","val2","val3"])]);function x(t,e,s){var o;return i(this,void 0,void 0,(function*(){(null==s?void 0:s.detectSemanticTypes)&&(yield n.data.detectSemanticTypes(e));let i=n.shell.addTableView(e);const a=`[name=viewer-${t.replace(/\s+/g,"-")} i]`,l=`${a} canvas,${a} svg,${a} img,\n ${a} input,${a} h1,${a} a,${a} .d4-viewer-error`,c=[];try{let h=i.addViewer(t);yield L((()=>null!==document.querySelector(l)),"cannot load viewer",3e3);const u=null===(o=document.querySelector(l))||void 0===o?void 0:o.tagName;if(c.push(Array.from(i.viewers).length),!(null==s?void 0:s.readOnly)){Array.from(e.row(0).cells).forEach((t=>t.value=null));const t=e.rowCount<20?Math.floor(e.rowCount/2):10;e.rows.select((e=>e.idx>=0&&e.idx<t)),yield _(50);for(let s=t;s<2*t;s++)e.filter.set(s,!1);yield _(50),e.currentRowIdx=1;const s=e.clone();e.columns.names().slice(0,Math.ceil(e.columns.length/2)).forEach((t=>e.columns.remove(t))),yield _(100),i.dataFrame=s}const m=h.getOptions(!0).look,d=h.getProperties(),g={};Object.keys(m).filter((t=>"boolean"==typeof m[t])).forEach((t=>g[t]=!m[t])),d.filter((t=>null!==t.choices)).forEach((t=>g[t.name]=t.choices.find((e=>e!==m[t.name])))),h.setOptions(g),yield _(300);const p=i.saveLayout(),f=h.getOptions().look;i.resetLayout(),c.push(Array.from(i.viewers).length),i.loadLayout(p);const y=`${a} ${u}`;if(yield L((()=>null!==document.querySelector(y)),"cannot load viewer from layout",3e3),c.push(Array.from(i.viewers).length),h=Array.from(i.viewers).find((t=>"Grid"!==t.type)),C(c,[2,1,2]),w(JSON.stringify(h.getOptions().look),JSON.stringify(f)),!1!==(null==s?void 0:s.arbitraryDfTest)){n.shell.closeAll(),yield _(100),i=n.shell.addTableView(I);try{h=i.addViewer(t)}catch(t){return n.shell.closeAll(),void r.Balloon.closeAll()}yield L((()=>null!==document.querySelector(l)),"cannot load viewer on arbitrary dataset",3e3)}}finally{n.shell.closeAll(),r.Balloon.closeAll()}}))}},3659:(t,e,s)=>{"use strict";s.d(e,{OW:()=>n});class n extends Float32Array{}},850:(t,e,s)=>{"use strict";s.d(e,{$G:()=>a,Fv:()=>u,MA:()=>l,On:()=>o,dP:()=>h,hu:()=>i,kO:()=>c});var n=s(3659),r=s(4588);function i(t=!1,e="Assertion error."){if(!t)throw new Error(e)}function o(t,e,s=1){const r=t.length;i(r==e.length,"Vector lengths do not match.");const o=new n.OW(r);for(let n=0;n<t.length;++n)o[n]=t[n]+s*e[n];return o}function a(t){let e=0;for(let s=0;s<t.length;s++)e+=t[s]*t[s];return Math.sqrt(e)}function l(t,e){if(t.length!=e.length)throw new Error("The dimensionality of the vectors must match");let s=0;for(let n=0;n<t.length;n++)s+=t[n]*e[n];return s}function c(t,e,s=1){const i=function(t,e,s=0){return new Array(t).fill(s).map((()=>new n.OW(e).fill(s)))}(t,e);for(let n=0;n<t;++n)for(let t=0;t<e;++t)i[n][t]=(0,r.t)(s);return i}function h(t,e){let s=0;const n=t.length;if(n!==e.length)throw new Error("The dimensionality of the vectors must match");for(let r=0;r<n;++r)s+=Math.pow(t[r]-e[r],2);return Math.sqrt(s)}function u(t){const e=t.length;let s=0,n=0;for(let r=0;r<e;++r)s+=t[r],n+=Math.pow(t[r],2);const r=s/e,i=1/Math.sqrt(n/e-Math.pow(r,2));for(let s=0;s<e;++s)t[s]=(t[s]-r)*i;return t}},7659:(t,e,s)=>{"use strict";e.Z=void 0;var n=s(6215);Object.defineProperty(e,"Z",{enumerable:!0,get:function(){return n.TSNE}})},6215:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.TSNE=void 0,e.TSNE=class{constructor(t){this.returnV=!1,this.vValue=0,this.iter=0,t=t||{},this.perplexity=this.getopt(t,"perplexity",30),this.dim=this.getopt(t,"dim",2),this.epsilon=this.getopt(t,"epsilon",10)}assert(t,e){if(!t)throw e||"Assertion failed"}getopt(t,e,s){return t.hasOwnProperty(e)?t[e]:s}gaussRandom(){if(this.returnV)return this.returnV=!1,this.vValue;const t=2*Math.random()-1,e=2*Math.random()-1,s=t*t+e*e;if(0===s||s>1)return this.gaussRandom();const n=Math.sqrt(-2*Math.log(s)/s);return this.vValue=e*n,this.returnV=!0,t*n}randn(t,e){return t+this.gaussRandom()*e}zeros(t){if(void 0===t||isNaN(t))return[];if("undefined"==typeof ArrayBuffer){const e=new Array(t);for(let s=0;s<t;s++)e[s]=0;return e}return new Float64Array(t)}randn2d(t,e,s){const n=void 0!==s,r=[];for(let i=0;i<t;i++){const t=[];for(let r=0;r<e;r++)n?t.push(s):t.push(this.randn(0,1e-4));r.push(t)}return r}L2(t,e){const s=t.length;let n=0;for(let r=0;r<s;r++){const s=t[r],i=e[r];n+=(s-i)*(s-i)}return n}xtod(t){const e=t.length,s=this.zeros(e*e);for(let n=0;n<e;n++)for(let r=n+1;r<e;r++){const i=this.L2(t[n],t[r]);s[n*e+r]=i,s[r*e+n]=i}return s}d2p(t,e,s){const n=Math.sqrt(t.length),r=Math.floor(n);this.assert(r===n,"D should have square number of elements.");const i=Math.log(e),o=this.zeros(r*r),a=this.zeros(r);for(let e=0;e<r;e++){let n=-1/0,l=1/0,c=1,h=!1;const u=50;let m=0;for(;!h;){let o=0;for(let s=0;s<r;s++){let n=Math.exp(-t[e*r+s]*c);e===s&&(n=0),a[s]=n,o+=n}let d=0;for(let t=0;t<r;t++){let e;e=0===o?0:a[t]/o,a[t]=e,e>1e-7&&(d-=e*Math.log(e))}d>i?(n=c,l===1/0?c*=2:c=(c+l)/2):(l=c,n===-1/0?c/=2:c=(c+n)/2),m++,Math.abs(d-i)<s&&(h=!0),m>=u&&(h=!0)}for(let t=0;t<r;t++)o[e*r+t]=a[t]}const l=this.zeros(r*r),c=2*r;for(let t=0;t<r;t++)for(let e=0;e<r;e++)l[t*r+e]=Math.max((o[t*r+e]+o[e*r+t])/c,1e-100);return l}sign(t){return t>0?1:t<0?-1:0}initDataRaw(t){const e=t.length,s=t[0].length;this.assert(e>0," X is empty? You must have some data!"),this.assert(s>0," X[0] is empty? Where is the data?");const n=this.xtod(t);this.P=this.d2p(n,this.perplexity,1e-4),this.N=e,this.initSolution()}initDataDist(t){const e=t.length;this.assert(e>0," X is empty? You must have some data!");const s=this.zeros(e*e);for(let n=0;n<e;n++)for(let r=n+1;r<e;r++){const i=t[n][r];s[n*e+r]=i,s[r*e+n]=i}this.P=this.d2p(s,this.perplexity,1e-4),this.N=e,this.initSolution()}initSolution(){this.Y=this.randn2d(this.N,this.dim),this.gains=this.randn2d(this.N,this.dim,1),this.ystep=this.randn2d(this.N,this.dim,0),this.iter=0}getSolution(){return this.Y}step(){this.iter+=1;const t=this.N,e=this.costGrad(this.Y),s=e.cost,n=e.grad,r=this.zeros(this.dim);for(let e=0;e<t;e++)for(let t=0;t<this.dim;t++){const s=n[e][t],i=this.ystep[e][t],o=this.gains[e][t];let a=this.sign(s)===this.sign(i)?.8*o:o+.2;a<.01&&(a=.01),this.gains[e][t]=a;const l=(this.iter<250?.5:.8)*i-this.epsilon*a*n[e][t];this.ystep[e][t]=l,this.Y[e][t]+=l,r[t]+=this.Y[e][t]}for(let e=0;e<t;e++)for(let s=0;s<this.dim;s++)this.Y[e][s]-=r[s]/t;return s}debugGrad(){const t=this.N,e=this.costGrad(this.Y),s=(e.cost,e.grad),n=1e-5;for(let e=0;e<t;e++)for(let t=0;t<this.dim;t++){const r=this.Y[e][t];this.Y[e][t]=r+n;const i=this.costGrad(this.Y);this.Y[e][t]=r-n;const o=this.costGrad(this.Y),a=s[e][t],l=(i.cost-o.cost)/(2*n);console.log(e+","+t+": gradcheck analytic: "+a+" vs. numerical: "+l),this.Y[e][t]=r}}costGrad(t){const e=this.N,s=this.dim,n=this.P,r=this.iter<100?4:1,i=this.zeros(e*e);let o=0;for(let n=0;n<e;n++)for(let r=n+1;r<e;r++){let a=0;for(let e=0;e<s;e++){const s=t[n][e]-t[r][e];a+=s*s}const l=1/(1+a);i[n*e+r]=l,i[r*e+n]=l,o+=2*l}const a=e*e,l=this.zeros(a);for(let t=0;t<a;t++)l[t]=Math.max(i[t]/o,1e-100);let c=0;const h=[];for(let o=0;o<e;o++){const a=new Array(s);for(let t=0;t<s;t++)a[t]=0;for(let h=0;h<e;h++){c+=-n[o*e+h]*Math.log(l[o*e+h]);const u=4*(r*n[o*e+h]-l[o*e+h])*i[o*e+h];for(let e=0;e<s;e++)a[e]+=u*(t[o][e]-t[h][e])}h.push(a)}return{cost:c,grad:h}}}},5362:(t,e,s)=>{"use strict";s.d(e,{Z:()=>a});var n=s(7537),r=s.n(n),i=s(3645),o=s.n(i)()(r());o.push([t.id,".macromolecule-cell-comp-analysis-host{\n max-height: 250px;\n overflow-y: scroll;\n}\n\n.macromolecule-cell-comp-analysis-bar{\n height: inherit;\n display: block;\n margin-top: 1.5px;\n margin-bottom: 1.5px;\n margin-right: 3px;\n}\n\n.macromolecule-cell-comp-analysis-value{\n display: flex;\n}","",{version:3,sources:["webpack://./css/composition-analysis.css"],names:[],mappings:"AAAA;IACI,iBAAiB;IACjB,kBAAkB;AACtB;;AAEA;IACI,eAAe;IACf,cAAc;IACd,iBAAiB;IACjB,oBAAoB;IACpB,iBAAiB;AACrB;;AAEA;IACI,aAAa;AACjB",sourcesContent:[".macromolecule-cell-comp-analysis-host{\n max-height: 250px;\n overflow-y: scroll;\n}\n\n.macromolecule-cell-comp-analysis-bar{\n height: inherit;\n display: block;\n margin-top: 1.5px;\n margin-bottom: 1.5px;\n margin-right: 3px;\n}\n\n.macromolecule-cell-comp-analysis-value{\n display: flex;\n}"],sourceRoot:""}]);const a=o},9564:(t,e,s)=>{"use strict";s.d(e,{Z:()=>a});var n=s(7537),r=s.n(n),i=s(3645),o=s.n(i)()(r());o.push([t.id,".kalign-version {\n margin-bottom: 0;\n text-align: end;\n font-size: 12px;\n opacity: 0.8;\n}\nbutton.msa-params-button.ui-btn {\n justify-content: end;\n}","",{version:3,sources:["webpack://./css/msa.css"],names:[],mappings:"AAAA;IACI,gBAAgB;IAChB,eAAe;IACf,eAAe;IACf,YAAY;AAChB;AACA;IACI,oBAAoB;AACxB",sourcesContent:[".kalign-version {\n margin-bottom: 0;\n text-align: end;\n font-size: 12px;\n opacity: 0.8;\n}\nbutton.msa-params-button.ui-btn {\n justify-content: end;\n}"],sourceRoot:""}]);const a=o},9414:(t,e,s)=>{"use strict";s.d(e,{Z:()=>a});var n=s(7537),r=s.n(n),i=s(3645),o=s.n(i)()(r());o.push([t.id,".scatter_plot_link {\n position: absolute!important;\n right: 10px;\n}\n\n.cliffs_grid {\n top: 10px;\n}\n\n.show_only_cliffs {\n top: 30px;\n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings {\n font-size: 18px;\n position: absolute;\n height: 28px;\n}\n","",{version:3,sources:["webpack://./node_modules/@datagrok-libraries/ml/css/styles.css"],names:[],mappings:"AAAA;IACI,4BAA4B;IAC5B,WAAW;AACf;;AAEA;IACI,SAAS;AACb;;AAEA;IACI,SAAS;AACb;;AAEA;IACI,eAAe;IACf,kBAAkB;IAClB,YAAY;AAChB",sourcesContent:[".scatter_plot_link {\n position: absolute!important;\n right: 10px;\n}\n\n.cliffs_grid {\n top: 10px;\n}\n\n.show_only_cliffs {\n top: 30px;\n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings {\n font-size: 18px;\n position: absolute;\n height: 28px;\n}\n"],sourceRoot:""}]);const a=o},3645:t=>{"use strict";t.exports=function(t){var e=[];return e.toString=function(){return this.map((function(e){var s="",n=void 0!==e[5];return e[4]&&(s+="@supports (".concat(e[4],") {")),e[2]&&(s+="@media ".concat(e[2]," {")),n&&(s+="@layer".concat(e[5].length>0?" ".concat(e[5]):""," {")),s+=t(e),n&&(s+="}"),e[2]&&(s+="}"),e[4]&&(s+="}"),s})).join("")},e.i=function(t,s,n,r,i){"string"==typeof t&&(t=[[null,t,void 0]]);var o={};if(n)for(var a=0;a<this.length;a++){var l=this[a][0];null!=l&&(o[l]=!0)}for(var c=0;c<t.length;c++){var h=[].concat(t[c]);n&&o[h[0]]||(void 0!==i&&(void 0===h[5]||(h[1]="@layer".concat(h[5].length>0?" ".concat(h[5]):""," {").concat(h[1],"}")),h[5]=i),s&&(h[2]?(h[1]="@media ".concat(h[2]," {").concat(h[1],"}"),h[2]=s):h[2]=s),r&&(h[4]?(h[1]="@supports (".concat(h[4],") {").concat(h[1],"}"),h[4]=r):h[4]="".concat(r)),e.push(h))}},e}},7537:t=>{"use strict";t.exports=function(t){var e=t[1],s=t[3];if(!s)return e;if("function"==typeof btoa){var n=btoa(unescape(encodeURIComponent(JSON.stringify(s)))),r="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(n),i="/*# ".concat(r," */");return[e].concat([i]).join("\n")}return[e].join("\n")}},9133:function(t,e,s){var n;!function(e,r){var i={};!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 s(t,s,n,r,i){for(var o,a,l,c,h,u,m,d,g,p,f,y,w;i>=64;){for(o=s[0],a=s[1],l=s[2],c=s[3],h=s[4],u=s[5],m=s[6],d=s[7],p=0;p<16;p++)f=r+4*p,t[p]=(255&n[f])<<24|(255&n[f+1])<<16|(255&n[f+2])<<8|255&n[f+3];for(p=16;p<64;p++)y=((g=t[p-2])>>>17|g<<15)^(g>>>19|g<<13)^g>>>10,w=((g=t[p-15])>>>7|g<<25)^(g>>>18|g<<14)^g>>>3,t[p]=(y+t[p-7]|0)+(w+t[p-16]|0);for(p=0;p<64;p++)y=(((h>>>6|h<<26)^(h>>>11|h<<21)^(h>>>25|h<<7))+(h&u^~h&m)|0)+(d+(e[p]+t[p]|0)|0)|0,w=((o>>>2|o<<30)^(o>>>13|o<<19)^(o>>>22|o<<10))+(o&a^o&l^a&l)|0,d=m,m=u,u=h,h=c+y|0,c=l,l=a,a=o,o=y+w|0;s[0]+=o,s[1]+=a,s[2]+=l,s[3]+=c,s[4]+=h,s[5]+=u,s[6]+=m,s[7]+=d,r+=64,i-=64}return r}var n=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 n=0;if(this.bytesHashed+=e,this.bufferLength>0){for(;this.bufferLength<64&&e>0;)this.buffer[this.bufferLength++]=t[n++],e--;64===this.bufferLength&&(s(this.temp,this.state,this.buffer,0,64),this.bufferLength=0)}for(e>=64&&(n=s(this.temp,this.state,t,n,e),e%=64);e>0;)this.buffer[this.bufferLength++]=t[n++],e--;return this},e.prototype.finish=function(t){if(!this.finished){var e=this.bytesHashed,n=this.bufferLength,r=e/536870912|0,i=e<<3,o=e%64<56?64:128;this.buffer[n]=128;for(var a=n+1;a<o-8;a++)this.buffer[a]=0;this.buffer[o-8]=r>>>24&255,this.buffer[o-7]=r>>>16&255,this.buffer[o-6]=r>>>8&255,this.buffer[o-5]=r>>>0&255,this.buffer[o-4]=i>>>24&255,this.buffer[o-3]=i>>>16&255,this.buffer[o-2]=i>>>8&255,this.buffer[o-1]=i>>>0&255,s(this.temp,this.state,this.buffer,0,o),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 s=0;s<this.state.length;s++)this.state[s]=t[s];this.bytesHashed=e,this.finished=!1,this.bufferLength=0},e}();t.Hash=n;var r=function(){function t(t){this.inner=new n,this.outer=new n,this.blockSize=this.inner.blockSize,this.digestLength=this.inner.digestLength;var e=new Uint8Array(this.blockSize);if(t.length>this.blockSize)(new n).update(t).finish(e).clean();else for(var s=0;s<t.length;s++)e[s]=t[s];for(s=0;s<e.length;s++)e[s]^=54;for(this.inner.update(e),s=0;s<e.length;s++)e[s]^=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),s=0;s<e.length;s++)e[s]=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 n).update(t),s=e.digest();return e.clean(),s}function o(t,e){var s=new r(t).update(e),n=s.digest();return s.clean(),n}function a(t,e,s,n){var r=n[0];if(0===r)throw new Error("hkdf: cannot expand more");e.reset(),r>1&&e.update(t),s&&e.update(s),e.update(n),e.finish(t),n[0]++}t.HMAC=r,t.hash=i,t.default=i,t.hmac=o;var l=new Uint8Array(t.digestLength);t.hkdf=function(t,e,s,n){void 0===e&&(e=l),void 0===n&&(n=32);for(var i=new Uint8Array([1]),c=o(e,t),h=new r(c),u=new Uint8Array(h.digestLength),m=u.length,d=new Uint8Array(n),g=0;g<n;g++)m===u.length&&(a(u,h,s,i),m=0),d[g]=u[m++];return h.clean(),u.fill(0),i.fill(0),d},t.pbkdf2=function(t,e,s,n){for(var i=new r(t),o=i.digestLength,a=new Uint8Array(4),l=new Uint8Array(o),c=new Uint8Array(o),h=new Uint8Array(n),u=0;u*o<n;u++){var m=u+1;a[0]=m>>>24&255,a[1]=m>>>16&255,a[2]=m>>>8&255,a[3]=m>>>0&255,i.reset(),i.update(e),i.update(a),i.finish(c);for(var d=0;d<o;d++)l[d]=c[d];for(d=2;d<=s;d++){i.reset(),i.update(c).finish(c);for(var g=0;g<o;g++)l[g]^=c[g]}for(d=0;d<o&&u*o+d<n;d++)h[u*o+d]=l[d]}for(u=0;u<o;u++)l[u]=c[u]=0;for(u=0;u<4;u++)a[u]=0;return i.clean(),h}}(i);var o=i.default;for(var a in i)o[a]=i[a];"object"==typeof t.exports?t.exports=o:void 0===(n=function(){return o}.call(i,s,i,t))||(t.exports=n)}()},1811:(t,e,s)=>{"use strict";s.d(e,{T:()=>r});const n=new Uint32Array(65536),r=(t,e)=>{if(t.length<e.length){const s=e;e=t,t=s}return 0===e.length?t.length:t.length<=32?((t,e)=>{const s=t.length,r=e.length,i=1<<s-1;let o=-1,a=0,l=s,c=s;for(;c--;)n[t.charCodeAt(c)]|=1<<c;for(c=0;c<r;c++){let t=n[e.charCodeAt(c)];const s=t|a;t|=(t&o)+o^o,a|=~(t|o),o&=t,a&i&&l++,o&i&&l--,a=a<<1|1,o=o<<1|~(s|a),a&=s}for(c=s;c--;)n[t.charCodeAt(c)]=0;return l})(t,e):((t,e)=>{const s=e.length,r=t.length,i=[],o=[],a=Math.ceil(s/32),l=Math.ceil(r/32);for(let t=0;t<a;t++)o[t]=-1,i[t]=0;let c=0;for(;c<l-1;c++){let a=0,l=-1;const h=32*c,u=Math.min(32,r)+h;for(let e=h;e<u;e++)n[t.charCodeAt(e)]|=1<<e;for(let t=0;t<s;t++){const s=n[e.charCodeAt(t)],r=o[t/32|0]>>>t&1,c=i[t/32|0]>>>t&1,h=s|a,u=((s|c)&l)+l^l|s|c;let m=a|~(u|l),d=l&u;m>>>31^r&&(o[t/32|0]^=1<<t),d>>>31^c&&(i[t/32|0]^=1<<t),m=m<<1|r,d=d<<1|c,l=d|~(h|m),a=m&h}for(let e=h;e<u;e++)n[t.charCodeAt(e)]=0}let h=0,u=-1;const m=32*c,d=Math.min(32,r-m)+m;for(let e=m;e<d;e++)n[t.charCodeAt(e)]|=1<<e;let g=r;for(let t=0;t<s;t++){const s=n[e.charCodeAt(t)],a=o[t/32|0]>>>t&1,l=i[t/32|0]>>>t&1,c=s|h,m=((s|l)&u)+u^u|s|l;let d=h|~(m|u),p=u&m;g+=d>>>r-1&1,g-=p>>>r-1&1,d>>>31^a&&(o[t/32|0]^=1<<t),p>>>31^l&&(i[t/32|0]^=1<<t),d=d<<1|a,p=p<<1|l,u=p|~(c|d),h=d&c}for(let e=m;e<d;e++)n[t.charCodeAt(e)]=0;return g})(t,e)}},7531:(t,e,s)=>{"use strict";s.d(e,{Z:()=>r});const n=Object.prototype.toString;function r(t){return n.call(t).endsWith("Array]")}},3979:(t,e)=>{"use strict";e.H$=void 0,e.H$=function(t,e,s){var n=function(t,e,s){if(0===t.length||0===e.length)return 0;if(s&&!s.caseSensitive&&(t=t.toUpperCase(),e=e.toUpperCase()),t===e)return 1;for(var n=0,r=t.length,i=e.length,o=Math.floor(Math.max(r,i)/2)-1,a=new Array(r),l=new Array(i),c=0;c<r;c++)for(var h=Math.max(0,c-o);h<=Math.min(i,c+o+1);h++)if(!a[c]&&!l[h]&&t[c]===e[h]){++n,a[c]=l[h]=!0;break}if(0===n)return 0;var u=0,m=0;for(c=0;c<r;c++)if(a[c]){for(;!l[m];)m++;t.charAt(c)!==e.charAt(m++)&&u++}return(n/r+n/i+(n-(u/=2))/n)/3}(t,e,s),r=0;if(n>.7){for(var i=Math.min(t.length,e.length),o=0;t[o]===e[o]&&o<4&&o<i;)++r,o++;n+=.1*r*(1-n)}return n}},5111:(t,e,s)=>{"use strict";s.d(e,{Z:()=>r});var n=s(6044);function r(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!(0,n.N)(t))throw new TypeError("input must be an array");if(0===t.length)throw new TypeError("input must not be empty");var s=e.fromIndex,r=void 0===s?0:s,i=e.toIndex,o=void 0===i?t.length:i;if(r<0||r>=t.length||!Number.isInteger(r))throw new Error("fromIndex must be a positive integer smaller than length");if(o<=r||o>t.length||!Number.isInteger(o))throw new Error("toIndex must be an integer greater than fromIndex and at most equal to length");for(var a=t[r],l=r+1;l<o;l++)t[l]>a&&(a=t[l]);return a}},6044:(t,e,s)=>{"use strict";s.d(e,{N:()=>r});const n=Object.prototype.toString;function r(t){return n.call(t).endsWith("Array]")}},1772:(t,e,s)=>{"use strict";s.d(e,{Z:()=>r});var n=s(994);function r(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!(0,n.N)(t))throw new TypeError("input must be an array");if(0===t.length)throw new TypeError("input must not be empty");var s=e.fromIndex,r=void 0===s?0:s,i=e.toIndex,o=void 0===i?t.length:i;if(r<0||r>=t.length||!Number.isInteger(r))throw new Error("fromIndex must be a positive integer smaller than length");if(o<=r||o>t.length||!Number.isInteger(o))throw new Error("toIndex must be an integer greater than fromIndex and at most equal to length");for(var a=t[r],l=r+1;l<o;l++)t[l]<a&&(a=t[l]);return a}},994:(t,e,s)=>{"use strict";s.d(e,{N:()=>r});const n=Object.prototype.toString;function r(t){return n.call(t).endsWith("Array]")}},5408:(t,e,s)=>{"use strict";s.d(e,{Z:()=>o});var n=s(6241),r=s(5111),i=s(1772);function o(t){var e,s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!(0,n.N)(t))throw new TypeError("input must be an array");if(0===t.length)throw new TypeError("input must not be empty");if(void 0!==s.output){if(!(0,n.N)(s.output))throw new TypeError("output option must be an array if specified");e=s.output}else e=new Array(t.length);var o=(0,i.Z)(t),a=(0,r.Z)(t);if(o===a)throw new RangeError("minimum and maximum input values are equal. Cannot rescale a constant array");var l=s.min,c=void 0===l?s.autoMinMax?o:0:l,h=s.max,u=void 0===h?s.autoMinMax?a:1:h;if(c>=u)throw new RangeError("min option must be smaller than max option");for(var m=(u-c)/(a-o),d=0;d<t.length;d++)e[d]=(t[d]-o)*m+c;return e}},6241:(t,e,s)=>{"use strict";s.d(e,{N:()=>r});const n=Object.prototype.toString;function r(t){return n.call(t).endsWith("Array]")}},1353:(t,e,s)=>{"use strict";function n(t,e,s){let n=0;const r=s(e);for(let e=0;e<t.x.length;e++)n+=Math.abs(t.y[e]-r(t.x[e]));return n}s.d(e,{Z:()=>n})},3107:(t,e,s)=>{"use strict";s.d(e,{Z:()=>o});var n=s(7531),r=s(1353),i=s(8188);function o(t,e,s={}){let{maxIterations:o=100,gradientDifference:a=.1,damping:l=0,errorTolerance:c=.01,minValues:h,maxValues:u,initialValues:m}=s;if(l<=0)throw new Error("The damping option must be a positive number");if(!t.x||!t.y)throw new Error("The data parameter must have x and y elements");if(!(0,n.Z)(t.x)||t.x.length<2||!(0,n.Z)(t.y)||t.y.length<2)throw new Error("The data parameter elements must be an array with more than 2 points");if(t.x.length!==t.y.length)throw new Error("The data parameter elements must have the same size");let d=m||new Array(e.length).fill(1),g=d.length;if(u=u||new Array(g).fill(Number.MAX_SAFE_INTEGER),h=h||new Array(g).fill(Number.MIN_SAFE_INTEGER),u.length!==h.length)throw new Error("minValues and maxValues must be the same size");if(!(0,n.Z)(d))throw new Error("initialValues must be an array");let p,f=(0,r.Z)(t,d,e),y=f<=c;for(p=0;p<o&&!y;p++){d=(0,i.Z)(t,d,l,a,e);for(let t=0;t<g;t++)d[t]=Math.min(Math.max(h[t],d[t]),u[t]);if(f=(0,r.Z)(t,d,e),isNaN(f))break;y=f<=c}return{parameterValues:d,parameterError:f,iterations:p}}},8188:(t,e,s)=>{"use strict";s.d(e,{Z:()=>i});var n=s(1174),r=s(8345);function i(t,e,s,i,o){let a=s*i*i,l=n.Z.eye(e.length,e.length,a);const c=o(e);let h=new Float64Array(t.x.length);for(let e=0;e<t.x.length;e++)h[e]=c(t.x[e]);let u=function(t,e,s,r,i){const o=s.length,a=t.x.length;let l=new Array(o);for(let n=0;n<o;n++){l[n]=new Array(a);let o=s.slice();o[n]+=r;let c=i(o);for(let s=0;s<a;s++)l[n][s]=e[s]-c(t.x[s])}return new n.Z(l)}(t,h,e,i,o),m=function(t,e){const s=t.x.length;let r=new Array(s);for(let n=0;n<s;n++)r[n]=[t.y[n]-e[n]];return new n.Z(r)}(t,h),d=(0,r.S)(l.add(u.mmul(u.transpose())));return(e=(e=new n.Z([e])).sub(d.mmul(u).mmul(m).mul(i).transpose())).to1DArray()}},5776:(t,e,s)=>{"use strict";s.d(e,{N:()=>r});const n=Object.prototype.toString;function r(t){return n.call(t).endsWith("Array]")}},2313:(t,e,s)=>{"use strict";s.d(e,{Z:()=>i});var n=s(1174),r=s(8353);class i{constructor(t){let e,s,n,i,o,a,l,c,h,u=(t=r.Z.checkMatrix(t)).clone(),m=u.rows,d=u.columns,g=new Float64Array(m),p=1;for(e=0;e<m;e++)g[e]=e;for(c=new Float64Array(m),s=0;s<d;s++){for(e=0;e<m;e++)c[e]=u.get(e,s);for(e=0;e<m;e++){for(h=Math.min(e,s),o=0,n=0;n<h;n++)o+=u.get(e,n)*c[n];c[e]-=o,u.set(e,s,c[e])}for(i=s,e=s+1;e<m;e++)Math.abs(c[e])>Math.abs(c[i])&&(i=e);if(i!==s){for(n=0;n<d;n++)a=u.get(i,n),u.set(i,n,u.get(s,n)),u.set(s,n,a);l=g[i],g[i]=g[s],g[s]=l,p=-p}if(s<m&&0!==u.get(s,s))for(e=s+1;e<m;e++)u.set(e,s,u.get(e,s)/u.get(s,s))}this.LU=u,this.pivotVector=g,this.pivotSign=p}isSingular(){let t=this.LU,e=t.columns;for(let s=0;s<e;s++)if(0===t.get(s,s))return!0;return!1}solve(t){t=n.Z.checkMatrix(t);let e=this.LU;if(e.rows!==t.rows)throw new Error("Invalid matrix dimensions");if(this.isSingular())throw new Error("LU matrix is singular");let s,r,i,o=t.columns,a=t.subMatrixRow(this.pivotVector,0,o-1),l=e.columns;for(i=0;i<l;i++)for(s=i+1;s<l;s++)for(r=0;r<o;r++)a.set(s,r,a.get(s,r)-a.get(i,r)*e.get(s,i));for(i=l-1;i>=0;i--){for(r=0;r<o;r++)a.set(i,r,a.get(i,r)/e.get(i,i));for(s=0;s<i;s++)for(r=0;r<o;r++)a.set(s,r,a.get(s,r)-a.get(i,r)*e.get(s,i))}return a}get determinant(){let t=this.LU;if(!t.isSquare())throw new Error("Matrix must be square");let e=this.pivotSign,s=t.columns;for(let n=0;n<s;n++)e*=t.get(n,n);return e}get lowerTriangularMatrix(){let t=this.LU,e=t.rows,s=t.columns,r=new n.Z(e,s);for(let n=0;n<e;n++)for(let e=0;e<s;e++)n>e?r.set(n,e,t.get(n,e)):n===e?r.set(n,e,1):r.set(n,e,0);return r}get upperTriangularMatrix(){let t=this.LU,e=t.rows,s=t.columns,r=new n.Z(e,s);for(let n=0;n<e;n++)for(let e=0;e<s;e++)n<=e?r.set(n,e,t.get(n,e)):r.set(n,e,0);return r}get pivotPermutationVector(){return Array.from(this.pivotVector)}}},7072:(t,e,s)=>{"use strict";s.d(e,{Z:()=>o});var n=s(1174),r=s(8353),i=s(6310);class o{constructor(t){let e,s,n,o,a=(t=r.Z.checkMatrix(t)).clone(),l=t.rows,c=t.columns,h=new Float64Array(c);for(n=0;n<c;n++){let t=0;for(e=n;e<l;e++)t=(0,i.G)(t,a.get(e,n));if(0!==t){for(a.get(n,n)<0&&(t=-t),e=n;e<l;e++)a.set(e,n,a.get(e,n)/t);for(a.set(n,n,a.get(n,n)+1),s=n+1;s<c;s++){for(o=0,e=n;e<l;e++)o+=a.get(e,n)*a.get(e,s);for(o=-o/a.get(n,n),e=n;e<l;e++)a.set(e,s,a.get(e,s)+o*a.get(e,n))}}h[n]=-t}this.QR=a,this.Rdiag=h}solve(t){t=n.Z.checkMatrix(t);let e=this.QR,s=e.rows;if(t.rows!==s)throw new Error("Matrix row dimensions must agree");if(!this.isFullRank())throw new Error("Matrix is rank deficient");let r,i,o,a,l=t.columns,c=t.clone(),h=e.columns;for(o=0;o<h;o++)for(i=0;i<l;i++){for(a=0,r=o;r<s;r++)a+=e.get(r,o)*c.get(r,i);for(a=-a/e.get(o,o),r=o;r<s;r++)c.set(r,i,c.get(r,i)+a*e.get(r,o))}for(o=h-1;o>=0;o--){for(i=0;i<l;i++)c.set(o,i,c.get(o,i)/this.Rdiag[o]);for(r=0;r<o;r++)for(i=0;i<l;i++)c.set(r,i,c.get(r,i)-c.get(o,i)*e.get(r,o))}return c.subMatrix(0,h-1,0,l-1)}isFullRank(){let t=this.QR.columns;for(let e=0;e<t;e++)if(0===this.Rdiag[e])return!1;return!0}get upperTriangularMatrix(){let t,e,s=this.QR,r=s.columns,i=new n.Z(r,r);for(t=0;t<r;t++)for(e=0;e<r;e++)t<e?i.set(t,e,s.get(t,e)):t===e?i.set(t,e,this.Rdiag[t]):i.set(t,e,0);return i}get orthogonalMatrix(){let t,e,s,r,i=this.QR,o=i.rows,a=i.columns,l=new n.Z(o,a);for(s=a-1;s>=0;s--){for(t=0;t<o;t++)l.set(t,s,0);for(l.set(s,s,1),e=s;e<a;e++)if(0!==i.get(s,s)){for(r=0,t=s;t<o;t++)r+=i.get(t,s)*l.get(t,e);for(r=-r/i.get(s,s),t=s;t<o;t++)l.set(t,e,l.get(t,e)+r*i.get(t,s))}}return l}}},6943:(t,e,s)=>{"use strict";s.d(e,{Z:()=>o});var n=s(1174),r=s(8353),i=s(6310);class o{constructor(t,e={}){if((t=r.Z.checkMatrix(t)).isEmpty())throw new Error("Matrix must be non-empty");let s=t.rows,o=t.columns;const{computeLeftSingularVectors:a=!0,computeRightSingularVectors:l=!0,autoTranspose:c=!1}=e;let h,u=Boolean(a),m=Boolean(l),d=!1;if(s<o)if(c){h=t.transpose(),s=h.rows,o=h.columns,d=!0;let e=u;u=m,m=e}else h=t.clone(),console.warn("Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose");else h=t.clone();let g=Math.min(s,o),p=Math.min(s+1,o),f=new Float64Array(p),y=new n.Z(s,g),w=new n.Z(o,o),b=new Float64Array(o),T=new Float64Array(s),C=new Float64Array(p);for(let t=0;t<p;t++)C[t]=t;let A=Math.min(s-1,o),S=Math.max(0,Math.min(o-2,s)),E=Math.max(A,S);for(let t=0;t<E;t++){if(t<A){f[t]=0;for(let e=t;e<s;e++)f[t]=(0,i.G)(f[t],h.get(e,t));if(0!==f[t]){h.get(t,t)<0&&(f[t]=-f[t]);for(let e=t;e<s;e++)h.set(e,t,h.get(e,t)/f[t]);h.set(t,t,h.get(t,t)+1)}f[t]=-f[t]}for(let e=t+1;e<o;e++){if(t<A&&0!==f[t]){let n=0;for(let r=t;r<s;r++)n+=h.get(r,t)*h.get(r,e);n=-n/h.get(t,t);for(let r=t;r<s;r++)h.set(r,e,h.get(r,e)+n*h.get(r,t))}b[e]=h.get(t,e)}if(u&&t<A)for(let e=t;e<s;e++)y.set(e,t,h.get(e,t));if(t<S){b[t]=0;for(let e=t+1;e<o;e++)b[t]=(0,i.G)(b[t],b[e]);if(0!==b[t]){b[t+1]<0&&(b[t]=0-b[t]);for(let e=t+1;e<o;e++)b[e]/=b[t];b[t+1]+=1}if(b[t]=-b[t],t+1<s&&0!==b[t]){for(let e=t+1;e<s;e++)T[e]=0;for(let e=t+1;e<s;e++)for(let s=t+1;s<o;s++)T[e]+=b[s]*h.get(e,s);for(let e=t+1;e<o;e++){let n=-b[e]/b[t+1];for(let r=t+1;r<s;r++)h.set(r,e,h.get(r,e)+n*T[r])}}if(m)for(let e=t+1;e<o;e++)w.set(e,t,b[e])}}let M=Math.min(o,s+1);if(A<o&&(f[A]=h.get(A,A)),s<M&&(f[M-1]=0),S+1<M&&(b[S]=h.get(S,M-1)),b[M-1]=0,u){for(let t=A;t<g;t++){for(let e=0;e<s;e++)y.set(e,t,0);y.set(t,t,1)}for(let t=A-1;t>=0;t--)if(0!==f[t]){for(let e=t+1;e<g;e++){let n=0;for(let r=t;r<s;r++)n+=y.get(r,t)*y.get(r,e);n=-n/y.get(t,t);for(let r=t;r<s;r++)y.set(r,e,y.get(r,e)+n*y.get(r,t))}for(let e=t;e<s;e++)y.set(e,t,-y.get(e,t));y.set(t,t,1+y.get(t,t));for(let e=0;e<t-1;e++)y.set(e,t,0)}else{for(let e=0;e<s;e++)y.set(e,t,0);y.set(t,t,1)}}if(m)for(let t=o-1;t>=0;t--){if(t<S&&0!==b[t])for(let e=t+1;e<o;e++){let s=0;for(let n=t+1;n<o;n++)s+=w.get(n,t)*w.get(n,e);s=-s/w.get(t+1,t);for(let n=t+1;n<o;n++)w.set(n,e,w.get(n,e)+s*w.get(n,t))}for(let e=0;e<o;e++)w.set(e,t,0);w.set(t,t,1)}let v=M-1,N=0,_=Number.EPSILON;for(;M>0;){let t,e;for(t=M-2;t>=-1&&-1!==t;t--){const e=Number.MIN_VALUE+_*Math.abs(f[t]+Math.abs(f[t+1]));if(Math.abs(b[t])<=e||Number.isNaN(b[t])){b[t]=0;break}}if(t===M-2)e=4;else{let s;for(s=M-1;s>=t&&s!==t;s--){let e=(s!==M?Math.abs(b[s]):0)+(s!==t+1?Math.abs(b[s-1]):0);if(Math.abs(f[s])<=_*e){f[s]=0;break}}s===t?e=3:s===M-1?e=1:(e=2,t=s)}switch(t++,e){case 1:{let e=b[M-2];b[M-2]=0;for(let s=M-2;s>=t;s--){let n=(0,i.G)(f[s],e),r=f[s]/n,a=e/n;if(f[s]=n,s!==t&&(e=-a*b[s-1],b[s-1]=r*b[s-1]),m)for(let t=0;t<o;t++)n=r*w.get(t,s)+a*w.get(t,M-1),w.set(t,M-1,-a*w.get(t,s)+r*w.get(t,M-1)),w.set(t,s,n)}break}case 2:{let e=b[t-1];b[t-1]=0;for(let n=t;n<M;n++){let r=(0,i.G)(f[n],e),o=f[n]/r,a=e/r;if(f[n]=r,e=-a*b[n],b[n]=o*b[n],u)for(let e=0;e<s;e++)r=o*y.get(e,n)+a*y.get(e,t-1),y.set(e,t-1,-a*y.get(e,n)+o*y.get(e,t-1)),y.set(e,n,r)}break}case 3:{const e=Math.max(Math.abs(f[M-1]),Math.abs(f[M-2]),Math.abs(b[M-2]),Math.abs(f[t]),Math.abs(b[t])),n=f[M-1]/e,r=f[M-2]/e,a=b[M-2]/e,l=f[t]/e,c=b[t]/e,h=((r+n)*(r-n)+a*a)/2,d=n*a*(n*a);let g=0;0===h&&0===d||(g=h<0?0-Math.sqrt(h*h+d):Math.sqrt(h*h+d),g=d/(h+g));let p=(l+n)*(l-n)+g,T=l*c;for(let e=t;e<M-1;e++){let n=(0,i.G)(p,T);0===n&&(n=Number.MIN_VALUE);let r=p/n,a=T/n;if(e!==t&&(b[e-1]=n),p=r*f[e]+a*b[e],b[e]=r*b[e]-a*f[e],T=a*f[e+1],f[e+1]=r*f[e+1],m)for(let t=0;t<o;t++)n=r*w.get(t,e)+a*w.get(t,e+1),w.set(t,e+1,-a*w.get(t,e)+r*w.get(t,e+1)),w.set(t,e,n);if(n=(0,i.G)(p,T),0===n&&(n=Number.MIN_VALUE),r=p/n,a=T/n,f[e]=n,p=r*b[e]+a*f[e+1],f[e+1]=-a*b[e]+r*f[e+1],T=a*b[e+1],b[e+1]=r*b[e+1],u&&e<s-1)for(let t=0;t<s;t++)n=r*y.get(t,e)+a*y.get(t,e+1),y.set(t,e+1,-a*y.get(t,e)+r*y.get(t,e+1)),y.set(t,e,n)}b[M-2]=p,N+=1;break}case 4:if(f[t]<=0&&(f[t]=f[t]<0?-f[t]:0,m))for(let e=0;e<=v;e++)w.set(e,t,-w.get(e,t));for(;t<v&&!(f[t]>=f[t+1]);){let e=f[t];if(f[t]=f[t+1],f[t+1]=e,m&&t<o-1)for(let s=0;s<o;s++)e=w.get(s,t+1),w.set(s,t+1,w.get(s,t)),w.set(s,t,e);if(u&&t<s-1)for(let n=0;n<s;n++)e=y.get(n,t+1),y.set(n,t+1,y.get(n,t)),y.set(n,t,e);t++}N=0,M--}}if(d){let t=w;w=y,y=t}this.m=s,this.n=o,this.s=f,this.U=y,this.V=w}solve(t){let e=t,s=this.threshold,r=this.s.length,i=n.Z.zeros(r,r);for(let t=0;t<r;t++)Math.abs(this.s[t])<=s?i.set(t,t,0):i.set(t,t,1/this.s[t]);let o=this.U,a=this.rightSingularVectors,l=a.mmul(i),c=a.rows,h=o.rows,u=n.Z.zeros(c,h);for(let t=0;t<c;t++)for(let e=0;e<h;e++){let s=0;for(let n=0;n<r;n++)s+=l.get(t,n)*o.get(e,n);u.set(t,e,s)}return u.mmul(e)}solveForDiagonal(t){return this.solve(n.Z.diag(t))}inverse(){let t=this.V,e=this.threshold,s=t.rows,r=t.columns,i=new n.Z(s,this.s.length);for(let n=0;n<s;n++)for(let s=0;s<r;s++)Math.abs(this.s[s])>e&&i.set(n,s,t.get(n,s)/this.s[s]);let o=this.U,a=o.rows,l=o.columns,c=new n.Z(s,a);for(let t=0;t<s;t++)for(let e=0;e<a;e++){let s=0;for(let n=0;n<l;n++)s+=i.get(t,n)*o.get(e,n);c.set(t,e,s)}return c}get condition(){return this.s[0]/this.s[Math.min(this.m,this.n)-1]}get norm2(){return this.s[0]}get rank(){let t=Math.max(this.m,this.n)*this.s[0]*Number.EPSILON,e=0,s=this.s;for(let n=0,r=s.length;n<r;n++)s[n]>t&&e++;return e}get diagonal(){return Array.from(this.s)}get threshold(){return Number.EPSILON/2*Math.max(this.m,this.n)*this.s[0]}get leftSingularVectors(){return this.U}get rightSingularVectors(){return this.V}get diagonalMatrix(){return n.Z.diag(this.s)}}},6310:(t,e,s)=>{"use strict";function n(t,e){let s=0;return Math.abs(t)>Math.abs(e)?(s=e/t,Math.abs(t)*Math.sqrt(1+s*s)):0!==e?(s=t/e,Math.abs(e)*Math.sqrt(1+s*s)):0}s.d(e,{G:()=>n})},8345:(t,e,s)=>{"use strict";s.d(e,{S:()=>l});var n=s(2313),r=s(7072),i=s(6943),o=s(1174),a=s(8353);function l(t,e=!1){return t=a.Z.checkMatrix(t),e?new i.Z(t).inverse():function(t,e,s=!1){return t=a.Z.checkMatrix(t),e=a.Z.checkMatrix(e),s?new i.Z(t).solve(e):t.isSquare()?new n.Z(t).solve(e):new r.Z(t).solve(e)}(t,o.Z.eye(t.rows))}},3559:(t,e,s)=>{"use strict";s.d(e,{M:()=>o,V:()=>i});const n=" ".repeat(2),r=" ".repeat(4);function i(){return o(this)}function o(t,e={}){const{maxRows:s=15,maxColumns:i=10,maxNumSize:o=8,padMinus:l="auto"}=e;return`${t.constructor.name} {\n${n}[\n${r}${function(t,e,s,n,i){const{rows:o,columns:l}=t,c=Math.min(o,e),h=Math.min(l,s),u=[];if("auto"===i){i=!1;t:for(let e=0;e<c;e++)for(let s=0;s<h;s++)if(t.get(e,s)<0){i=!0;break t}}for(let e=0;e<c;e++){let s=[];for(let r=0;r<h;r++)s.push(a(t.get(e,r),n,i));u.push(`${s.join(" ")}`)}return h!==l&&(u[u.length-1]+=` ... ${l-s} more columns`),c!==o&&u.push(`... ${o-e} more rows`),u.join(`\n${r}`)}(t,s,i,o,l)}\n${n}]\n${n}rows: ${t.rows}\n${n}columns: ${t.columns}\n}`}function a(t,e,s){return(t>=0&&s?` ${l(t,e-1)}`:l(t,e)).padEnd(e)}function l(t,e){let s=t.toString();if(s.length<=e)return s;let n=t.toFixed(e);if(n.length>e&&(n=t.toFixed(Math.max(0,e-(n.length-e)))),n.length<=e&&!n.startsWith("0.000")&&!n.startsWith("-0.000"))return n;let r=t.toExponential(e);return r.length>e&&(r=t.toExponential(Math.max(0,e-(r.length-e)))),r.slice(0)}},5401:(t,e,s)=>{"use strict";function n(t,e){t.prototype.add=function(t){return"number"==typeof t?this.addS(t):this.addM(t)},t.prototype.addS=function(t){for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)+t);return this},t.prototype.addM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)+t.get(e,s));return this},t.add=function(t,s){return new e(t).add(s)},t.prototype.sub=function(t){return"number"==typeof t?this.subS(t):this.subM(t)},t.prototype.subS=function(t){for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)-t);return this},t.prototype.subM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)-t.get(e,s));return this},t.sub=function(t,s){return new e(t).sub(s)},t.prototype.subtract=t.prototype.sub,t.prototype.subtractS=t.prototype.subS,t.prototype.subtractM=t.prototype.subM,t.subtract=t.sub,t.prototype.mul=function(t){return"number"==typeof t?this.mulS(t):this.mulM(t)},t.prototype.mulS=function(t){for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)*t);return this},t.prototype.mulM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)*t.get(e,s));return this},t.mul=function(t,s){return new e(t).mul(s)},t.prototype.multiply=t.prototype.mul,t.prototype.multiplyS=t.prototype.mulS,t.prototype.multiplyM=t.prototype.mulM,t.multiply=t.mul,t.prototype.div=function(t){return"number"==typeof t?this.divS(t):this.divM(t)},t.prototype.divS=function(t){for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)/t);return this},t.prototype.divM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)/t.get(e,s));return this},t.div=function(t,s){return new e(t).div(s)},t.prototype.divide=t.prototype.div,t.prototype.divideS=t.prototype.divS,t.prototype.divideM=t.prototype.divM,t.divide=t.div,t.prototype.mod=function(t){return"number"==typeof t?this.modS(t):this.modM(t)},t.prototype.modS=function(t){for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)%t);return this},t.prototype.modM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)%t.get(e,s));return this},t.mod=function(t,s){return new e(t).mod(s)},t.prototype.modulus=t.prototype.mod,t.prototype.modulusS=t.prototype.modS,t.prototype.modulusM=t.prototype.modM,t.modulus=t.mod,t.prototype.and=function(t){return"number"==typeof t?this.andS(t):this.andM(t)},t.prototype.andS=function(t){for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)&t);return this},t.prototype.andM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)&t.get(e,s));return this},t.and=function(t,s){return new e(t).and(s)},t.prototype.or=function(t){return"number"==typeof t?this.orS(t):this.orM(t)},t.prototype.orS=function(t){for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)|t);return this},t.prototype.orM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)|t.get(e,s));return this},t.or=function(t,s){return new e(t).or(s)},t.prototype.xor=function(t){return"number"==typeof t?this.xorS(t):this.xorM(t)},t.prototype.xorS=function(t){for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)^t);return this},t.prototype.xorM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)^t.get(e,s));return this},t.xor=function(t,s){return new e(t).xor(s)},t.prototype.leftShift=function(t){return"number"==typeof t?this.leftShiftS(t):this.leftShiftM(t)},t.prototype.leftShiftS=function(t){for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)<<t);return this},t.prototype.leftShiftM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)<<t.get(e,s));return this},t.leftShift=function(t,s){return new e(t).leftShift(s)},t.prototype.signPropagatingRightShift=function(t){return"number"==typeof t?this.signPropagatingRightShiftS(t):this.signPropagatingRightShiftM(t)},t.prototype.signPropagatingRightShiftS=function(t){for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)>>t);return this},t.prototype.signPropagatingRightShiftM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)>>t.get(e,s));return this},t.signPropagatingRightShift=function(t,s){return new e(t).signPropagatingRightShift(s)},t.prototype.rightShift=function(t){return"number"==typeof t?this.rightShiftS(t):this.rightShiftM(t)},t.prototype.rightShiftS=function(t){for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)>>>t);return this},t.prototype.rightShiftM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)>>>t.get(e,s));return this},t.rightShift=function(t,s){return new e(t).rightShift(s)},t.prototype.zeroFillRightShift=t.prototype.rightShift,t.prototype.zeroFillRightShiftS=t.prototype.rightShiftS,t.prototype.zeroFillRightShiftM=t.prototype.rightShiftM,t.zeroFillRightShift=t.rightShift,t.prototype.not=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,~this.get(t,e));return this},t.not=function(t){return new e(t).not()},t.prototype.abs=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.abs(this.get(t,e)));return this},t.abs=function(t){return new e(t).abs()},t.prototype.acos=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.acos(this.get(t,e)));return this},t.acos=function(t){return new e(t).acos()},t.prototype.acosh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.acosh(this.get(t,e)));return this},t.acosh=function(t){return new e(t).acosh()},t.prototype.asin=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.asin(this.get(t,e)));return this},t.asin=function(t){return new e(t).asin()},t.prototype.asinh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.asinh(this.get(t,e)));return this},t.asinh=function(t){return new e(t).asinh()},t.prototype.atan=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.atan(this.get(t,e)));return this},t.atan=function(t){return new e(t).atan()},t.prototype.atanh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.atanh(this.get(t,e)));return this},t.atanh=function(t){return new e(t).atanh()},t.prototype.cbrt=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.cbrt(this.get(t,e)));return this},t.cbrt=function(t){return new e(t).cbrt()},t.prototype.ceil=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.ceil(this.get(t,e)));return this},t.ceil=function(t){return new e(t).ceil()},t.prototype.clz32=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.clz32(this.get(t,e)));return this},t.clz32=function(t){return new e(t).clz32()},t.prototype.cos=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.cos(this.get(t,e)));return this},t.cos=function(t){return new e(t).cos()},t.prototype.cosh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.cosh(this.get(t,e)));return this},t.cosh=function(t){return new e(t).cosh()},t.prototype.exp=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.exp(this.get(t,e)));return this},t.exp=function(t){return new e(t).exp()},t.prototype.expm1=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.expm1(this.get(t,e)));return this},t.expm1=function(t){return new e(t).expm1()},t.prototype.floor=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.floor(this.get(t,e)));return this},t.floor=function(t){return new e(t).floor()},t.prototype.fround=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.fround(this.get(t,e)));return this},t.fround=function(t){return new e(t).fround()},t.prototype.log=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.log(this.get(t,e)));return this},t.log=function(t){return new e(t).log()},t.prototype.log1p=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.log1p(this.get(t,e)));return this},t.log1p=function(t){return new e(t).log1p()},t.prototype.log10=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.log10(this.get(t,e)));return this},t.log10=function(t){return new e(t).log10()},t.prototype.log2=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.log2(this.get(t,e)));return this},t.log2=function(t){return new e(t).log2()},t.prototype.round=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.round(this.get(t,e)));return this},t.round=function(t){return new e(t).round()},t.prototype.sign=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.sign(this.get(t,e)));return this},t.sign=function(t){return new e(t).sign()},t.prototype.sin=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.sin(this.get(t,e)));return this},t.sin=function(t){return new e(t).sin()},t.prototype.sinh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.sinh(this.get(t,e)));return this},t.sinh=function(t){return new e(t).sinh()},t.prototype.sqrt=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.sqrt(this.get(t,e)));return this},t.sqrt=function(t){return new e(t).sqrt()},t.prototype.tan=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.tan(this.get(t,e)));return this},t.tan=function(t){return new e(t).tan()},t.prototype.tanh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.tanh(this.get(t,e)));return this},t.tanh=function(t){return new e(t).tanh()},t.prototype.trunc=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.trunc(this.get(t,e)));return this},t.trunc=function(t){return new e(t).trunc()},t.pow=function(t,s){return new e(t).pow(s)},t.prototype.pow=function(t){return"number"==typeof t?this.powS(t):this.powM(t)},t.prototype.powS=function(t){for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,Math.pow(this.get(e,s),t));return this},t.prototype.powM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,Math.pow(this.get(e,s),t.get(e,s)));return this}}s.d(e,{z:()=>n})},1174:(t,e,s)=>{"use strict";s.d(e,{X:()=>c,Z:()=>u});var n=s(5776),r=s(5408),i=s(3559),o=s(5401),a=s(9515),l=s(3018);class c{static from1DArray(t,e,s){if(t*e!==s.length)throw new RangeError("data length does not match given dimensions");let n=new u(t,e);for(let r=0;r<t;r++)for(let t=0;t<e;t++)n.set(r,t,s[r*e+t]);return n}static rowVector(t){let e=new u(1,t.length);for(let s=0;s<t.length;s++)e.set(0,s,t[s]);return e}static columnVector(t){let e=new u(t.length,1);for(let s=0;s<t.length;s++)e.set(s,0,t[s]);return e}static zeros(t,e){return new u(t,e)}static ones(t,e){return new u(t,e).fill(1)}static rand(t,e,s={}){if("object"!=typeof s)throw new TypeError("options must be an object");const{random:n=Math.random}=s;let r=new u(t,e);for(let s=0;s<t;s++)for(let t=0;t<e;t++)r.set(s,t,n());return r}static randInt(t,e,s={}){if("object"!=typeof s)throw new TypeError("options must be an object");const{min:n=0,max:r=1e3,random:i=Math.random}=s;if(!Number.isInteger(n))throw new TypeError("min must be an integer");if(!Number.isInteger(r))throw new TypeError("max must be an integer");if(n>=r)throw new RangeError("min must be smaller than max");let o=r-n,a=new u(t,e);for(let s=0;s<t;s++)for(let t=0;t<e;t++){let e=n+Math.round(i()*o);a.set(s,t,e)}return a}static eye(t,e,s){void 0===e&&(e=t),void 0===s&&(s=1);let n=Math.min(t,e),r=this.zeros(t,e);for(let t=0;t<n;t++)r.set(t,t,s);return r}static diag(t,e,s){let n=t.length;void 0===e&&(e=n),void 0===s&&(s=e);let r=Math.min(n,e,s),i=this.zeros(e,s);for(let e=0;e<r;e++)i.set(e,e,t[e]);return i}static min(t,e){t=this.checkMatrix(t),e=this.checkMatrix(e);let s=t.rows,n=t.columns,r=new u(s,n);for(let i=0;i<s;i++)for(let s=0;s<n;s++)r.set(i,s,Math.min(t.get(i,s),e.get(i,s)));return r}static max(t,e){t=this.checkMatrix(t),e=this.checkMatrix(e);let s=t.rows,n=t.columns,r=new this(s,n);for(let i=0;i<s;i++)for(let s=0;s<n;s++)r.set(i,s,Math.max(t.get(i,s),e.get(i,s)));return r}static checkMatrix(t){return c.isMatrix(t)?t:new u(t)}static isMatrix(t){return null!=t&&"Matrix"===t.klass}get size(){return this.rows*this.columns}apply(t){if("function"!=typeof t)throw new TypeError("callback must be a function");for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)t.call(this,e,s);return this}to1DArray(){let t=[];for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)t.push(this.get(e,s));return t}to2DArray(){let t=[];for(let e=0;e<this.rows;e++){t.push([]);for(let s=0;s<this.columns;s++)t[e].push(this.get(e,s))}return t}toJSON(){return this.to2DArray()}isRowVector(){return 1===this.rows}isColumnVector(){return 1===this.columns}isVector(){return 1===this.rows||1===this.columns}isSquare(){return this.rows===this.columns}isEmpty(){return 0===this.rows||0===this.columns}isSymmetric(){if(this.isSquare()){for(let t=0;t<this.rows;t++)for(let e=0;e<=t;e++)if(this.get(t,e)!==this.get(e,t))return!1;return!0}return!1}isEchelonForm(){let t=0,e=0,s=-1,n=!0,r=!1;for(;t<this.rows&&n;){for(e=0,r=!1;e<this.columns&&!1===r;)0===this.get(t,e)?e++:1===this.get(t,e)&&e>s?(r=!0,s=e):(n=!1,r=!0);t++}return n}isReducedEchelonForm(){let t=0,e=0,s=-1,n=!0,r=!1;for(;t<this.rows&&n;){for(e=0,r=!1;e<this.columns&&!1===r;)0===this.get(t,e)?e++:1===this.get(t,e)&&e>s?(r=!0,s=e):(n=!1,r=!0);for(let s=e+1;s<this.rows;s++)0!==this.get(t,s)&&(n=!1);t++}return n}echelonForm(){let t=this.clone(),e=0,s=0;for(;e<t.rows&&s<t.columns;){let n=e;for(let r=e;r<t.rows;r++)t.get(r,s)>t.get(n,s)&&(n=r);if(0===t.get(n,s))s++;else{t.swapRows(e,n);let r=t.get(e,s);for(let n=s;n<t.columns;n++)t.set(e,n,t.get(e,n)/r);for(let n=e+1;n<t.rows;n++){let r=t.get(n,s)/t.get(e,s);t.set(n,s,0);for(let i=s+1;i<t.columns;i++)t.set(n,i,t.get(n,i)-t.get(e,i)*r)}e++,s++}}return t}reducedEchelonForm(){let t=this.echelonForm(),e=t.columns,s=t.rows,n=s-1;for(;n>=0;)if(0===t.maxRow(n))n--;else{let r=0,i=!1;for(;r<s&&!1===i;)1===t.get(n,r)?i=!0:r++;for(let s=0;s<n;s++){let i=t.get(s,r);for(let o=r;o<e;o++){let e=t.get(s,o)-i*t.get(n,o);t.set(s,o,e)}}n--}return t}set(){throw new Error("set method is unimplemented")}get(){throw new Error("get method is unimplemented")}repeat(t={}){if("object"!=typeof t)throw new TypeError("options must be an object");const{rows:e=1,columns:s=1}=t;if(!Number.isInteger(e)||e<=0)throw new TypeError("rows must be a positive integer");if(!Number.isInteger(s)||s<=0)throw new TypeError("columns must be a positive integer");let n=new u(this.rows*e,this.columns*s);for(let t=0;t<e;t++)for(let e=0;e<s;e++)n.setSubMatrix(this,this.rows*t,this.columns*e);return n}fill(t){for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,t);return this}neg(){return this.mulS(-1)}getRow(t){(0,l.zb)(this,t);let e=[];for(let s=0;s<this.columns;s++)e.push(this.get(t,s));return e}getRowVector(t){return u.rowVector(this.getRow(t))}setRow(t,e){(0,l.zb)(this,t),e=(0,l.on)(this,e);for(let s=0;s<this.columns;s++)this.set(t,s,e[s]);return this}swapRows(t,e){(0,l.zb)(this,t),(0,l.zb)(this,e);for(let s=0;s<this.columns;s++){let n=this.get(t,s);this.set(t,s,this.get(e,s)),this.set(e,s,n)}return this}getColumn(t){(0,l.bp)(this,t);let e=[];for(let s=0;s<this.rows;s++)e.push(this.get(s,t));return e}getColumnVector(t){return u.columnVector(this.getColumn(t))}setColumn(t,e){(0,l.bp)(this,t),e=(0,l.Um)(this,e);for(let s=0;s<this.rows;s++)this.set(s,t,e[s]);return this}swapColumns(t,e){(0,l.bp)(this,t),(0,l.bp)(this,e);for(let s=0;s<this.rows;s++){let n=this.get(s,t);this.set(s,t,this.get(s,e)),this.set(s,e,n)}return this}addRowVector(t){t=(0,l.on)(this,t);for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)+t[s]);return this}subRowVector(t){t=(0,l.on)(this,t);for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)-t[s]);return this}mulRowVector(t){t=(0,l.on)(this,t);for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)*t[s]);return this}divRowVector(t){t=(0,l.on)(this,t);for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)/t[s]);return this}addColumnVector(t){t=(0,l.Um)(this,t);for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)+t[e]);return this}subColumnVector(t){t=(0,l.Um)(this,t);for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)-t[e]);return this}mulColumnVector(t){t=(0,l.Um)(this,t);for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)*t[e]);return this}divColumnVector(t){t=(0,l.Um)(this,t);for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)/t[e]);return this}mulRow(t,e){(0,l.zb)(this,t);for(let s=0;s<this.columns;s++)this.set(t,s,this.get(t,s)*e);return this}mulColumn(t,e){(0,l.bp)(this,t);for(let s=0;s<this.rows;s++)this.set(s,t,this.get(s,t)*e);return this}max(t){if(this.isEmpty())return NaN;switch(t){case"row":{const t=new Array(this.rows).fill(Number.NEGATIVE_INFINITY);for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.get(e,s)>t[e]&&(t[e]=this.get(e,s));return t}case"column":{const t=new Array(this.columns).fill(Number.NEGATIVE_INFINITY);for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.get(e,s)>t[s]&&(t[s]=this.get(e,s));return t}case void 0:{let t=this.get(0,0);for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.get(e,s)>t&&(t=this.get(e,s));return t}default:throw new Error(`invalid option: ${t}`)}}maxIndex(){(0,l.cT)(this);let t=this.get(0,0),e=[0,0];for(let s=0;s<this.rows;s++)for(let n=0;n<this.columns;n++)this.get(s,n)>t&&(t=this.get(s,n),e[0]=s,e[1]=n);return e}min(t){if(this.isEmpty())return NaN;switch(t){case"row":{const t=new Array(this.rows).fill(Number.POSITIVE_INFINITY);for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.get(e,s)<t[e]&&(t[e]=this.get(e,s));return t}case"column":{const t=new Array(this.columns).fill(Number.POSITIVE_INFINITY);for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.get(e,s)<t[s]&&(t[s]=this.get(e,s));return t}case void 0:{let t=this.get(0,0);for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.get(e,s)<t&&(t=this.get(e,s));return t}default:throw new Error(`invalid option: ${t}`)}}minIndex(){(0,l.cT)(this);let t=this.get(0,0),e=[0,0];for(let s=0;s<this.rows;s++)for(let n=0;n<this.columns;n++)this.get(s,n)<t&&(t=this.get(s,n),e[0]=s,e[1]=n);return e}maxRow(t){if((0,l.zb)(this,t),this.isEmpty())return NaN;let e=this.get(t,0);for(let s=1;s<this.columns;s++)this.get(t,s)>e&&(e=this.get(t,s));return e}maxRowIndex(t){(0,l.zb)(this,t),(0,l.cT)(this);let e=this.get(t,0),s=[t,0];for(let n=1;n<this.columns;n++)this.get(t,n)>e&&(e=this.get(t,n),s[1]=n);return s}minRow(t){if((0,l.zb)(this,t),this.isEmpty())return NaN;let e=this.get(t,0);for(let s=1;s<this.columns;s++)this.get(t,s)<e&&(e=this.get(t,s));return e}minRowIndex(t){(0,l.zb)(this,t),(0,l.cT)(this);let e=this.get(t,0),s=[t,0];for(let n=1;n<this.columns;n++)this.get(t,n)<e&&(e=this.get(t,n),s[1]=n);return s}maxColumn(t){if((0,l.bp)(this,t),this.isEmpty())return NaN;let e=this.get(0,t);for(let s=1;s<this.rows;s++)this.get(s,t)>e&&(e=this.get(s,t));return e}maxColumnIndex(t){(0,l.bp)(this,t),(0,l.cT)(this);let e=this.get(0,t),s=[0,t];for(let n=1;n<this.rows;n++)this.get(n,t)>e&&(e=this.get(n,t),s[0]=n);return s}minColumn(t){if((0,l.bp)(this,t),this.isEmpty())return NaN;let e=this.get(0,t);for(let s=1;s<this.rows;s++)this.get(s,t)<e&&(e=this.get(s,t));return e}minColumnIndex(t){(0,l.bp)(this,t),(0,l.cT)(this);let e=this.get(0,t),s=[0,t];for(let n=1;n<this.rows;n++)this.get(n,t)<e&&(e=this.get(n,t),s[0]=n);return s}diag(){let t=Math.min(this.rows,this.columns),e=[];for(let s=0;s<t;s++)e.push(this.get(s,s));return e}norm(t="frobenius"){let e=0;if("max"===t)return this.max();if("frobenius"===t){for(let t=0;t<this.rows;t++)for(let s=0;s<this.columns;s++)e+=this.get(t,s)*this.get(t,s);return Math.sqrt(e)}throw new RangeError(`unknown norm type: ${t}`)}cumulativeSum(){let t=0;for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)t+=this.get(e,s),this.set(e,s,t);return this}dot(t){c.isMatrix(t)&&(t=t.to1DArray());let e=this.to1DArray();if(e.length!==t.length)throw new RangeError("vectors do not have the same size");let s=0;for(let n=0;n<e.length;n++)s+=e[n]*t[n];return s}mmul(t){t=u.checkMatrix(t);let e=this.rows,s=this.columns,n=t.columns,r=new u(e,n),i=new Float64Array(s);for(let o=0;o<n;o++){for(let e=0;e<s;e++)i[e]=t.get(e,o);for(let t=0;t<e;t++){let e=0;for(let n=0;n<s;n++)e+=this.get(t,n)*i[n];r.set(t,o,e)}}return r}strassen2x2(t){t=u.checkMatrix(t);let e=new u(2,2);const s=this.get(0,0),n=t.get(0,0),r=this.get(0,1),i=t.get(0,1),o=this.get(1,0),a=t.get(1,0),l=this.get(1,1),c=t.get(1,1),h=(s+l)*(n+c),m=(o+l)*n,d=s*(i-c),g=l*(a-n),p=(s+r)*c,f=h+g-p+(r-l)*(a+c),y=d+p,w=m+g,b=h-m+d+(o-s)*(n+i);return e.set(0,0,f),e.set(0,1,y),e.set(1,0,w),e.set(1,1,b),e}strassen3x3(t){t=u.checkMatrix(t);let e=new u(3,3);const s=this.get(0,0),n=this.get(0,1),r=this.get(0,2),i=this.get(1,0),o=this.get(1,1),a=this.get(1,2),l=this.get(2,0),c=this.get(2,1),h=this.get(2,2),m=t.get(0,0),d=t.get(0,1),g=t.get(0,2),p=t.get(1,0),f=t.get(1,1),y=t.get(1,2),w=t.get(2,0),b=t.get(2,1),T=t.get(2,2),C=(s-i)*(-d+f),A=(-s+i+o)*(m-d+f),S=(i+o)*(-m+d),E=s*m,M=(-s+l+c)*(m-g+y),v=(-s+l)*(g-y),N=(l+c)*(-m+g),_=(-r+c+h)*(f+w-b),L=(r-h)*(f-b),P=r*w,I=(c+h)*(-w+b),x=(-r+o+a)*(y+w-T),R=(r-a)*(y-T),G=(o+a)*(-w+T),O=E+P+n*p,F=(s+n+r-i-o-c-h)*f+A+S+E+_+P+I,H=E+M+N+(s+n+r-o-a-l-c)*y+P+x+G,W=C+o*(-m+d+p-f-y-w+T)+A+E+P+x+R,D=C+A+S+E+a*b,k=P+x+R+G+i*g,B=E+M+v+c*(-m+g+p-f-y-w+b)+_+L+P,V=_+L+P+I+l*d,U=E+M+v+N+h*T;return e.set(0,0,O),e.set(0,1,F),e.set(0,2,H),e.set(1,0,W),e.set(1,1,D),e.set(1,2,k),e.set(2,0,B),e.set(2,1,V),e.set(2,2,U),e}mmulStrassen(t){t=u.checkMatrix(t);let e=this.clone(),s=e.rows,n=e.columns,r=t.rows,i=t.columns;function o(t,e,s){let n=t.rows,r=t.columns;if(n===e&&r===s)return t;{let n=c.zeros(e,s);return n=n.setSubMatrix(t,0,0),n}}n!==r&&console.warn(`Multiplying ${s} x ${n} and ${r} x ${i} matrix: dimensions do not match.`);let a=Math.max(s,r),l=Math.max(n,i);return e=o(e,a,l),function t(e,s,n,r){if(n<=512||r<=512)return e.mmul(s);n%2==1&&r%2==1?(e=o(e,n+1,r+1),s=o(s,n+1,r+1)):n%2==1?(e=o(e,n+1,r),s=o(s,n+1,r)):r%2==1&&(e=o(e,n,r+1),s=o(s,n,r+1));let i=parseInt(e.rows/2,10),a=parseInt(e.columns/2,10),l=e.subMatrix(0,i-1,0,a-1),h=s.subMatrix(0,i-1,0,a-1),u=e.subMatrix(0,i-1,a,e.columns-1),m=s.subMatrix(0,i-1,a,s.columns-1),d=e.subMatrix(i,e.rows-1,0,a-1),g=s.subMatrix(i,s.rows-1,0,a-1),p=e.subMatrix(i,e.rows-1,a,e.columns-1),f=s.subMatrix(i,s.rows-1,a,s.columns-1),y=t(c.add(l,p),c.add(h,f),i,a),w=t(c.add(d,p),h,i,a),b=t(l,c.sub(m,f),i,a),T=t(p,c.sub(g,h),i,a),C=t(c.add(l,u),f,i,a),A=t(c.sub(d,l),c.add(h,m),i,a),S=t(c.sub(u,p),c.add(g,f),i,a),E=c.add(y,T);E.sub(C),E.add(S);let M=c.add(b,C),v=c.add(w,T),N=c.sub(y,w);N.add(b),N.add(A);let _=c.zeros(2*E.rows,2*E.columns);return _=_.setSubMatrix(E,0,0),_=_.setSubMatrix(M,E.rows,0),_=_.setSubMatrix(v,0,E.columns),_=_.setSubMatrix(N,E.rows,E.columns),_.subMatrix(0,n-1,0,r-1)}(e,t=o(t,a,l),a,l)}scaleRows(t={}){if("object"!=typeof t)throw new TypeError("options must be an object");const{min:e=0,max:s=1}=t;if(!Number.isFinite(e))throw new TypeError("min must be a number");if(!Number.isFinite(s))throw new TypeError("max must be a number");if(e>=s)throw new RangeError("min must be smaller than max");let n=new u(this.rows,this.columns);for(let t=0;t<this.rows;t++){const i=this.getRow(t);i.length>0&&(0,r.Z)(i,{min:e,max:s,output:i}),n.setRow(t,i)}return n}scaleColumns(t={}){if("object"!=typeof t)throw new TypeError("options must be an object");const{min:e=0,max:s=1}=t;if(!Number.isFinite(e))throw new TypeError("min must be a number");if(!Number.isFinite(s))throw new TypeError("max must be a number");if(e>=s)throw new RangeError("min must be smaller than max");let n=new u(this.rows,this.columns);for(let t=0;t<this.columns;t++){const i=this.getColumn(t);i.length&&(0,r.Z)(i,{min:e,max:s,output:i}),n.setColumn(t,i)}return n}flipRows(){const t=Math.ceil(this.columns/2);for(let e=0;e<this.rows;e++)for(let s=0;s<t;s++){let t=this.get(e,s),n=this.get(e,this.columns-1-s);this.set(e,s,n),this.set(e,this.columns-1-s,t)}return this}flipColumns(){const t=Math.ceil(this.rows/2);for(let e=0;e<this.columns;e++)for(let s=0;s<t;s++){let t=this.get(s,e),n=this.get(this.rows-1-s,e);this.set(s,e,n),this.set(this.rows-1-s,e,t)}return this}kroneckerProduct(t){t=u.checkMatrix(t);let e=this.rows,s=this.columns,n=t.rows,r=t.columns,i=new u(e*n,s*r);for(let o=0;o<e;o++)for(let e=0;e<s;e++)for(let s=0;s<n;s++)for(let a=0;a<r;a++)i.set(n*o+s,r*e+a,this.get(o,e)*t.get(s,a));return i}kroneckerSum(t){if(t=u.checkMatrix(t),!this.isSquare()||!t.isSquare())throw new Error("Kronecker Sum needs two Square Matrices");let e=this.rows,s=t.rows,n=this.kroneckerProduct(u.eye(s,s)),r=u.eye(e,e).kroneckerProduct(t);return n.add(r)}transpose(){let t=new u(this.columns,this.rows);for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)t.set(s,e,this.get(e,s));return t}sortRows(t=h){for(let e=0;e<this.rows;e++)this.setRow(e,this.getRow(e).sort(t));return this}sortColumns(t=h){for(let e=0;e<this.columns;e++)this.setColumn(e,this.getColumn(e).sort(t));return this}subMatrix(t,e,s,n){(0,l.J5)(this,t,e,s,n);let r=new u(e-t+1,n-s+1);for(let i=t;i<=e;i++)for(let e=s;e<=n;e++)r.set(i-t,e-s,this.get(i,e));return r}subMatrixRow(t,e,s){if(void 0===e&&(e=0),void 0===s&&(s=this.columns-1),e>s||e<0||e>=this.columns||s<0||s>=this.columns)throw new RangeError("Argument out of range");let n=new u(t.length,s-e+1);for(let r=0;r<t.length;r++)for(let i=e;i<=s;i++){if(t[r]<0||t[r]>=this.rows)throw new RangeError(`Row index out of range: ${t[r]}`);n.set(r,i-e,this.get(t[r],i))}return n}subMatrixColumn(t,e,s){if(void 0===e&&(e=0),void 0===s&&(s=this.rows-1),e>s||e<0||e>=this.rows||s<0||s>=this.rows)throw new RangeError("Argument out of range");let n=new u(s-e+1,t.length);for(let r=0;r<t.length;r++)for(let i=e;i<=s;i++){if(t[r]<0||t[r]>=this.columns)throw new RangeError(`Column index out of range: ${t[r]}`);n.set(i-e,r,this.get(i,t[r]))}return n}setSubMatrix(t,e,s){if((t=u.checkMatrix(t)).isEmpty())return this;let n=e+t.rows-1,r=s+t.columns-1;(0,l.J5)(this,e,n,s,r);for(let n=0;n<t.rows;n++)for(let r=0;r<t.columns;r++)this.set(e+n,s+r,t.get(n,r));return this}selection(t,e){(0,l.ZR)(this,t),(0,l.g)(this,e);let s=new u(t.length,e.length);for(let n=0;n<t.length;n++){let r=t[n];for(let t=0;t<e.length;t++){let i=e[t];s.set(n,t,this.get(r,i))}}return s}trace(){let t=Math.min(this.rows,this.columns),e=0;for(let s=0;s<t;s++)e+=this.get(s,s);return e}clone(){let t=new u(this.rows,this.columns);for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)t.set(e,s,this.get(e,s));return t}sum(t){switch(t){case"row":return(0,a.bQ)(this);case"column":return(0,a.Dm)(this);case void 0:return(0,a.xo)(this);default:throw new Error(`invalid option: ${t}`)}}product(t){switch(t){case"row":return(0,a.Pw)(this);case"column":return(0,a.PI)(this);case void 0:return(0,a.tT)(this);default:throw new Error(`invalid option: ${t}`)}}mean(t){const e=this.sum(t);switch(t){case"row":for(let t=0;t<this.rows;t++)e[t]/=this.columns;return e;case"column":for(let t=0;t<this.columns;t++)e[t]/=this.rows;return e;case void 0:return e/this.size;default:throw new Error(`invalid option: ${t}`)}}variance(t,e={}){if("object"==typeof t&&(e=t,t=void 0),"object"!=typeof e)throw new TypeError("options must be an object");const{unbiased:s=!0,mean:r=this.mean(t)}=e;if("boolean"!=typeof s)throw new TypeError("unbiased must be a boolean");switch(t){case"row":if(!(0,n.N)(r))throw new TypeError("mean must be an array");return(0,a.we)(this,s,r);case"column":if(!(0,n.N)(r))throw new TypeError("mean must be an array");return(0,a._G)(this,s,r);case void 0:if("number"!=typeof r)throw new TypeError("mean must be a number");return(0,a.C)(this,s,r);default:throw new Error(`invalid option: ${t}`)}}standardDeviation(t,e){"object"==typeof t&&(e=t,t=void 0);const s=this.variance(t,e);if(void 0===t)return Math.sqrt(s);for(let t=0;t<s.length;t++)s[t]=Math.sqrt(s[t]);return s}center(t,e={}){if("object"==typeof t&&(e=t,t=void 0),"object"!=typeof e)throw new TypeError("options must be an object");const{center:s=this.mean(t)}=e;switch(t){case"row":if(!(0,n.N)(s))throw new TypeError("center must be an array");return(0,a.rU)(this,s),this;case"column":if(!(0,n.N)(s))throw new TypeError("center must be an array");return(0,a._f)(this,s),this;case void 0:if("number"!=typeof s)throw new TypeError("center must be a number");return(0,a.mm)(this,s),this;default:throw new Error(`invalid option: ${t}`)}}scale(t,e={}){if("object"==typeof t&&(e=t,t=void 0),"object"!=typeof e)throw new TypeError("options must be an object");let s=e.scale;switch(t){case"row":if(void 0===s)s=(0,a.kn)(this);else if(!(0,n.N)(s))throw new TypeError("scale must be an array");return(0,a.DU)(this,s),this;case"column":if(void 0===s)s=(0,a.Pr)(this);else if(!(0,n.N)(s))throw new TypeError("scale must be an array");return(0,a.Mj)(this,s),this;case void 0:if(void 0===s)s=(0,a.Y2)(this);else if("number"!=typeof s)throw new TypeError("scale must be a number");return(0,a.td)(this,s),this;default:throw new Error(`invalid option: ${t}`)}}toString(t){return(0,i.M)(this,t)}}function h(t,e){return t-e}c.prototype.klass="Matrix","undefined"!=typeof Symbol&&(c.prototype[Symbol.for("nodejs.util.inspect.custom")]=i.V),c.random=c.rand,c.randomInt=c.randInt,c.diagonal=c.diag,c.prototype.diagonal=c.prototype.diag,c.identity=c.eye,c.prototype.negate=c.prototype.neg,c.prototype.tensorProduct=c.prototype.kroneckerProduct;class u extends c{constructor(t,e){if(super(),u.isMatrix(t))return t.clone();if(Number.isInteger(t)&&t>=0){if(this.data=[],!(Number.isInteger(e)&&e>=0))throw new TypeError("nColumns must be a positive integer");for(let s=0;s<t;s++)this.data.push(new Float64Array(e))}else{if(!(0,n.N)(t))throw new TypeError("First argument must be a positive number or an array");{const s=t;if("number"!=typeof(e=(t=s.length)?s[0].length:0))throw new TypeError("Data must be a 2D array with at least one element");this.data=[];for(let n=0;n<t;n++){if(s[n].length!==e)throw new RangeError("Inconsistent array dimensions");if(!s[n].every((t=>"number"==typeof t)))throw new TypeError("Input data contains non-numeric values");this.data.push(Float64Array.from(s[n]))}}}this.rows=t,this.columns=e}set(t,e,s){return this.data[t][e]=s,this}get(t,e){return this.data[t][e]}removeRow(t){return(0,l.zb)(this,t),this.data.splice(t,1),this.rows-=1,this}addRow(t,e){return void 0===e&&(e=t,t=this.rows),(0,l.zb)(this,t,!0),e=Float64Array.from((0,l.on)(this,e)),this.data.splice(t,0,e),this.rows+=1,this}removeColumn(t){(0,l.bp)(this,t);for(let e=0;e<this.rows;e++){const s=new Float64Array(this.columns-1);for(let n=0;n<t;n++)s[n]=this.data[e][n];for(let n=t+1;n<this.columns;n++)s[n-1]=this.data[e][n];this.data[e]=s}return this.columns-=1,this}addColumn(t,e){void 0===e&&(e=t,t=this.columns),(0,l.bp)(this,t,!0),e=(0,l.Um)(this,e);for(let s=0;s<this.rows;s++){const n=new Float64Array(this.columns+1);let r=0;for(;r<t;r++)n[r]=this.data[s][r];for(n[r++]=e[s];r<this.columns+1;r++)n[r]=this.data[s][r-1];this.data[s]=n}return this.columns+=1,this}}(0,o.z)(c,u)},9515:(t,e,s)=>{"use strict";s.d(e,{C:()=>m,DU:()=>y,Dm:()=>i,Mj:()=>b,PI:()=>l,Pr:()=>w,Pw:()=>a,Y2:()=>T,_G:()=>u,_f:()=>g,bQ:()=>r,kn:()=>f,mm:()=>p,rU:()=>d,tT:()=>c,td:()=>C,we:()=>h,xo:()=>o});var n=s(3018);function r(t){let e=(0,n.B4)(t.rows);for(let s=0;s<t.rows;++s)for(let n=0;n<t.columns;++n)e[s]+=t.get(s,n);return e}function i(t){let e=(0,n.B4)(t.columns);for(let s=0;s<t.rows;++s)for(let n=0;n<t.columns;++n)e[n]+=t.get(s,n);return e}function o(t){let e=0;for(let s=0;s<t.rows;s++)for(let n=0;n<t.columns;n++)e+=t.get(s,n);return e}function a(t){let e=(0,n.B4)(t.rows,1);for(let s=0;s<t.rows;++s)for(let n=0;n<t.columns;++n)e[s]*=t.get(s,n);return e}function l(t){let e=(0,n.B4)(t.columns,1);for(let s=0;s<t.rows;++s)for(let n=0;n<t.columns;++n)e[n]*=t.get(s,n);return e}function c(t){let e=1;for(let s=0;s<t.rows;s++)for(let n=0;n<t.columns;n++)e*=t.get(s,n);return e}function h(t,e,s){const n=t.rows,r=t.columns,i=[];for(let o=0;o<n;o++){let n=0,a=0,l=0;for(let e=0;e<r;e++)l=t.get(o,e)-s[o],n+=l,a+=l*l;e?i.push((a-n*n/r)/(r-1)):i.push((a-n*n/r)/r)}return i}function u(t,e,s){const n=t.rows,r=t.columns,i=[];for(let o=0;o<r;o++){let r=0,a=0,l=0;for(let e=0;e<n;e++)l=t.get(e,o)-s[o],r+=l,a+=l*l;e?i.push((a-r*r/n)/(n-1)):i.push((a-r*r/n)/n)}return i}function m(t,e,s){const n=t.rows,r=t.columns,i=n*r;let o=0,a=0,l=0;for(let e=0;e<n;e++)for(let n=0;n<r;n++)l=t.get(e,n)-s,o+=l,a+=l*l;return e?(a-o*o/i)/(i-1):(a-o*o/i)/i}function d(t,e){for(let s=0;s<t.rows;s++)for(let n=0;n<t.columns;n++)t.set(s,n,t.get(s,n)-e[s])}function g(t,e){for(let s=0;s<t.rows;s++)for(let n=0;n<t.columns;n++)t.set(s,n,t.get(s,n)-e[n])}function p(t,e){for(let s=0;s<t.rows;s++)for(let n=0;n<t.columns;n++)t.set(s,n,t.get(s,n)-e)}function f(t){const e=[];for(let s=0;s<t.rows;s++){let n=0;for(let e=0;e<t.columns;e++)n+=Math.pow(t.get(s,e),2)/(t.columns-1);e.push(Math.sqrt(n))}return e}function y(t,e){for(let s=0;s<t.rows;s++)for(let n=0;n<t.columns;n++)t.set(s,n,t.get(s,n)/e[s])}function w(t){const e=[];for(let s=0;s<t.columns;s++){let n=0;for(let e=0;e<t.rows;e++)n+=Math.pow(t.get(e,s),2)/(t.rows-1);e.push(Math.sqrt(n))}return e}function b(t,e){for(let s=0;s<t.rows;s++)for(let n=0;n<t.columns;n++)t.set(s,n,t.get(s,n)/e[n])}function T(t){const e=t.size-1;let s=0;for(let n=0;n<t.columns;n++)for(let r=0;r<t.rows;r++)s+=Math.pow(t.get(r,n),2)/e;return Math.sqrt(s)}function C(t,e){for(let s=0;s<t.rows;s++)for(let n=0;n<t.columns;n++)t.set(s,n,t.get(s,n)/e)}},3018:(t,e,s)=>{"use strict";s.d(e,{B4:()=>u,J5:()=>h,Um:()=>a,ZR:()=>l,bp:()=>i,cT:()=>d,g:()=>c,on:()=>o,zb:()=>r});var n=s(5776);function r(t,e,s){let n=s?t.rows:t.rows-1;if(e<0||e>n)throw new RangeError("Row index out of range")}function i(t,e,s){let n=s?t.columns:t.columns-1;if(e<0||e>n)throw new RangeError("Column index out of range")}function o(t,e){if(e.to1DArray&&(e=e.to1DArray()),e.length!==t.columns)throw new RangeError("vector size must be the same as the number of columns");return e}function a(t,e){if(e.to1DArray&&(e=e.to1DArray()),e.length!==t.rows)throw new RangeError("vector size must be the same as the number of rows");return e}function l(t,e){if(!(0,n.N)(e))throw new TypeError("row indices must be an array");for(let s=0;s<e.length;s++)if(e[s]<0||e[s]>=t.rows)throw new RangeError("row indices are out of range")}function c(t,e){if(!(0,n.N)(e))throw new TypeError("column indices must be an array");for(let s=0;s<e.length;s++)if(e[s]<0||e[s]>=t.columns)throw new RangeError("column indices are out of range")}function h(t,e,s,n,r){if(5!==arguments.length)throw new RangeError("expected 4 arguments");if(m("startRow",e),m("endRow",s),m("startColumn",n),m("endColumn",r),e>s||n>r||e<0||e>=t.rows||s<0||s>=t.rows||n<0||n>=t.columns||r<0||r>=t.columns)throw new RangeError("Submatrix indices are out of range")}function u(t,e=0){let s=[];for(let n=0;n<t;n++)s.push(e);return s}function m(t,e){if("number"!=typeof e)throw new TypeError(`${t} must be a number`)}function d(t){if(t.isEmpty())throw new Error("Empty matrix has no elements to index")}},8353:(t,e,s)=>{"use strict";s.d(e,{Z:()=>r});var n=s(1174);class r extends n.X{constructor(t){super(),this.data=t,this.rows=t.length,this.columns=t[0].length}set(t,e,s){return this.data[t][e]=s,this}get(t,e){return this.data[t][e]}}},3379:t=>{"use strict";var e=[];function s(t){for(var s=-1,n=0;n<e.length;n++)if(e[n].identifier===t){s=n;break}return s}function n(t,n){for(var i={},o=[],a=0;a<t.length;a++){var l=t[a],c=n.base?l[0]+n.base:l[0],h=i[c]||0,u="".concat(c," ").concat(h);i[c]=h+1;var m=s(u),d={css:l[1],media:l[2],sourceMap:l[3],supports:l[4],layer:l[5]};if(-1!==m)e[m].references++,e[m].updater(d);else{var g=r(d,n);n.byIndex=a,e.splice(a,0,{identifier:u,updater:g,references:1})}o.push(u)}return o}function r(t,e){var s=e.domAPI(e);return s.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;s.update(t=e)}else s.remove()}}t.exports=function(t,r){var i=n(t=t||[],r=r||{});return function(t){t=t||[];for(var o=0;o<i.length;o++){var a=s(i[o]);e[a].references--}for(var l=n(t,r),c=0;c<i.length;c++){var h=s(i[c]);0===e[h].references&&(e[h].updater(),e.splice(h,1))}i=l}}},569:t=>{"use strict";var e={};t.exports=function(t,s){var n=function(t){if(void 0===e[t]){var s=document.querySelector(t);if(window.HTMLIFrameElement&&s instanceof window.HTMLIFrameElement)try{s=s.contentDocument.head}catch(t){s=null}e[t]=s}return e[t]}(t);if(!n)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");n.appendChild(s)}},9216:t=>{"use strict";t.exports=function(t){var e=document.createElement("style");return t.setAttributes(e,t.attributes),t.insert(e,t.options),e}},3565:(t,e,s)=>{"use strict";t.exports=function(t){var e=s.nc;e&&t.setAttribute("nonce",e)}},7795:t=>{"use strict";t.exports=function(t){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var e=t.insertStyleElement(t);return{update:function(s){!function(t,e,s){var n="";s.supports&&(n+="@supports (".concat(s.supports,") {")),s.media&&(n+="@media ".concat(s.media," {"));var r=void 0!==s.layer;r&&(n+="@layer".concat(s.layer.length>0?" ".concat(s.layer):""," {")),n+=s.css,r&&(n+="}"),s.media&&(n+="}"),s.supports&&(n+="}");var i=s.sourceMap;i&&"undefined"!=typeof btoa&&(n+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(i))))," */")),e.styleTagTransform(n,t,e.options)}(e,t,s)},remove:function(){!function(t){if(null===t.parentNode)return!1;t.parentNode.removeChild(t)}(e)}}}},4589: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))}}},7241:(t,e,s)=>{"use strict";s.d(e,{D:()=>h});var n=s(4469),r=s(976),i=s(6414),o=s.n(i),a=s(2991),l=s(499);const c=31;async function h(t,e=!1,s){const i=l.Cn.getOrCreate(t);let h;s??(s=new Map);const m=i.isHelm()?(0,a.getHelmMonomers)(t):Object.keys(i.stats.freq).filter((t=>""!==t));for(let t=0;t<m.length;t++)s.has(m[t])||s.set(m[t],`${s.size+1}`);if(i.isHelm())h=await n.functions.call("HELM:getMolFiles",{col:t}),h=function(t,e,s=!1){const n=new Array(t.length);for(let r=0;r<t.length;r++){let i=0,o=0,a="\n Datagrok macromolecule handler\n\n 0 0 0 0 0 0 999 V3000\nM V30 BEGIN CTAB\n";const l=t.get(r);i=l.indexOf("\n",i)+1,i=l.indexOf("\n",i)+1,i=l.indexOf("\n",i)+1;const h=parseInt(l.substring(i,i+3)),u=parseInt(l.substring(i+3,i+6));a+=`M V30 COUNTS ${h} ${u} 0 0 0\n`,a+="M V30 BEGIN ATOM\n";for(let t=0;t<h;t++){i=l.indexOf("\n",i)+1+c,o=l.indexOf(" ",i);const n=l.substring(i,o);a+=s?`M V30 ${t+1} R${e.get(n)} 0.000 0.000 0 0\n`:`M V30 ${t+1} At 0.000 0.000 0 0 MASS=${e.get(n)}\n`}a+="M V30 END ATOM\n",a+="M V30 BEGIN BOND\n";for(let t=0;t<u;t++){i=l.indexOf("\n",i)+1;const e=parseInt(l.substring(i,i+3).trim()),s=parseInt(l.substring(i+3,i+6).trim());a+=`M V30 ${t+1} ${parseInt(l.substring(i+6,i+9).trim())} ${e} ${s}\n`}a+="M V30 END BOND\n",a+="M V30 END CTAB\n",a+="M END",n[r]=a}return n}(h,s,e);else{h=new Array(t.length);for(let n=0;n<t.length;n++){const t=u(o()(i.splitted[n]).filter((t=>""!==t)).toArray(),s,e);h[n]=t}}return r.Column.fromStrings("monomericMols",h)}function u(t,e,s=!1){let n="\n Datagrok macromolecule handler\n\n 0 0 0 0 0 0 999 V3000\nM V30 BEGIN CTAB\n";n+=`M V30 COUNTS ${t.length} ${t.length?t.length-1:0} 0 0 0\n`,n+="M V30 BEGIN ATOM\n";for(let r=0;r<t.length;r++)n+=s?`M V30 ${r+1} R${e.get(t[r])} 0.000 0.000 0 0\n`:`M V30 ${r+1} At 0.000 0.000 0 0 MASS=${e.get(t[r])}\n`;n+="M V30 END ATOM\n",n+="M V30 BEGIN BOND\n";for(let e=0;e<t.length-1;e++)n+=`M V30 ${e+1} 1 ${e+1} ${e+2}\n`;return n+="M V30 END BOND\n",n+="M V30 END CTAB\n",n+="M END",n}},3377:(t,e,s)=>{"use strict";s.r(e),s.d(e,{_package:()=>gt,test:()=>pt,tests:()=>r.QK});var n=s(976),r=s(1061);(0,r.W3)("_first",(()=>{(0,r.Bu)("_first",(async()=>{}))}));var i=s(2012),o=s(9976),a=s(6137);(0,r.W3)("Palettes",(()=>{(0,r.Bu)("testPaletteN",(async()=>{await async function(){const t=a.J.Chromatogram;(0,r.l_)(t instanceof o.B,!0),(0,r.l_)(t instanceof a.J,!0)}()})),(0,r.Bu)("testPaletteAA",(async()=>{await async function(){const t=i.f.Lesk,e=i.f.RasMol,s=i.f.GrokGroups;(0,r.l_)(t instanceof o.B,!0),(0,r.l_)(e instanceof o.B,!0),(0,r.l_)(s instanceof o.B,!0),(0,r.l_)(t instanceof i.f,!0),(0,r.l_)(e instanceof i.f,!0),(0,r.l_)(s instanceof i.f,!0)}()})),(0,r.Bu)("testPalettePtMe",(async()=>{const t=i.f.GrokGroups.get("MeNle"),e=i.f.GrokGroups.get("MeA"),s=i.f.GrokGroups.get("MeG"),n=i.f.GrokGroups.get("MeF"),o=i.f.GrokGroups.get("L"),a=i.f.GrokGroups.get("A"),l=i.f.GrokGroups.get("G"),c=i.f.GrokGroups.get("F");(0,r.l_)(t,o),(0,r.l_)(e,a),(0,r.l_)(s,l),(0,r.l_)(n,c)}))}));var l=s(4469),c=s(2991),h=s(8447),u=s(499);async function m(t){const e=n.Column.fromList(n.TYPE.STRING,"col1",t);if(await l.functions.call("Bio:detectMacromolecule",{col:e}),e.semType===n.SEMTYPE.MACROMOLECULE){const t=`Negative test detected semType='${e.semType}', units='${e.getTag(n.TAGS.UNITS)}'.`;throw new Error(t)}}async function d(t,e){const s=(await t()).getCol(e),r=await l.functions.call("Bio:detectMacromolecule",{col:s});if(r&&(s.semType=r),s.semType===n.SEMTYPE.MACROMOLECULE){const t=`Negative test detected semType='${s.semType}', units='${s.getTag(n.TAGS.UNITS)}'.`;throw new Error(t)}}async function g(t,e,s,i,o,a,c=null){const h=n.Column.fromList(n.TYPE.STRING,"seq",t),m=await l.functions.call("Bio:detectMacromolecule",{col:h});m&&(h.semType=m),(0,r.l_)(h.semType,n.SEMTYPE.MACROMOLECULE),(0,r.l_)(h.getTag(n.TAGS.UNITS),e),(0,r.l_)(h.getTag("aligned"),s),(0,r.l_)(h.getTag("alphabet"),i),c&&(0,r.l_)(h.getTag("separator"),c);const d=u.Cn.getOrCreate(h);(0,r.l_)(d.getAlphabetSize(),o),(0,r.l_)(d.getAlphabetIsMultichar(),a),d.isHelm()||((0,r.l_)(d.aligned,s),(0,r.l_)(d.alphabet,i))}async function p(t,e,s,i,o,a,c,h=null){const m=(await t()).col(e),d=await l.functions.call("Bio:detectMacromolecule",{col:m});d&&(m.semType=d),(0,r.l_)(m.semType,n.SEMTYPE.MACROMOLECULE),(0,r.l_)(m.getTag(n.TAGS.UNITS),s),(0,r.l_)(m.getTag("aligned"),i),(0,r.l_)(m.getTag("alphabet"),o),h&&(0,r.l_)(m.getTag("separator"),h);const g=u.Cn.getOrCreate(m);(0,r.l_)(g.getAlphabetSize(),a),(0,r.l_)(g.getAlphabetIsMultichar(),c),g.isHelm()||((0,r.l_)(g.aligned,i),(0,r.l_)(g.alphabet,o))}(0,r.W3)("detectors",(()=>{var t,e,s,i,o,a,c,u,w,b,T,C,A,S,E,M,v,N,_,L;const P=new(L=class{constructor(){this[t]="id,col1\n1,\n2,\n3,\n4,\n5,",this[e]="col1\n1\n2\n3",this[s]="col1\n4\n5\n6\n7",this[i]="col1\n8\n9\n10\n11\n12",this[o]="col1\nCCCCN1C(=O)CN=C(c2cc(F)ccc12)C3CCCCC3\nC1CCCCC1\nCCCCCC",this[a]="seq\nACGTCACGTC\nCAGTGTCAGTGT\nTTCAACTTCAAC",this[c]="seq\nACGUCACGUC\nCAGUGUCAGUGU\nUUCAACUUCAAC",this[u]="seq\nFWPHEY\nYNRQWYV\nMKPSEYV",this[w]="seq\n[meI][hHis][Aca]NT[dE][Thr_PO3H2][Aca]DN\n[meI][hHis][Aca][Cys_SEt]T[dK][Thr_PO3H2][Aca][Tyr_PO3H2][Aca]\n[Lys_Boc][hHis][Aca][Cys_SEt]T[dK][Thr_PO3H2][Aca][Tyr_PO3H2][Aca]",this[b]="seq\nA*C*G*T*C*A*C*G*T*C\nC*A*G*T*G*T*C*A*G*T*G*T\nT*T*C*A*A*C*T*T*C*A*A*C",this[T]="seq\nA*C*G*U*C*A*C*G*U*C\nC*A*G*U*G*U*C*A*G*U*G*U\nU*U*C*A*A*C*U*U*C*A*A*C",this[C]="seq\nF-W-P-H-E-Y-F-W-P-H-E-Y\nY-N-R-Q-W-Y-V-Y-N-R-Q-W-Y-V\nM-K-P-S-E-Y-V-M-K-P-S-E-Y-V",this[A]="seq\nabc-dfgg-abc1-cfr3-rty-wert-cfr3-rty-wert\nrut12-her2-rty-wert-abc-abc1-dfgg-abc-abc1-dfgg\nrut12-rty-her2-abc-cfr3-wert-rut12-cfr3-wert-rut12",this[S]="seq\nabc/dfgg/abc1/cfr3/rty/wert/abc/dfgg/abc1/cfr3/rty/wert\nrut12/her2/rty/wert//abc/abc1/dfgg/rut12/her2/rty/wert//abc/abc1/dfgg\nrut12/rty/her2/abc/cfr3//wert/rut12/rut12/rty/her2/abc/cfr3//wert/rut12",this[E]="seq\nA-C--G-T--C-T-A-C--G-T--C-T\nC-A-C--T--G-T-C-A-C--T--G-T\nA-C-C-G-T-A-C-T-A-C-C-G-T-A-C-T",this[M]="seq\nm1-M-m3-mon4-mon5-N-T-MON8-N9-m1-M-m3-mon4-mon5-N-T-MON8-N9\nm1-mon2-m3-mon4-mon5-Num--MON8-N9-m1-mon2-m3-mon4-mon5-Num--MON8-N9\n\nmon1-M-mon3-mon4-mon5---MON8-N9-mon1-M-mon3-mon4-mon5---MON8-N9",this[v]="seq\nAc(1)-F-K(AEEA-AEEA-R-Ac)-L-mF-V-Y-mNle-D-W-N-mF-C(1)-G-NH2\nAc(1)-F-K(AEEA-ARRA-W-Ac)-L-mF-V-Y-mNle-D-W-N-mF-C(1)-G-NH2\nAc(1)-F-K(AEEA-AEEA-Ac)-L-mF-V-Y-mNle-D-W-N-mF-C(1)-G-NH2",this[N]="seq\nAC-GT-CTAC-GT-CT\nCAC-T-GTCAC-T-GT\nACCGTACTACCGTACT",this[_]="seq\nFWR-WYV-KHPFWR-WYV-KHP\nYNR-WYV-KHPYNR-WYV-KHP\nMWRSWY-CKHPMWRSWY-CKHP"}},t="negEmpty",e="neg1",s="neg2",i="neg3",o="negSmiles",a="csvFastaDna1",c="fastaRna1",u="fastaPt1",w="fastaUn",b="sepDna",T="sepRna",C="sepPt",A="sepUn1",S="sepUn2",E="sepMsaDna1",M="sepMsaUnWEmpty",v="sepComplex",N="fastaMsaDna1",_="fastaMsaPt1",L),I={fastaFasta:"System:AppData/Bio/data/sample_FASTA.fasta",fastaPtCsv:"System:AppData/Bio/data/sample_FASTA_PT.csv",msaComplex:"System:AppData/Bio/samples/MSA.csv",fastaCsv:"System:AppData/Bio/samples/FASTA.csv",helmCsv:"System:AppData/Bio/samples/HELM.csv",peptidesComplex:"System:AppData/Bio/tests/peptides_complex_msa.csv",peptidesSimple:"System:AppData/Bio/tests/peptides_simple_msa.csv",testDemogCsv:"System:AppData/Bio/tests/testDemog.csv",testHelmCsv:"System:AppData/Bio/tests/testHelm.csv",testIdCsv:"System:AppData/Bio/tests/testId.csv",testSmilesCsv:"System:AppData/Bio/tests/testSmiles.csv",testSmiles2Csv:"System:AppData/Bio/tests/testSmiles2.csv",testSmilesShort:"System:AppData/Bio/tests/testSmilesShort.csv",testActivityCliffsCsv:"System:AppData/Bio/tests/testActivityCliffs.csv",testCerealCsv:"System:AppData/Bio/tests/testCereal.csv",testUnichemSources:"System:AppData/Bio/tests/testUnichemSources.csv",testDmvOffices:"System:AppData/Bio/tests/testDmvOffices.csv",testAlertCollection:"System:AppData/Bio/tests/testAlertCollection.csv",testSpgi100:"System:AppData/Bio/tests/testSpgi100.csv",testSpgi:"System:AppData/Bio/tests/SPGI-derived.csv",testUrl:"System:AppData/Bio/tests/testUrl.csv"},x={};function R(t,e=G){return async()=>(t in x||(x[t]=(async()=>await e(I[t]))().catch((e=>{throw delete x[t],e}))),x[t])}async function G(t){const e=await l.dapi.files.readAsText(t);return n.DataFrame.fromCsv(e)}const O=t=>async()=>{const e=P[t],s=n.DataFrame.fromCsv(e);return await l.data.detectSemanticTypes(s),s};(0,r.Bu)("NegativeEmpty",(async()=>{await d(O("negEmpty"),"col1")})),(0,r.Bu)("Negative1",(async()=>{await d(O("neg1"),"col1")})),(0,r.Bu)("Negative2",(async()=>{await d(O("neg2"),"col1")})),(0,r.Bu)("Negative3",(async()=>{await d(O("neg3"),"col1")})),(0,r.Bu)("NegativeSmiles",(async()=>{await d(O("negSmiles"),"col1")})),(0,r.Bu)("NegativeStartEnd",(async()=>{await m(["START","END"])})),(0,r.Bu)("NegativeStartEndIntermediate",(async()=>{await m(["START","END","INTERMEDIATE"])})),(0,r.Bu)("FastaDna1",(async()=>{await p(O("csvFastaDna1"),"seq",h.r2.FASTA,"SEQ","DNA",4,!1)})),(0,r.Bu)("FastaRna1",(async()=>{await p(O("fastaRna1"),"seq",h.r2.FASTA,"SEQ","RNA",4,!1)})),(0,r.Bu)("FastaPt1",(async()=>{await p(O("fastaPt1"),"seq",h.r2.FASTA,"SEQ","PT",20,!1)})),(0,r.Bu)("FastaPtGaps",(()=>g(["FW-PH-EYY","FYNRQWYV-","FKP-Q-SEYV"],h.r2.FASTA,"SEQ","PT",20,!1))),(0,r.Bu)("FastaPtGapsMsa",(()=>g(["FW-PH-EYY","FYNRQWYV-","FKP-Q-SEY"],h.r2.FASTA,"SEQ.MSA","PT",20,!1))),(0,r.Bu)("FastaUn",(async()=>{await p(O("fastaUn"),"seq",h.r2.FASTA,"SEQ.MSA","UN",12,!0)})),(0,r.Bu)("FastaMsaDna1",(async()=>{await p(O("fastaMsaDna1"),"seq",h.r2.FASTA,"SEQ.MSA","DNA",4,!1)})),(0,r.Bu)("FastaMsaPt1",(async()=>{await p(O("fastaMsaPt1"),"seq",h.r2.FASTA,"SEQ.MSA","PT",20,!1)})),(0,r.Bu)("SepDna",(async()=>{await p(O("sepDna"),"seq",h.r2.SEPARATOR,"SEQ","DNA",4,!1,"*")})),(0,r.Bu)("SepRna",(async()=>{await p(O("sepRna"),"seq",h.r2.SEPARATOR,"SEQ","RNA",4,!1,"*")})),(0,r.Bu)("SepPt",(async()=>{await p(O("sepPt"),"seq",h.r2.SEPARATOR,"SEQ","PT",20,!1,"-")})),(0,r.Bu)("SepUn1",(async()=>{await p(O("sepUn1"),"seq",h.r2.SEPARATOR,"SEQ","UN",8,!0,"-")})),(0,r.Bu)("SepUn2",(async()=>{await p(O("sepUn2"),"seq",h.r2.SEPARATOR,"SEQ","UN",9,!0,"/")})),(0,r.Bu)("SepMsaN1",(async()=>{await p(O("sepMsaDna1"),"seq",h.r2.SEPARATOR,"SEQ.MSA","DNA",4,!1,"-")})),(0,r.Bu)("SepMsaUnWEmpty",(async()=>{await p(O("sepMsaUnWEmpty"),"seq",h.r2.SEPARATOR,"SEQ.MSA","UN",14,!0)})),(0,r.Bu)("SepComplex",(async()=>{await p(O("sepComplex"),"seq",h.r2.SEPARATOR,"SEQ","UN",18,!0)})),(0,r.Bu)("samplesFastaCsv",(async()=>{await y(R("fastaCsv"),{Sequence:new f(h.r2.FASTA,"SEQ","PT",20,!1)})})),(0,r.Bu)("samplesFastaFasta",(async()=>{await y(R("fastaFasta"),{sequence:new f(h.r2.FASTA,"SEQ","PT",20,!1)})})),(0,r.Bu)("samplesPeptidesComplex",(async()=>{await y(R("peptidesComplex"),{})})),(0,r.Bu)("samplesMsaComplex",(async()=>{await y(R("msaComplex"),{MSA:new f(h.r2.SEPARATOR,"SEQ.MSA","UN",161,!0,"/")})})),(0,r.Bu)("samplesIdCsv",(async()=>{await y(R("testIdCsv"),{})})),(0,r.Bu)("samplesSarSmallCsv",(async()=>{await y(R("testSmilesCsv"),{})})),(0,r.Bu)("samplesHelmCsv",(async()=>{await y(R("helmCsv"),{HELM:new f(h.r2.HELM,null,null,160,!0)})})),(0,r.Bu)("samplesTestHelmCsv",(async()=>{await y(R("testHelmCsv"),{"HELM string":new f(h.r2.HELM,null,null,9,!0)})})),(0,r.Bu)("samplesTestDemogCsv",(async()=>{await y(R("testDemogCsv"),{})})),(0,r.Bu)("samplesTestSmiles2Csv",(async()=>{await y(R("testSmiles2Csv"),{})})),(0,r.Bu)("samplesTestSmilesShort",(async()=>{await y(R("testSmilesShort"),{})})),(0,r.Bu)("samplesTestActivityCliffsNegativeSmiles",(async()=>{await y(R("testActivityCliffsCsv"),{})})),(0,r.Bu)("samplesFastaPtCsv",(async()=>{await y(R("fastaPtCsv"),{sequence:new f(h.r2.FASTA,"SEQ","PT",20,!1)})})),(0,r.Bu)("samplesTestCerealCsv",(async()=>{await y(R("testCerealCsv"),{})})),(0,r.Bu)("samplesTestUnichemSources",(async()=>{await y(R("testUnichemSources"),{})})),(0,r.Bu)("samplesTestDmvOffices",(async()=>{await y(R("testDmvOffices"),{})})),(0,r.Bu)("samplesTestAlertCollection",(async()=>{await y(R("testAlertCollection"),{})})),(0,r.Bu)("samplesTestSpgi",(async()=>{await y(R("testSpgi"),{})})),(0,r.Bu)("samplesTestSpgi100",(async()=>{await y(R("testSpgi100"),{})})),(0,r.Bu)("samplesTestUrl",(async()=>{await y(R("testUrl"),{})}))}));class f{constructor(t,e,s,n,r,i){this.units=t,this.aligned=e,this.alphabet=s,this.alphabetSize=n,this.alphabetIsMultichar=r,this.separator=i}}async function y(t,e){const s=await t(),n=[];for(const r of s.columns.names())if(r in e){const s=e[r];try{await p(t,r,s.units,s.aligned,s.alphabet,s.alphabetSize,s.alphabetIsMultichar,s.separator)}catch(t){const e=t.toString();n.push(`Positive col '${r}' failed: ${e}`)}}else try{await d(t,r)}catch(t){const e=t.toString();n.push(`Negative col '${r}' failed: ${e}`)}if(n.length>0)throw new Error(n.join("\n"))}(0,r.W3)("detectors:weak-and-likely",(()=>{const t={fastaDnaWeak1:"id,colName\n1,TTTTTTTTTT\n2,TTTTTTTTTT\n3,TTTTTTTTTT\n4,TTTTTTTTTT",fastaDnaWeak1LikelyName:"id,seq\n1,TTTTTTT\n2,TTTTTTT\n3,TTTTTTT\n4,TTTTTTT",fastaRnaWeak1:"id,colName\n1,UUUUUUUUUU\n2,UUUUUUUUUU\n3,UUUUUUUUUU\n4,UUUUUUUUUU",fastaRnaWeak1LikelyName:"id,seq\n1,UUUUUUU\n2,UUUUUUU\n3,UUUUUUU\n4,UUUUUUU",fastaPtWeak1:"id,colName\n1,SLSLSPGKSLSLSPGK\n2,SLSLSPGKSLSLSPGK\n3,SLSLSPGKSLSLSPGK\n4,SLSLSPGKSLSLSPGK",fastaPtWeak1LikelyName:"id,seq\n1,SLSLSPGKSLSLSPGK\n2,SLSLSPGKSLSLSPGK\n3,SLSLSPGKSLSLSPGK\n4,SLSLSPGKSLSLSPGK",fastaUn1:"id,colName\n1,word\n2,other\n3,some\n4,another",fastaUn1LikelyName:"id,seq\n1,word\n2,other\n3,some\n4,another",fastaUn2LikelyName:'protein\nBoombastic\nMegafantastic\n"just-a-random-thought,oy!"',fastaUnMsa1LikelyName:"id,seq\n1,word\n2,male\n3,bare\n4,core"},e=e=>async()=>{const s=t[e],r=n.DataFrame.fromCsv(s);return await l.data.detectSemanticTypes(r),r};(0,r.Bu)("fastaDnaWeak1",(async()=>{await d(e("fastaDnaWeak1"),"colName")})),(0,r.Bu)("fastaDnaWeak1LikelyName",(async()=>{await p(e("fastaDnaWeak1LikelyName"),"seq",h.r2.FASTA,"SEQ.MSA","DNA",4,!1)})),(0,r.Bu)("fastaRnaWeak1",(async()=>{await d(e("fastaRnaWeak1"),"colName")})),(0,r.Bu)("fastaRnaWeak1LikelyName",(async()=>{await p(e("fastaRnaWeak1LikelyName"),"seq",h.r2.FASTA,"SEQ.MSA","RNA",4,!1)})),(0,r.Bu)("fastaPtWeak1",(async()=>{await d(e("fastaPtWeak1"),"colName")})),(0,r.Bu)("fastaPtWeak1LikelyName",(async()=>{await p(e("fastaPtWeak1LikelyName"),"seq",h.r2.FASTA,"SEQ.MSA","PT",20,!1)})),(0,r.Bu)("fastaUn1",(async()=>{await d(e("fastaUn1"),"colName")})),(0,r.Bu)("fastaUn1LikelyName",(async()=>{await d(e("fastaUn1LikelyName"),"seq")})),(0,r.Bu)("fastaUn2LikelyName",(async()=>{await d(e("fastaUn2LikelyName"),"protein")})),(0,r.Bu)("fastaUnMsa1LikelyName",(async()=>{await d(e("fastaUnMsa1LikelyName"),"seq")}))})),(0,r.W3)("detectorsBenchmark",(()=>{let t;async function e(e,i,o,a,l,c){return await async function(e,m,d,g){const p=(()=>{const e=function(t,e,s,r,i){let o;switch(t){case h.r2.FASTA:o=t=>{let e="";for(let s=0;s<t.length;s++){const n=t[s];e+=1==n.length?n:`[${n}]`}return e};break;case h.r2.SEPARATOR:o=(t,e)=>t.join(e);break;default:throw new Error(`Not supported notation '${t}'.`)}const a=(t,e)=>{const s=new Array(e);for(let n=0;n<e;n++)s[n]=t[Math.floor(Math.random()*t.length)];return o(s,i)},l=Array(r);for(let t=0;t<r;t++)l[t]=a(e,s);return n.Column.fromStrings("seq",l)}(i,[...(0,h.gM)(o)],a,l,c),r=t.prepare({col:e});return s(r),r})(),f=Date.now(),y=await(async t=>s(t))(p),w=Date.now();(function(t,e){const s=u.Cn.getOrCreate(t);(0,r.l_)(t.semType===e.semType,!0),(0,r.l_)(s.notation===e.notation,!0),(0,r.l_)(s.alphabet===e.alphabet,!0),(0,r.l_)(s.separator===e.separator,!0)})(y,{semType:n.SEMTYPE.MACROMOLECULE,notation:i,alphabet:o,separator:c});const b=w-f;if(b>e){const t=`ET ${b} ms is more than max allowed ${e} ms.`;throw console.error(t),new Error(t)}return console.log(`ET ${b} ms is OK.`),b}(e)}function s(t){t.callSync();const e=t.getOutputParamValue(),s=t.inputs.col;return e&&(s.semType=e),s}(0,r.bb)((async()=>{const e=n.Func.find({package:"Bio",name:"detectMacromolecule"});t=e[0];const s=n.Column.fromStrings("seq",["ACGT","ACGT","ACGT"]);await t.prepare({col:s}).call()})),(0,r.Bu)("fastaDnaShorts50Few50",(async()=>{await e(10,h.r2.FASTA,"DNA",50,50)})),(0,r.Bu)("fastaDnaShorts50Many1E6",(async()=>{await e(20,h.r2.FASTA,"DNA",50,1e6)})),(0,r.Bu)("fastaDnaLong1e6Few50",(async()=>{await e(20,h.r2.FASTA,"DNA",1e6,50)})),(0,r.Bu)("separatorDnaShorts50Few50",(async()=>{await e(10,h.r2.SEPARATOR,"DNA",50,50,"/")})),(0,r.Bu)("separatorDnaShorts50Many1E6",(async()=>{await e(20,h.r2.SEPARATOR,"DNA",50,1e6,"/")})),(0,r.Bu)("separatorDnaLong1e6Few50",(async()=>{await e(20,h.r2.SEPARATOR,"DNA",1e6,50,"/")}))}));var w=s(6098),b=s(525);async function T(t){const e=await async function(t){return await gt.files.readAsText(t)}(t),s=n.DataFrame.fromCsv(e);return s.name=t.replace(".csv",""),s}async function C(t){const e=await T(t);return e.name=t.replace(".csv",""),l.shell.addTableView(e)}async function A(t=1e4){const e=await l.dapi.docker.dockerContainers.filter("bio").first();"started"!==e.status&&"checking"!==e.status&&await(0,r.gw)(t)}async function S(t,e){const s=n.DataFrame.fromCsv(t),i=n.DataFrame.fromCsv(e),o=s.getCol("seq"),a=await l.functions.call("Bio:detectMacromolecule",{col:o});a&&(o.semType=a);const c=i.getCol("seq"),h=await(0,w.U)(o,!0);(0,r.f6)(h.toList(),c.toList())}async function E(t,e,s,i,o,a){const c=n.DataFrame.fromCsv(t),h=n.DataFrame.fromCsv(e),u=c.getCol("seq"),m=h.getCol("seq"),d=c.getCol("seq"),g=await l.functions.call("Bio:detectMacromolecule",{col:d});g&&(d.semType=g),await l.data.detectSemanticTypes(c),(0,r.l_)(u.semType,n.SEMTYPE.MACROMOLECULE),(0,r.l_)(u.getTag(n.TAGS.UNITS),s),o&&(0,r.l_)(u.getTag("alphabet"),o);const p=await(0,b.K)({col:u,pepsea:{method:a}});(0,r.l_)(p.semType,n.SEMTYPE.MACROMOLECULE),(0,r.l_)(p.getTag(n.TAGS.UNITS),i),(0,r.l_)(p.getTag("aligned"),"SEQ.MSA"),o&&(0,r.l_)(p.getTag("alphabet"),o),(0,r.f6)(p.toList(),m.toList())}(0,r.W3)("MSA",(async()=>{(0,r.Bu)("isCorrect",(async()=>{await S("seq\nFWRWYVKHP\nYNRWYVKHP\nMWRSWYCKHP","seq\nFWR-WYVKHP\nYNR-WYVKHP\nMWRSWYCKHP")})),(0,r.Bu)("isCorrectLong",(async()=>{await S("seq\nFWRWYVKHPFWRWYVKHPFWRWYVKHPFWRWYVKHPFWRWYVKHPFWRWYVKHPFWRWYVKHPFWRWYVKHP\nYNRWYVKHPYNRWYVKHPYNRWYVKHPYNRWYVKHPYNRWYVKHPYNRWYVKHPYNRWYVKHPYNRWYVKHP\nMWRSWYCKHPMWRSWYCKHPMWRSWYCKHPMWRSWYCKHPMWRSWYCKHPMWRSWYCKHPMWRSWYCKHPMWRSWYCKHP","seq\nFWR-WYVKHPFWR-WYVKHPFWR-WYVKHPFWR-WYVKHPFWR-WYVKHPFWR-WYVKHPFWR-WYVKHPFWR-WYVKHP\nYNR-WYVKHPYNR-WYVKHPYNR-WYVKHPYNR-WYVKHPYNR-WYVKHPYNR-WYVKHPYNR-WYVKHPYNR-WYVKHP\nMWRSWYCKHPMWRSWYCKHPMWRSWYCKHPMWRSWYCKHPMWRSWYCKHPMWRSWYCKHPMWRSWYCKHPMWRSWYCKHP")})),(0,r.Bu)("isCorrectHelm",(async()=>{await A(),await E("seq\n PEPTIDE1{meI.hHis.Aca.N.T.dE.Thr_PO3H2}$$$$\n PEPTIDE1{meI.Aca.N.T.dE.Thr_PO3H2}$$$$\n PEPTIDE1{hHis.Aca.N.T.dE.Thr_PO3H2}$$$$","seq\n meI.hHis.Aca.N.T.dE.Thr_PO3H2\n .meI.Aca.N.T.dE.Thr_PO3H2\n .hHis.Aca.N.T.dE.Thr_PO3H2",h.r2.HELM,h.r2.SEPARATOR,void 0,"mafft")}),{skipReason:"GROK-13221"}),(0,r.Bu)("isCorrectHelmLong",(async()=>{await A(),await E("seq\n PEPTIDE1{meI.hHis.Aca.N.T.dE.Thr_PO3H2.Aca.D-Tyr_Et.dV.E.N.D-Orn.D-aThr.Phe_4Me.Thr_PO3H2}$$$$\n PEPTIDE1{meI.hHis.Aca.Cys_SEt.T.dK.Tyr_PO3H2.D-Chg.dV.Phe_ab-dehydro.N.D-Orn.D-aThr.Phe_4Me}$$$$\n PEPTIDE1{Lys_Boc.hHis.Aca.Cys_SEt.T.dK.Tyr_PO3H2.D-Chg.dV.Thr_PO3H2.N.D-Orn.D-aThr.Phe_4Me}$$$$","seq\n meI.hHis.Aca.N.T.dE.Thr_PO3H2.Aca.D-Tyr_Et.dV.E.N.D-Orn.D-aThr.Phe_4Me.Thr_PO3H2\n meI.hHis.Aca.Cys_SEt.T.dK..Tyr_PO3H2.D-Chg.dV.Phe_ab-dehydro.N.D-Orn.D-aThr.Phe_4Me.\n Lys_Boc.hHis.Aca.Cys_SEt.T.dK..Tyr_PO3H2.D-Chg.dV.Thr_PO3H2.N.D-Orn.D-aThr.Phe_4Me.",h.r2.HELM,h.r2.SEPARATOR,void 0,"mafft")}),{skipReason:"GROK-13221"}),(0,r.Bu)("isCorrectSeparator",(async()=>{await E("seq\n F-W-P-H-E-Y\n Y-N-R-Q-W-Y-V\n M-K-P-S-E-Y-V","seq\n FWPHEY-\n YNRQWYV\n MKPSEYV",h.r2.SEPARATOR,h.r2.FASTA,"PT")})),(0,r.Bu)("isCorrectSeparatorLong",(async()=>{await E("seq\n M-I-E-V-F-L-F-G-I-V-L-G-L-I-P-I-T-L-A-G-L-F-V-T-A-Y-L-Q-Y-R-R-G-D-Q-L-D-L\n M-M-E-L-V-L-K-T-I-I-G-P-I-V-V-G-V-V-L-R-I-V-D-K-W-L-N-K-D-K\n M-D-R-T-D-E-V-S-N-H-T-H-D-K-P-T-L-T-W-F-E-E-I-F-E-E-Y-H-S-P-F-H-N","seq\n MIEV-FLFGIVLGLIPITLAGLFVTAYLQYRRGDQLDL\n MMEL-VLKTII-GPIVVGVVLRIVDKWLNKDK------\n MDRTDEVSNHTHDKPTLTWFEEIFEEYHSPFHN-----",h.r2.SEPARATOR,h.r2.FASTA,"PT")}))}));var M=s(3553),v=s(9416);async function N(t,e){const s=(0,h.kB)(t);console.debug(`Bio: tests: splitters: src=${JSON.stringify(t)}, res=${JSON.stringify(s)} .`),(0,r.f6)(s,e)}async function _(t,e){const s=(0,h.gP)(t);console.debug(`Bio: tests: splitters: src=${JSON.stringify(t)}, res=${JSON.stringify(s)} .`),(0,r.f6)(s,e)}(0,r.W3)("splitters",(async()=>{(0,r.bb)((async()=>{})),(0,r.X5)((async()=>{}));const t=["M[MeI]YKETLL[MeF]PKTDFPMRGGL[MeA]",["M","MeI","Y","K","E","T","L","L","MeF","P","K","T","D","F","P","M","R","G","G","L","MeA"]],e=["[meI][Pip][dK][Thr_PO3H2][L-hArg(Et,Et)][D-Tyr_Et][Tyr_ab-dehydroMe][dV]EN[D-Orn][D-aThr][Phe_4Me]",["meI","Pip","dK","Thr_PO3H2","L-hArg(Et,Et)","D-Tyr_Et","Tyr_ab-dehydroMe","dV","E","N","D-Orn","D-aThr","Phe_4Me"]],s=["PEPTIDE1{meI.hHis.Aca.N.T.dE.Thr_PO3H2.Aca.D-Tyr_Et.Tyr_ab-dehydroMe.dV.E.N.D-Orn.D-aThr.Phe_4Me}$$$",["meI","hHis","Aca","N","T","dE","Thr_PO3H2","Aca","D-Tyr_Et","Tyr_ab-dehydroMe","dV","E","N","D-Orn","D-aThr","Phe_4Me"]],i=["PEPTIDE1{meI.hHis.Aca.N.T.dK.Thr_PO3H2.Aca.D-Tyr_Et.D-Dap.dV.E.N.pnG.Phe_4Me}$$$",["meI","hHis","Aca","N","T","dK","Thr_PO3H2","Aca","D-Tyr_Et","D-Dap","dV","E","N","pnG","Phe_4Me"]],o=["PEPTIDE1{[meI].[hHis].[Aca].N.T.[dK].[Thr_PO3H2].[Aca].[D-Tyr_Et].[D-Dap].[dV].E.N.[pnG].[Phe_4Me]}$$$",["meI","hHis","Aca","N","T","dK","Thr_PO3H2","Aca","D-Tyr_Et","D-Dap","dV","E","N","pnG","Phe_4Me"]],a=["RNA1{R(U)P.R(T)P.R(G)P.R(C)P.R(A)}$$$$",["R(U)P","R(T)P","R(G)P","R(C)P","R(A)"]],h=["RNA1{P.R(U)P.R(T)}$$$$",["P","R(U)P","R(T)"]],u=["RNA1{P.R(U).P.R(T)}$$$$",["P","R(U)","P","R(T)"]];(0,r.Bu)("fastaMulti",(async()=>{await N(t[0],t[1])})),(0,r.Bu)("fastaFromHelm",(async()=>{await N(e[0],e[1])})),(0,r.Bu)("helm1",(async()=>{await _(s[0],s[1])})),(0,r.Bu)("helm2",(async()=>{await _(i[0],i[1])})),(0,r.Bu)("helm3-multichar",(async()=>{await _(o[0],o[1])})),(0,r.Bu)("testHelm1",(async()=>{await _(a[0],a[1])})),(0,r.Bu)("testHelm2",(async()=>{await _(h[0],h[1])})),(0,r.Bu)("testHelm3",(async()=>{await _(u[0],u[1])})),(0,r.Bu)("splitToMonomers",(async()=>{const t=await l.dapi.files.readCsv("System:AppData/Bio/samples/MSA.csv"),e=t.getCol("MSA"),s=await l.functions.call("Bio:detectMacromolecule",{col:e});s&&(e.semType=s),e.setTag("aligned",M.mU);const n=await(0,v.n)(t,e);(0,r.l_)(n.columns.names().includes("17"),!0),await l.data.detectSemanticTypes(n);const i=l.shell.addTableView(n);await(0,r.ow)((()=>i.grid.dataFrame!=t),"View grid has wrong data frame",100)})),(0,r.Bu)("getHelmMonomers",(async()=>{const t=n.DataFrame.fromCsv("HELM,Activity\nPEPTIDE1{hHis.N.T}$$$,5.30751\nPEPTIDE1{hHis.Aca.Cys_SEt}$$$,5.72388\n");await l.data.detectSemanticTypes(t);const e=["hHis","Aca","Cys_SEt","N","T"],s=t.getCol("HELM"),r=(0,c.getHelmMonomers)(s),i=e.filter((t=>!r.includes(t))),o=r.filter((t=>!e.includes(t)));if(i.length>0||o.length){const t=[];throw i.length>0&&t.push(`Missed monomers ${JSON.stringify(i)}.`),o.length>0&&t.push(`Unexpected monomers ${JSON.stringify(o)}.`),new Error(t.join(" "))}}))}));var L=s(7228),P=s(6584),I=s(2918);(0,r.W3)("monomerLibraries",(()=>{let t,e=null;(0,r.bb)((async()=>{t=await(0,L.JN)(),e=(0,P.nW)()})),(0,r.X5)((async()=>{await(0,P.tW)(e)})),(0,r.Bu)("default",(async()=>{await(0,P.tW)({exclude:[],explicit:[]}),await t.loadLibraries(!0);const e=t.getBioLib();(0,r.l_)(e.getPolymerTypes().length>0,!0)})),(0,r.Bu)("forTests",(async()=>{await(0,P.tb)(),await t.loadLibraries(!0);const e=t.getBioLib();(0,r.l_)(e.getPolymerTypes().length,2),(0,r.l_)(e.getMonomerSymbolsByType("PEPTIDE").length,322),(0,r.l_)(e.getMonomerSymbolsByType("RNA").length,383)})),(0,r.Bu)("empty",(async()=>{const e=await(0,P.nW)(),s=await(0,I.P4)();e.exclude=s,e.explicit=[],await(0,P.tW)(e),await t.loadLibraries(!0);const n=t.getBioLib();(0,r.l_)(0===n.getPolymerTypes().length,!0),n.getMonomerMolsByPolymerType("PEPTIDE")}))}));var x=s(4004);function R(){const t=[];return t.push(n.Column.fromList("string","MSA",new Array(10**6).fill("meI/hHis/Aca/N/T/dE/Thr_PO3H2/Aca/D-Tyr_Et/Tyr_ab-dehydroMe/dV/E/N/D-Orn/D-aThr//Phe_4Me"))),t.push(n.Column.fromList("string","Activity",new Array(10**6).fill("5.30751"))),t}function G(){const t=[],e="meI/hHis/Aca/N/T/dE/Thr_PO3H2/Aca/D-Tyr_Et/Tyr_ab-dehydroMe/dV/E/N/D-Orn/D-aThr".repeat(10**5);return t.push(n.Column.fromList("string","MSA",new Array(100).fill(e))),t.push(n.Column.fromList("string","Activity",new Array(100).fill("7.30751"))),t}async function O(t,e){const s=t(),i=n.DataFrame.fromColumns(s);await l.data.detectSemanticTypes(i);const o=Date.now(),a=(i.columns.byName("MSA"),l.shell.addTableView(i));await(0,r.ow)((()=>a.grid.dataFrame!==i),"View grid has wrong data frame ",100);const c=Date.now()-o;console.log(`Performance test: ${e}: ${c}ms`)}(0,r.W3)("renderers",(()=>{(0,r.Bu)("long sequence performance ",(async()=>{await O(G,"Long sequences")})),(0,r.Bu)("many sequence performance",(async()=>{await O(R,"Many sequences")})),(0,r.Bu)("many sequence performance",(async()=>{await O(R,"Many sequences")})),(0,r.Bu)("rendererMacromoleculeFasta",(async()=>{await async function(){const t=await l.dapi.files.readAsText("System:AppData/Bio/samples/FASTA.csv"),e=n.DataFrame.fromCsv(t),s=e.getCol("Sequence"),i=await l.functions.call("Bio:detectMacromolecule",{col:s});i&&(s.semType=i);const o=l.shell.addTableView(e);await l.data.detectSemanticTypes(e),await(0,r.ow)((()=>o.grid.dataFrame!=e),"View grid has wrong data frame",100);const a=s.getTag(n.TAGS.CELL_RENDERER);(0,r.l_)(a,"sequence")}()})),(0,r.Bu)("rendererMacromoleculeSeparator",(async()=>{await async function(){const t=await l.dapi.files.readAsText("System:AppData/Bio/data/sample_SEPARATOR_PT.csv"),e=n.DataFrame.fromCsv(t),s=e.getCol("sequence"),i=await l.functions.call("Bio:detectMacromolecule",{col:s});i&&(s.semType=i);const o=l.shell.addTableView(e);await l.data.detectSemanticTypes(e),await(0,r.ow)((()=>o.grid.dataFrame!=e),"View grid has wrong data frame",100);const a=s.getTag(n.TAGS.CELL_RENDERER);(0,r.l_)(a,"sequence")}()})),(0,r.Bu)("rendererMacromoleculeDifference",(async()=>{await async function(){const t=n.Column.fromStrings("SequencesDiff",["meI/hHis/Aca/N/T/dK/Thr_PO3H2/Aca#D-Tyr_Et/Tyr_ab-dehydroMe/meN/E/N/dV"]);t.setTag(n.TAGS.UNITS,h.r2.SEPARATOR),t.setTag("separator","/"),t.setTag("aligned","SEQ"),t.setTag("alphabet","UN"),t.setTag(".alphabetIsMultichar","true"),t.semType=M.Of.MACROMOLECULE_DIFFERENCE;const e=n.DataFrame.fromColumns([t]),s=l.shell.addTableView(e);await l.data.detectSemanticTypes(e),await(0,r.ow)((()=>s.grid.dataFrame!=e),"View grid has wrong data frame",100);const i=t.getTag(n.TAGS.CELL_RENDERER);(0,r.l_)(i,M.Of.MACROMOLECULE_DIFFERENCE)}()})),(0,r.Bu)("afterMsa",(async()=>{await async function(){const t=await l.dapi.files.readAsText("System:AppData/Bio/data/sample_FASTA.fasta"),e=(0,c.importFasta)(t)[0],s=e.getCol("sequence"),i=await l.functions.call("Bio:detectMacromolecule",{col:s});i&&(s.semType=i);const o=l.shell.addTableView(e);await l.data.detectSemanticTypes(e),console.log("Bio: tests/renderers/afterMsa, table view"),await(0,r.ow)((()=>o.grid.dataFrame!=e),"View grid has wrong data frame",100),console.log(`Bio: tests/renderers/afterMsa, src before test semType="${s.semType}", units="${s.getTag(n.TAGS.UNITS)}", cell.renderer="${s.getTag(n.TAGS.CELL_RENDERER)}"`),(0,r.l_)(s.semType,n.SEMTYPE.MACROMOLECULE),(0,r.l_)(s.getTag(n.TAGS.UNITS),h.r2.FASTA),(0,r.l_)(s.getTag("aligned"),"SEQ"),(0,r.l_)(s.getTag("alphabet"),"PT"),(0,r.l_)(s.getTag(n.TAGS.CELL_RENDERER),"sequence");const a=await(0,b.K)({col:s});o.grid.invalidate(),await(0,r.ow)((()=>o.grid.dataFrame!=e),"View grid has wrong data frame",100),(0,r.l_)(a.semType,n.SEMTYPE.MACROMOLECULE),(0,r.l_)(a.getTag(n.TAGS.UNITS),h.r2.FASTA),(0,r.l_)(a.getTag("aligned"),"SEQ.MSA"),(0,r.l_)(a.getTag("alphabet"),"PT"),(0,r.l_)(a.getTag(n.TAGS.CELL_RENDERER),"sequence"),u.Cn.getOrCreate(a)}()})),(0,r.Bu)("afterConvert",(async()=>{await async function(){const t=await l.dapi.files.readAsText("System:AppData/Bio/data/sample_FASTA_PT.csv"),e=n.DataFrame.fromCsv(t),s=e.col("sequence"),i=await l.functions.call("Bio:detectMacromolecule",{col:s});i&&(s.semType=i);const o=l.shell.addTableView(e);await l.data.detectSemanticTypes(e);const a=await(0,x.o)(s,h.r2.SEPARATOR,"/");await(0,r.ow)((()=>o.grid.dataFrame!=e),"View grid has wrong data frame",100);const c=a.getTag(n.TAGS.CELL_RENDERER);(0,r.l_)(c,"sequence"),u.Cn.getOrCreate(a)}()})),(0,r.Bu)("selectRendererBySemType",(async()=>{await async function(){const t=n.Column.fromStrings("SequencesDiff",["meI/hHis/Aca/N/T/dK/Thr_PO3H2/Aca#D-Tyr_Et/Tyr_ab-dehydroMe/meN/E/N/dV"]);t.setTag(n.TAGS.UNITS,h.r2.SEPARATOR),t.setTag("separator","/"),t.setTag("aligned","SEQ"),t.setTag("alphabet","UN"),t.setTag(".alphabetIsMultichar","true"),t.semType=M.Of.MACROMOLECULE_DIFFERENCE;const e=n.DataFrame.fromColumns([t]);l.shell.addTableView(e),await(0,r.gw)(100);const s=t.getTag(n.TAGS.CELL_RENDERER);if("MacromoleculeDifference"!==s)throw new Error(`Units 'separator', separator '/' and semType 'MacromoleculeDifference' have been manually set on column but after df was added as table, view renderer has set to '${s}' instead of correct 'MacromoleculeDifference'.`)}()}))}));var F=s(6414),H=s.n(F),W=s(9611);(0,r.W3)("renderers: monomerPlacer",(()=>{const t={splitter:{csv:"id,seq\nid1,m1-M-m3-mon4-mon5-N-T-MON8-N9\nid2,m1-mon2-m3-mon4-mon5-Num-MON8-N9\nid3,mon1-M-mon3-mon4-mon5-MON8-N9\n",testList:[{src:{row:0,x:-1},tgt:{pos:null}},{src:{row:1,x:0},tgt:{pos:null}},{src:{row:1,x:5},tgt:{pos:0}},{src:{row:1,x:6},tgt:{pos:0}},{src:{row:1,x:26},tgt:{pos:1}},{src:{row:1,x:160},tgt:{pos:6}},{src:{row:1,x:185},tgt:{pos:7}},{src:{row:2,x:140},tgt:{pos:5}},{src:{row:2,x:145},tgt:{pos:5}}]},splitterMsa:{csv:"id,seq\nid1,m1-M-m3-mon4-mon5-N-T-MON8-N9\nid2,m1-mon2-m3-mon4-mon5-Num--MON8-N9\nid3,\nid4,mon1-M-mon3-mon4-mon5---MON8-N9\n",testList:[{src:{row:0,x:-1},tgt:{pos:null}},{src:{row:1,x:0},tgt:{pos:null}},{src:{row:1,x:1},tgt:{pos:null}},{src:{row:1,x:4},tgt:{pos:null}},{src:{row:1,x:5},tgt:{pos:0}},{src:{row:1,x:37},tgt:{pos:0}},{src:{row:1,x:38},tgt:{pos:1}},{src:{row:1,x:170},tgt:{pos:4}},{src:{row:1,x:200},tgt:{pos:5}},{src:{row:2,x:20},tgt:{pos:null}},{src:{row:3,x:170},tgt:{pos:4}},{src:{row:3,x:200},tgt:{pos:5}},{src:{row:3,x:282},tgt:{pos:null}}]},fastaMsa:{csv:"id,seq\nid1,QQYNIYPLT\nid2,QQWSSFPYT\nid3,\nid3,QHIRE--LT\n",testList:[{src:{row:1,x:-1},tgt:{pos:null}},{src:{row:1,x:0},tgt:{pos:null}},{src:{row:1,x:1},tgt:{pos:null}},{src:{row:1,x:19},tgt:{pos:0}},{src:{row:1,x:170},tgt:{pos:8}},{src:{row:1,x:171},tgt:{pos:8}},{src:{row:2,x:5},tgt:{pos:null}},{src:{row:3,x:170},tgt:{pos:8}},{src:{row:3,x:181},tgt:{pos:null}}]}};for(const[e,s]of Object.entries(t))(0,r.Bu)(`getPosition-${e}`,(async()=>{const t=n.DataFrame.fromCsv(s.csv);await l.data.detectSemanticTypes(t);const e=t.getCol("seq"),r=new W.A(null,e,(()=>({unitsHandler:u.Cn.getOrCreate(e),monomerCharWidth:7,separatorWidth:12,monomerToShort:h.GU,monomerLengthLimit:3}))),i=s.testList;for(let t=0;t<e.length;++t)r.getCellMonomerLengths(t);const o=[];for(const[t,e]of H().enumerate(i)){const e={pos:r.getPosition(t.src.row,t.src.x)};t.tgt.pos!=e.pos&&o.push(`Test src ${JSON.stringify(t.src)} expected tgt ${JSON.stringify(t.tgt)}, but get ${JSON.stringify({res:e})}`)}if(o.length>0)throw new Error("Test failed error(s):\n"+o.join(", n"))}))})),(0,r.W3)("converters",(()=>{let t;!function(t){t.fastaPt="fastaPt",t.separatorPt="separatorPt",t.helmPt="helmPt",t.fastaDna="fastaDna",t.separatorDna="separatorDna",t.helmDna="helmDna",t.fastaRna="fastaRna",t.separatorRna="separatorRna",t.helmRna="helmRna",t.fastaGaps="fastaGaps",t.separatorGaps="separatorGaps",t.helmGaps="helmGaps",t.fastaUn="fastaUn",t.separatorUn="separatorUn",t.helmUn="helmUn",t.helmLoneDeoxyribose="helmLoneDeoxyribose",t.helmLoneRibose="helmLoneRibose",t.helmLonePhosphorus="helmLonePhosphorus",t.fastaLoneDeoxyribose="fastaLoneDeoxyribose",t.fastaLoneRibose="fastaLoneRibose",t.fastaLonePhosphorus="fastaLonePhosphorus"}(t||(t={}));const e={[t.fastaPt]:"seq\nFWPHEYFWPHEY\nYNRQWYVYNRQWYV\nMKPSEYVMKPSEYV",[t.separatorPt]:"seq\nF-W-P-H-E-Y-F-W-P-H-E-Y\nY-N-R-Q-W-Y-V-Y-N-R-Q-W-Y-V\nM-K-P-S-E-Y-V-M-K-P-S-E-Y-V",[t.helmPt]:"seq\nPEPTIDE1{F.W.P.H.E.Y.F.W.P.H.E.Y}$$$$\nPEPTIDE1{Y.N.R.Q.W.Y.V.Y.N.R.Q.W.Y.V}$$$$\nPEPTIDE1{M.K.P.S.E.Y.V.M.K.P.S.E.Y.V}$$$$",[t.fastaDna]:"seq\nACGTCACGTC\nCAGTGTCAGTGT\nTTCAACTTCAAC",[t.separatorDna]:"seq\nA/C/G/T/C/A/C/G/T/C\nC/A/G/T/G/T/C/A/G/T/G/T\nT/T/C/A/A/C/T/T/C/A/A/C",[t.helmDna]:"seq\nRNA1{d(A)p.d(C)p.d(G)p.d(T)p.d(C)p.d(A)p.d(C)p.d(G)p.d(T)p.d(C)p}$$$$\nRNA1{d(C)p.d(A)p.d(G)p.d(T)p.d(G)p.d(T)p.d(C)p.d(A)p.d(G)p.d(T)p.d(G)p.d(T)p}$$$$\nRNA1{d(T)p.d(T)p.d(C)p.d(A)p.d(A)p.d(C)p.d(T)p.d(T)p.d(C)p.d(A)p.d(A)p.d(C)p}$$$$",[t.fastaRna]:"seq\nACGUCACGUC\nCAGUGUCAGUGU\nUUCAACUUCAAC",[t.separatorRna]:"seq\nA*C*G*U*C*A*C*G*U*C\nC*A*G*U*G*U*C*A*G*U*G*U\nU*U*C*A*A*C*U*U*C*A*A*C",[t.helmRna]:"seq\nRNA1{r(A)p.r(C)p.r(G)p.r(U)p.r(C)p.r(A)p.r(C)p.r(G)p.r(U)p.r(C)p}$$$$\nRNA1{r(C)p.r(A)p.r(G)p.r(U)p.r(G)p.r(U)p.r(C)p.r(A)p.r(G)p.r(U)p.r(G)p.r(U)p}$$$$\nRNA1{r(U)p.r(U)p.r(C)p.r(A)p.r(A)p.r(C)p.r(U)p.r(U)p.r(C)p.r(A)p.r(A)p.r(C)p}$$$$",[t.fastaGaps]:"seq\nFW-PH-EYYFW-PH-EYY\nFYNRQWYV-FYNRQWYV-\nFKP-Q-SEYVFKP-Q-SEYV",[t.separatorGaps]:"seq\nF/W//P/H//E/Y/Y/F/W//P/H//E/Y/Y\nF/Y/N/R/Q/W/Y/V//F/Y/N/R/Q/W/Y/V/\nF/K/P//Q//S/E/Y/V/F/K/P//Q//S/E/Y/V",[t.helmGaps]:"seq\nPEPTIDE1{F.W.*.P.H.*.E.Y.Y.F.W.*.P.H.*.E.Y.Y}$$$$\nPEPTIDE1{F.Y.N.R.Q.W.Y.V.*.F.Y.N.R.Q.W.Y.V.*}$$$$\nPEPTIDE1{F.K.P.*.Q.*.S.E.Y.V.F.K.P.*.Q.*.S.E.Y.V}$$$$",[t.fastaUn]:"seq\n[meI][hHis][Aca]NT[dE][Thr_PO3H2][Aca]D[meI][hHis][Aca]NT[dE][Thr_PO3H2][Aca]D\n[meI][hHis][Aca][Cys_SEt]T[dK][Thr_PO3H2][Aca][Tyr_PO3H2][meI][hHis][Aca][Cys_SEt]T[dK][Thr_PO3H2][Aca][Tyr_PO3H2]\n[Lys_Boc][hHis][Aca][Cys_SEt]T[dK][Thr_PO3H2][Aca][Tyr_PO3H2][Lys_Boc][hHis][Aca][Cys_SEt]T[dK][Thr_PO3H2][Aca]",[t.separatorUn]:"seq\nmeI-hHis-Aca-N-T-dE-Thr_PO3H2-Aca-D-meI-hHis-Aca-N-T-dE-Thr_PO3H2-Aca-D\nmeI-hHis-Aca-Cys_SEt-T-dK-Thr_PO3H2-Aca-Tyr_PO3H2-meI-hHis-Aca-Cys_SEt-T-dK-Thr_PO3H2-Aca-Tyr_PO3H2\nLys_Boc-hHis-Aca-Cys_SEt-T-dK-Thr_PO3H2-Aca-Tyr_PO3H2-Lys_Boc-hHis-Aca-Cys_SEt-T-dK-Thr_PO3H2-Aca",[t.helmUn]:"seq\nPEPTIDE1{meI.hHis.Aca.N.T.dE.Thr_PO3H2.Aca.D.meI.hHis.Aca.N.T.dE.Thr_PO3H2.Aca.D}$$$$\nPEPTIDE1{meI.hHis.Aca.Cys_SEt.T.dK.Thr_PO3H2.Aca.Tyr_PO3H2.meI.hHis.Aca.Cys_SEt.T.dK.Thr_PO3H2.Aca.Tyr_PO3H2}$$$$\nPEPTIDE1{Lys_Boc.hHis.Aca.Cys_SEt.T.dK.Thr_PO3H2.Aca.Tyr_PO3H2.Lys_Boc.hHis.Aca.Cys_SEt.T.dK.Thr_PO3H2.Aca}$$$$",[t.helmLoneDeoxyribose]:"seq\nRNA1{d(A).d(C).d(G).d(T).d(C).d(A).d(C).d(G).d(T).d(C)}$$$$\nRNA1{d(C).d(A).d(G).d(T).d(G).d(T)p.d(C).d(A).d(G).d(T).d(G).d(T)p}$$$$\nRNA1{d(T).d(T).d(C).d(A).d(A).d(C)p.d(T).d(T).d(C).d(A).d(A).d(C)p}$$$$",[t.helmLoneRibose]:"seq\nRNA1{r(A).r(C).r(G).r(U).r(C).r(A).r(C).r(G).r(U).r(C)}$$$$\nRNA1{r(C).r(A).r(G).r(U).r(G).r(U)p.r(C).r(A).r(G).r(U).r(G).r(U)p}$$$$\nRNA1{r(U).r(U).r(C).r(A).r(A).r(C)p.r(U).r(U).r(C).r(A).r(A).r(C)p}$$$$",[t.helmLonePhosphorus]:"seq\nRNA1{p.p.r(A)p.r(C)p.r(G)p.r(U)p.r(C)p.r(A)p.r(C)p.r(G)p.r(U)p.r(C)p}$$$$\nRNA1{p.p.r(C)p.r(A)p.p.r(G)p.r(U)p.r(G)p.r(U)p.r(C)p.r(A)p.p.r(G)p.r(U)p.r(G)p.r(U)p}$$$$\nRNA1{p.r(U)p.r(U)p.r(C)p.r(A)p.r(A)p.r(C)p.r(U)p.r(U)p.r(C)p.r(A)p.r(A)p.r(C)p.p.p}$$$$"};async function s(t){const s=e[t],r=n.DataFrame.fromCsv(s);return await l.data.detectSemanticTypes(r),r}function i(t,e){if(t===h.r2.SEPARATOR&&!e)throw new Error(`Argument 'separator' is mandatory for target notation '${t.toString()}'.`);return function(s){const i=u.Cn.getOrCreate(s).convert(t,e);return(0,r.l_)(i.getTag(n.TAGS.UNITS),t),i}}async function o(t,e,n){const i=e((await s(t)).getCol("seq")),o=(await s(n)).getCol("seq");(0,r.f6)(i.toList(),o.toList()),u.Cn.getOrCreate(i)}(0,r.Bu)("testFastaPtToSeparator",(async()=>{await o(t.fastaPt,i(h.r2.SEPARATOR,"-"),t.separatorPt)})),(0,r.Bu)("testFastaDnaToSeparator",(async()=>{await o(t.fastaDna,i(h.r2.SEPARATOR,"/"),t.separatorDna)})),(0,r.Bu)("testFastaRnaToSeparator",(async()=>{await o(t.fastaRna,i(h.r2.SEPARATOR,"*"),t.separatorRna)})),(0,r.Bu)("testFastaGapsToSeparator",(async()=>{await o(t.fastaGaps,i(h.r2.SEPARATOR,"/"),t.separatorGaps)})),(0,r.Bu)("testFastaUnToSeparator",(async()=>{await o(t.fastaUn,i(h.r2.SEPARATOR,"-"),t.separatorUn)})),(0,r.Bu)("testFastaPtToHelm",(async()=>{await o(t.fastaPt,i(h.r2.HELM),t.helmPt)})),(0,r.Bu)("testFastaDnaToHelm",(async()=>{await o(t.fastaDna,i(h.r2.HELM),t.helmDna)})),(0,r.Bu)("testFastaRnaToHelm",(async()=>{await o(t.fastaRna,i(h.r2.HELM),t.helmRna)})),(0,r.Bu)("testFastaGapsToHelm",(async()=>{await o(t.fastaGaps,i(h.r2.HELM),t.helmGaps)})),(0,r.Bu)("testSeparatorPtToFasta",(async()=>{await o(t.separatorPt,i(h.r2.FASTA),t.fastaPt)})),(0,r.Bu)("testSeparatorDnaToFasta",(async()=>{await o(t.separatorDna,i(h.r2.FASTA),t.fastaDna)})),(0,r.Bu)("testSeparatorRnaToFasta",(async()=>{await o(t.separatorRna,i(h.r2.FASTA),t.fastaRna)})),(0,r.Bu)("testSeparatorGapsToFasta",(async()=>{await o(t.separatorGaps,i(h.r2.FASTA),t.fastaGaps)})),(0,r.Bu)("testSeparatorUnToFasta",(async()=>{await o(t.separatorUn,i(h.r2.FASTA),t.fastaUn)})),(0,r.Bu)("testSeparatorPtToHelm",(async()=>{await o(t.separatorPt,i(h.r2.HELM),t.helmPt)})),(0,r.Bu)("testSeparatorDnaToHelm",(async()=>{await o(t.separatorDna,i(h.r2.HELM),t.helmDna)})),(0,r.Bu)("testSeparatorRnaToHelm",(async()=>{await o(t.separatorRna,i(h.r2.HELM),t.helmRna)})),(0,r.Bu)("testSeparatorGapsToHelm",(async()=>{await o(t.separatorGaps,i(h.r2.HELM),t.helmGaps)})),(0,r.Bu)("testHelmDnaToFasta",(async()=>{await o(t.helmDna,i(h.r2.FASTA),t.fastaDna)})),(0,r.Bu)("testHelmRnaToFasta",(async()=>{await o(t.helmRna,i(h.r2.FASTA),t.fastaRna)})),(0,r.Bu)("testHelmPtToFasta",(async()=>{await o(t.helmPt,i(h.r2.FASTA),t.fastaPt)})),(0,r.Bu)("testHelmUnToFasta",(async()=>{await o(t.helmUn,i(h.r2.FASTA),t.fastaUn)})),(0,r.Bu)("testHelmDnaToSeparator",(async()=>{await o(t.helmDna,i(h.r2.SEPARATOR,"/"),t.separatorDna)})),(0,r.Bu)("testHelmRnaToSeparator",(async()=>{await o(t.helmRna,i(h.r2.SEPARATOR,"*"),t.separatorRna)})),(0,r.Bu)("testHelmPtToSeparator",(async()=>{await o(t.helmPt,i(h.r2.SEPARATOR,"-"),t.separatorPt)})),(0,r.Bu)("testHelmUnToSeparator",(async()=>{await o(t.helmUn,i(h.r2.SEPARATOR,"-"),t.separatorUn)})),(0,r.Bu)("testHelmLoneRibose",(async()=>{await o(t.helmLoneRibose,i(h.r2.FASTA),t.fastaRna)})),(0,r.Bu)("testHelmLoneDeoxyribose",(async()=>{await o(t.helmLoneDeoxyribose,i(h.r2.SEPARATOR,"/"),t.separatorDna)})),(0,r.Bu)("testHelmLonePhosphorus",(async()=>{await o(t.helmLonePhosphorus,i(h.r2.FASTA),t.fastaRna)}))}));var D=s(5226);(0,r.W3)("fastaFileHandler",(()=>{const t=["description:1","description:2","description:3","description:4"],e=(n.Column.fromStrings("description",t),["MDYKETLLMPKTDFPMRGGLPNKEPQIQEKW","MIEVFLFGIVLGLIPITLAGLFVTAYLQYRRGDQLDL","MMELVLKTIIGPIVVGVVLRIVDKWLNKDK","MDRTDEVSNHTHDKPTLTWFEEIFEEYHSPFHN"]);function s(s){const n=new D.i(s),i=n.descriptionsArray,o=n.sequencesArray;(0,r.f6)([i,o],[t,e])}(0,r.Bu)("testNormalFormatting",(async()=>{s(">description:1\nMDYKETLLMPKTDFPMRGGLPNKEPQIQEKW\n\n>description:2\nMIEVFLFGIVLGLIPITLAGLFVTAYLQYRRGDQLDL\n\n>description:3\nMMELVLKTIIGPIVVGVVLRIVDKWLNKDK\n\n>description:4\nMDRTDEVSNHTHDKPTLTWFEEIFEEYHSPFHN\n")})),(0,r.Bu)("testExtraSpaces",(async()=>{s(">description:1\n MDYKETLLMPKTDFPMRGGLPNKEPQIQEKW\n\n>description:2\nMI EVF LFGIVLGLI PITLAGLFVTAY LQYRRGDQLDL\n\n>description:3\nM MELVLKTI IGPI VVGVVLR IVDKWLNKDK\n\n>description:4\nMDR TDEVSNHTHDKP TLTWFEEIFEEYHSPFHN\n ")})),(0,r.Bu)("testExtraNewlines",(async()=>{s(">description:1\n\nMDYKETLLMPKTDFPMRGGLPNKEPQIQEKW\n\n>description:2\nMIEVF\nLFGIVLGLI\nPITLAGLFVTA\nYLQYRRGDQLDL\n\n>description:3\nM\nME\n\nLVLKTIIG\n\nPIVVGVVLRI\nVDKWLNKDK\n\n\n>description:4\n\nMDRT\n\nDEVSNHTHDKP\n\nTLTWFEEIFEE\n\n\n\nYHSPFHN\n")}))}));var k=s(9943);(0,r.W3)("fastaExport",(()=>{let t;!function(t){t.single="single",t.multi="multi"}(t||(t={}));const e={[t.single]:{src:"MDYKETLLMPKTDFPMRGGLP",tgt:["MDYKETLLMP","KTDFPMRGGL","P"]},[t.multi]:{src:"M[MeI]YKETLL[MeF]PKTDFPMRGGL[MeA]",tgt:["M[MeI]YKETLL[MeF]P","KTDFPMRGGL","[MeA]"]}};let s;!function(t){t.test1="test1",t.test2="test2"}(s||(s={}));const i={[s.test1]:{srcCsv:"id,seq\n1,MDYKETLLMP\n2,KTDFPMRGGL\n3,P",idCols:["id"],seqCol:"seq",lineWidth:10,tgtFasta:">1\nMDYKETLLMP\n>2\nKTDFPMRGGL\n>3\nP\n"},[s.test2]:{srcCsv:"id,id2,seq\n1,seqA,M[MeI]YKETLL[MeF]P\n2,seqB,KTDFPMRGGL\n3,seqC,[MeA]\n",idCols:["id2","id"],seqCol:"seq",lineWidth:5,tgtFasta:">seqA|1\nM[MeI]YKE\nTLL[MeF]P\n>seqB|2\nKTDFP\nMRGGL\n>seqC|3\n[MeA]\n"}};function o(t,s=10){const n=h.kB,i=e[t].src,o=(0,k.sK)(i,n,s),a=e[t].tgt;(0,r.f6)(o,a)}async function a(t){const e=n.DataFrame.fromCsv(t.srcCsv),s=e.getCol(t.seqCol),i=t.idCols.map((t=>e.getCol(t))),o=(0,k.i$)(i,s,t.lineWidth);(0,r.l_)(o,t.tgtFasta)}(0,r.Bu)("wrapSequenceSingle",(async()=>{o(t.single,10)})),(0,r.Bu)("wrapSequenceMulti",(async()=>{o(t.multi,10)})),(0,r.Bu)("saveAsFastaTest1",(async()=>{a(i[s.test1])})),(0,r.Bu)("saveAsFastaTest2",(async()=>{a(i[s.test2])}))}));var B=s(7331),V=s(585);(0,r.W3)("bio",(()=>{const t="seq\nACGTCT\nCAGTGT\nTTCAAC";(0,r.Bu)("testGetStatsHelm1",(async()=>{const t=n.DataFrame.fromCsv("seq\nPEPTIDE1{meI}$$$$").getCol("seq"),e=(0,V.jY)(t,1,h.gP);(0,r.Wh)(e.freq,{meI:1}),(0,r.l_)(e.sameLength,!0)})),(0,r.Bu)("testGetStatsN1",(async()=>{await async function(t){const e=n.DataFrame.fromCsv(t).col("seq"),s=(0,V.jY)(e,5,h.kB);(0,r.Wh)(s.freq,{A:4,C:5,G:3,T:6}),(0,r.l_)(s.sameLength,!0)}(t)})),(0,r.Bu)("testGetAlphabetSimilarity",(async()=>{await async function(){const t=new Set(Object.keys(a.V.Names)),e=(0,h.KX)({A:2041,C:3015,G:3015,T:2048,"-":1e3},t);(0,r.l_)(e>.6,!0)}()})),(0,r.Bu)("testPickupPaletteN1",(async()=>{await async function(t){const e=n.DataFrame.fromCsv(t).col("seq"),s=(0,h.dQ)(e);(0,r.l_)(s instanceof a.J,!0)}(t)})),(0,r.Bu)("testPickupPaletteN1e",(async()=>{await async function(t){const e=n.DataFrame.fromCsv("seq\nACGTAT\nCAGTTG\nTTCG2C").col("seq"),s=(0,h.dQ)(e);(0,r.l_)(s instanceof a.J,!0)}()})),(0,r.Bu)("testPickupPaletteAA1",(async()=>{await async function(t){const e=n.DataFrame.fromCsv("seq\nFWPHEYV\nYNRQWYV\nMKPSEYV").col("seq"),s=(0,h.dQ)(e);(0,r.l_)(s instanceof i.f,!0)}()})),(0,r.Bu)("testPickupPaletteX",(async()=>{await async function(t){const e=n.DataFrame.fromCsv("seq\nXZJ{}2\n5Z4733\n3Z6></\n675687").col("seq"),s=(0,h.dQ)(e);(0,r.l_)(s instanceof B.kQ,!0)}()}))})),(0,r.W3)("WebLogo.monomerToShort",(()=>{(0,r.Bu)("longMonomerSingle",(async()=>{(0,r.l_)((0,h.GU)("S",5),"S")})),(0,r.Bu)("longMonomerShort",(async()=>{(0,r.l_)((0,h.GU)("Short",5),"Short")})),(0,r.Bu)("longMonomerLong56",(async()=>{(0,r.l_)((0,h.GU)("Long56",6),"Long56")})),(0,r.Bu)("longMonomerComplexFirstPartShort",(async()=>{(0,r.l_)((0,h.GU)("Long-long",5),"Long…")})),(0,r.Bu)("longMonomerComplexFirstPartLong56",(async()=>{(0,r.l_)((0,h.GU)("Long56-long",6),"Long5…")})),(0,r.Bu)("monomerToShort",(async()=>{const t=[["AbC","AbC"],["AbCd","Ab…"],["ABc","ABc"],["ABcd","AB…"],["A_b","A_b"],["A_bc","A…"],["Ab_c","Ab…"],["A1_b","A1…"],["Abc_d","Ab…"],["Abcd_e","Ab…"],["A-b","A-b"],["A-bc","A…"],["Ab-c","Ab…"],["A1-b","A1…"],["Abc-d","Ab…"],["Abcd-e","Ab…"],["A","A"],["Ab","Ab"],["Abc","Abc"],["Ab…","Ab…"],["Abcd","Ab…"],["Abcde","Ab…"]],e=t.map((t=>t[0])),s=t.map((t=>t[1])),n=e.map((t=>(0,h.GU)(t,3)));(0,r.f6)(n,s)}))}));var U=s(8415);function $(t,e){(0,r.l_)(t.name,e.name),(0,r.f6)(t.getMonomers(),e.getMonomers());for(const s of t.getMonomers())(0,r.l_)(t.getFreq(s).rowCount,e.getFreq(s).rowCount)}(0,r.W3)("WebLogo-positions",(()=>{const t="seq\nATC-G-TTGC--\nATC-G-TTGC--\n-TC-G-TTGC--\n-TC-GCTTGC--\n-TC-GCTTGC--";(0,r.Bu)("allPositions",(async()=>{const e=n.DataFrame.fromCsv(t),s=l.shell.addTableView(e),i=e.getCol("seq");i.semType=n.SEMTYPE.MACROMOLECULE,i.setTag(n.TAGS.UNITS,h.r2.FASTA),i.setTag("alphabet","DNA"),i.setTag("aligned","SEQ.MSA");const o=await e.plot.fromType("WebLogo");await(0,r.zg)(o.onLayoutCalculated,(()=>{}),(()=>{s.dockManager.dock(o.root,n.DOCK_TYPE.DOWN)}),500);const a=o.positions,c=[new U.CK(0,"1",{A:new U.yW(2),"-":new U.yW(3)}),new U.CK(1,"2",{T:new U.yW(5)}),new U.CK(2,"3",{C:new U.yW(5)}),new U.CK(3,"4",{"-":new U.yW(5)}),new U.CK(4,"5",{G:new U.yW(5)}),new U.CK(5,"6",{"-":new U.yW(3),C:new U.yW(2)}),new U.CK(6,"7",{T:new U.yW(5)}),new U.CK(7,"8",{T:new U.yW(5)}),new U.CK(8,"9",{G:new U.yW(5)}),new U.CK(9,"10",{C:new U.yW(5)}),new U.CK(10,"11",{"-":new U.yW(5)}),new U.CK(11,"12",{"-":new U.yW(5)})];(0,r.l_)(a.length,c.length);for(let t=0;t<a.length;t++){(0,r.l_)(a[t].name,c[t].name);for(const e of a[t].getMonomers())(0,r.l_)(a[t].getFreq(e).rowCount,c[t].getFreq(e).rowCount)}})),(0,r.Bu)("positions with shrinkEmptyTail option true (filtered)",(async()=>{const t=n.DataFrame.fromCsv("seq\n-TC-G-TTGC--\n-TC-GCTTGC--\n-T--C-GT-\n-T--C-GT-\n-T--C-GT-\n-T--CCGT-"),e=l.shell.addTableView(t),s=t.getCol("seq");s.semType=n.SEMTYPE.MACROMOLECULE,s.setTag(n.TAGS.UNITS,h.r2.FASTA),s.setTag("alphabet","DNA"),s.setTag("aligned","SEQ"),t.filter.init((t=>t>2)),t.filter.fireChanged();const i=await t.plot.fromType("WebLogo",{shrinkEmptyTail:!0});await(0,r.zg)(i.onLayoutCalculated,(()=>{}),(()=>{e.dockManager.dock(i.root,n.DOCK_TYPE.DOWN)}),500);const o=i.positions,a=[new U.CK(0,"1",{"-":new U.yW(3)}),new U.CK(1,"2",{T:new U.yW(3)}),new U.CK(2,"3",{"-":new U.yW(3)}),new U.CK(3,"4",{"-":new U.yW(3)}),new U.CK(4,"5",{C:new U.yW(3)}),new U.CK(5,"6",{"-":new U.yW(2),C:new U.yW(1)}),new U.CK(6,"7",{G:new U.yW(3)}),new U.CK(7,"8",{T:new U.yW(3)}),new U.CK(8,"9",{"-":new U.yW(3)})];(0,r.l_)(o.length,a.length);for(let t=0;t<o.length;t++){(0,r.l_)(o[t].name,a[t].name);for(const e of o[t].getMonomers())(0,r.l_)(o[t].getFreq(e).rowCount,a[t].getFreq(e).rowCount)}})),(0,r.Bu)("positions with skipEmptyPositions option",(async()=>{const e=n.DataFrame.fromCsv(t),s=l.shell.addTableView(e),i=e.getCol("seq");i.semType=n.SEMTYPE.MACROMOLECULE,i.setTag(n.TAGS.UNITS,h.r2.FASTA),i.setTag("alphabet","DNA"),i.setTag("aligned","SEQ.MSA");const o=await e.plot.fromType("WebLogo",{skipEmptyPositions:!0});await(0,r.zg)(o.onLayoutCalculated,(()=>{}),(()=>{s.dockManager.dock(o.root,n.DOCK_TYPE.DOWN)}),500);const a=o.positions,c=[new U.CK(0,"1",{A:new U.yW(2),"-":new U.yW(3)}),new U.CK(1,"2",{T:new U.yW(5)}),new U.CK(2,"3",{C:new U.yW(5)}),new U.CK(4,"5",{G:new U.yW(5)}),new U.CK(5,"6",{"-":new U.yW(3),C:new U.yW(2)}),new U.CK(6,"7",{T:new U.yW(5)}),new U.CK(7,"8",{T:new U.yW(5)}),new U.CK(8,"9",{G:new U.yW(5)}),new U.CK(9,"10",{C:new U.yW(5)})];(0,r.l_)(a.length,c.length);for(let t=0;t<a.length;t++)$(a[t],c[t])})),(0,r.Bu)("count sequences for monomer at position",(async()=>{const e=function(t,e,s,r){const i=n.DataFrame.fromCsv(t),o=i.getCol("seq");return o.semType=n.SEMTYPE.MACROMOLECULE,o.setTag(n.TAGS.UNITS,e),o.setTag("alphabet","DNA"),o.setTag("aligned","SEQ.MSA"),i}(t,h.r2.FASTA),s=e.getCol("seq"),i=l.shell.addTableView(e),o=await e.plot.fromType("WebLogo",{startPositionName:"3",endPositionName:"7",skipEmptyPositions:!0});await(0,r.zg)(o.onLayoutCalculated,(()=>{}),(()=>{i.dockManager.dock(o.root,n.DOCK_TYPE.DOWN)}),500);const a=o.positions,c=[new U.CK(2,"3",{C:new U.yW(5)}),new U.CK(4,"5",{G:new U.yW(5)}),new U.CK(5,"6",{"-":new U.yW(3),C:new U.yW(2)}),new U.CK(6,"7",{T:new U.yW(5)})];(0,r.l_)(a.length,c.length);for(let t=0;t<a.length;t++)$(a[t],c[t]);const m=a[1],d=u.Cn.getOrCreate(s),g=(0,U.eZ)(e,d,e.filter,"G",m);(0,r.l_)(g,5)})),(0,r.Bu)("empty",(async()=>{const t=n.DataFrame.fromColumns([(()=>{const t=n.Column.fromStrings("seq",[]);return t.setTag(n.TAGS.SEMTYPE,n.SEMTYPE.MACROMOLECULE),t.setTag(n.TAGS.UNITS,h.r2.FASTA),t.setTag("alphabet","DNA"),t})()]),e=l.shell.addTableView(t),s=await t.plot.fromType("WebLogo");await(0,r.zg)(s.onLayoutCalculated,(()=>{}),(()=>{e.dockManager.dock(s.root,n.DOCK_TYPE.DOWN)}),500),s.positions}))}));var Y=s(2568);function K(t,e){let s=null;for(const n of t.viewers)n.type===e&&(s=n);return s}(0,r.W3)("checkInputColumn",(()=>{const t="seq\nseq1,\nseq2,\nseq3,\nseq4";(0,r.Bu)("testMsaPos",(async()=>{const e=n.DataFrame.fromCsv(t).getCol("seq");e.semType=n.SEMTYPE.MACROMOLECULE,e.setTag(n.TAGS.UNITS,h.r2.FASTA),e.setTag("alphabet","DNA"),e.setTag("aligned","SEQ");const[s,i]=(0,Y.l)(e,"Test",[h.r2.FASTA],["DNA","RNA","PT"]);(0,r.l_)(s,!0)})),(0,r.Bu)("testMsaNegHelm",(async()=>{const e=n.DataFrame.fromCsv(t).getCol("seq");e.semType=n.SEMTYPE.MACROMOLECULE,e.setTag(n.TAGS.UNITS,h.r2.HELM),e.setTag(".alphabetIsMultichar","true");const[s,i]=(0,Y.l)(e,"Test",[h.r2.FASTA],["DNA","RNA","PT"]);(0,r.l_)(s,!1)})),(0,r.Bu)("testMsaNegUN",(async()=>{const e=n.DataFrame.fromCsv(t).getCol("seq");e.semType=n.SEMTYPE.MACROMOLECULE,e.setTag(n.TAGS.UNITS,h.r2.FASTA),e.setTag("alphabet","UN"),e.setTag(".alphabetSize","11"),e.setTag(".alphabetIsMultichar","true"),e.setTag("aligned","SEQ");const[s,i]=(0,Y.l)(e,"Test",[h.r2.FASTA],["DNA","RNA","PT"]);(0,r.l_)(s,!1)})),(0,r.Bu)("testGetActionFunctionMeta",(async()=>{n.Func.find({package:"Bio",name:"multipleSequenceAlignmentDialog"})[0].inputs.find((t=>"sequence"==t.name))}))})),(0,r.W3)("similarity/diversity",(async()=>{(0,r.Bu)("similaritySearchViewer",(async()=>{await async function(){const t=await C("tests/sample_MSA_data.csv"),e=await t.dataFrame.plot.fromType("Sequence Similarity Search");let s=!1;if(e.computeCompleted.subscribe((t=>{t&&(s=!0)})),t.dockManager.dock(e,n.DOCK_TYPE.RIGHT,null,"Similarity"),await e.renderPromise,await(0,r.ow)((()=>void 0!==K(t,"Sequence Similarity Search")),"Sequence Similarity Search viewer has not been created",100),!e.initialized)throw new Error("The viewer is not initialized.");if(!e.moleculeColumn)throw new Error("The viewer has not molecule column (onTableAttached).");if(!e.beforeRender())throw new Error("The viewer is not able to render.");if(!e.computeRequested)throw new Error("The viewer has not compute requested even.");if(!s)throw new Error("The viewer has not compute completed.");const i=e;await(0,r.ow)((()=>0!==i.root.getElementsByClassName("d4-grid").length),"Sequence Similarity Search viewer grid has not been created",100);(0,r.l_)(i.fingerprint,"Morgan"),(0,r.l_)(i.distanceMetric,"Tanimoto"),(0,r.l_)(i.scores.get(0),n.FLOAT_NULL),(0,r.l_)(i.idxs.get(0),0),(0,r.l_)(i.molCol.get(0),"D-Tyr_Et/Tyr_ab-dehydroMe/dV/E/N/D-Orn/D-aThr//Phe_4Me"),(0,r.l_)(i.scores.get(1),.4722222089767456),(0,r.l_)(i.idxs.get(1),11),(0,r.l_)(i.molCol.get(1),"meI/hHis//Aca/meM/Tyr_ab-dehydroMe/dV/E/N/D-Orn/D-aThr//Phe_4Me"),t.dataFrame.currentRowIdx=1,await(0,r.ow)((()=>1===i.targetMoleculeIdx),"Target molecule has not been changed",5e3),await(0,r.ow)((()=>"meI/hHis/Aca/Cys_SEt/T/dK/Thr_PO3H2/Aca/Tyr_PO3H2/D-Chg/dV/Phe_ab-dehydro/N/D-Orn/D-aThr//Phe_4Me"===i.molCol.get(0)),"Incorrect first similar molecule",5e3)}()})),(0,r.Bu)("diversitySearchViewer",(async()=>{await async function(){const t=await C("tests/sample_MSA_data.csv"),e=await t.dataFrame.plot.fromType("Sequence Diversity Search");let s=!1;if(e.computeCompleted.subscribe((t=>{t&&(s=!0)})),t.dockManager.dock(e,n.DOCK_TYPE.DOWN,null,"Diversity"),await e.renderPromise,await(0,r.ow)((()=>void 0!==K(t,"Sequence Diversity Search")),"Sequence Diversity Search viewer has not been created",100),!e.initialized)throw new Error("The viewer is not initialized.");if(!e.moleculeColumn)throw new Error("The viewer has not molecule column (onTableAttached).");if(!e.beforeRender())throw new Error("The viewer is not able to render.");if(!e.computeRequested)throw new Error("The viewer has not compute requested even.");if(!s)throw new Error("The viewer has not compute completed.");const i=e;await(0,r.ow)((()=>0!==i.root.getElementsByClassName("d4-grid").length),"Sequence Diversity Search viewer grid has not been created",100),(0,r.l_)(i.fingerprint,"Morgan"),(0,r.l_)(i.distanceMetric,"Tanimoto"),(0,r.l_)(i.initialized,!0),(0,r.l_)(i.renderMolIds.length>0,!0)}()}))}));var Z=s(4413);(0,r.W3)("substructureFilters",(async()=>{let t,e;(0,r.bb)((async()=>{t=await(0,L.JN)(),e=await(0,P.nW)(),await(0,P.tb)(),await t.loadLibraries(!0)})),(0,r.X5)((async()=>{await(0,P.tW)(e),await t.loadLibraries(!0)})),(0,r.Bu)("fasta",(async()=>{const t=await T("tests/filter_FASTA.csv"),e=new Z.ST;await l.data.detectSemanticTypes(t),e.attach(t),e.bioFilter.substructure="MD",await(0,r.gw)(100),(0,r.l_)(e.dataFrame.filter.trueCount,3),(0,r.l_)(e.dataFrame.filter.get(0),!0),(0,r.l_)(e.dataFrame.filter.get(3),!0),(0,r.l_)(e.dataFrame.filter.get(8),!0),(0,r.l_)(e.dataFrame.filter.get(1),!1)})),(0,r.Bu)("separator",(async()=>{const t=await T("tests/filter_MSA.csv"),e=new Z.ST;await l.data.detectSemanticTypes(t),e.attach(t),e.bioFilter.substructure="meI",await(0,r.gw)(100),(0,r.l_)(e.dataFrame.filter.trueCount,7),(0,r.l_)(e.dataFrame.filter.get(2),!1),e.bioFilter.substructure="/meI",await(0,r.gw)(100),(0,r.l_)(e.dataFrame.filter.trueCount,0),e.bioFilter.substructure="meI-hHis",e.bioFilter.separatorInput.value="-",await(0,r.gw)(100),(0,r.l_)(e.dataFrame.filter.trueCount,7),(0,r.l_)(e.dataFrame.filter.get(2),!1)})),(0,r.Bu)("helm",(async()=>{const t=await T("tests/filter_HELM.csv"),e=l.shell.addTableView(t),s=new Z.ST;await l.data.detectSemanticTypes(t),gt.logger.debug("Bio/substructureFilters/helm, filter attaching."),s.attach(t),gt.logger.debug("Bio/substructureFilters/helm, filter attached."),gt.logger.debug("Bio/substructureFilters/helm, filter 1 changing."),s.bioFilter.helmSubstructure="PEPTIDE1{C}$$$$V2.0",gt.logger.debug("Bio/substructureFilters/helm, filter 1 change awaiting."),await(0,r.zg)(t.onRowsFiltered,(()=>{}),(()=>{s.bioFilter.onChanged.next()}),2e4),gt.logger.debug("Bio/substructureFilters/helm, filter 1 changed."),(0,r.l_)(s.dataFrame.filter.trueCount,2),(0,r.l_)(s.dataFrame.filter.get(0),!0),(0,r.l_)(s.dataFrame.filter.get(3),!0),gt.logger.debug("Bio/substructureFilters/helm, filter 2 changing."),s.bioFilter.helmSubstructure="PEPTIDE1{A.C}$$$$V2.0",gt.logger.debug("Bio/substructureFilters/helm, filter 2 change awaiting."),await(0,r.zg)(t.onRowsFiltered,(()=>{}),(()=>{s.bioFilter.onChanged.next()}),2e4),await async function(t,e=5e3){await(0,r.gw)(0),await(0,r.zg)(t.onAfterDrawContent,(()=>{}),(()=>{t.invalidate()}),e)}(e.grid),gt.logger.debug("Bio/substructureFilters/helm, filter 2 changed."),(0,r.l_)(s.dataFrame.filter.trueCount,1),(0,r.l_)(s.dataFrame.filter.get(3),!0)}),{timeout:3e4})}));var q=s(8341);(0,r.W3)("PepSeA",(()=>{(0,r.Bu)("Basic alignment",(async()=>{await A();const t=n.DataFrame.fromCsv('HELM,MSA\n "PEPTIDE1{F.L.R.G.W.[MeF].Y.S.N.N.C}$$$$","F.L.R.G.W.MeF.Y..S.N.N.C"\n "PEPTIDE1{F.L.R.G.Y.[MeF].Y.W.N.C}$$$$","F.L.R.G.Y.MeF.Y.W...N.C"\n "PEPTIDE1{F.G.Y.[MeF].Y.W.S.D.N.C}$$$$","F...G.Y.MeF.Y.W.S.D.N.C"\n "PEPTIDE1{F.L.R.G.Y.[MeF].Y.W.S.N.D.C}$$$$","F.L.R.G.Y.MeF.Y.W.S.N.D.C"\n "PEPTIDE1{F.V.R.G.Y.[MeF].Y.W.S.N.C}$$$$","F.V.R.G.Y.MeF.Y.W.S..N.C"'),e=await(0,q.f)(t.getCol("HELM"),"msa(HELM)");(0,r.l_)(null!==e,!0,"PepSeA conainter has not started");const s=t.getCol("MSA");for(let t=0;t<e.length;++t)(0,r.l_)(e.get(t)==s.get(t),!0)}),{skipReason:"GROK-13221"})})),(0,r.W3)("viewers",(()=>{const t=n.Func.find({package:"Bio",tags:["viewer"]}).map((t=>t.friendlyName));for(const e of t)(0,r.Bu)(e,(async()=>{const t=await T("data/sample_FASTA_DNA.csv");await(0,r.AB)(e,t,{detectSemanticTypes:!0})}),{skipReason:{"Sequence Similarity Search":"GROK-13162","Sequence Diversity Search":"GROK-13162",WebLogo:"GROK-13162",VdRegions:"GROK-13162"}[e]})}));const z="seq\nACGTCACGTC\nCAGTGTCAGTGT\nTTCAACTTCAAC",X="seq\nAC-GT-CTAC-GT-CT\nCAC-T-GTCAC-T-GT\nACCGTACTACCGTACT",j="seq\nabc-dfgg-abc1-cfr3-rty-wert-abc-dfgg-abc1-cfr3-rty-wert\nrut12-her2-rty-wert-abc-abc1-dfgg-rut12-her2-rty-wert-abc-abc1-dfgg\nrut12-rty-her2-abc-cfr3-wert-rut12-rut12-rty-her2-abc-cfr3-wert-rut12";var Q;(0,r.W3)("UnitsHandler",(()=>{async function t(t){const e=n.DataFrame.fromCsv(t);await l.data.detectSemanticTypes(e);const s=u.Cn.getOrCreate(e.getCol("seq"));return[e,s]}(0,r.Bu)("Seq-Fasta",(async()=>{const[e,s]=await t(z);(0,r.l_)(s.notation,h.r2.FASTA),(0,r.l_)(s.isMsa(),!1)})),(0,r.Bu)("Seq-Fasta-MSA",(async()=>{const[e,s]=await t(X);(0,r.l_)(s.notation,h.r2.FASTA),(0,r.l_)(s.isMsa(),!0)})),(0,r.Bu)("Seq-Fasta-units",(async()=>{const[e,s]=await t(z);(0,r.l_)(s.notation,h.r2.FASTA),(0,r.l_)(s.isMsa(),!1)})),(0,r.Bu)("Seq-Fasta-MSA-units",(async()=>{const[e,s]=await t(X);(0,r.l_)(s.notation,h.r2.FASTA),(0,r.l_)(s.isMsa(),!0)})),(0,r.Bu)("Seq-Helm",(async()=>{const[e,s]=await t("seq\nPEPTIDE1{meI.hHis.Aca.N.T.dE.Thr_PO3H2.Aca.D-Tyr_Et.Tyr_ab-dehydroMe.dV.E.N.D-Orn.D-aThr.Phe_4Me}$$$$\nPEPTIDE1{meI.hHis.Aca.Cys_SEt.T.dK.Thr_PO3H2.Aca.Tyr_PO3H2.D-Chg.dV.Phe_ab-dehydro.N.D-Orn.D-aThr.Phe_4Me}$$$$\nPEPTIDE1{Lys_Boc.hHis.Aca.Cys_SEt.T.dK.Thr_PO3H2.Aca.Tyr_PO3H2.D-Chg.dV.Thr_PO3H2.N.D-Orn.D-aThr.Phe_4Me}$$$$\nPEPTIDE1{meI.hHis.Aca.Cys_SEt.T.dK.Thr_PO3H2.Aca.Tyr_PO3H2.D-Chg.dV.Thr_PO3H2.N.D-Orn.D-aThr.Phe_4Me}$$$$");(0,r.l_)(s.notation,h.r2.HELM),(0,r.l_)(s.isHelm(),!0)})),(0,r.Bu)("Seq-UN",(async()=>{const[e,s]=await t(j);(0,r.l_)(s.notation,h.r2.SEPARATOR),(0,r.l_)(s.separator,"-"),(0,r.l_)(s.alphabet,"UN")})),(0,r.Bu)("Seq-UN-auto",(async()=>{const[e,s]=await t(j);(0,r.l_)(s.notation,h.r2.SEPARATOR),(0,r.l_)(s.separator,"-"),(0,r.l_)(s.alphabet,"UN")}))})),function(t){t.fasta="fasta",t.fastaMsa="fastaMsa",t.separator="separator",t.separatorMsa="separatorMsa",t.helm="helm"}(Q||(Q={})),(0,r.W3)("UnitsHandler",(()=>{u._9[h.r2.FASTA],u._9[h.r2.HELM];const t=u._9[h.r2.SEPARATOR],e={[Q.fasta]:{src:{csv:"seq\nACGTCACGTC\nCAGTGTCAGTGT\nTTCAACTTCAAC"},tgt:{notation:h.r2.FASTA,splitted:["ACGTCACGTC","CAGTGTCAGTGT","TTCAACTTCAAC"]}},[Q.fastaMsa]:{src:{csv:"seq\nAC-GT-CTAC-GT-CT\nCAC-T-GTCAC-T-GT\nACCGTACTACCGTACT"},tgt:{notation:h.r2.FASTA,splitted:["AC-GT-CTAC-GT-CT","CAC-T-GTCAC-T-GT","ACCGTACTACCGTACT"]}},[Q.separator]:{src:{csv:"seq\nabc-dfgg-abc1-cfr3-rty-wert-abc-dfgg-abc1-cfr3-rty-wert\nrut12-her2-rty-wert-abc-abc1-dfgg-rut12-her2-rty-wert-abc\nrut12-rty-her2-abc-cfr3-wert-rut12-rut12-rty-her2-abc-cfr3"},tgt:{notation:h.r2.SEPARATOR,separator:"-",splitted:[["abc","dfgg","abc1","cfr3","rty","wert","abc","dfgg","abc1","cfr3","rty","wert"],["rut12","her2","rty","wert","abc","abc1","dfgg","rut12","her2","rty","wert","abc"],["rut12","rty","her2","abc","cfr3","wert","rut12","rut12","rty","her2","abc","cfr3"]]}},[Q.separatorMsa]:{src:{csv:'seq\nrut0-dfgg-abc1-cfr3-rty-wert-abc-dfgg-abc1-cfr3-rty-wert\nrut1-her2-rty--abc1-dfgg-rut12-her2-rty--abc1-dfgg\nrut2-rty-her2---wert-rut12-rty-her2---wert\n"rut3-rty-her2-""-""-""-""-wert-rut12-rty-her2-""-""-""-""-wert"\n"""-""-rut4-her2-wert-rut12-rty-her2-wert"\n"rut5-rty-her2-wert-rut12-rty-her2-wert-""-"""'},tgt:{notation:h.r2.SEPARATOR,separator:"-",splitted:[["rut0","dfgg","abc1","cfr3","rty","wert","abc","dfgg","abc1","cfr3","rty","wert"],["rut1","her2","rty",t,"abc1","dfgg","rut12","her2","rty",t,"abc1","dfgg"],["rut2","rty","her2",t,t,"wert","rut12","rty","her2",t,t,"wert"],["rut3","rty","her2",t,t,"wert","rut12","rty","her2",t,t,"wert"],[t,"rut4","her2","wert","rut12","rty","her2","wert"],["rut5","rty","her2","wert","rut12","rty","her2","wert",t]]}},[Q.helm]:{src:{csv:"seq\nPEPTIDE1{meI.hHis.Aca.N.T.dE.Thr_PO3H2.Aca.D-Tyr_Et.Thr_PO3H2.Aca.D-Tyr_Et}$$$$\nPEPTIDE1{meI.hHis.Aca.Cys_SEt.T.dK.Thr_PO3H2.Aca.dK.Thr_PO3H2.Aca}$$$$\nPEPTIDE1{Lys_Boc.hHis.Aca.Cys_SEt.T.dK.Thr_PO3H2.Aca.dK.Thr_PO3H2.Aca}$$$$\nPEPTIDE1{meI.hHis.Aca.Cys_SEt.T.dK.Thr_PO3H2.T.dK.Thr_PO3H2}$$$$"},tgt:{notation:h.r2.HELM,splitted:[["meI","hHis","Aca","N","T","dE","Thr_PO3H2","Aca","D-Tyr_Et","Thr_PO3H2","Aca","D-Tyr_Et"],["meI","hHis","Aca","Cys_SEt","T","dK","Thr_PO3H2","Aca","dK","Thr_PO3H2","Aca"],["Lys_Boc","hHis","Aca","Cys_SEt","T","dK","Thr_PO3H2","Aca","dK","Thr_PO3H2","Aca"],["meI","hHis","Aca","Cys_SEt","T","dK","Thr_PO3H2","T","dK","Thr_PO3H2"]]}}};for(const[t,s]of Object.entries(e))(0,r.Bu)(`splitted-${t}`,(async()=>{const t=n.DataFrame.fromCsv(s.src.csv).getCol("seq"),e=await l.functions.call("Bio:detectMacromolecule",{col:t});e&&(t.semType=e),(0,r.l_)(t.semType,n.SEMTYPE.MACROMOLECULE);const i=u.Cn.getOrCreate(t);(0,r.l_)(i.notation,s.tgt.notation),(0,r.l_)(i.separator===s.tgt.separator,!0);const o=i.splitted;(0,r.f6)(o,s.tgt.splitted)}),t==Q.separatorMsa?{skipReason:"#2468 CSV row starting with the quote character"}:void 0)})),(0,r.W3)("UnitsHandler: getRegion",(()=>{const t={fastaDna:{srcCsv:"seq\nATTCGT\nACTGCTC\nATTCCGTA",startIdx:2,endIdx:4,tgtCsv:"seq\nTCG\nTGC\nTCC",units:h.r2.FASTA,alphabet:"DNA",positionNames:{tag:"a, b, c, d, e, f, g, h",start:"c",end:"e"}},separatorPt:{srcCsv:"seq\nM-D-Y-K-E-T-L\nM-I-E-V-F-L-F-G-I\nM-M-",startIdx:5,endIdx:null,tgtCsv:"seq\nT-L--\nL-F-G-I\n---",units:h.r2.SEPARATOR,alphabet:"PT",positionNames:{tag:"1, 1A, 1B, 2, 3, 4, 4A, 4A, 4C",start:"4",end:null}},helm:{srcCsv:"seq\nPEPTIDE1{[meI].[hHis].[Aca].N.T.[dE].[Thr_PO3H2].[Aca].[D-Tyr_Et].[Tyr_ab-dehydroMe].[dV].E.N.[D-Orn]}$$$$\nPEPTIDE1{[meI].[hHis].[Aca].[Cys_SEt].T.[dK].[Thr_PO3H2].[Aca].[Tyr_PO3H2].[D-Chg].[dV].[Phe_ab-dehydro]}$$$$\nPEPTIDE1{[Lys_Boc].[hHis].[Aca].[Cys_SEt].T}$$$$",startIdx:3,endIdx:6,tgtCsv:"seq\nPEPTIDE1{N.T.[dE].[Thr_PO3H2]}$$$$\nPEPTIDE1{[Cys_SEt].T.[dK].[Thr_PO3H2]}$$$$\nPEPTIDE1{[Cys_SEt].T.*.*}$$$$",units:h.r2.HELM,alphabet:null,positionNames:{tag:null,start:"4",end:"7"}}};for(const[e,s]of Object.entries(t))(0,r.Bu)(`${e}-idx`,(async()=>{const t=n.DataFrame.fromCsv(s.srcCsv).getCol("seq"),e=await l.functions.call("Bio:detectMacromolecule",{col:t});e&&(t.semType=e);const i=u.Cn.getOrCreate(t).getRegion(s.startIdx,s.endIdx,"regSeq"),o=n.DataFrame.fromCsv(s.tgtCsv).getCol("seq");(0,r.l_)(t.getTag(n.TAGS.UNITS),s.units),(0,r.l_)(i.getTag(n.TAGS.UNITS),s.units),(0,r.l_)(t.getTag("alphabet"),s.alphabet),(0,r.l_)(i.getTag("alphabet"),s.alphabet),(0,r.f6)(i.toList(),o.toList())})),s.positionNames&&(0,r.Bu)(`${e}-positionNames`,(async()=>{const t=n.DataFrame.fromCsv(s.srcCsv).getCol("seq");s.positionNames.tag&&t.setTag(".positionNames",s.positionNames.tag);const e=await l.functions.call("Bio:detectMacromolecule",{col:t});e&&(t.semType=e);const i=await l.functions.call("Bio:getRegion",{sequence:t,start:s.positionNames.start,end:s.positionNames.end}),o=n.DataFrame.fromCsv(s.tgtCsv).getCol("seq");(0,r.l_)(t.getTag(n.TAGS.UNITS),s.units),(0,r.l_)(i.getTag(n.TAGS.UNITS),s.units),(0,r.l_)(t.getTag("alphabet"),s.alphabet),(0,r.l_)(i.getTag("alphabet"),s.alphabet),(0,r.f6)(i.toList(),o.toList())}))}));var J=s(8601);const tt=new n.FileSource("System:AppData/Bio"),et={PT:"peptides-fasta",DNA:"dna-fasta",MSA:"msa-separator"},st={PT:"tests/to-atomic-level-peptides-fasta-input.csv",DNA:"tests/to-atomic-level-dna-fasta-input.csv",MSA:"tests/to-atomic-level-msa-separator-input.csv"},nt={PT:"tests/to-atomic-level-peptides-fasta-output.csv",DNA:"tests/to-atomic-level-dna-fasta-output.csv",MSA:"tests/to-atomic-level-msa-separator-output.csv"},rt="molfile(sequence)";async function it(t,e="seq",s){const n=t.getCol(e),r=s.getBioLib(),i=await(0,J.i0)(t,n,r);return i.warnings.length>0&>.logger.warning(`_toAtomicLevel() warnings ${i.warnings.join("\n")}`),i.col}function ot(t){return t.replaceAll("\r\n","\n").replace(/\n$/,"").split("\n").map((t=>t.trimEnd())).join("\n")}(0,r.W3)("toAtomicLevel",(async()=>{const t={},e={};let s,i,o;async function a(t,e){const s=t.getCol("sequence");await(0,c.toAtomicLevel)(t,s,!1);const n=t.getCol(rt),i=e.getCol(rt),o=H()(n.values()).map((t=>ot(t))).toArray(),a=H()(i.values()).map((t=>ot(t))).toArray();(0,r.f6)(o,a)}(0,r.bb)((async()=>{s=await(0,L.JN)(),i=await(0,P.nW)(),await(0,P.tb)(),await s.loadLibraries(!0);for(const s in et)t[s]=n.DataFrame.fromCsv((await tt.readAsText(st[s])).replace(/\n$/,"")),await l.data.detectSemanticTypes(t[s]),e[s]=n.DataFrame.fromCsv((await tt.readAsText(nt[s])).replace(/\n$/,""))})),(0,r.X5)((async()=>{await(0,P.tW)(i),await s.loadLibraries(!0)}));for(const s in et)(0,r.Bu)(`${et[s]}`,(async()=>{await a(t[s],e[s])}));!function(t){t.fastaDna="fastaDna",t.fastaRna="fastaRna",t.fastaPt="fastaPt",t.separatorDna="separatorDna",t.separatorRna="separatorRna",t.separatorPt="separatorPt",t.separatorUn="separatorUn",t.helm="helm"}(o||(o={}));const m={[o.fastaDna]:"seq\nACGTCACGTC\nCAGTGTCAGTGT\nTTCAACTTCAAC",[o.fastaRna]:"seq\nACGUCACGUC\nCAGUGUCAGUGU\nUUCAACUUCAAC",[o.fastaPt]:"seq\nFWPHEYFWPHEY\nYNRQWYVYNRQWYV\nMKPSEYVMKPSEYV",[o.separatorDna]:"seq\nA/C/G/T/C/A/C/G/T/C\nC/A/G/T/G/T/C/A/G/T/G/T\nT/T/C/A/A/C/T/T/C/A/A/C",[o.separatorRna]:"seq\nA*C*G*U*C*A*C*G*U*C\nC*A*G*U*G*U*C*A*G*U*G*U\nU*U*C*A*A*C*U*U*C*A*A*C",[o.separatorPt]:"seq\nF-W-P-H-E-Y-F-W-P-H-E-Y\nY-N-R-Q-W-Y-V-Y-N-R-Q-W-Y-V\nM-K-P-S-E-Y-V-M-K-P-S-E-Y-V",[o.separatorUn]:"seq\nmeI-hHis-Aca-N-T-dE-Thr_PO3H2-Aca-D-meI-hHis-Aca-N-T-dE-Thr_PO3H2-Aca-D\nmeI-hHis-Aca-Cys_SEt-T-dK-Thr_PO3H2-Aca-Tyr_PO3H2-meI-hHis-Aca-Cys_SEt-T-dK-Thr_PO3H2-Aca-Tyr_PO3H2\nLys_Boc-hHis-Aca-Cys_SEt-T-dK-Thr_PO3H2-Aca-Tyr_PO3H2-Lys_Boc-hHis-Aca-Cys_SEt-T-dK-Thr_PO3H2-Aca-Tyr_PO3H2",[o.helm]:"seq\nPEPTIDE1{meI.D-gGlu.Aca.N.T.dE.Thr_PO3H2.Aca.D.Thr_PO3H2.Aca.D}$$$\nPEPTIDE1{meI.hHis.Aca.Cys_SEt.T.dK.Thr_PO3H2.Aca.Tyr_PO3H2.Thr_PO3H2.Aca.Tyr_PO3H2}$$$\nPEPTIDE1{Lys_Boc.hHis.Aca.Cys_SEt.T.dK.Thr_PO3H2.Aca.Tyr_PO3H2.Thr_PO3H2.Aca.Tyr_PO3H2}$$$"};async function d(t){const e=m[t],s=n.DataFrame.fromCsv(e.replace(/\n$/,""));return await l.data.detectSemanticTypes(s),s}(0,r.Bu)("fastaDna",(async()=>{await it(await d(o.fastaDna),"seq",s)})),(0,r.Bu)("fastaRna",(async()=>{await it(await d(o.fastaRna),"seq",s)})),(0,r.Bu)("fastaPt",(async()=>{await it(await d(o.fastaPt),"seq",s)})),(0,r.Bu)("separatorDna",(async()=>{await it(await d(o.separatorDna),"seq",s)})),(0,r.Bu)("separatorDna",(async()=>{await it(await d(o.separatorRna),"seq",s)})),(0,r.Bu)("separatorPt",(async()=>{await it(await d(o.separatorPt),"seq",s)})),(0,r.Bu)("separatorUn",(async()=>{await it(await d(o.separatorUn),"seq",s)})),(0,r.Bu)("helm",(async()=>{await it(await d(o.helm),"seq",s)})),(0,r.Bu)("ptFasta2",(async()=>{const t=await gt.files.readAsText("tests/to-atomic-level-pt-fasta-2.mol"),e=n.DataFrame.fromCsv("seq\nAR"),i=e.getCol("seq");i.semType=n.SEMTYPE.MACROMOLECULE,i.setTag(n.TAGS.UNITS,h.r2.FASTA),i.setTag("alphabet","PT"),u.Cn.getOrCreate(i);const o=await it(e,"seq",s);(0,r.l_)(ot(o.get(0)),ot(t))}))}));var at=s(489);async function lt(t){const e=n.DataFrame.fromCsv(t),s=e.col("seq"),r=await l.functions.call("Bio:detectMacromolecule",{col:s});return r&&(s.semType=r),await l.data.detectSemanticTypes(e),u.Cn.getOrCreate(s)}function ct(t,e,s,n){const i=s(t,e);(0,r.l_)(Number(i.toFixed(3)),Number(n.toFixed(3)))}async function ht(t,e,s,n,i,o,a){await l.data.detectSemanticTypes(t);const h=await(0,c.activityCliffs)(t,t.getCol(s),t.getCol(n),i,e,a,{[`${c.BYPASS_LARGE_DATA_WARNING}`]:!0});(0,r.l_)(null!=h,!0);const u=Array.from(h.root.children).find((t=>{const e=t.className.split(" ");return["ui-btn","ui-btn-ok"].every((t=>e.includes(t)))}));(0,r.l_)(u.innerText.toLowerCase(),`${o} cliffs`)}(0,r.W3)("Distance",(async()=>{const t=[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],e={F:0,W:1,R:2,Y:3},s="FWRWY",i="FWRWW",o="FWY",a="FWRWY",l="FWY",c="FWRRRRY";(0,r.Bu)("protein-distance-function",(async()=>{const t=(await lt("seq\nFWRWYVKHPFWRWYVKHP\nYNRWYVKHPYNRWYVKHP\nMWRSWYCKHPMWRSWYCKHP")).getDistanceFunctionName();(0,r.l_)(t,at.U.LEVENSHTEIN)})),(0,r.Bu)("DNA-distance-function",(async()=>{const t=(await lt("seq\nATAACGATAACG\nATCGAATCGA\nATCGAATCGA")).getDistanceFunctionName();(0,r.l_)(t,at.U.LEVENSHTEIN)})),(0,r.Bu)("MSA-distance-function",(async()=>{const t=(await lt("seq\nATAACATAAC\nATCGAATCGA\nATCGAATCGA")).getDistanceFunctionName();(0,r.l_)(t,at.U.HAMMING)})),(0,r.Bu)("levenstein-sub",(async()=>{const t=at.o[at.U.LEVENSHTEIN]();ct(s,i,t,.2)})),(0,r.Bu)("levenstein-del",(async()=>{const t=at.o[at.U.LEVENSHTEIN]();ct(o,a,t,.4)})),(0,r.Bu)("hamming",(async()=>{const t=at.o[at.U.HAMMING]();ct(o,a,t,.6)})),(0,r.Bu)("needleman-blosum62",(async()=>{const t=at.o[at.U.NEEDLEMANN_WUNSCH]({gapOpen:8,gapExtend:2});ct(s,i,t,-6)})),(0,r.Bu)("needleman-blosum62-del",(async()=>{const t=at.o[at.U.NEEDLEMANN_WUNSCH]({gapOpen:8,gapExtend:2});ct(o,a,t,-1.8)})),(0,r.Bu)("needleman-custom-sub",(async()=>{const n=at.o[at.U.NEEDLEMANN_WUNSCH]({scoringMatrix:t,alphabetIndexes:e,gapOpen:1,gapExtend:1});ct(s,i,n,.2)})),(0,r.Bu)("needleman-custom-del",(async()=>{const s=at.o[at.U.NEEDLEMANN_WUNSCH]({scoringMatrix:t,alphabetIndexes:e,gapOpen:1,gapExtend:1});ct(o,a,s,.8)})),(0,r.Bu)("needleman-custom-zero-extend",(async()=>{const s=at.o[at.U.NEEDLEMANN_WUNSCH]({scoringMatrix:t,alphabetIndexes:e,gapOpen:1,gapExtend:0});ct(l,c,s,.714)})),(0,r.Bu)("needleman-custom-half-extend",(async()=>{const s=at.o[at.U.NEEDLEMANN_WUNSCH]({scoringMatrix:t,alphabetIndexes:e,gapOpen:2,gapExtend:1});ct(l,c,s,1.286)})),(0,r.Bu)("needleman-custom-same-extend",(async()=>{const s=at.o[at.U.NEEDLEMANN_WUNSCH]({scoringMatrix:t,alphabetIndexes:e,gapOpen:1,gapExtend:1});n.Test.isInBenchmark?ct(Array(1e4).fill("FWRY").join(""),Array(1e4).fill("FYWRRY").join(""),s,.667):ct(l,c,s,1.143)}))}));var ut=s(116),mt=s(6361);async function dt(t,e,s){const n=t.getCol(s),i=await l.functions.call("Bio:detectMacromolecule",{col:n});i&&(n.semType=i);const o=await(0,c.sequenceSpaceTopMenu)(t,t.col(s),e,at.U.LEVENSHTEIN,!0,.6,{[`${c.BYPASS_LARGE_DATA_WARNING}`]:!0});(0,r.l_)(null!=o,!0)}(0,r.W3)("activityCliffs",(async()=>{let t,e,s=[],i=[];(0,r.bb)((async()=>{t=await(0,L.JN)(),e=await(0,P.nW)(),await(0,P.tb)(),await t.loadLibraries(!0),s=[],i=[]})),(0,r.X5)((async()=>{await(0,P.tW)(e),await t.loadLibraries(!0)})),(0,r.Bu)("activityCliffsOpens",(async()=>{const t=await T(n.Test.isInBenchmark?"test/peptides_motif-with-random_10000.csv":"tests/100_3_clustests.csv");i.push(t);const e=l.shell.addTableView(t);s.push(e);const r=n.Test.isInBenchmark?6:3;await ht(t,ut.AL.UMAP,"sequence","Activity",90,r,at.U.LEVENSHTEIN)})),(0,r.Bu)("activityCliffsWithEmptyRows",(async()=>{const t=await T("tests/100_3_clustests_empty_vals.csv");i.push(t);const e=l.shell.addTableView(t);s.push(e),await ht(t,ut.AL.UMAP,"sequence","Activity",90,3,at.U.LEVENSHTEIN)})),(0,r.Bu)("Helm",(async()=>{const t=await gt.files.readCsv("data/sample_HELM_50.csv");l.shell.addTableView(t),await ht(t,ut.AL.UMAP,"HELM","Activity",65,4,mt.gk.Tanimoto)}))})),(0,r.W3)("sequenceSpace",(async()=>{let t,e,s,i;(0,r.Bu)("sequenceSpaceOpens",(async()=>{t=await T(n.Test.isInBenchmark?"test/peptides_motif-with-random_10000.csv":"tests/100_3_clustests.csv"),e=l.shell.addTableView(t),await dt(t,ut.AL.UMAP,"sequence")})),(0,r.Bu)("sequenceSpaceWithEmptyRows",(async()=>{s=await T("tests/100_3_clustests_empty_vals.csv"),i=l.shell.addTableView(s),await dt(s,ut.AL.UMAP,"sequence")}))})),(0,r.W3)("Scoring",(()=>{const t="sequence",e="expected_similarity",s="expected_identity",i=n.DataFrame.fromCsv(`${t},${e},${s}\nPEPTIDE1{Aca.Orn.gGlu.Pqa.D-His_1Bn.dH.hHis.4Abz.D-Tic.D-Dap.Y.Iva.meS.F.P.F.D-1Nal}$$$$,1.0,1.0\nPEPTIDE1{Iva.Gly_allyl.gGlu.Pqa.D-Dip.dH.hHis.4Abz.D-aHyp.D-Dap.Y.Iva.I.Tyr_26diMe.P.Asu.meC}$$$$,0.68,0.53\nPEPTIDE1{[1Nal].[1Nal].[1Nal].[1Nal].[1Nal].[1Nal].[1Nal].[1Nal].[1Nal].[1Nal].[1Nal].[1Nal].[1Nal].[1Nal].[1Nal].[1Nal].[1Nal]}$$$$V2.0,0.34,0.0`),o=i.getCol(t);o.setTag(n.TAGS.UNITS,h.r2.HELM),o.semType=n.SEMTYPE.MACROMOLECULE;const a=o.get(0);let l,u;(0,r.bb)((async()=>{l=await(0,L.JN)(),u=await(0,P.nW)(),await(0,P.tb)(),await l.loadLibraries(!0)})),(0,r.X5)((async()=>{await(0,P.tW)(u),await l.loadLibraries(!0)})),(0,r.Bu)("Identity",(async()=>{const t=await(0,c.sequenceIdentityScoring)(i,o,a);for(let e=0;e<t.length;e++)(0,r.jh)(t.get(e),i.get(s,e),.01,`Wrong identity score for sequence at position ${e}`)})),(0,r.Bu)("Similarity",(async()=>{const t=await(0,c.sequenceSimilarityScoring)(i,o,a);for(let s=0;s<t.length;s++)(0,r.jh)(t.get(s),i.get(e,s),.01,`Wrong similarity score for sequence at position ${s}`)}))}));const gt=new n.Package;async function pt(t,e,s){const i=await(0,r.ci)({category:t,test:e,testContext:s});return n.DataFrame.fromObjects(i)}},2991:(t,e,s)=>{"use strict";s.d(e,{BYPASS_LARGE_DATA_WARNING:()=>Qt,_package:()=>jt,activityCliffs:()=>ee,getBioLib:()=>te,getHelmMonomers:()=>ie,getMonomerLibHelper:()=>Jt,importFasta:()=>re,sequenceIdentityScoring:()=>oe,sequenceSimilarityScoring:()=>ae,sequenceSpaceTopMenu:()=>se,toAtomicLevel:()=>ne});var n=s(4469),r=s(3870),i=s(976),o=s(1061);s(9133);var a=s(116),l=s(5697),c=(s(1040),s(489));i.SEMTYPE.MOLECULE,i.SEMTYPE.MACROMOLECULE;const h="show-scatterplot-progress";var u=s(701),m=s(3379),d=s.n(m),g=s(7795),p=s.n(g),f=s(569),y=s.n(f),w=s(3565),b=s.n(w),T=s(9216),C=s.n(T),A=s(4589),S=s.n(A),E=s(9414),M={};M.styleTagTransform=S(),M.setAttributes=b(),M.insert=y().bind(null,"head"),M.domAPI=p(),M.insertStyleElement=C(),d()(E.Z,M),E.Z&&E.Z.locals&&E.Z.locals;var v=s(2590),N=s(9657);let _=0;const L="cliffsDf",P="cliffs_col_encode_fn",I=new u.Subject,x="act_diff",R="sali",G="sim",O="line_index",F=["1_seq","2_seq"],H="filterCliffs";async function W(t,e,s){const n=t.distance.map(((e,n)=>{const r=Math.abs(s.get(t.i[n])-s.get(t.j[n]));return 0!=e?r/e:1/0})),r=t.distance.map((t=>1-t)),i=t.i,o=t.j,a=new Set;return t.distance.forEach(((e,s)=>{a.add(t.i[s]),a.add(t.j[s])})),{simVals:r,saliVals:n,n1:i,n2:o,cliffsMolIds:a}}function D(t,e,s){const n=e.getBoundingClientRect(),r=t.clientX-n.left,i=t.clientY-n.top;let o=null,a=0;for(const t of s){const e=Math.abs(Math.hypot(t.a[0]-r,t.a[1]-i)+Math.hypot(t.b[0]-r,t.b[1]-i)-Math.hypot(t.a[0]-t.b[0],t.a[1]-t.b[1]));(!a&&e<2||e<a)&&(a=e,o=t)}return o}var k,B=s(499),V=s(5226),U=s(7228),$=s(8457),Y=s(585);async function K(t,e,s,n){const r=(0,$.O)(e),o=(0,Y.vU)(e.getTag(i.TAGS.UNITS),e.getTag("separator"))(s),a=n===k.IDENTITY?function(t,e){const s=e.columns.length,n=new Array(s),r=new Array(s),o=new Array(s);for(let i=0;i<s;++i){const s=e.columns.byIndex(i);n[i]=s.getRawData(),r[i]=s.categories.indexOf(""),o[i]=s.categories.indexOf(t[i]??"")}const a=i.Column.float("Identity",e.rowCount),l=a.getRawData();for(let s=0;s<e.rowCount;++s){l[s]=0;for(let e=0;e<t.length;++e)n[e][s]===o[e]&&++l[s];l[s]/=t.length}return a}(o,r):n===k.SIMILARITY?await async function(t,e){const s=e.columns.toList();return await(0,U.Qx)(s,t)}(o,r):null;if(null===a)throw new Error(`In bio library: Unkown sequence scoring method: ${n}`);return a.name=t.columns.getUnusedName(a.name),t.columns.add(a),a}!function(t){t.IDENTITY="identity",t.SIMILARITY="similarity"}(k||(k={})),s(4293);var Z=s(6414),q=s.n(Z);const z="rgb(100,100,100)",X="#808080",j="rgb(0,0,0)",Q=Y.GU;var J,tt;function et(t,e,s,n,r,i,o=z,a=0,l=!1,c=1,h="",u=!1,m=tt.classic,d=[],g=0,p=null,f=[],y=null,w={}){r.textAlign="start";let b=i.substring(0),T=u?"":h;m===tt.MSA&&(T="");let C=!0,A=!0,S="difference";null!=p&&null!=p.cell.column&&(C=p.cell.column.temp["color-code"]??!0,A=p.cell.column.temp["compare-with-current"]??!0,S=p.cell.column.temp["highlight-difference"]??"difference");const E=f[g];A&&f.length>0&&"difference"===S&&(c=b==E?.3:c),A&&f.length>0&&"equal"===S&&(c=b!=E?.3:c),null!=y&&(b=Q(b,y));const M=b+T;w[M]??(w[M]=r.measureText(M));let v=w[M];w[b]??(w[b]=r.measureText(b));let N=w[b].width;w[T]??(w[T]=r.measureText(T));const _=w[T].width,L=n/2-(v.fontBoundingBoxAscent+v.fontBoundingBoxDescent)/2+1;function P(s,n){const i=C?o:j;r.fillStyle=i,r.globalAlpha=c,m===tt.classic&&(r.fillText(b,t+s,e+L),r.fillStyle=X,r.fillText(T,t+n,e+L)),m===tt.MSA&&r.fillText(b,t+s,e+L)}v=v.width,m===tt.MSA&&(N=d[g],v=d[g]);const I=(d[g]??0)-(d[0]??0);if(l||v>s)return P(I,I+N),t+I+N+_;{const e=(s-v)/2;return P(e,e+N),t+I+e+N}}!function(t){t.maxMonomerLength=".mm.cellRenderer.maxMonomerLength"}(J||(J={})),function(t){t.MSA="MSA",t.classic="classic"}(tt||(tt={})),s(9611);var st,nt,rt=s(8447),it=s(7331);(nt=st||(st={})).long="long",nt.short="short",s(3553);var ot=s(7958);function at(t){const e=!q().enumerate(t).some((([e,s])=>e.length>1&&0!=s&&s!=t.length-1)),s=[],n=e?"":" ";for(const[e,r]of q().enumerate(t)){let i=e;r<t.length&&(i+=`${e?"":"-"}${n}`),s.push(i)}return[s,e]}rt.GU;class lt extends i.GridCellRenderer{constructor(){super(...arguments),this.padding=5}get name(){return"sequence"}get cellType(){return"sequence"}get defaultHeight(){return 30}get defaultWidth(){return 230}onClick(t,e){t.cell.column.temp["current-word"]=t.cell.value,t.grid.invalidate()}onMouseMove(t,e){const s=t.cell.column.temp["bio-seqCol"];if(!s)return;const i=t.bounds,o=e.offsetX-t.gridColumn.left+(t.gridColumn.left-i.x),a=s.getPosition(t.tableRowIndex,o),l=s.getSeqMonList(t.tableRowIndex);if(null!==a&&a<l.length){const t=l[a],i=[r.div(t)];if(s._monomerStructureMap[t])i.push(s._monomerStructureMap[t]);else{const e=s.getMonomer(t);if(e){const r={autoCrop:!0,autoCropMargin:0,suppressChiralText:!0},o=n.chem.svgMol(e.smiles,void 0,void 0,r);i.push(o),s._monomerStructureMap[t]=o}}r.tooltip.show(r.divV(i),e.x+16,e.y+16)}else r.tooltip.hide()}render(t,e,s,n,r,i,o){try{i.grid}catch(t){const[e,s]=(0,ot.yf)(t);jt.logger.error(e,void 0,s)}i.cell.column}}class ct extends i.GridCellRenderer{get name(){return"MacromoleculeDifferenceCR"}get cellType(){return constants.Of.MACROMOLECULE_DIFFERENCE}get defaultHeight(){return 30}get defaultWidth(){return 230}render(t,e,s,n,r,o,a){const l=window.devicePixelRatio,c=o.grid,h=o.cell,u=o.tableColumn,m=h.value??"",d=u.tags.separator,g=u.tags[i.TAGS.UNITS];getUpdatedWidth(c,t,e,n,l);const[p,f]=m.split("#"),y=(0,Y.vU)(g,d);ht(t,e,s,n,r,y(p),y(f),g)}}function ht(t,e,s,n,r,i,o,a,l,c){if(i.length!==o.length){const t=function(t,e){let s=0,n=0;const r=t.length>e.length?t:e,i=t.length>e.length?e:t;for(let t=0;t<i.length;t++)r[t]===i[t]&&s++;const o=r.length-i.length;for(let t=r.length-1;t>o;t--)r[t]===i[t-o]&&n++;const a=new Array(Math.abs(t.length-e.length)).fill("");function l(t){return s>n?t.concat(a):a.concat(t)}return t.length>e.length?e=l(e):t=l(t),{subParts1:t,subParts2:e}}(q()(i).toArray(),q()(o).toArray());i=t.subParts1,o=t.subParts2}const h=t.measureText(at(i).join("")),u=t.measureText(at(o).join("")),m=Math.max(h.width,u.width);l&&(n=m+4*i.length,t.canvas.width=m+4*i.length);let d=Math.max(e,e+(n-(m+4*i.length))/2)+5;const g=Math.max(s,s+(r-28)/2);t.save(),t.beginPath(),t.rect(e,s,l?m+4*i.length:n,r),t.clip(),t.font="12px monospace",t.textBaseline="top";let p=it.UE.Color;"HELM"!=a&&(p=(0,rt.py)(a.substring(a.length-2)));for(let e=0;e<i.length;e++){const s=i[e],a=o[e],l=p.get(s);if(s!=a){const i=p.get(a),o=et(d,g-7,n,r,t,s,l,0,!0),h=et(d,g+7,n,r,t,a,i,0,!0);d=Math.max(h,o),c&&(c[e]=ut(s,a,l,i,g,7,r))}else d=et(d,g,n,r,t,s,l,0,!0,.5);d+=4}t.restore()}function ut(t,e,s,n,r,i,o){const a=document.createElement("canvas"),l=a.getContext("2d");l.font="12px monospace";const c=l.measureText(at([t]).join("")).width,h=l.measureText(at([e]).join("")).width,u=Math.max(c,h);return a.height=o,a.width=u+4,l.font="12px monospace",l.textBaseline="top",et(0,r-i,u,o,l,t,s,0,!0),et(0,r+i,u,o,l,e,n,0,!0),a}var mt,dt,gt,pt=s(9298);!function(t){t.Unknown="unknown",t.FR="framework",t.CDR="cdr"}(mt||(mt={})),new class{constructor(){this.regionTypes=[mt.CDR],this.chains=["Heavy","Light"],this.skipEmptyPositions=!1,this.fitWidth=!1,this.positionWidth=16,this.positionHeight=pt.ES.Entropy,this.filterSource=pt.vS.filterSource}},s(8415),function(t){t.STYLE="Style",t.BEHAVIOR="Behavior",t.LAYOUT="Layout",t.DATA="Data"}(dt||(dt={})),function(t){t.skipEmptyPositions="skipEmptyPositions",t.regionTypes="regionTypes",t.chains="chains",t.fitWidth="fitWidth",t.positionWidth="positionWidth",t.positionHeight="positionHeight",t.filterSource="filterSource"}(gt||(gt={}));class ft extends i.JsViewer{constructor(){super(),this.viewed=!1,this.regionsFg=null,this.regionsRoot=null,this.isOpened=!1,this.panelNode=null,this.regions=[],this.viewPromise=Promise.resolve(),this.setDataInProgress=!1,this.host=null,this.mainLayout=null,this.logos=[],this.viewSubs=[],this.calcSizeRequested=!1,this.skipEmptyPositions=this.bool(gt.skipEmptyPositions,defaults.skipEmptyPositions,{category:dt.DATA}),this.regionTypes=this.stringList(gt.regionTypes,defaults.regionTypes,{category:dt.DATA,choices:Object.values(vrt).filter((t=>t!=vrt.Unknown))}),this.chains=this.stringList(gt.chains,defaults.chains,{category:dt.DATA,choices:["Heavy","Light"]}),this.fitWidth=this.bool(gt.fitWidth,defaults.fitWidth,{category:dt.LAYOUT}),this.positionWidth=this.float(gt.positionWidth,defaults.positionWidth,{category:dt.LAYOUT,editor:"slider",min:0,max:64,description:"Internal WebLogo viewers property width of position."}),this.positionHeight=this.string(gt.positionHeight,defaults.positionHeight,{category:dt.LAYOUT,choices:Object.keys(pt.ES)}),this.filterSource=this.string(gt.filterSource,defaults.filterSource,{category:dt.BEHAVIOR,choices:Object.values(pt.Ct)})}async init(){this.subs.push((0,u.fromEvent)(this.root,"mousemove").subscribe(this.rootOnMouseMove.bind(this)))}detach(){const t=super.detach.bind(this);this.viewPromise=this.viewPromise.then((async()=>{this.setDataInProgress||(this.viewed&&(await this.destroyView("detach"),this.viewed=!1),t())})).catch((t=>{const[e,s]=(0,ot.yf)(t);jt.logger.error(e,void 0,s)}))}onTableAttached(){super.onTableAttached(),this.setData(this.regions)}onPropertyChanged(t){if(super.onPropertyChanged(t),t){switch(t.name){case gt.regionTypes:case gt.chains:this.setData(this.regions)}switch(t.name){case gt.skipEmptyPositions:for(let t=0;t<this.logos.length;++t)for(const e of this.chains)this.logos[t][e].setOptions({[web_logo_viewer.bo.skipEmptyPositions]:this.skipEmptyPositions});this.calcSize();break;case gt.fitWidth:case gt.positionWidth:this.calcSize();break;case gt.positionHeight:for(let t=0;t<this.logos.length;++t)for(const e of this.chains)this.logos[t][e].setOptions({[web_logo_viewer.bo.positionHeight]:this.positionHeight});this.calcSize();break;case gt.filterSource:this.filterSourceInput.value=this.filterSource;break;default:this.setData(this.regions)}}else console.warn("Bio: VdRegionsViewer.onPropertyChanged() property is null")}setData(t){jt.logger.debug(`Bio: VdRegionsViewer.setData(), in, regions.length = ${t.length}`),this.viewPromise=this.viewPromise.then((async()=>{if(!this.setDataInProgress){this.setDataInProgress=!0;try{this.viewed&&(await this.destroyView("setData"),this.viewed=!1),this.regions=t,this.viewed||(await this.buildView("setData"),this.viewed=!0)}catch(t){const[e,s]=(0,ot.yf)(t);n.shell.error(e),jt.logger.error(e,void 0,s)}finally{this.setDataInProgress=!1}}}))}async destroyView(t){jt.logger.debug(`Bio: VdRegionsViewer.destroyView( mainLayout = ${this.mainLayout?"value":"none"} ), purpose = '${t}', this.regions.length = ${this.regions.length}`),this.filterSourceInput&&r.empty(this.filterSourceInput.root),null!=this.mainLayout&&(this.mainLayout.remove(),this.host.remove(),this.host=null,this.mainLayout=null);for(const t of this.viewSubs)t.unsubscribe()}async buildView(t){jt.logger.debug(`Bio: VdRegionsViewer.buildView() begin, purpose = '${t}', this.regions.length = ${this.regions.length}`);const e=this.regions.filter((t=>this.regionTypes.includes(t.type))),s=Array.from(new Set(e.map((t=>t.order)))).sort(),n=[];for(let t=0;t<s.length;t++)for(const r of this.chains){const i=e.find((e=>e.order==s[t]&&e.chain==r));n.push((async()=>{const e=await this.dataFrame.plot.fromType("WebLogo",{sequenceColumnName:i.sequenceColumnName,startPositionName:i.positionStartName,endPositionName:i.positionEndName,fixWidth:!0,skipEmptyPositions:this.skipEmptyPositions,positionWidth:this.positionWidth,positionHeight:this.positionHeight,filterSource:this.filterSource});return e.onSizeChanged.subscribe((()=>{this.calcSize()})),[t,r,e]})())}const i=await Promise.all(n);this.logos=new Array(s.length);for(let t=0;t<s.length;++t)this.logos[t]={};for(const[t,e,s]of i)this.logos[t][e]=s,this.viewSubs.push(s.onFreqsCalculated.subscribe((()=>{this.calcSize()})));this.mainLayout=r.table(this.chains,(t=>[...s.length>0?[r.div(t,{style:{transform:"rotate(-90deg)",font:"12px Roboto, Roboto Local, sans-serif",textAlign:"center",width:"16px",marginTop:"24px",marginLeft:"6px"}})]:[],...[...Array(s.length).keys()].map((e=>{const s=this.logos[e][t];return s.root.style.height="100%",r.div([s.root],{style:{marginTop:"4px",marginBottom:"4px"}})}))]),["",...[...Array(s.length).keys()].map((t=>e.find((e=>e.order==s[t]&&e.chain==this.chains[0])).name||"Name"))]),this.mainLayout.className="mlb-vd-regions-viewer-table2",this.filterSourceInput=r.choiceInput("Data source",this.filterSource,Object.values(pt.Ct),this.filterSourceInputOnValueChanged.bind(this)),this.filterSourceInput.root.style.position="absolute",this.filterSourceInput.root.style.right="9px",this.filterSourceInput.root.style.top="-4px",Math.ceil(255*Math.random()).toString(16),this.host=r.div([this.mainLayout,this.filterSourceInput.root],{}),this.root.appendChild(this.host),this.root.style.overflowX="auto",this.calcSize(),this.viewSubs.push(r.onSizeChanged(this.root).subscribe(this.rootOnSizeChanged.bind(this))),jt.logger.debug("Bio: VdRegionsViewer.buildView() end")}calcSize(){jt.logger.debug("Bio: VdRegionsViewer.calcSize(), start");const t=()=>{if(!this.host)return;const t=(this.root.clientHeight-54)/this.chains.length;for(let e=0;e<this.logos.length;e++){for(const s of this.chains)this.logos[e][s].root.style.height=`${t}px`;Math.max(...this.chains.map((t=>this.logos[e][t].Length)))}if(this.fitWidth)this.logos.length,this.host.style.setProperty("overflow","hidden","important");else{for(let t=0;t<this.logos.length;t++)for(const e of this.chains)this.logos[t][e].setOptions({[web_logo_viewer.bo.positionWidth]:this.positionWidth});this.host.style.removeProperty("overflow")}0===this.positionWidth?this.host.style.setProperty("overflow-x","hidden","important"):this.host.style.removeProperty("overflow-x")};this.calcSizeRequested||(this.calcSizeRequested=!0,window.setTimeout((()=>{t(),this.calcSizeRequested=!1}),0))}rootOnSizeChanged(t){this.calcSize()}rootOnMouseMove(t){}filterSourceInputOnValueChanged(){const t=this.filterSourceInput.value;this.viewPromise=this.viewPromise.then((()=>{if(this.filterSource!==t){this.props.getProperty(gt.filterSource).set(this,t);for(let t=0;t<this.logos.length;t++)for(let e=0;e<this.chains.length;e++){const s=this.chains[e];this.logos[t][s].setOptions({[web_logo_viewer.bo.filterSource]:this.filterSource})}}}))}}var yt=s(850);const wt="dimensionality-reducer-terminate-event";var bt=s(7983);async function Tt(t){return t.seqCol.version!==t.seqCol.temp["last-invalidated-version"]&&await(0,bt.HV)(t.seqCol,!1),await n.functions.call("Chem:getChemSpaceEmbeddings",{col:t.seqCol.temp["monomeric-mols"],methodName:t.methodName,similarityMetric:t.similarityMetric,xAxis:t.embedAxesNames[0],yAxis:t.embedAxesNames[1],options:t.options})}async function Ct(t,e){const s=B.Cn.getOrCreate(t),n=t.toList(),r=s.getSplitter(),i=n.length;let o=36;const a=new Map;for(let e=0;e<i;e++){const s=n[e];if(null===n[e]||t.isNone(e)){n[e]=null;continue}n[e]="";const i=r(s);for(let t=0;t<i.length;t++){const s=i[t];a.has(s)||(a.set(s,String.fromCharCode(o)),o++),n[e]+=a.get(s)}}let l={};if(e===c.U.MONOMER_CHEMICAL_DISTANCE){const t=Array.from(a.keys()),e=await(0,U.PF)(t);e.scoringMatrix.forEach(((t,s)=>{t.forEach(((t,n)=>{e.scoringMatrix[s][n]=1-t}))}));const s={};Object.entries(e.alphabetIndexes).forEach((([t,e])=>{s[a.get(t)]=e})),l={scoringMatrix:e.scoringMatrix,alphabetIndexes:s}}else if(e===c.U.NEEDLEMANN_WUNSCH){const t=Array.from(a.keys()),e=await(0,U.PF)(t),s={};Object.entries(e.alphabetIndexes).forEach((([t,e])=>{s[a.get(t)]=e})),l={scoringMatrix:e.scoringMatrix,alphabetIndexes:s}}return{seqList:n,options:l}}async function At(t,e){if(B.Cn.getOrCreate(t.seqCol).isHelm())return await Tt(t);const{seqList:r,options:o}=await Ct(t.seqCol,t.similarityMetric);t.options=t.options??{},t.options.distanceFnArgs=o;const a=await async function(t,e,r,i,o,a){const l=await async function(t,e,r,i,o){return new Promise((function(a,l){const c=new Worker(new URL(s.p+s.u(931),s.b));c.postMessage({columnData:t.data,method:e,measure:t.metric,options:r,parallelDistanceWorkers:i});const h=n.events.onCustomEvent(wt).subscribe((()=>{try{c?.terminate()}finally{h.unsubscribe()}}));c.onmessage=({data:{error:t,distance:e,embedding:s,epochNum:n,epochsLength:r}})=>{n&&r?o&&o(n,r,s):(h.unsubscribe(),t?l(t):a({distance:e,embedding:s}),setTimeout((()=>c.terminate()),0))}}))}({data:t,metric:r},e,i,o,a);return l.embedding=l.embedding.map((t=>(0,yt.Fv)(t))),l}(r,t.methodName,t.similarityMetric,t.options,!0,e),l=t.embedAxesNames.map(((t,e)=>i.Column.fromFloat32Array(t,a.embedding[e])));return{distance:a.distance,coordinates:new i.ColumnList(l)}}function St(t){const e=["Embed_X","Embed_Y"],s=t.columns.names().filter((t=>t.includes(e[0]))).length+1;return e.map((t=>`${t}_${s}`))}function Et(t){const e=r.divH([]),s=r.divV([r.divText(t.seqCol.name),r.divText(t.activityCol.name)]);return s.style.fontWeight="bold",s.style.display="flex",s.style.justifyContent="space-between",e.append(s),t.line.mols.forEach(((s,n)=>{const i=r.divText(t.activityCol.get(s).toFixed(2));i.style.display="flex",i.style.justifyContent="left",i.style.paddingLeft="30px",e.append(r.divV([r.divText(t.seqCol.get(s)),i]))})),e}function Mt(t){const e=r.div();e.append(r.divText(t.seqCol.name,{style:{fontWeight:"bold"}}));const s=new Array(2),n=new Array(2);t.line.mols.forEach(((e,r)=>{s[r]=t.seqCol.get(e),n[r]=t.activityCol.get(e)}));const i={},o=B.Cn.getOrCreate(t.seqCol),a=o.getSplitter(),l=function(t,e,s,n){const r=document.createElement("canvas"),i=r.getContext("2d");return r.height=30,ht(i,0,0,0,30,t,e,s,!0,n),r}(a(s[0]),a(s[1]),o.units,i);return e.append(r.div(l,{style:{width:"300px",overflow:"scroll"}})),e.append(function(t){const e=r.div();if(Object.keys(t).length>0){const s=r.divV([]);s.append(r.divH([r.divText("Pos",{style:{fontWeight:"bold",width:"30px",borderBottom:"1px solid"}}),r.divText("Difference",{style:{fontWeight:"bold",borderBottom:"1px solid"}})]));for(const e of Object.keys(t))t[e].style.borderBottom="1px solid lightgray",s.append(r.divH([r.divText((parseInt(e)+1).toString(),{style:{width:"30px",borderBottom:"1px solid lightgray"}}),t[e]]));e.append(s)}return e}(i)),e.append(vt("Activity delta",Math.abs(n[0]-n[1]))),e.append(vt("Cliff",t.sali)),e}function vt(t,e){return r.divH([r.divText(`${t}: `,{style:{fontWeight:"bold",paddingRight:"5px"}}),r.divText(e.toFixed(2))],{style:{paddingTop:"10px"}})}function Nt(t,e){const s=i.Column.string("seq_diff",t.rowCount).init((s=>`${t.get(e[0],s)}#${t.get(e[1],s)}`));s.semType="MacromoleculeDifference",s.setTag(i.TAGS.UNITS,t.col(e[0]).getTag(i.TAGS.UNITS)),s.setTag("separator",t.col(e[0]).getTag("separator")),t.columns.add(s);const n=t.plot.grid();return n.col(e[0]).visible=!1,n.col(e[1]).visible=!1,n}s(6361);class _t extends i.JsViewer{constructor(t){super(),this.name="",this.metricsProperties=["distanceMetric","fingerprint"],this.fingerprintChoices=["Morgan","Pattern"],this.initialized=!1,this.tags=[i.TAGS.UNITS,"aligned","separator","alphabet"],this.preComputeDistanceMatrix=!1,this.renderPromise=Promise.resolve(),this.fingerprint=this.string("fingerprint",this.fingerprintChoices[0],{choices:this.fingerprintChoices}),this.limit=this.int("limit",10),this.distanceMetric=this.string("distanceMetric",l.kg[0],{choices:l.kg}),this.moleculeColumnName=this.string("moleculeColumnName"),this.name=t}init(){this.initialized=!0}detach(){this.subs.forEach((t=>t.unsubscribe()))}async onTableAttached(){if(this.init(),this.dataFrame){this.preComputeDistanceMatrix=this.dataFrame.rowCount<=22e3,this.subs.push(i.debounce(this.dataFrame.onRowsRemoved,50).subscribe((t=>this.render(!0))));const t="diversity"!==this.name;this.subs.push(i.debounce(this.dataFrame.onCurrentRowChanged,50).subscribe((e=>this.render(t)))),this.subs.push(i.debounce(this.dataFrame.selection.onChanged,50).subscribe((t=>this.render(!1)))),this.subs.push(i.debounce(r.onSizeChanged(this.root),50).subscribe((t=>this.render(!1)))),this.moleculeColumn=this.dataFrame.columns.bySemType(i.SEMTYPE.MACROMOLECULE),this.moleculeColumnName=this.moleculeColumn?.name,this.getProperty("limit").fromOptions({min:1,max:this.dataFrame.rowCount})}this.render()}onPropertyChanged(t){if(super.onPropertyChanged(t),this.initialized){if("moleculeColumnName"===t.name){const e=this.dataFrame.col(t.get(this));e.semType===i.SEMTYPE.MACROMOLECULE&&(this.moleculeColumn=e)}this.render()}}render(t=!0){this.renderPromise=this.renderPromise.then((async()=>{this.computeRequested=this.computeRequested||t,await this.renderInt(t)}))}async renderInt(t){}beforeRender(){return!(!this.initialized||this.dataFrame&&this.moleculeColumnName&&this.dataFrame.col(this.moleculeColumnName).semType!==i.SEMTYPE.MACROMOLECULE&&(n.shell.error(`${this.moleculeColumnName} is not Macromolecule type`),1))}}s(7241),s(4004),s(9943),s(4413);var Lt,Pt=s(2918),It=function(t,e,s,n){return new(s||(s=Promise))((function(r,i){function o(t){try{l(n.next(t))}catch(t){i(t)}}function a(t){try{l(n.throw(t))}catch(t){i(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof s?e:new s((function(t){t(e)}))).then(o,a)}l((n=n.apply(t,e||[])).next())}))};class xt{constructor(t,e,s=!1,n){var i;this.name="",this.description="",this._isAutomatic=!1,this._autoStartFirstStep=!1,this._currentStep=0,this._isStopped=!1,this._isCancelled=!1,this._isStepProcessed=!1,this._root=r.div([],{id:"demo-script",classes:"tutorials-root tutorials-track demo-app-script"}),this._steps=[],this._mainHeader=r.panel([],"tutorials-main-header"),this._header=r.h2(""),this._headerDiv=r.divH([],"tutorials-root-header"),this._stopStartBtn=r.button(r.iconFA("pause"),(()=>this._changeStopState()),"Play / pause"),this._restartBtn=r.button(r.iconFA("redo"),(()=>this._restartScript()),"Restart"),this._nextStepBtn=r.button(r.iconFA("play"),(()=>{this._isStepProcessed||this._nextStep()}),"Next step"),this._activity=r.panel([],"tutorials-root-description"),this._progressDiv=r.divV([],"tutorials-root-progress"),this._progress=r.element("progress"),this._progressSteps=r.divText(""),this._closeBtn=r.button(r.iconFA("chevron-left"),(()=>this._closeDock()),"Back to demo"),this.name=t,this.description=e,this._isAutomatic=s,this._autoStartFirstStep=null!==(i=null==n?void 0:n.autoStartFirstStep)&&void 0!==i&&i,this._progress.max=0,this._progress.value=1,xt.currentObject=this}get steps(){return this._steps}get stepNumber(){return this._steps.length}_addHeader(){this._createHeaderDiv(),this._createProgressDiv(),this._mainHeader.append(this._headerDiv,this._progressDiv)}_createHeaderDiv(){this._header.innerText=this.name,this._headerDiv.append(this._closeBtn),this._headerDiv.append(this._header),this._nextStepBtn.firstChild.className="grok-icon fas fa-play",this._headerDiv.append(this._isAutomatic?this._stopStartBtn:this._nextStepBtn)}_createProgressDiv(){this._progress.max=this.stepNumber,this._progressDiv.append(this._progress),this._progressSteps=r.divText(`Step: ${this._progress.value} of ${this.stepNumber}`),this._progressDiv.append(this._progressSteps)}_addDescription(){var t;this._activity.append(r.div(this.description,"tutorials-root-description"));for(let e=0;e<this.stepNumber;e++){let s=r.iconFA("clock");this._isAutomatic||0===e&&(s=r.iconFA("play",(()=>this._nextStep()),"Next step"),s.className="grok-icon fas fa-play");const n=r.div(this._steps[e].name,"grok-tutorial-entry-instruction"),i=r.div(null===(t=this._steps[e].options)||void 0===t?void 0:t.description,"grok-tutorial-step-description hidden"),o=r.divH([s,n],"grok-tutorial-entry");this._activity.append(o,i)}}_initRoot(){var t,e,s;n.shell.windows.showContextPanel=!0,n.shell.windows.showHelp=!1;const r=Array.from(n.shell.dockManager.rootNode.children)[0];this._node=n.shell.dockManager.dock(this._root,i.DOCK_TYPE.FILL,r,""),(null===(e=null===(t=r.parent.container.containerElement.firstElementChild)||void 0===t?void 0:t.lastElementChild)||void 0===e?void 0:e.classList.contains("tab-handle-list-container"))&&(null===(s=r.parent.container.containerElement.firstElementChild)||void 0===s||s.lastElementChild.remove()),this._node.container.containerElement.classList.add("tutorials-demo-script-container"),this._addHeader(),this._root.append(this._mainHeader),this._addDescription(),this._root.append(this._activity)}_nextStep(){var t,e;return It(this,void 0,void 0,(function*(){this._isStepProcessed=!0,this._isAutomatic||(this._nextStepBtn.classList.add("disabled"),this._nextStepBtn.firstChild.classList.add("fa-disabled"));const s=this._activity.getElementsByClassName("grok-tutorial-entry")[this._currentStep],n=this._activity.getElementsByClassName("grok-icon")[this._currentStep],i=this._activity.getElementsByClassName("grok-tutorial-step-description")[this._currentStep];n.className="grok-icon far fa-spinner-third fa-spin",i.classList.remove("hidden"),i.classList.add("visible");const a=s,l=(null===(t=this._steps[this._currentStep].options)||void 0===t?void 0:t.delay)?null===(e=this._steps[this._currentStep].options)||void 0===e?void 0:e.delay:2e3;yield this._steps[this._currentStep].func(),this._scrollTo(this._root,a.offsetTop-this._mainHeader.offsetHeight),this._isAutomatic&&(yield this._countdown(s,n,l),yield(0,o.gw)(l));const c=r.iconFA("check");if(n.replaceWith(c),c.className="grok-icon far fa-check",this._progress.value++,this._progressSteps.innerText=`Step: ${this._progress.value} of ${this.stepNumber}`,this._currentStep++,this._isStepProcessed=!1,this._currentStep!==this.stepNumber){if(!this._isAutomatic){const t=this._activity.getElementsByClassName("grok-icon")[this._currentStep],e=r.iconFA("play",(()=>this._nextStep()),"Next step");e.className="grok-icon fas fa-play",t.replaceWith(e),this._nextStepBtn.classList.remove("disabled"),this._nextStepBtn.firstChild.classList.remove("fa-disabled")}}else this._isAutomatic?this._stopStartBtn.replaceWith(this._restartBtn):this._nextStepBtn.replaceWith(this._restartBtn)}))}_startScript(){return It(this,void 0,void 0,(function*(){for(let t=this._currentStep;t<this.stepNumber&&!this._isStopped&&!this._isCancelled;t++)yield this._nextStep()}))}_scrollTo(t,e){t.focus(),t.scrollTop=e}_countdown(t,e,s){return It(this,void 0,void 0,(function*(){const n=r.div([],"demo-script-countdown");e.classList.add("hidden");let i=s/1e3;const o=this._createSVGIndicator(i);n.append(o),t.prepend(n);const a=setInterval((()=>{i--,0===i&&(clearInterval(a),n.remove(),e.classList.remove("hidden"),e.classList.add("visible"))}),1e3)}))}_createSVGIndicator(t){const e=document.createElementNS("http://www.w3.org/2000/svg","svg"),s=document.createElementNS("http://www.w3.org/2000/svg","circle");return s.setAttributeNS(null,"cx","7"),s.setAttributeNS(null,"cy","7"),s.setAttributeNS(null,"r","6"),s.setAttributeNS(null,"style",`animation: countdown ${t}s linear infinite forwards`),e.append(s),e}_changeStopState(){const t=this._stopStartBtn.getElementsByClassName("grok-icon");t[0].className="grok-icon fas fa-play",this._isStopped=!this._isStopped,this._isStopped||(t[0].className="grok-icon fal fa-pause",this._isStepProcessed||this._startScript())}_restartScript(){n.shell.dockManager.close(this._node),n.shell.closeAll(),this._clearRoot(),this._setInitParams(),this.start()}_clearRoot(){this._root=r.div([],{id:"demo-script",classes:"tutorials-root tutorials-track demo-app-script"}),this._mainHeader=r.panel([],"tutorials-main-header"),this._header=r.h2(""),this._headerDiv=r.divH([],"tutorials-root-header"),this._activity=r.panel([],"tutorials-root-description"),this._progressDiv=r.divV([],"tutorials-root-progress"),this._progress=r.element("progress"),this._progressSteps=r.divText(""),this._progress.max=0,this._progress.value=1}_setInitParams(){this._currentStep=0,this._isStopped=!1,this._isCancelled=!1,this._stopStartBtn.getElementsByClassName("grok-icon")[0].className="grok-icon fal fa-pause",this._nextStepBtn.classList.remove("disabled")}_closeDock(){n.shell.dockManager.close(this._node),this.cancelScript()}cancelScript(){this._isCancelled=!0,xt.currentObject=null}step(t,e,s){return this._steps[this.steps.length]={name:t,func:e,options:s},this}start(){return It(this,void 0,void 0,(function*(){this._initRoot(),n.shell.newView(this.name),this._isAutomatic?this._startScript():this._autoStartFirstStep&&(yield this._nextStep())}))}}xt.currentObject=null,function(t){t.X="Embed_X",t.Y="Embed_Y"}(Lt||(Lt={})),s(1811),s(3336),s(8341);var Rt=s(2568);s(525),s(9416),new class{constructor(){this.tooltipHandlerTemp="tooltip-handler.Monomer"}};class Gt extends i.GridCellRenderer{get name(){return constants.Of.MONOMER}get cellType(){return constants.Of.MONOMER}get defaultHeight(){return 15}get defaultWidth(){return 40}render(t,e,s,n,r,i,o){if(i.gridRow<0)return;MonomerTooltipHandler.getOrCreate(i.gridColumn),t.font="12px monospace",t.textBaseline="middle",t.textAlign="center";const a=(0,rt.py)(i.cell.column.getTag("alphabet")),l=i.cell.value;if(!l)return;const c=a.get(l);t.fillStyle=c,t.fillText((0,rt.GU)(l,6),e+n/2,s+r/2,n)}}class Ot extends i.Package{constructor(){super(...arguments),this._initialized=!1}get properties(){return this._properties}set properties(t){this._properties=t}get initialized(){return this._initialized}completeInit(){this._initialized=!0}handleErrorUI(t){const e=t instanceof Error?t.message:t.toString(),s=t instanceof Error?t.stack:void 0;n.shell.error(e),this.logger.error(e,void 0,s)}}class Ft extends i.Widget{constructor(t){super(r.div([],{}));const e=Object.assign({},...t.map((t=>({[t.name]:t}))));this.maxMonomerLengthProp=e.MaxMonomerLength,this.tooltipWebLogo=e.TooltipWebLogo,this.defaultSeparator=e.DefaultSeparator}async init(){const t=r.intInput("Max monomer length",jt.properties.MaxMonomerLength,(t=>{jt.properties.MaxMonomerLength=t})),e=r.boolInput("Tooltip WebLogo",jt.properties.TooltipWebLogo,(t=>{jt.properties.TooltipWebLogo=t})),s=r.choiceInput("Default Separator",jt.properties.DefaultSeparator,[".","/","-"],(t=>{jt.properties.DefaultSeparator=t}));this.root.appendChild(r.form([t,e,s]))}}s(8770);class Ht extends i.Widget{constructor(t){super(r.divV([])),this.viewed=!1,this.seqCol=t}async init(){const t=B.Cn.getOrCreate(this.seqCol),e=jt.properties.TooltipWebLogo,s=this.seqCol.getTag(pt.DX.tooltipWebLogo);!1===e||["false","off","disable","disabled"].includes(s)||(this.wlViewer=await this.seqCol.dataFrame.plot.fromType("WebLogo",{sequenceColumnName:this.seqCol.name,backgroundColor:0,positionHeight:"Entropy",positionWidth:t.getAlphabetIsMultichar()?24:16,fixWidth:!0,fitArea:!1}),this.wlViewer.root.style.height="50px",this.root.appendChild(this.wlViewer.root),this.root.style.width="100%")}}var Wt=s(922);class Dt{constructor(t,e){this.helmColumn=t,this.df=e,this.helmColumn=t}async convertToSmiles(){const t=await this.getSmilesList(),e=this.df.columns.getUnusedName(`smiles(${this.helmColumn.name})`);return i.Column.fromStrings(e,t.map((t=>null===t?"":t)))}async getSmilesList(){return(await this.convertToMolfileV2KColumn()).toList().map((t=>i.chem.convert(t,i.chem.Notation.MolBlock,i.chem.Notation.Smiles)))}async convertToRdKitBeautifiedMolfileColumn(){const t=await this.getSmilesList(),e=await n.functions.call("Chem:getRdKitModule"),s=t.map((t=>{if(""===t)return null;const s=e.get_mol(t);return s?(s.normalize_depiction(1),s.straighten_depiction(!0),s):null})),r=this.df.columns.getUnusedName(`molfile(${this.helmColumn.name})`);return i.Column.fromStrings(r,s.map((t=>null===t?"":t.get_molblock())))}async convertToMolfileV2KColumn(){const t=(await this.getPolymerGraphColumn()).toList().map(((t,e)=>{const s=this.helmColumn.get(e);if(!s)return"";let n="";try{n=this.getPolymerMolfile(s,t)}catch(t){const[e,s]=(0,ot.yf)(t);jt.logger.error(e,void 0,s)}finally{return n}})),e=this.df.columns.getUnusedName(`molfileV2K(${this.helmColumn.name})`);return i.Column.fromList("string",e,t)}async getPolymerGraphColumn(){return await n.functions.call("HELM:getMolfiles",{col:this.helmColumn})}getPolymerMolfile(t,e){const s=new kt(e),n=new zt(t);return s.monomerSymbols.forEach(((t,e)=>{const r=s.getMonomerShifts(e);n.addMonomer(t,e,r)})),n.compileToMolfile()}}class kt{constructor(t){this.molfileHandler=Wt._.getInstance(t)}get monomerSymbols(){return this.molfileHandler.atomTypes}getMonomerShifts(t){return{x:this.molfileHandler.x[t],y:this.molfileHandler.y[t]}}}class Bt{constructor(t,e){this.capGroupElements=[];const s=Pt.NT.instance.getBioLib().getMonomer(e,t);if(!s)throw new Error(`Monomer ${t} is not found in the library`);this.molfileWrapper=new Yt(s.molfile,t),this.capGroupElements=s.rgroups.map((t=>(t.capGroupSmiles||t.capGroupSMILES).replace(/(\[|\]|\*|:|\d)/g,"")))}shiftCoordinates(t){this.molfileWrapper.shiftCoordinates(t)}getAtomLines(){return this.molfileWrapper.getAtomLines()}getBondLines(){return this.molfileWrapper.getBondLines()}removeBondedRGroups(t){this.molfileWrapper.removeRGroups(t)}capTrailingRGroups(){this.molfileWrapper.capRGroups(this.capGroupElements)}replaceRGroupWithAttachmentAtom(t,e){this.molfileWrapper.replaceRGroupWithAttachmentAtom(t,e)}getAttachmentAtomByRGroupId(t){return this.molfileWrapper.getAttachmentAtomByRGroupId(t)}deleteBondLineWithSpecifiedRGroup(t){this.molfileWrapper.deleteBondLineWithSpecifiedRGroup(t)}shiftBonds(t){this.molfileWrapper.shiftBonds(t)}}class Vt{constructor(t,e,s){this.atoms=e,this.bonds=s,this.rGroupBondPositionMap=new Map,this.rGroupIdToAtomicIndexMap=this.getRGroupIdToAtomicIdxMap(t)}getAtomicIdx(t){const e=this.rGroupIdToAtomicIndexMap.get(t);return void 0===e?null:e}removeRGroupsFromAtomBlock(t){t.forEach((t=>{if(void 0===this.rGroupIdToAtomicIndexMap.get(t))throw new Error(`Cannot find atomic index for R group ${t}`)}));const e=Array.from(this.rGroupIdToAtomicIndexMap.entries()).filter((([e,s])=>t.includes(e))).map((([t,e])=>e));this.atoms.deleteAtoms(e)}removeRGroups(t){this.removeRGroupsFromAtomBlock(t),t.forEach((t=>{const e=this.replaceRGroupInBondsByDummy(t);this.rGroupBondPositionMap.set(t,e)}))}replaceRGroupInBondsByDummy(t){const e=this.rGroupIdToAtomicIndexMap.get(t);if(this.rGroupBondPositionMap.has(t))throw new Error(`R group ${t} is already handled`);const s=this.bonds.getPositionsInBonds(e+1);if(0===s.length)throw new Error(`Cannot find position for R group ${t}`);if(s.length>1)throw new Error(`More than one position for R group ${t}`);const n=s[0];return this.bonds.replacePositionsInBondsByDummy([n]),this.bonds.removeAtomIdFromBonds(e+1),this.removeRGroupFromAtomicIdxMap(t,e),n}removeRGroupFromAtomicIdxMap(t,e){this.rGroupIdToAtomicIndexMap.delete(t);for(const[t,s]of this.rGroupIdToAtomicIndexMap)s>e&&this.rGroupIdToAtomicIndexMap.set(t,s-1)}getRGroupIdToAtomicIdxMap(t){const e=new Map;t.filter((t=>t.startsWith("M RGP"))).forEach((t=>{const s=function(t){const e=t.split(/\s+/).filter((t=>t)).slice(3).map((t=>parseInt(t))),s=new Array(e.length/2);for(let t=0;t<e.length;t+=2)s[t/2]=[e[t+1],e[t]-1];return s}(t);for(const[t,n]of s){if(e.has(t))throw new Error(`R group ${t} is already in the map`);e.set(t,n)}}));const s=t.map(((t,e)=>{if(t.startsWith("A "))return e})).filter((t=>void 0!==t)),n=s.map((e=>t[e])),r=s.map((e=>t[e+1]));n.forEach(((t,s)=>{const n=parseInt(t.split(/\s+/)[1])-1,i=parseInt(r[s].substring(1));if(e.has(i))throw new Error(`R group ${i} is already in the map`);e.set(i,n)}));const i=this.atoms.getRGroupAtomicIndices().filter((t=>!Array.from(e.values()).includes(t)));if(0!==i.length)throw new Error(`Unaccounted R group indices: ${i}`);return e}deleteBondLineWithSpecifiedRGroup(t){const e=this.rGroupBondPositionMap.get(t);if(!e)throw new Error(`Cannot find position for R group ${t}`);const{bondLineIdx:s}=e;this.bonds.deleteBondLines([s]),this.rGroupBondPositionMap.delete(t),this.rGroupIdToAtomicIndexMap.delete(t),this.rGroupBondPositionMap.forEach((t=>{t.bondLineIdx>s&&(t.bondLineIdx-=1)}))}replaceRGroupWithAttachmentAtom(t,e){const s=this.rGroupBondPositionMap.get(t);if(!s)throw new Error(`Cannot find position for R group ${t}`);const{bondLineIdx:n,nodeIdx:r}=s;this.bonds.bondedAtoms[n][r]=e}getAttachmentAtomIdByRGroupId(t){const e=this.rGroupBondPositionMap.get(t);if(!e)throw new Error(`Cannot find position for R group ${t}`);const{bondLineIdx:s,nodeIdx:n}=e;return this.bonds.bondedAtoms[s][(n+1)%2]}capRGroups(t){this.rGroupIdToAtomicIndexMap.forEach(((e,s)=>{const n=t[s-1];"H"===n?(this.removeRGroups([s]),this.deleteBondLineWithSpecifiedRGroup(s)):this.atoms.replaceElementSymbol(e,n)}))}}class Ut{constructor(t){this.bondedPairs=[],this.rawBondLines=[],this.rawBondLines=t,this.bondedPairs=this.rawBondLines.map((t=>[parseInt(t.substring(0,3)),parseInt(t.substring(3,6))]))}getBondLines(){return this.bondedPairs.map(((t,e)=>{if(t.some((t=>-1===t)))throw new Error(`Bonded pair ${t} contains -1`);return`${t[0].toString().padStart(3," ")}${t[1].toString().padStart(3," ")}${this.rawBondLines[e].substring(6)}`}))}get bondedAtoms(){return this.bondedPairs}deleteBondLines(t){this.rawBondLines=this.rawBondLines.filter(((e,s)=>!t.includes(s))),this.bondedPairs=this.bondedPairs.filter(((e,s)=>!t.includes(s)))}getPositionsInBonds(t){const e=[];return this.bondedPairs.forEach(((s,n)=>{s.forEach(((s,r)=>{s===t&&e.push({bondLineIdx:n,nodeIdx:r})}))})),e}replacePositionsInBondsByDummy(t,e){void 0===e&&(e=-1),t.forEach((t=>{const{bondLineIdx:s,nodeIdx:n}=t;this.bondedPairs[s][n]=e}))}removeAtomIdFromBonds(t){this.bondedPairs=this.bondedPairs.map((e=>e.map((e=>e>t?e-1:e))))}shift(t){this.bondedPairs=this.bondedPairs.map((e=>e.map((e=>e+t))))}}class $t{constructor(t){this.coordinates=[],this.rawAtomLines=[],this.rawAtomLines=t,this.coordinates=this.rawAtomLines.map((t=>({x:parseFloat(t.substring(0,10)),y:parseFloat(t.substring(10,20))})))}get atomCoordinates(){return this.coordinates}get atomLines(){return this.rawAtomLines.map(((t,e)=>{const s=this.coordinates[e];return`${s.x.toFixed(4).padStart(10," ")}${s.y.toFixed(4).padStart(10," ")}${t.substring(20)}`}))}replaceElementSymbol(t,e){this.rawAtomLines[t]=this.rawAtomLines[t].replace("R#",e)}deleteAtoms(t){this.coordinates=this.coordinates.filter(((e,s)=>!t.includes(s))),this.rawAtomLines=this.rawAtomLines.filter(((e,s)=>!t.includes(s)))}shift(t){this.coordinates=this.coordinates.map((e=>{const s=e.x+t.x,n=e.y+t.y;if(isNaN(s)||isNaN(n))throw new Error(`Cannot shift coordinates by ${t.x}, ${t.y}`);return{x:s,y:n}}))}rotate(t){this.coordinates=this.coordinates.map((e=>{const s=e.x,n=e.y,r=s*Math.cos(t)-n*Math.sin(t),i=s*Math.sin(t)+n*Math.cos(t);if(isNaN(r)||isNaN(i))throw new Error(`Cannot rotate coordinates by ${t}`);return{x:r,y:i}}))}getRGroupAtomicIndices(){return this.rawAtomLines.map(((t,e)=>{if(t.includes("R#"))return e})).filter((t=>void 0!==t))}}class Yt{constructor(t,e){this.monomerSymbol=e;const s=t.split("\n"),n=parseInt(s[3].substring(0,3)),r=parseInt(s[3].substring(3,6)),i=s.slice(4,4+n);this.atoms=new $t(i);const o=s.slice(4+n,4+n+r);this.bonds=new Ut(o),this.rGroups=new Vt(s,this.atoms,this.bonds),this.shiftMonomerToDefaultPosition()}deleteBondLineWithSpecifiedRGroup(t){this.rGroups.deleteBondLineWithSpecifiedRGroup(t)}shiftCoordinates(t){this.atoms.shift(t)}rotateCoordinates(t){this.atoms.rotate(t)}getBondLines(){return this.bonds.getBondLines()}getAtomLines(){return this.atoms.atomLines}removeRGroups(t){this.rGroups.removeRGroups(t)}replaceRGroupWithAttachmentAtom(t,e){this.rGroups.replaceRGroupWithAttachmentAtom(t,e)}getAttachmentAtomByRGroupId(t){return this.rGroups.getAttachmentAtomIdByRGroupId(t)}shiftR1GroupToOrigin(){const t=this.rGroups.getAtomicIdx(1);if(null===t)throw new Error(`Cannot find R1 group for monomer ${this.monomerSymbol}`);const{x:e,y:s}=this.atoms.atomCoordinates[t];this.atoms.shift({x:-e,y:-s})}alignR2AlongX(){const t=this.rGroups.getAtomicIdx(2);if(null===t)throw new Error(`Cannot find R2 group for monomer ${this.monomerSymbol}`);const e=this.atoms.atomCoordinates[t],s=e.y/e.x,n=Math.atan(s);if(isNaN(n))throw new Error(`Cannot calculate angle for R2 group for monomer ${this.monomerSymbol}`);this.rotateCoordinates(-n)}shiftMonomerToDefaultPosition(){this.shiftR1GroupToOrigin(),null!==this.rGroups.getAtomicIdx(2)&&this.alignR2AlongX()}shiftBonds(t){this.bonds.shift(t)}capRGroups(t){this.rGroups.capRGroups(t)}}class Kt{constructor(t){this.simplePolymer=t,this.polymerType=this.getPolymerType(),this.idx=this.getIdx();const{monomers:e,monomerTypes:s}=this.getMonomerSymbolsAndTypes();this.monomers=e,this.monomerTypes=s}get id(){return this.polymerType+this.idx.toString()}getPolymerType(){const t=new RegExp("(PEPTIDE|RNA)[0-9]+{"),e=this.simplePolymer.match(t);if(!e)throw new Error(`Unsupported polymer type in ${this.simplePolymer}`);return e[1]}getIdx(){const t=new RegExp(`${this.polymerType}([0-9]+){`),e=this.simplePolymer.match(t);if(!e)throw new Error(`Cannot parse simple polymer id from ${this.simplePolymer}`);return parseInt(e[1])}getMonomerSymbolsAndTypes(){const t=new RegExp(`${this.polymerType}${this.idx}{|}`,"g"),e=this.simplePolymer.replace(t,"").split("."),s=[],n=[];return e.forEach((t=>{const e=t.split(/\(|\)/).map((t=>t.replace(/[\[\]]/g,"")));s.push(...e);const r=e.map(((t,e)=>e%2==0?0:1));n.push(...r)})),{monomers:s,monomerTypes:n}}getBondData(){const t=[],e=this.monomerTypes.map(((t,e)=>{if(0===t)return e})).filter((t=>void 0!==t)),s=this.monomerTypes.map(((t,e)=>{if(1===t)return e})).filter((t=>void 0!==t));for(let s=0;s<e.length-1;s++){const n=e[s],r=e[s+1];t.push([{monomerIdx:n,rGroupId:2},{monomerIdx:r,rGroupId:1}])}for(let e=0;e<s.length;e++){const n=s[e],r=n-1;t.push([{monomerIdx:r,rGroupId:3},{monomerIdx:n,rGroupId:1}])}return t}}class Zt{constructor(t){const e=t.split("|");e.forEach((t=>this.validateConnectionItem(t))),this.connectionItems=e}validateConnectionItem(t){const e="(PEPTIDE|RNA)",s=new RegExp(`${e}[0-9]+,${e}[0-9]+,[0-9]+:R[0-9]+-[0-9]+:R[0-9]+`,"g");if(!t.match(s))throw new Error(`Cannot parse connection item from ${t}`)}getConnectionData(){const t=[];return this.connectionItems.forEach((e=>{const s=[],n=e.split(",");n[2].split("-").forEach(((t,e)=>{const r=n[e],i=t.split(":"),o={monomerIdx:parseInt(i[0])-1,rGroupId:parseInt(i[1].slice(1))};s.push({polymerId:r,bond:o})})),t.push(s)})),t}}class qt{constructor(t){this.helm=t;const e=this.helm.split("$"),s=e[0].split("|");this.simplePolymers=s.map((t=>new Kt(t))),""!==e[1]&&(this.connectionList=new Zt(e[1])),this.bondData=this.getBondData()}toString(){return this.helm}getPolymerTypeByMonomerIdx(t){return this.getSimplePolymerByMonomerIdx(t).polymerType}getSimplePolymerByMonomerIdx(t){const e=this.getMonomerIdxShifts(),s=Object.values(e).sort(((t,e)=>t-e)).find((e=>t>=e));if(void 0===s)throw new Error(`Cannot find simple polymer for monomer ${t}`);const n=Object.keys(e).find((t=>e[t]===s));return this.simplePolymers.find((t=>t.id===n))}shiftBondMonomerIds(t,e){e.forEach((e=>{e.forEach((e=>{e.monomerIdx+=t}))}))}getMonomerIdxShifts(){const t={};let e=0;return this.simplePolymers.forEach((s=>{t[s.id]=e,e+=s.monomers.length})),t}getBondData(){const t=this.getMonomerIdxShifts(),e=[];return this.simplePolymers.forEach((s=>{const n=s.getBondData(),r=t[s.id];this.shiftBondMonomerIds(r,n),e.push(...n)})),this.connectionList&&this.connectionList.getConnectionData().forEach((s=>{const n=[];s.forEach((e=>{const s=t[e.polymerId],r=e.bond;r.monomerIdx+=s,n.push(r)})),e.push(n)})),e}}class zt{constructor(t){this.monomerWrappers=[],this.helm=new qt(t),this.bondedRGroupsMap=new Map,this.helm.bondData.forEach((t=>{t.forEach((t=>{const e=t.monomerIdx,s=t.rGroupId;this.bondedRGroupsMap.get(e)||this.bondedRGroupsMap.set(e,[]),this.bondedRGroupsMap.get(e).push(s)}))}))}addMonomer(t,e,s){const n=this.helm.getPolymerTypeByMonomerIdx(e),r=new Bt(t,n);r.shiftCoordinates(s),this.monomerWrappers.push(r)}removeRGroups(){this.monomerWrappers.forEach(((t,e)=>{this.bondedRGroupsMap.has(e)&&t.removeBondedRGroups(this.bondedRGroupsMap.get(e)),t.capTrailingRGroups()}))}getAtomNumberShifts(){const t=[];let e=0;return this.monomerWrappers.forEach((s=>{t.push(e),e+=s.getAtomLines().length})),t}restoreBondsBetweenMonomers(){this.helm.bondData.forEach((t=>{const e=t.map((t=>t.monomerIdx)),s=t.map((t=>t.rGroupId)),n=e.map((t=>this.monomerWrappers[t])),r=n[1].getAttachmentAtomByRGroupId(s[1]);n[0].replaceRGroupWithAttachmentAtom(s[0],r),n[1].deleteBondLineWithSpecifiedRGroup(s[1])}))}compileToMolfile(){const t=[],e=[];this.removeRGroups();const s=this.getAtomNumberShifts();this.monomerWrappers.forEach(((t,e)=>{t.shiftBonds(s[e])})),this.restoreBondsBetweenMonomers(),this.monomerWrappers.forEach((s=>{t.push(...s.getAtomLines()),e.push(...s.getBondLines())}));const n=t.length;if(n>999)throw new Error(`Atom count in polymer ${this.helm.toString()} is ${n} and exceeds 999`);const r=e.length;return["\nDatagrok\n",`${n.toString().padStart(3," ")}${r.toString().padStart(3," ")} 0 0 1 0 0 V2000`,t.join("\n"),e.join("\n"),"M END\n"].join("\n")}}i.DataFrame.fromCsv("seq,value\nATCCGTCGT,0.5\nTGTTCGTCA,0.4\nATGGTCGTA,0.7\nATCCGTGCA,0.1"),["1","1A","1C","2","4","4A","4B","5","6"].join(rt.CI);var Xt=s(8601);const jt=new Ot,Qt="bypassLargeDataWarning";function Jt(){return Pt.NT.instance}function te(){return Pt.NT.instance.getBioLib()}async function ee(t,e,o,c,h,u,m){if(!(0,Rt.n)(e,"Activity Cliffs"))return;const d=St(t),g={units:e.getTag(i.TAGS.UNITS),aligned:e.getTag("aligned"),separator:e.getTag("separator"),alphabet:e.getTag("alphabet")};let p=Ct;const f=B.Cn.getOrCreate(e),y=u,w=e;let b=At;f.isHelm()&&(b=Tt,p=async(t,e)=>{await(0,bt.HV)(t,!1);const s=t.temp["monomeric-mols"];return{seqList:(await n.functions.call("Chem:getMorganFingerprints",{molColumn:s})).toList().map((t=>N.Z.fromUint32Array(t.length,new Uint32Array(t.getBuffer().buffer)))),options:{}}});const T=async()=>await async function(t,e,o,a,c,h,u,m,d,g,p,f,y,w,b,T,C,A){_++;const S=u/100,E=o??e;let M=!1,k=!1;const B={};let V,U;const $={seqCol:E,methodName:d,similarityMetric:m,embedAxesNames:a,options:{...C??{},[P]:void 0}},{distance:Y,coordinates:K}=await f($);for(const e of K)t.columns.add(e);let Z;if(e.semType===i.SEMTYPE.MOLECULE){const t=(await n.functions.call("Chem:getMorganFingerprints",{molColumn:E})).toList().map((t=>new N.Z(new Uint32Array(t.getBuffer().buffer),t.length))),e=1-(0,l.eo)(S),s=await(new v._).calc(t,m,e);Z=await W(s,0,h)}else{let t=e.toList(),s={};if(C?.[P]){const{seqList:n,options:r}=await C[P](e,m);t=n,s=r}const n=await(new v._).calc(t,m,S,s);Z=await W(n,0,h)}const q=function(t,e,s,n,r,o){const a=new Array(t).fill(0);for(let t=0;t!=s.length;++t)e[t]!=1/0&&(o.get(s[t])>o.get(n[t])?a[s[t]]+=e[t]:a[n[t]]+=e[t]);return i.Column.fromList("double",`sali_${r[0].substring(r[0].lastIndexOf("_"))}`,a)}(E.length,Z.saliVals,Z.n1,Z.n2,a,h);t.columns.add(q);const z=function(t,e){const s="containsCliff",n=t.columns.names().filter((t=>t.includes(s))).length+1,r=`${s}_${n}`;return i.Column.bool(r,t.rowCount).init((t=>e.has(t)))}(t,Z.cliffsMolIds);t.columns.add(z);const X=function(t){const e=t.filter((t=>t!==1/0)),s=e.reduce(((t,e)=>Math.min(t,e)),Number.MAX_VALUE),n=e.reduce(((t,e)=>Math.max(t,e)),s);return{max:n,min:s}}(Z.saliVals),j=.8/(X.max-X.min),Q=n.shell.getTableView(t.name);Q.grid.columns.byName(z.name).visible=!1;const J=Q.addViewer(i.VIEWER.SCATTER_PLOT,{xColumnName:a[0],yColumnName:a[1],size:q.name,color:h.name,showXSelector:!1,showYSelector:!1,showSizeSelector:!1,showColorSelector:!1,markerMinSize:5,markerMaxSize:25,title:c}),tt=J.getInfo().canvas,et=function(t,e,s,n,r){const o=new Array(t.n1.length).fill(null);for(let e=0;e<t.n1.length;e++){const s=t.n1[e],n=t.n2[e];o[e]={id:e,mols:[s,n],selected:!1,a:[],b:[]}}const a=i.DataFrame.create(o.length);return F.forEach(((t,s)=>{a.columns.addNewString(t).init((t=>e.get(o[t].mols[s]))),function(t,e){Object.keys(e).forEach((s=>{t.tags[s]=e[s]}))}(a.col(t),r),a.col(t).semType=n})),a.columns.addNewFloat(x).init((t=>Math.abs(s.get(o[t].mols[0])-s.get(o[t].mols[1])))),a.columns.addNewInt(O).init((t=>t)),a.columns.addNewFloat(R).init((e=>t.saliVals[e])),a.columns.addNewFloat(G).init((e=>t.simVals[e])),a.name=`${L}${_}`,{lines:o,linesDf:a}}(Z,e,h,g,p),st=T?T(et.linesDf,F).sort([R],[!1]):et.linesDf.plot.grid().sort([R],[!1]);t.temp[".cliffsDfGrid"]=st;const nt=r.button(`${et.linesDf.rowCount} cliffs`,(()=>{Q.dockManager.dock(st,"down",null,"Activity cliffs",A??.2)}));nt.classList.add("scatter_plot_link","cliffs_grid"),J.root.append(nt);const rt=r.switchInput("Show only cliffs",!1,(()=>{rt.value?(J.dataFrame.setTag(H,z.name),t.rows.match({[z.name]:!0}).filter(),I.next(z.name)):(J.dataFrame.setTag(H,""),t.filter.setAll(!0,!0),I.next(""))}));rt.root.classList.add("scatter_plot_link","show_only_cliffs"),J.root.append(rt.root),I.subscribe((t=>{rt.enabled=""===t||t===z.name}));const it=n.events.onViewerClosed.subscribe((t=>{t.args.viewer===J&&(Q.dockManager.close(st.root),it.unsubscribe(),Q.subs=Q.subs.filter((t=>t!==it)))}));return Q.subs.push(it),et.linesDf.onCurrentCellChanged.subscribe((()=>{M=!0;const s=et.linesDf.currentCol&&et.linesDf.currentCol.name===F[1]?1:0,i=-1!==et.linesDf.currentRowIdx?et.lines[et.linesDf.currentRowIdx]:null;J.dataFrame.currentRowIdx=i?i.mols[s]:-1,J.dataFrame.filter.set(0,!et.lines[0].selected),J.dataFrame.filter.set(0,et.lines[0].selected),i&&setTimeout((()=>{!function(t,e,s,i,o,a,l,c){const h=e.getPane("Cliff Details");r.empty(h.root);const u=c({cashedData:s,line:i,df:t,seqCol:o,activityCol:a,sali:l});h.root.append(u),setTimeout((()=>{n.shell.o=e.root}),500)}(t,V,B,i,e,h,et.linesDf.get(R,i.id),b);const s=J.dataFrame.getSortedOrder(Q.grid.sortByColumns,Q.grid.sortTypes);Q.grid.scrollToCell(e.name,s.indexOf(J.dataFrame.currentRowIdx))}),1e3)})),et.linesDf.onSelectionChanged.subscribe((e=>{if(!1===et.linesDf.selection.anyTrue)et.lines.forEach((t=>{t.selected=!1}));else if(-1!==et.linesDf.mouseOverRowIdx){const t=et.lines[et.linesDf.mouseOverRowIdx];t.selected=!t.selected}setTimeout((()=>{const e=i.BitSet.create(t.rowCount);et.lines.forEach((t=>{t.selected&&t.mols.forEach((s=>{e.set(s,t.selected,!0)}))})),t.selection.copyFrom(e),Q.grid.invalidate()}),300)})),t.onSelectionChanged.subscribe((e=>{k?k=!1:!1===t.selection.anyTrue&&"number"==typeof e&&(et.lines.forEach((t=>{t.selected=!1})),st.dataFrame.selection.setAll(!1,!1),st.invalidate())})),tt.addEventListener("mousemove",(function(n){clearTimeout(U),U=s.g.setTimeout((function(){const s=D(n,tt,et.lines);s&&-1===t.mouseOverRowIdx&&r.tooltip.show(w({cashedData:B,line:s,df:t,seqCol:e,activityCol:h}),n.clientX,n.clientY)}),500)})),tt.addEventListener("mousedown",(function(e){k=!0;const s=D(e,tt,et.lines);if(s&&-1===t.mouseOverRowIdx){e.ctrlKey?(s.selected=!s.selected,et.linesDf.selection.set(s.id,s.selected)):et.linesDf.currentRowIdx!==s.id&&(et.linesDf.currentRowIdx=s.id,t.currentRowIdx=s.mols[0],t.filter.set(0,!et.lines[0].selected),t.filter.set(0,et.lines[0].selected));const n=et.linesDf.getSortedOrder(st.sortByColumns,st.sortTypes);st.scrollToCell(F[0],n.indexOf(s.id))}})),J.onEvent("d4-before-draw-scene").subscribe((e=>{const s=function(t,e,s,n,r,i,o){const a=n.lines,l=t.getInfo().canvas.getContext("2d"),c=t.dataFrame.columns.byName(e),h=t.dataFrame.columns.byName(s);for(let e=0;e<a.length;e++){const s=t.worldToScreen(c.get(a[e].mols[0]),h.get(a[e].mols[0])),u=t.worldToScreen(c.get(a[e].mols[1]),h.get(a[e].mols[1]));a[e].a=[s.x,s.y],a[e].b=[u.x,u.y];const m=new Path2D;m.moveTo(a[e].a[0],a[e].a[1]);const d=a[e].selected?"255,255,0":"0,128,0",g=r[e]===1/0?1:.2+(r[e]-o)*i;l.strokeStyle=`rgba(${d},${g})`,l.lineWidth=a[e].id===n.linesDf.currentRowIdx?3:1,m.lineTo(a[e].b[0],a[e].b[1]),l.stroke(m)}return a}(J,a[0],a[1],et,Z.saliVals,j,X.min);if(M){const t=s[et.linesDf.currentRowIdx];setTimeout((()=>{const{zoomLeft:e,zoomRight:s,zoomTop:n,zoomBottom:r}=function(t,e,s,n,r,i){const o=Math.abs(s-r),a=Math.abs(n-i),l=t/o,c=e/a,h=Math.min(l,c),u=t/h*5,m=e/h*5,d=(s<r?s:r)+o/2-u/2,g=(n>i?n:i)-a/2+m/2;return{zoomLeft:d,zoomRight:d+u,zoomTop:g,zoomBottom:g-m}}(J.viewport.width,J.viewport.height,J.dataFrame.get(a[0],t.mols[0]),J.dataFrame.get(a[1],t.mols[0]),J.dataFrame.get(a[0],t.mols[1]),J.dataFrame.get(a[1],t.mols[1]));J.zoom(e,n,s,r)}),300),M=!1}rt.value?t.rows.match({[z.name]:!0}).filter():!0===rt.enabled&&t.filter.setAll(!0,!1)})),J.addProperty("similarityLimit","double",S),V=function(){const t=r.accordion(),e=r.element("i");return e.className="grok-icon svg-icon svg-view-layout",t.addTitle(r.span([e,r.label("Activity cliffs")])),t.addPane("Cliff Details",(()=>r.divText("Cliff has not been selected")),!0),n.shell.o=t.root,t}(),J}(t,w,null,d,"Activity cliffs",o,c,y,h,i.SEMTYPE.MACROMOLECULE,g,b,0,Et,Mt,Nt,{...m??{},[P]:p}),C=h===a.AL.UMAP?2e5:2e4,A=h===a.AL.UMAP?5e3:2e3;if(t.rowCount>C)return void n.shell.warning(`Too many rows, maximum for sequence activity cliffs is ${C}`);const S=i.TaskBarProgressIndicator.create("Running sequence activity cliffs ...");return new Promise(((e,s)=>{t.rowCount>A&&!m?.[Qt]?r.dialog().add(r.divText("Activity cliffs analysis might take several minutes.\n Do you want to continue?")).onOK((async()=>{T().then((t=>e(t))).catch((t=>s(t)))})).onCancel((()=>{e(void 0)})).show():T().then((t=>e(t))).catch((t=>s(t)))})).catch((t=>{const[e,s]=(0,ot.yf)(t);throw jt.logger.error(e,void 0,s),t})).finally((()=>{S.close()}))}async function se(t,e,s,l=c.U.LEVENSHTEIN,u,m,d){if(await(0,o.gw)(10),!(0,Rt.n)(e,"Sequence space"))return;let g;const p=i.TaskBarProgressIndicator.create("Initializing sequence space ...");try{function f(e,s,o){let a=null,l=null;t.columns.names().includes(y[0])?(a=t.columns.byName(y[0]),l=t.columns.byName(y[1])):(a=t.columns.add(i.Column.float(y[0],t.rowCount)),l=t.columns.add(i.Column.float(y[1],t.rowCount)),u&&(g=n.shell.tableView(t.name).scatterPlot({x:y[0],y:y[1],title:"Sequence space"}))),d?.[h]&&(g?.root&&r.setUpdateIndicator(g.root,!1),a.init((t=>o[t]?o[t][0]:void 0)),l.init((t=>o[t]?o[t][1]:void 0)));const c=e/s*100;p.update(c,`Running sequence space ... ${c.toFixed(0)}%`)}const y=St(t),w=i.DataFrame.fromColumns([e]).clone(),b=function(t,e){const s=e.categories.map(((t,e)=>t?null:e)).filter((t=>null!==t)),n=[...e.getRawData()],r=[];let i=0;for(let e=0;e<t.rowCount;e++)s.includes(n[e])&&(t.rows.removeAt(e-i),r.push(e),i+=1);return r}(w,e),T={seqCol:w.col(e.name),methodName:s,similarityMetric:l,embedAxesNames:y,options:{...d,sparseMatrixThreshold:m??.5,usingSparseMatrix:t.rowCount>2e4}},C=s===a.AL.UMAP?5e5:15e3,A=s===a.AL.UMAP?5e3:2e3;if(t.rowCount>C)return void n.shell.warning(`Too many rows, maximum for sequence space is ${C}`);async function S(){t.columns.add(i.Column.float(y[0],t.rowCount)),t.columns.add(i.Column.float(y[1],t.rowCount)),u&&(g=n.shell.tableView(t.name).scatterPlot({x:y[0],y:y[1],title:"Sequence space"}),r.setUpdateIndicator(g.root,!0));let e=null;const s=n.events.onViewerClosed.subscribe((t=>{const r=t.args.viewer;r?.getOptions()?.look?.title&&g?.getOptions()?.look?.title&&r?.getOptions()?.look?.title===g?.getOptions()?.look?.title&&(n.events.fireCustomEvent(wt,{}),s.unsubscribe(),e?.(),p.close())})),o=new Promise((async(t,s)=>{try{e=t,t(await At(T,d?.[Qt]?void 0:f))}catch(t){s(t)}})),a=await o;return p.close(),s.unsubscribe(),a?E(a):a}if(!(t.rowCount>A)||d?.[Qt])return await S();function E(e){const s=e.coordinates;for(const e of s){const s=e.toList();b.forEach((t=>s.splice(t,0,null)));let n=t.columns.byName(e.name);n||(n=i.Column.float(e.name,s.length),t.columns.add(n)),n.init((t=>s[t]))}if(u)return g||(g=n.shell.tableView(t.name).scatterPlot({x:y[0],y:y[1],title:"Sequence space"})),r.setUpdateIndicator(g.root,!1),g}r.dialog().add(r.divText("Sequence space analysis might take several minutes.\n Do you want to continue?")).onOK((async()=>{await S().catch((t=>{p.close();const[e,s]=(0,ot.yf)(t);jt.logger.error(e,void 0,s),g&&g.close()}))})).onCancel((()=>{p.close()})).show()}catch(M){console.error(M),p.close();const[v,N]=(0,ot.yf)(M);jt.logger.error(v,void 0,N),g&&g.close()}}async function ne(t,e,s){const o=i.TaskBarProgressIndicator.create("Converting to atomic level ...");try{await async function(t,e,s){if(0===i.Func.find({package:"Chem",name:"getRdKitModule"}).length)return void n.shell.warning('Transformation to atomic level requires package "Chem" installed.');if(s){const s=B.Cn.getOrCreate(e);return s.isHelm()||(e=s.convert(rt.r2.HELM)),void async function(t,e){const s=await async function(t,e){const s=new Dt(e,t),n=await s.convertToRdKitBeautifiedMolfileColumn();return n.semType=i.SEMTYPE.MOLECULE,n}(t,e);t.columns.add(s,!0),await n.data.detectSemanticTypes(t)}(t,e)}if(!(0,Rt.n)(e,"To Atomic Level"))return;const o=Jt().getBioLib(),a=await(0,Xt.i0)(t,e,o);null!==a.col&&(t.columns.add(a.col,!0),await n.data.detectSemanticTypes(t)),a.warnings&&a.warnings.length>0&&n.shell.warning(r.list(a.warnings))}(t,e,s)}finally{o.close()}}function re(t){return new V.i(t).importFasta()}function ie(t){const e=B.Cn.getOrCreate(t).stats;return Object.keys(e.freq)}async function oe(t,e,s){return K(t,e,s,k.IDENTITY)}async function ae(t,e,s){return K(t,e,s,k.SIMILARITY)}},7983:(t,e,s)=>{"use strict";s.d(e,{HV:()=>h,QF:()=>c,pf:()=>l});var n=s(4469),r=(s(3870),s(976)),i=s(7241),o=(s(4293),s(1061)),a=s(8447);function l(t,e,s){const n=s?function(t,e){const s=`${e}`.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&"),n=t.charAt(0)===e,r=t.charAt(t.length-1)===e,i=t.replace(new RegExp(`^${s}|${s}$`,"g"),"");return n?r?`${s}${i}${s}`:`${s}${i}${s}|${s}${i}$`:r?`^${i}${s}|${s}${i}${s}`:`^${i}${s}|${s}${i}${s}|${s}${i}$`}(t,s):t,i=r.BitSet.create(e.length);for(let s=0;s<e.length;s++){const r=e.get(s);(r.match(n)||r===t)&&i.set(s,!0,!1)}return i}async function c(t,e){e.version!==e.temp["last-invalidated-version"]&&await h(e,!0);const s=r.Column.string("helm",1).init((e=>t));s.semType=r.SEMTYPE.MACROMOLECULE,s.setTag(r.TAGS.UNITS,a.r2.HELM);const o=await(0,i.D)(s,!0,e.temp["monomers-dict"]);return(await n.functions.call("Chem:searchSubstructure",{molStringsColumn:e.temp["monomeric-mols"],molString:o.get(0),molBlockFailover:""})).get(0)}async function h(t,e){const s=r.TaskBarProgressIndicator.create(`Invalidating molfiles for ${t.name}`);try{await(0,o.gw)(10);const s=new Map,n=await(0,i.D)(t,e,s);t.temp["monomeric-mols"]=n,t.temp["monomers-dict"]=s,t.temp["last-invalidated-version"]=t.version}finally{s.close()}}},2568:(t,e,s)=>{"use strict";s.d(e,{l:()=>a,n:()=>o});var n=s(4469),r=s(976),i=s(499);function o(t,e,s=[],r=[],i=!0){const[o,l]=a(t,e,s,r);return i&&!o&&n.shell.warning(l),o}function a(t,e,s=[],o=[]){let a=!0,l="";const c=i.Cn.getOrCreate(t);if(t.semType!==r.SEMTYPE.MACROMOLECULE)n.shell.warning(e+" analysis is allowed for Macromolecules semantic type"),a=!1;else{const t=c.notation;if(s.length>0&&!s.some((e=>t.toUpperCase()==e.toUpperCase())))l=`${e} + ' analysis is allowed for Macromolecules with notation ${0==s.length?"any notation":`notation${s.length>1?"s":""} ${s.map((t=>`"${t}"`)).join(", ")} `}.`,a=!1;else if(!c.isHelm()){const t=c.alphabet;o.length>0&&!o.some((e=>t.toUpperCase()==e.toUpperCase()))&&(l=`${e} + ' analysis is allowed for Macromolecules with alphabet ${0==o.length?"any alphabet":`alphabet${o.length>1?"s":""} ${o.map((t=>`"${t}"`)).join(", ")}.`}.`,a=!1)}}return[a,l]}},3553:(t,e,s)=>{"use strict";s.d(e,{Of:()=>i,WY:()=>h,jB:()=>u,mU:()=>a,rs:()=>c});var n,r,i,o=s(8341);!function(t){t.SPLIT_COL="~split",t.ACTIVITY="~activity",t.ACTIVITY_SCALED="activity_scaled",t.ALIGNED_SEQUENCE="~aligned_sequence",t.AMINO_ACID_RESIDUE="AAR",t.POSITION="Pos",t.P_VALUE="pValue",t.MEAN_DIFFERENCE="Mean difference"}(n||(n={})),function(t){t.AAR="AAR",t.POSITION="Pos",t.SELECTION="selection"}(r||(r={})),function(t){t.MONOMER="Monomer",t.MACROMOLECULE_DIFFERENCE="MacromoleculeDifference",t.ACTIVITY="activity",t.ACTIVITY_SCALED="activityScaled"}(i||(i={}));const a="MSA";var l,c;!function(t){t.CELL_CHANGING="isCellChanging"}(l||(l={})),function(t){t.SEPARATOR="."}(c||(c={}));const h="3.3.1",u={pepsea:{gapOpen:1.53,gapExtend:0,method:o.J[0]},kalign:{gapOpen:-1,gapExtend:-1,terminalGap:-1}}},4004:(t,e,s)=>{"use strict";s.d(e,{o:()=>i}),s(976),s(3870);var n=s(4469),r=(s(3336),s(8447),s(499));async function i(t,e,s){const i=r.Cn.getOrCreate(t).convert(e,s);t.dataFrame.columns.add(i);const o=await n.functions.call("Bio:detectMacromolecule",{col:i});return o&&(i.semType=o),await n.data.detectSemanticTypes(t.dataFrame),i}},7958:(t,e,s)=>{"use strict";function n(t){return"string"==typeof t||t instanceof String?t:"StateError"===t.constructor.name?t.message:"StateError"===t.constructor.name&&"$thrownJsError"in t?n(t.$thrownJsError):t instanceof Error?t.message:t.toString()}function r(t){return t instanceof Error?t.stack:"StateError"===t.constructor.name&&"$thrownJsError"in t?r(t.$thrownJsError):void 0}function i(t){return[n(t),r(t)]}s.d(e,{yf:()=>i})},2918:(t,e,s)=>{"use strict";s.d(e,{NT:()=>y,P4:()=>p});var n=s(4469),r=(s(3870),s(976)),i=s(701),o=s(6584),a=s(922),l=s(1047);class c{constructor(t){this.rawLib=t}isValid(){return this.rawLib.every((t=>"object"==typeof t&&Object.values(l.Wc).every((e=>e in t&&"string"==typeof t[e]))))}getJsonMonomerLib(){const t=[];return this.rawLib.forEach((e=>{const s=this.prepareMonomer(e);t.push(s)})),t}prepareMonomer(t){const e={...l.Z2};Object.entries(l.Wc).forEach((([s,n])=>{const r=t[n];e[s]=r}));let s="smiles";const n=t[l.Wc[s]],r=new h(n),i=r.getCappedSmiles();return e[s]=i,s="rgroups",e[s]=u.getRGroups(r.getNumberOfRGroups()),s="molfile",e[s]=new m(r.getSmilesWithRGroups()).getMolfile(),e}}class h{constructor(t){const e=new RegExp("\\[r\\]","g");let s=0;this.smilesWithRGroups=t.replace(e,(t=>(++s,`[${s}*]`))),this.numberOfRGroups=s}getSmilesWithRGroups(){return this.smilesWithRGroups}getCappedSmiles(){return this.capRGroups()}getNumberOfRGroups(){return this.numberOfRGroups}capRGroups(){let t=this.smilesWithRGroups.replace("[1*]","[H:1]");return t=t.replace("[2*]","[OH:2]"),t.replace("[3*]","[H:3]")}}class u{constructor(){}static getRGroups(t){return l.nJ.slice(0,t)}}class m{constructor(t){this.smilesWithRGroups=t}getMolfile(){let t=r.chem.convert(this.smilesWithRGroups,r.chem.Notation.Smiles,r.chem.Notation.MolBlock);return t=this.restoreRGPLine(t),t=this.fixRGroupSymbols(t),t}restoreRGPLine(t){return t.replace("M ISO","M RGP")}fixRGroupSymbols(t){return t.replace(/\bR\b/g,"R#")}}var d=s(7228),g=s(2991);async function p(){return await Promise.all((await n.dapi.files.list(o.BX,!0,"")).map((async t=>t.fullPath.substring(o.BX.length))))}class f{constructor(t,e){this._monomers={},this._onChanged=new i.Subject,this._monomers=t,this.error=e}getMonomer(t,e){return t in this._monomers&&e in this._monomers[t]?this._monomers[t][e]:null}getPolymerTypes(){return Object.keys(this._monomers)}getMonomerMolsByPolymerType(t){const e={};return Object.keys(this._monomers[t]??{}).forEach((s=>{e[s]=this._monomers[t][s].molfile})),e}getMonomerSymbolsByType(t){return Object.keys(this._monomers[t])}getMonomerSymbolsByRGroup(t,e,s){let n=this.getMonomerSymbolsByType(e).map((t=>this.getMonomer(e,t)));return n=n.filter((t=>null!==t)),0===n.length?[]:(n=n.filter((e=>{if(!e?.rgroups)return!1;let s=e?.rgroups.length>=t;return a._.getInstance(e.molfile).atomTypes.map(((t,e)=>"R#"===t?e:-1)).filter((t=>-1!==t)),s&&(s=!0),s})),n.map((t=>t?.symbol)))}get onChanged(){return this._onChanged}_updateInt(t){const e=t.getPolymerTypes(),s=this.getPolymerTypes();e.forEach((e=>{s.includes(e)||(this._monomers[e]={}),t.getMonomerSymbolsByType(e).forEach((s=>{this._monomers[e][s]=t.getMonomer(e,s)}))}))}update(t){this._updateInt(t),this._onChanged.next()}updateLibs(t,e=!1){e&&(this._monomers={});for(const e of t)e.error||this._updateInt(e);this._onChanged.next()}clear(){this._monomers={},this._onChanged.next()}}class y{constructor(){this._monomerLib=new f({}),this.loadLibrariesPromise=Promise.resolve()}getBioLib(){return this._monomerLib}async loadLibraries(t=!1){return this.loadLibrariesPromise=this.loadLibrariesPromise.then((async()=>{try{const[e,s]=await Promise.all([p(),(0,o.nW)()]),n=e.filter((t=>!s.exclude.includes(t))).filter((t=>!(s.explicit.length>0)||s.explicit.includes(t))),r=await Promise.all(n.map((t=>this.readLibrary(o.BX,t).catch((e=>{const s=`Loading monomers from '${t}' error: ${e instanceof Error?e.message:e.toString()}`;return new f({},s)})))));this._monomerLib.updateLibs(r,t)}catch(t){const e=`Loading monomer libraries error: ${t instanceof Error?t.message:t.toString()}`;n.shell.warning(e);const s=t instanceof Error?t.stack:void 0;g._package.logger.error(e,void 0,s)}}))}async readLibrary(t,e){let s,i,o=[];const a=new r.FileSource(t);if(e.endsWith(".sdf"))1===r.Func.find({package:"Chem",name:"importSdf"}).length?(s=await a.readAsBytes(e),i=await n.functions.call("Chem:importSdf",{bytes:s}),o=(0,d.Xk)(i[0])):n.shell.warning("Chem package is not installed");else if(e.endsWith(".json")){const t=await a.readAsText(e);o=JSON.parse(t)}else{if(!e.endsWith(".csv"))throw new Error("Monomer library of unknown file format, supported formats: SDF, JSON, CSV");{const t=(l=await a.readCsv(e),Array.from({length:l.rowCount},((t,e)=>l.columns.names().reduce(((t,s)=>(t[s]=l.get(s,e),t)),{})))),s=new c(t);if(!s.isValid())throw new Error("Invalid format of CSV monomer lib");o=s.getJsonMonomerLib()}}var l;const h={},u=[];return o.forEach((t=>{u.includes(t.polymerType)||(h[t.polymerType]={},u.push(t.polymerType)),h[t.polymerType][t.symbol]=t})),new f(h)}async selectSpecifiedLibraries(t){const e=await this.getInvalidFileNames(t);if(e.length>0)throw new Error(`Cannot select libraries ${e}: no such library in the list`);const s=await(0,o.nW)();s.exclude=(await p()).filter((e=>!t.includes(e))),await(0,o.tW)(s)}async getInvalidFileNames(t){const e=await p();return t.filter((t=>!e.includes(t)))}static get instance(){return window.$monomerLibHelper||(window.$monomerLibHelper=new y),window.$monomerLibHelper}}},525:(t,e,s)=>{"use strict";s.d(e,{K:()=>_});var n=s(4469),r=s(976),i=s(3870),o=s(8447),a=s(499),l=s(6098),c=s(8341),h=s(2568),u=s(3553),m=s(2991),d=s(3379),g=s.n(d),p=s(7795),f=s.n(p),y=s(569),w=s.n(y),b=s(3565),T=s.n(b),C=s(9216),A=s.n(C),S=s(4589),E=s.n(S),M=s(9564),v={};v.styleTagTransform=E(),v.setAttributes=T(),v.insert=w().bind(null,"head"),v.domAPI=f(),v.insertStyleElement=A(),g()(M.Z,v),M.Z&&M.Z.locals&&M.Z.locals;class N extends Error{constructor(t,e){super(t,e)}}async function _(t={}){return new Promise((async(e,s)=>{var o,a,l;t.clustersCol??(t.clustersCol=null),t.pepsea??(t.pepsea={}),(o=t.pepsea).method??(o.method=u.jB.pepsea.method),(a=t.pepsea).gapOpen??(a.gapOpen=u.jB.pepsea.gapOpen),(l=t.pepsea).gapExtend??(l.gapExtend=u.jB.pepsea.gapExtend);const h=t.col?.dataFrame??n.shell.t,m=t.col??h.columns.bySemType(r.SEMTYPE.MACROMOLECULE);if(null==m){const t="MSAError: dataset doesn't conain any Macromolecule column";n.shell.warning(t),s(new N(t))}const d=i.choiceInput("Method",t.pepsea.method,c.J);d.setTooltip("Alignment method");const g=i.floatInput("Terminal gap",t?.kalign?.terminalGap??null);g.setTooltip("Penalty for opening a gap at the beginning or end of the sequence");const p=i.p(`Kalign version: ${u.WY}`,"kalign-version"),f=i.floatInput("Gap open",t.pepsea.gapOpen);f.setTooltip("Gap opening penalty at group-to-group alignment");const y=i.floatInput("Gap extend",t.pepsea.gapExtend);y.setTooltip("Gap extension penalty to skip the alignment");const w=i.inputs([f,y,g]),b=i.button("Alignment parameters",(()=>{w.hidden=!w.hidden}),"Adjust alignment parameters such as penalties for opening and extending gaps");b.classList.add("msa-params-button"),w.hidden=!0,b.prepend(i.icons.settings((()=>null)));const T=[d.root.style],C=[g.root.style,p.style];let A;const S=i.columnInput("Sequence",h,m,(async()=>{A=await P(S.value,h,T,C,d,E,f,y,g)}),{filter:t=>t.semType===r.SEMTYPE.MACROMOLECULE});S.setTooltip("Sequences column to use for alignment");const E=i.columnInput("Clusters",h,t.clustersCol);if(E.nullable=!0,S.fireChanged(),t.col)return A=await P(t.col,h,T,C,d,E,f,y,g),void await L(S,h,A,e,s);i.dialog("MSA").add(S).add(E).add(d).add(w).add(b).add(p).onOK((async()=>{await L(S,h,A,e,s)})).show()}))}async function L(t,e,s,i,o){let a=null;const l=r.TaskBarProgressIndicator.create("Analyze for MSA ...");try{if(t.fireChanged(),t.value.semType!==r.SEMTYPE.MACROMOLECULE)throw new Error("Chosen column has to be of Macromolecule semantic type");if(void 0===s)throw new Error("Invalid column format");if(a=await s(),null==a)return o("PepSeA container has not started");e.columns.add(a),await n.data.detectSemanticTypes(e),i(a)}catch(t){const e=t instanceof Error?t.message:t.toString();n.shell.error(e),o(t)}finally{l.close()}}async function P(t,e,s,i,d,g,p,f,y){try{if(t.semType!==r.SEMTYPE.MACROMOLECULE)return;const n=e.columns.getUnusedName(`msa(${t.name})`);if((0,h.n)(t,t.name,[o.r2.FASTA,o.r2.SEPARATOR],["DNA","RNA","PT"],!1)){I(s,i,"kalign"),p.value=null,f.value=null,y.value=null;const e=a.Cn.getOrCreate(t),r=e.isFasta()?t:e.convert(o.r2.FASTA);return async()=>await(0,l.U)(r,!1,n,g.value)}if((0,h.n)(t,t.name,[o.r2.HELM],[],!1))return I(s,i,"pepsea"),p.value??(p.value=u.jB.pepsea.gapOpen),f.value??(f.value=u.jB.pepsea.gapExtend),async()=>await(0,c.f)(t,n,d.value,p.value,f.value,g.value);if((0,h.n)(t,t.name,[o.r2.SEPARATOR],["UN"],!1)){const e=a.Cn.getOrCreate(t).convert(o.r2.HELM);return I(s,i,"pepsea"),p.value??(p.value=u.jB.pepsea.gapOpen),f.value??(f.value=u.jB.pepsea.gapExtend),async()=>await(0,c.f)(e,n,d.value,p.value,f.value,g.value)}return p.value=null,f.value=null,y.value=null,void I(s,i,"kalign")}catch(t){const e=t instanceof Error?t.message:t.toString();n.shell.error(e),m._package.logger.error(e)}}function I(t,e,s){if("kalign"===s){for(const e of t)e.display="none";for(const t of e)t.removeProperty("display")}else{for(const t of e)t.display="none";for(const e of t)e.removeProperty("display")}}},6098:(t,e,s)=>{"use strict";s.d(e,{U:()=>G});var n=s(976),r=s(5226);const i=Symbol("Comlink.proxy"),o=Symbol("Comlink.endpoint"),a=Symbol("Comlink.releaseProxy"),l=Symbol("Comlink.thrown"),c=t=>"object"==typeof t&&null!==t||"function"==typeof t,h=new Map([["proxy",{canHandle:t=>c(t)&&t[i],serialize(t){const{port1:e,port2:s}=new MessageChannel;return u(t,e),[s,[s]]},deserialize:t=>(t.start(),d(t))}],["throw",{canHandle:t=>c(t)&&l in t,serialize({value:t}){let e;return e=t instanceof Error?{isError:!0,value:{message:t.message,name:t.name,stack:t.stack}}:{isError:!1,value:t},[e,[]]},deserialize(t){throw t.isError?Object.assign(new Error(t.value.message),t.value):t.value}}]]);function u(t,e=self){e.addEventListener("message",(function s(n){if(!n||!n.data)return;const{id:r,type:o,path:a}=Object.assign({path:[]},n.data),c=(n.data.argumentList||[]).map(T);let h;try{const e=a.slice(0,-1).reduce(((t,e)=>t[e]),t),s=a.reduce(((t,e)=>t[e]),t);switch(o){case"GET":h=s;break;case"SET":e[a.slice(-1)[0]]=T(n.data.value),h=!0;break;case"APPLY":h=s.apply(e,c);break;case"CONSTRUCT":h=function(t){return Object.assign(t,{[i]:!0})}(new s(...c));break;case"ENDPOINT":{const{port1:e,port2:s}=new MessageChannel;u(t,s),h=function(t,e){return w.set(t,e),t}(e,[e])}break;case"RELEASE":h=void 0;break;default:return}}catch(t){h={value:t,[l]:0}}Promise.resolve(h).catch((t=>({value:t,[l]:0}))).then((t=>{const[n,i]=b(t);e.postMessage(Object.assign(Object.assign({},n),{id:r}),i),"RELEASE"===o&&(e.removeEventListener("message",s),m(e))}))})),e.start&&e.start()}function m(t){(function(t){return"MessagePort"===t.constructor.name})(t)&&t.close()}function d(t,e){return p(t,[],e)}function g(t){if(t)throw new Error("Proxy has been released and is not useable")}function p(t,e=[],s=function(){}){let n=!1;const r=new Proxy(s,{get(s,i){if(g(n),i===a)return()=>C(t,{type:"RELEASE",path:e.map((t=>t.toString()))}).then((()=>{m(t),n=!0}));if("then"===i){if(0===e.length)return{then:()=>r};const s=C(t,{type:"GET",path:e.map((t=>t.toString()))}).then(T);return s.then.bind(s)}return p(t,[...e,i])},set(s,r,i){g(n);const[o,a]=b(i);return C(t,{type:"SET",path:[...e,r].map((t=>t.toString())),value:o},a).then(T)},apply(s,r,i){g(n);const a=e[e.length-1];if(a===o)return C(t,{type:"ENDPOINT"}).then(T);if("bind"===a)return p(t,e.slice(0,-1));const[l,c]=y(i);return C(t,{type:"APPLY",path:e.map((t=>t.toString())),argumentList:l},c).then(T)},construct(s,r){g(n);const[i,o]=y(r);return C(t,{type:"CONSTRUCT",path:e.map((t=>t.toString())),argumentList:i},o).then(T)}});return r}function f(t){return Array.prototype.concat.apply([],t)}function y(t){const e=t.map(b);return[e.map((t=>t[0])),f(e.map((t=>t[1])))]}const w=new WeakMap;function b(t){for(const[e,s]of h)if(s.canHandle(t)){const[n,r]=s.serialize(t);return[{type:"HANDLER",name:e,value:n},r]}return[{type:"RAW",value:t},w.get(t)||[]]}function T(t){switch(t.type){case"HANDLER":return h.get(t.name).deserialize(t.value);case"RAW":return t.value}}function C(t,e,s){return new Promise((n=>{const r=new Array(4).fill(0).map((()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16))).join("-");t.addEventListener("message",(function e(s){!s.data||!s.data.id||s.data.id!==r||(t.removeEventListener("message",e),n(s.data))})),t.start&&t.start(),t.postMessage(Object.assign({id:r},e),s)}))}const A="KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2NvbnN0ICQ9U3ltYm9sKCJDb21saW5rLnByb3h5IiksQT1TeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKSxSPVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSx5PVN5bWJvbCgiQ29tbGluay50aHJvd24iKSxfPWU9PnR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9PW51bGx8fHR5cGVvZiBlPT0iZnVuY3Rpb24iLEw9e2NhbkhhbmRsZTplPT5fKGUpJiZlWyRdLHNlcmlhbGl6ZShlKXtjb25zdHtwb3J0MTpyLHBvcnQyOml9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gdyhlLHIpLFtpLFtpXV19LGRlc2VyaWFsaXplKGUpe3JldHVybiBlLnN0YXJ0KCksQyhlKX19LE89e2NhbkhhbmRsZTplPT5fKGUpJiZ5IGluIGUsc2VyaWFsaXplKHt2YWx1ZTplfSl7bGV0IHI7cmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvcj9yPXtpc0Vycm9yOiEwLHZhbHVlOnttZXNzYWdlOmUubWVzc2FnZSxuYW1lOmUubmFtZSxzdGFjazplLnN0YWNrfX06cj17aXNFcnJvcjohMSx2YWx1ZTplfSxbcixbXV19LGRlc2VyaWFsaXplKGUpe3Rocm93IGUuaXNFcnJvcj9PYmplY3QuYXNzaWduKG5ldyBFcnJvcihlLnZhbHVlLm1lc3NhZ2UpLGUudmFsdWUpOmUudmFsdWV9fSxFPW5ldyBNYXAoW1sicHJveHkiLExdLFsidGhyb3ciLE9dXSk7ZnVuY3Rpb24gdyhlLHI9c2VsZil7ci5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBpKHMpe2lmKCFzfHwhcy5kYXRhKXJldHVybjtjb25zdHtpZDpvLHR5cGU6YSxwYXRoOm59PU9iamVjdC5hc3NpZ24oe3BhdGg6W119LHMuZGF0YSksdT0ocy5kYXRhLmFyZ3VtZW50TGlzdHx8W10pLm1hcChtKTtsZXQgbDt0cnl7Y29uc3QgYz1uLnNsaWNlKDAsLTEpLnJlZHVjZSgoZCxoKT0+ZFtoXSxlKSxmPW4ucmVkdWNlKChkLGgpPT5kW2hdLGUpO3N3aXRjaChhKXtjYXNlIkdFVCI6bD1mO2JyZWFrO2Nhc2UiU0VUIjpjW24uc2xpY2UoLTEpWzBdXT1tKHMuZGF0YS52YWx1ZSksbD0hMDticmVhaztjYXNlIkFQUExZIjpsPWYuYXBwbHkoYyx1KTticmVhaztjYXNlIkNPTlNUUlVDVCI6e2NvbnN0IGQ9bmV3IGYoLi4udSk7bD16KGQpfWJyZWFrO2Nhc2UiRU5EUE9JTlQiOntjb25zdHtwb3J0MTpkLHBvcnQyOmh9PW5ldyBNZXNzYWdlQ2hhbm5lbDt3KGUsaCksbD1OKGQsW2RdKX1icmVhaztjYXNlIlJFTEVBU0UiOmw9dm9pZCAwO2JyZWFrO2RlZmF1bHQ6cmV0dXJufX1jYXRjaChjKXtsPXt2YWx1ZTpjLFt5XTowfX1Qcm9taXNlLnJlc29sdmUobCkuY2F0Y2goYz0+KHt2YWx1ZTpjLFt5XTowfSkpLnRoZW4oYz0+e2NvbnN0W2YsZF09UyhjKTtyLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxmKSx7aWQ6b30pLGQpLGE9PT0iUkVMRUFTRSImJihyLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGkpLEYocikpfSl9KSxyLnN0YXJ0JiZyLnN0YXJ0KCl9ZnVuY3Rpb24gVChlKXtyZXR1cm4gZS5jb25zdHJ1Y3Rvci5uYW1lPT09Ik1lc3NhZ2VQb3J0In1mdW5jdGlvbiBGKGUpe1QoZSkmJmUuY2xvc2UoKX1mdW5jdGlvbiBDKGUscil7cmV0dXJuIGIoZSxbXSxyKX1mdW5jdGlvbiBwKGUpe2lmKGUpdGhyb3cgbmV3IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKX1mdW5jdGlvbiBiKGUscj1bXSxpPWZ1bmN0aW9uKCl7fSl7bGV0IHM9ITE7Y29uc3Qgbz1uZXcgUHJveHkoaSx7Z2V0KGEsbil7aWYocChzKSxuPT09UilyZXR1cm4oKT0+ZyhlLHt0eXBlOiJSRUxFQVNFIixwYXRoOnIubWFwKHU9PnUudG9TdHJpbmcoKSl9KS50aGVuKCgpPT57RihlKSxzPSEwfSk7aWYobj09PSJ0aGVuIil7aWYoci5sZW5ndGg9PT0wKXJldHVybnt0aGVuOigpPT5vfTtjb25zdCB1PWcoZSx7dHlwZToiR0VUIixwYXRoOnIubWFwKGw9PmwudG9TdHJpbmcoKSl9KS50aGVuKG0pO3JldHVybiB1LnRoZW4uYmluZCh1KX1yZXR1cm4gYihlLFsuLi5yLG5dKX0sc2V0KGEsbix1KXtwKHMpO2NvbnN0W2wsY109Uyh1KTtyZXR1cm4gZyhlLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLnIsbl0ubWFwKGY9PmYudG9TdHJpbmcoKSksdmFsdWU6bH0sYykudGhlbihtKX0sYXBwbHkoYSxuLHUpe3Aocyk7Y29uc3QgbD1yW3IubGVuZ3RoLTFdO2lmKGw9PT1BKXJldHVybiBnKGUse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4obSk7aWYobD09PSJiaW5kIilyZXR1cm4gYihlLHIuc2xpY2UoMCwtMSkpO2NvbnN0W2MsZl09TSh1KTtyZXR1cm4gZyhlLHt0eXBlOiJBUFBMWSIscGF0aDpyLm1hcChkPT5kLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpjfSxmKS50aGVuKG0pfSxjb25zdHJ1Y3QoYSxuKXtwKHMpO2NvbnN0W3UsbF09TShuKTtyZXR1cm4gZyhlLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6ci5tYXAoYz0+Yy50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6dX0sbCkudGhlbihtKX19KTtyZXR1cm4gb31mdW5jdGlvbiBEKGUpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLGUpfWZ1bmN0aW9uIE0oZSl7Y29uc3Qgcj1lLm1hcChTKTtyZXR1cm5bci5tYXAoaT0+aVswXSksRChyLm1hcChpPT5pWzFdKSldfWNvbnN0IFA9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gTihlLHIpe3JldHVybiBQLnNldChlLHIpLGV9ZnVuY3Rpb24geihlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihlLHtbJF06ITB9KX1mdW5jdGlvbiBTKGUpe2Zvcihjb25zdFtyLGldb2YgRSlpZihpLmNhbkhhbmRsZShlKSl7Y29uc3RbcyxvXT1pLnNlcmlhbGl6ZShlKTtyZXR1cm5be3R5cGU6IkhBTkRMRVIiLG5hbWU6cix2YWx1ZTpzfSxvXX1yZXR1cm5be3R5cGU6IlJBVyIsdmFsdWU6ZX0sUC5nZXQoZSl8fFtdXX1mdW5jdGlvbiBtKGUpe3N3aXRjaChlLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIEUuZ2V0KGUubmFtZSkuZGVzZXJpYWxpemUoZS52YWx1ZSk7Y2FzZSJSQVciOnJldHVybiBlLnZhbHVlfX1mdW5jdGlvbiBnKGUscixpKXtyZXR1cm4gbmV3IFByb21pc2Uocz0+e2NvbnN0IG89VSgpO2UuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gYShuKXshbi5kYXRhfHwhbi5kYXRhLmlkfHxuLmRhdGEuaWQhPT1vfHwoZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixhKSxzKG4uZGF0YSkpfSksZS5zdGFydCYmZS5zdGFydCgpLGUucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6b30sciksaSl9KX1mdW5jdGlvbiBVKCl7cmV0dXJuIG5ldyBBcnJheSg0KS5maWxsKDApLm1hcCgoKT0+TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKS50b1N0cmluZygxNikpLmpvaW4oIi0iKX1jb25zdCBXPWFzeW5jKCk9PldlYkFzc2VtYmx5LnZhbGlkYXRlKG5ldyBVaW50OEFycmF5KFswLDk3LDExNSwxMDksMSwwLDAsMCwxLDUsMSw5NiwwLDEsMTIzLDMsMiwxLDAsMTAsMTAsMSw4LDAsNjUsMCwyNTMsMTUsMjUzLDk4LDExXSkpLHg9ImVhZ2VyIixrPSJsYXp5IixqPXtzc3c6WyJzaW1kIl0sbWluaW1hcDI6WyJzaW1kIl19LHQ9e3Rvb2xzOltdLGNvbmZpZzp7fSxmaWxlczpbXSxiYXNlOnt9LGZzOnt9LGFzeW5jIGluaXQoKXtpZih0LnRvb2xzLmxlbmd0aD09PTApdGhyb3ciRXhwZWN0aW5nIGF0IGxlYXN0IDEgdG9vbC4iO2lmKG5ldyBTZXQodC50b29scy5tYXAocj0+YCR7ci50b29sfS8ke3IucHJvZ3JhbXx8ci50b29sfWApKS5zaXplIT09dC50b29scy5sZW5ndGgpdGhyb3ciRm91bmQgZHVwbGljYXRlIHRvb2xzOyBjYW4gb25seSBoYXZlIGVhY2ggdG9vbC9wcm9ncmFtIGNvbWJpbmF0aW9uIGF0IG1vc3Qgb25jZS4iO2lmKHQuYmFzZT10LnRvb2xzLmZpbmQocj0+ci5yZWluaXQhPT0hMCksIXQuYmFzZSl0aHJvdyJDb3VsZCBub3QgZmluZCBhIHRvb2wgd2l0aCBgcmVpbml0OiBmYWxzZWAgdG8gdXNlIGFzIHRoZSBiYXNlIG1vZHVsZS4gVG8gZml4IHRoaXMgaXNzdWUsIGluY2x1ZGUgdGhlIHRvb2wgYGJhc2UvMS4wLjBgIHdoZW4gaW5pdGlhbGl6aW5nIEFpb2xpLiI7cmV0dXJuIHQuYmFzZS5pc0Jhc2VNb2R1bGU9ITAsYXdhaXQgdGhpcy5fc2V0dXAodC5iYXNlKSxhd2FpdCB0aGlzLl9pbml0TW9kdWxlcygpLHQuX2xvZygiUmVhZHkiKSwhMH0sYXN5bmMgX2luaXRNb2R1bGVzKCl7YXdhaXQgUHJvbWlzZS5hbGwodC50b29scy5tYXAodGhpcy5fc2V0dXApKSxhd2FpdCB0aGlzLl9zZXR1cEZTKCl9LG1vdW50KGU9W10pe2NvbnN0IHI9YCR7dC5jb25maWcuZGlyU2hhcmVkfSR7dC5jb25maWcuZGlyRGF0YX1gLGk9YCR7dC5jb25maWcuZGlyU2hhcmVkfSR7dC5jb25maWcuZGlyTW91bnRlZH1gO2xldCBzPVtdLG89W10sYT1bXTshQXJyYXkuaXNBcnJheShlKSYmIShlIGluc3RhbmNlb2YgRmlsZUxpc3QpJiYoZT1bZV0pLHQuX2xvZyhgTW91bnRpbmcgJHtlLmxlbmd0aH0gZmlsZXNgKTtmb3IobGV0IG4gb2YgZSl7aWYobiBpbnN0YW5jZW9mIEZpbGV8fChuPT1udWxsP3ZvaWQgMDpuLmRhdGEpaW5zdGFuY2VvZiBCbG9iJiZuLm5hbWV8fHR5cGVvZihuPT1udWxsP3ZvaWQgMDpuLmRhdGEpPT0ic3RyaW5nIiYmbi5uYW1lKXR5cGVvZihuPT1udWxsP3ZvaWQgMDpuLmRhdGEpPT0ic3RyaW5nIiYmKG4uZGF0YT1uZXcgQmxvYihbbi5kYXRhXSx7dHlwZToidGV4dC9wbGFpbiJ9KSkscy5wdXNoKG4pO2Vsc2UgaWYobi5uYW1lJiZuLnVybClvLnB1c2gobik7ZWxzZSBpZih0eXBlb2Ygbj09InN0cmluZyImJm4uc3RhcnRzV2l0aCgiaHR0cCIpKW49e3VybDpuLG5hbWU6bi5zcGxpdCgiLy8iKS5wb3AoKS5yZXBsYWNlKC9cLy9nLCItIil9LG8ucHVzaChuKTtlbHNlIHRocm93J0Nhbm5vdCBtb3VudCBmaWxlKHMpIHNwZWNpZmllZC4gTXVzdCBiZSBhIEZpbGUsIEJsb2IsIGEgVVJMIHN0cmluZywgb3IgeyBuYW1lOiAiZmlsZS50eHQiLCBkYXRhOiAic3RyaW5nIiB9Lic7YS5wdXNoKG4ubmFtZSl9dHJ5e3QuZnMudW5tb3VudChpKX1jYXRjaHt9Zm9yKGxldCBuIG9mIG8pdC5mcy5jcmVhdGVMYXp5RmlsZShyLG4ubmFtZSxuLnVybCwhMCwhMCk7cmV0dXJuIHQuZmlsZXM9dC5maWxlcy5jb25jYXQocyksdC5iYXNlLm1vZHVsZS5GUy5tb3VudCh0LmJhc2UubW9kdWxlLldPUktFUkZTLHtmaWxlczp0LmZpbGVzLmZpbHRlcihuPT5uIGluc3RhbmNlb2YgRmlsZSksYmxvYnM6dC5maWxlcy5maWx0ZXIobj0+KG49PW51bGw/dm9pZCAwOm4uZGF0YSlpbnN0YW5jZW9mIEJsb2IpfSxpKSxzLm1hcChuPT57Y29uc3QgdT1gJHtpfS8ke24ubmFtZX1gLGw9YCR7cn0vJHtuLm5hbWV9YDt0cnl7dC5mcy51bmxpbmsobCl9Y2F0Y2h7fXQuX2xvZyhgQ3JlYXRpbmcgc3ltbGluazogJHtsfSAtLT4gJHt1fWApLHQuZnMuc3ltbGluayh1LGwpfSksYS5tYXAobj0+YCR7cn0vJHtufWApfSxhc3luYyBleGVjKGUscj1udWxsKXtpZih0Ll9sb2coYEV4ZWN1dGluZyAlYyR7ZX0lYyBhcmdzPSR7cn1gLCJjb2xvcjpkYXJrYmx1ZTsgZm9udC13ZWlnaHQ6Ym9sZCIsIiIpLCFlKXRocm93IkV4cGVjdGluZyBhIGNvbW1hbmQiO2xldCBpPWU7cj09bnVsbCYmKHI9ZS5zcGxpdCgiICIpLGk9ci5zaGlmdCgpKTtjb25zdCBzPXQudG9vbHMuZmluZChhPT57dmFyIHU7bGV0IG49aTtyZXR1cm4oKHU9YT09bnVsbD92b2lkIDA6YS5mZWF0dXJlcyk9PW51bGw/dm9pZCAwOnUuc2ltZCk9PT0hMCYmKG49YCR7bn0tc2ltZGApLGEucHJvZ3JhbT09bn0pO2lmKHM9PW51bGwpdGhyb3dgUHJvZ3JhbSAke2l9IG5vdCBmb3VuZC5gO3Muc3Rkb3V0PSIiLHMuc3RkZXJyPSIiLHMubG9hZGluZz09ayYmKHMubG9hZGluZz14LGF3YWl0IHRoaXMuX2luaXRNb2R1bGVzKCkpO3RyeXtzLm1vZHVsZS5jYWxsTWFpbihyKX1jYXRjaChhKXtjb25zb2xlLmVycm9yKGEpfXRyeXtzLm1vZHVsZS5GUy5jbG9zZShzLm1vZHVsZS5GUy5zdHJlYW1zWzFdKSxzLm1vZHVsZS5GUy5jbG9zZShzLm1vZHVsZS5GUy5zdHJlYW1zWzJdKX1jYXRjaHt9cy5tb2R1bGUuRlMuc3RyZWFtc1sxXT1zLm1vZHVsZS5GUy5vcGVuKCIvZGV2L3N0ZG91dCIsInciKSxzLm1vZHVsZS5GUy5zdHJlYW1zWzJdPXMubW9kdWxlLkZTLm9wZW4oIi9kZXYvc3RkZXJyIiwidyIpO2xldCBvPXtzdGRvdXQ6cy5zdGRvdXQsc3RkZXJyOnMuc3RkZXJyfTtpZih0LmNvbmZpZy5wcmludEludGVybGVhdmVkJiYobz1zLnN0ZG91dCkscy5yZWluaXQ9PT0hMCl7Y29uc3QgYT10LmJhc2UubW9kdWxlLkZTLmN3ZCgpO09iamVjdC5hc3NpZ24ocyxzLmNvbmZpZykscy5yZWFkeT0hMSxhd2FpdCB0aGlzLmluaXQoKSxzLmlzQmFzZU1vZHVsZSYmdGhpcy5tb3VudCgpLHRoaXMuY2QoYSl9cmV0dXJuIG99LGNhdChlKXtyZXR1cm4gdC5fZmlsZW9wKCJjYXQiLGUpfSxscyhlKXtyZXR1cm4gdC5fZmlsZW9wKCJscyIsZSl9LGRvd25sb2FkKGUpe3JldHVybiB0Ll9maWxlb3AoImRvd25sb2FkIixlKX0scHdkKCl7cmV0dXJuIHQuZnMuY3dkKCl9LGNkKGUpe2ZvcihsZXQgciBvZiB0LnRvb2xzKSFyLm1vZHVsZXx8ci5tb2R1bGUuRlMuY2hkaXIoZSl9LG1rZGlyKGUpe3JldHVybiB0LmZzLm1rZGlyKGUpLCEwfSxyZWFkKHtwYXRoOmUsbGVuZ3RoOnIsZmxhZzppPSJyIixvZmZzZXQ6cz0wLHBvc2l0aW9uOm89MH0pe2NvbnN0IGE9dC5mcy5vcGVuKGUsaSksbj1uZXcgVWludDhBcnJheShyKTtyZXR1cm4gdC5mcy5yZWFkKGEsbixzLHIsbyksdC5mcy5jbG9zZShhKSxufSx3cml0ZSh7cGF0aDplLGJ1ZmZlcjpyLGZsYWc6aT0idysiLG9mZnNldDpzPTAscG9zaXRpb246bz0wfSl7Y29uc3QgYT10LmZzLm9wZW4oZSxpKTt0LmZzLndyaXRlKGEscixzLHIubGVuZ3RoLG8pLHQuZnMuY2xvc2UoYSl9LF9zdGRpblR4dDoiIixfc3RkaW5QdHI6MCxnZXQgc3RkaW4oKXtyZXR1cm4gdC5fc3RkaW5UeHR9LHNldCBzdGRpbihlPSIiKXt0Ll9sb2coYFNldHRpbmcgc3RkaW4gdG8gJWMke2V9JWNgLCJjb2xvcjpkYXJrYmx1ZSIsIiIpLHQuX3N0ZGluVHh0PWUsdC5fc3RkaW5QdHI9MH0sYXN5bmMgX3NldHVwKGUpe2lmKGUucmVhZHkpcmV0dXJuO2lmKHQuX2xvZyhgU2V0dGluZyB1cCAke2UudG9vbH0gKGJhc2UgPSAke2UuaXNCYXNlTW9kdWxlPT09ITB9KS4uLmApLGUuY29uZmlnPU9iamVjdC5hc3NpZ24oe30sZSksZS51cmxQcmVmaXh8fChlLnVybFByZWZpeD1gJHt0LmNvbmZpZy51cmxDRE59LyR7ZS50b29sfS8ke2UudmVyc2lvbn1gKSxlLnByb2dyYW18fChlLnByb2dyYW09ZS50b29sKSxlLmZlYXR1cmVzfHwoZS5mZWF0dXJlcz17fSwoaltlLnByb2dyYW1dfHxbXSkuaW5jbHVkZXMoInNpbWQiKSYmKGF3YWl0IFcoKT8oZS5wcm9ncmFtKz0iLXNpbWQiLGUuZmVhdHVyZXMuc2ltZD0hMCk6dC5fbG9nKGBXZWJBc3NlbWJseSBTSU1EIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyOyB3aWxsIGxvYWQgbm9uLVNJTUQgdmVyc2lvbiBvZiAke2UucHJvZ3JhbX0uYCkpKSxlLmlzQmFzZU1vZHVsZSYmKGUubG9hZGluZz14KSxlLmxvYWRpbmc9PT1rKXt0Ll9sb2coYFdpbGwgbGF6eS1sb2FkICR7ZS50b29sfTsgc2tpcHBpbmcgaW5pdGlhbGl6YXRpb24uYCk7cmV0dXJufXNlbGYuaW1wb3J0U2NyaXB0cyhgJHtlLnVybFByZWZpeH0vJHtlLnByb2dyYW19LmpzYCksZS5tb2R1bGU9YXdhaXQgTW9kdWxlKHt0aGlzUHJvZ3JhbTplLnByb2dyYW0sbG9jYXRlRmlsZTooaSxzKT0+YCR7ZS51cmxQcmVmaXh9LyR7aX1gLHN0ZGluOigpPT50Ll9zdGRpblB0cjx0LnN0ZGluLmxlbmd0aD90LnN0ZGluLmNoYXJDb2RlQXQodC5fc3RkaW5QdHIrKyk6KHQuc3RkaW49IiIsbnVsbCkscHJpbnQ6aT0+ZS5zdGRvdXQrPWAke2l9CmAscHJpbnRFcnI6dC5jb25maWcucHJpbnRJbnRlcmxlYXZlZD9pPT5lLnN0ZG91dCs9YCR7aX0KYDppPT5lLnN0ZGVycis9YCR7aX0KYH0pO2NvbnN0IHI9ZS5tb2R1bGUuRlM7ZS5pc0Jhc2VNb2R1bGU/KHQuX2xvZyhgU2V0dGluZyB1cCAke2UudG9vbH0gd2l0aCBiYXNlIG1vZHVsZSBmaWxlc3lzdGVtLi4uYCksci5ta2Rpcih0LmNvbmZpZy5kaXJTaGFyZWQsNTExKSxyLm1rZGlyKGAke3QuY29uZmlnLmRpclNoYXJlZH0vJHt0LmNvbmZpZy5kaXJEYXRhfWAsNTExKSxyLm1rZGlyKGAke3QuY29uZmlnLmRpclNoYXJlZH0vJHt0LmNvbmZpZy5kaXJNb3VudGVkfWAsNTExKSxyLmNoZGlyKGAke3QuY29uZmlnLmRpclNoYXJlZH0vJHt0LmNvbmZpZy5kaXJEYXRhfWApLHQuZnM9cik6KHQuX2xvZyhgU2V0dGluZyB1cCAke2UudG9vbH0gd2l0aCBmaWxlc3lzdGVtLi4uYCksci5ta2Rpcih0LmNvbmZpZy5kaXJTaGFyZWQpLHIubW91bnQoZS5tb2R1bGUuUFJPWFlGUyx7cm9vdDp0LmNvbmZpZy5kaXJTaGFyZWQsZnM6dC5mc30sdC5jb25maWcuZGlyU2hhcmVkKSxyLmNoZGlyKHQuZnMuY3dkKCkpKSxlLnN0ZG91dD0iIixlLnN0ZGVycj0iIixlLnJlYWR5PSEwfSxhc3luYyBfc2V0dXBGUygpe2NvbnN0IGU9dC5mcztmb3IobGV0IHIgb2YgdC50b29scyl7aWYoIXIucmVhZHkpY29udGludWU7Y29uc3QgaT1yLm1vZHVsZS5GUyxzPWAvJHtyLnRvb2x9YCxvPWAke3QuY29uZmlnLmRpclNoYXJlZH0ke3N9YDshaS5hbmFseXplUGF0aChzKS5leGlzdHN8fGUuYW5hbHl6ZVBhdGgobykuZXhpc3RzfHwodC5fbG9nKGBNb3VudGluZyAke3N9IG9udG8gJHt0LmJhc2UudG9vbH0gZmlsZXN5c3RlbSBhdCAke299YCksZS5ta2RpcihvKSxlLm1vdW50KHQuYmFzZS5tb2R1bGUuUFJPWFlGUyx7cm9vdDpzLGZzOml9LG8pKX19LF9maWxlb3AoZSxyKXt0Ll9sb2coYFJ1bm5pbmcgJHtlfSAke3J9YCk7Y29uc3QgaT10LmZzLmFuYWx5emVQYXRoKHIpO2lmKCFpLmV4aXN0cylyZXR1cm4gdC5fbG9nKGBGaWxlICR7cn0gbm90IGZvdW5kLmApLCExO3N3aXRjaChlKXtjYXNlImNhdCI6cmV0dXJuIHQuZnMucmVhZEZpbGUocix7ZW5jb2Rpbmc6InV0ZjgifSk7Y2FzZSJscyI6cmV0dXJuIHQuZnMuaXNGaWxlKGkub2JqZWN0Lm1vZGUpP3QuZnMuc3RhdChyKTp0LmZzLnJlYWRkaXIocik7Y2FzZSJkb3dubG9hZCI6Y29uc3Qgcz1uZXcgQmxvYihbdGhpcy5jYXQocildKTtyZXR1cm4gVVJMLmNyZWF0ZU9iamVjdFVSTChzKX1yZXR1cm4hMX0sX2xvZyhlKXtpZighdC5jb25maWcuZGVidWcpcmV0dXJuO2xldCByPVsuLi5hcmd1bWVudHNdO3Iuc2hpZnQoKSxjb25zb2xlLmxvZyhgJWNbV2ViV29ya2VyXSVjICR7ZX1gLCJmb250LXdlaWdodDpib2xkIiwiIiwuLi5yKX19O3codCl9KSgpOwo=",S=typeof window<"u"&&window.Blob&&new Blob([atob(A)],{type:"text/javascript;charset=utf-8"});function E(){const t=S&&(window.URL||window.webkitURL).createObjectURL(S);try{return t?new Worker(t):new Worker("data:application/javascript;base64,"+A)}finally{t&&(window.URL||window.webkitURL).revokeObjectURL(t)}}const M={urlCDN:"https://biowasm.com/cdn/v3",urlCDNStg:"https://stg.biowasm.com/cdn/v3",dirShared:"/shared",dirMounted:"/mnt",dirData:"/data",printInterleaved:!0,callback:null,debug:!1,env:"prd"};class v{constructor(t,e={}){if(null==t)throw"Expecting array of tools as input to Aioli constructor.";return Array.isArray(t)||(t=[t]),e=Object.assign({},M,e),t=t.map(this._parseTool),"stg"===e.env&&(e.urlCDN=e.urlCDNStg),this.tools=t,this.config=e,null!=this.config.callback&&(this.callback=this.config.callback),delete this.config.callback,this.init()}async init(){const t=new E;this.callback&&(t.onmessage=t=>{"biowasm"===t.data.type&&this.callback(t.data.value)});const e=d(t);return e.tools=this.tools,e.config=this.config,await e.init(),e}_parseTool(t){if("string"!=typeof t)return t;const e=t.split("/");if(2!=e.length&&3!=e.length)throw"Expecting '<tool>/<version>' or '<tool>/<program>/<version>'";return{tool:e[0],program:3==e.length?e[1]:e[0],version:e[e.length-1]}}}var N=s(850);class _{static getAvailableScales(){return Object.entries(this.scales).map((([t,e])=>t))}static getScale(t){return(0,N.hu)(!(void 0===this.scales[t]),`Scale '${t}' was not found.`),this.scales[t]}}_.scales={WimleyWhite:{"-":0,A:.17,C:-.24,D:-.07,E:-.01,F:-1.13,G:.01,H:.17,I:-.31,K:.99,L:-.56,M:-.23,N:.42,P:.45,Q:.58,R:.81,S:.13,T:.14,V:.07,W:-1.85,Y:-.94},categorial:{"-":0,A:1,C:2,D:3,E:4,F:5,G:6,H:7,I:8,K:9,L:10,M:11,N:12,P:13,Q:14,R:15,S:16,T:17,V:18,W:19,Y:20}};class L{constructor(t="categorial"){this.aa2num=_.getScale(t),this.num2aa={},Object.entries(this.aa2num).forEach((([t,e])=>this.num2aa[e]=t))}static _truncateSequence(t){let e=0,s=t.length;const n=["NH2","COOH"];if(t.startsWith(n[0])){const s=n[0].length;(0,N.hu)("-"==t[s],`Wrong sequence format: ${n[0]} without following '-' in '${t}'.`),e=s}if(t.endsWith(n[1])){const e=n[1].length+1;(0,N.hu)("-"==t[s-e],`Wrong sequence format: ${n[1]} without '-' precending in '${t}'.`),s-=e}return t.substring(e,s)}static _dropDefises(t){return t.replace(/(-)([^-]+)/g,"$2")}static clean(t){return L._dropDefises(L._truncateSequence(t))}encode(t){const e=t.length,s=new Array(e).fill(0);for(let n=0;n<e;++n){const e=t[n];(0,N.hu)(e in this.aa2num,`Unknown char '${e}' found in sequence '${t}'`),s[n]=this.encodeLettter(e)}return s}encodeLettter(t){return this.aa2num[t]}decode(t){let e="";for(let s=0;s<t.length;++s){const n=t[s];(0,N.hu)(n in this.num2aa,`Unknown code '${n}' found in vector '${t}'`),e+=this.num2aa[n]}return e}}var P=s(3553);const I="input.fa",x="result.fasta";function R(t){return t.reduce(((t,e,s)=>t+`>sample${s+1}\n${e}\n`),"")}async function G(t,e=!1,s="",i=null,o,a,l){let c=t.toList();e&&(c=c.map((t=>L.clean(t).replace(/\-/g,""))));const h=t.length;i??(i=n.Column.string("Clusters",h).init("0")),i.type!=n.COLUMN_TYPE.STRING&&(i=i.convertTo(n.TYPE.STRING)),i.compact();const u=i.categories,m=i.getRawData(),d=new Array(u.length),g=new Array(u.length);for(let t=0;t<h;++t){const e=m[t];(d[e]??(d[e]=[])).push(c[t]),(g[e]??(g[e]=[])).push(t)}const p=await new v(["base/1.0.0",{tool:"kalign",version:P.WY,reinit:!0}]),f=n.Column.string(s,h);for(let t=0;t<u.length;++t){const e=R(d[t]);await p.fs.writeFile(I,e);const s=`${void 0!==o?` --gpo ${o}`:""}${void 0!==a?` --gpe ${a}`:""}${void 0!==l?` --tgpe ${l}`:""}`,n=await p.exec(`kalign ${I} -f fasta -o ${x}${s}`);console.warn(n);const i=await p.cat(x);if(!i)throw new Error("kalign output no result");const c=new r.i(i).sequencesArray,h=g[t];for(let t=0;t<c.length;++t)f.set(h[t],c[t])}const y=t.getTag(n.TAGS.UNITS),w=t.getTag("alphabet");return f.setTag(n.TAGS.UNITS,y),f.setTag("aligned","SEQ.MSA"),f.setTag("alphabet",w),f.semType=n.SEMTYPE.MACROMOLECULE,f}},8341:(t,e,s)=>{"use strict";s.d(e,{J:()=>a,f:()=>c});var n=s(4469),r=s(976),i=s(8447),o=s(3553);const a=["mafft --auto","mafft","linsi","ginsi","einsi","fftns","fftnsi","nwns","nwnsi"],l=["AlignedSeq","AlignedSubpeptide","HELM","ID","PolymerID"];async function c(t,e,s="ginsi",a=1.53,c=0,u=null){const m=await n.dapi.docker.dockerContainers.filter("bio").first();if("started"!==m.status&&"checking"!==m.status)return n.log.warning("PepSeA container has not started yet"),null;const d=t.length;u??(u=r.Column.int("Clusters",d).init(0)),u.type!=r.COLUMN_TYPE.STRING&&(u=u.convertTo(r.TYPE.STRING));const g=u.categories,p=new Array(g.length);for(let e=0;e<d;++e){const s=u.get(e);if(""===s)continue;const n=g.indexOf(s),r=t.get(e);r&&(p[n]??(p[n]=[])).push({ID:e.toString(),HELM:r})}const f=new Array(d);for(const t of p){const e=(await h(m.id,t,s,a,c)).Alignment;for(const t of e)f[parseInt(t.ID)]=Object.entries(t).filter((t=>!l.includes(t[0]))).map((t=>"-"!==t[1]?t[1]:"")).join(o.rs.SEPARATOR)}const y=r.Column.fromStrings(e,f);return y.setTag(r.TAGS.UNITS,i.r2.SEPARATOR),y.setTag("separator",o.rs.SEPARATOR),y.setTag("aligned","SEQ.MSA"),y.setTag("alphabet","UN"),y.setTag(".alphabetIsMultichar","true"),y.semType=r.SEMTYPE.MACROMOLECULE,y}async function h(t,e,s,r,i){const o={method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(e)},a=`/align?method=${s}&gap_open=${r}&gap_extend=${i}`,l=await n.dapi.docker.dockerContainers.request(t,a,o);return JSON.parse(l??"{}")}},9943:(t,e,s)=>{"use strict";s.d(e,{i$:()=>a,sK:()=>l}),s(976),s(3870),s(4469);var n=s(6414),r=s.n(n),i=s(8447);s(499);const o=60;function a(t,e,s=o,n="\n"){const r=i.kB,a=[];for(let i=0;i<e.length;i++){const o=t.map((t=>t.get(i).toString())).join("|"),c=l(e.get(i),r,s);a.push(`>${o}${n}`);for(const t of c)a.push(`${t}${n}`)}return"".concat(...a)}function l(t,e,s=o){const n=e(t);let i=0;const a=n.length,l=[];for(;i<a;){const t=r()(n).slice(i,i+s).toArray(),e=t.map((t=>t.length>1?`[${t}]`:t)).join("");l.push(e),i+=t.length}return l}},9416:(t,e,s)=>{"use strict";s.d(e,{n:()=>c});var n=s(4469),r=s(976),i=s(1061),o=s(2568),a=s(8457),l=s(3553);async function c(t,e){if(await(0,i.gw)(10),!(0,o.n)(e,"Sequence space"))return t;const s=(0,a.O)(e);s.name="splitToMonomers";const c=e.dataFrame;for(const t of s.columns)t.semType=l.Of.MONOMER,t.setTag("alphabet",e.getTag("alphabet"));const h=/(\d+)(?: \((\d+)\))?/,u=t=>{h.lastIndex=0;const e=t.match(h);return e?`${e[1]} (${parseInt(e[2]??0)+1})`:t};for(let t=0;t<s.columns.length;t++){const n=s.columns.byIndex(t);n.semType=l.Of.MONOMER,n.setTag("alphabet",e.getTag("alphabet"));const r=100;let i=0;for(;c.columns.byName(n.name)&&i<r;)n.name=u(n.name),i++;c.columns.add(n)}await n.data.detectSemanticTypes(c);for(let t=0;t<s.columns.length;t++){const e=s.columns.byIndex(t);e.setTag(r.TAGS.CELL_RENDERER,"Monomer"),e.setTag(".use-as-filter","false")}return c}},4293:(t,e,s)=>{"use strict";function n(t,e){t.innerHTML="",t.append(e)}s.d(e,{Y:()=>n}),s(4469),s(976)},8415:(t,e,s)=>{"use strict";s.d(e,{bo:()=>g,CK:()=>b,yW:()=>w,eZ:()=>S});var n=s(4469),r=s(3870),i=s(976),o=s(6414),a=s.n(o),l=s(701),c=s(499),h=s(8447),u=s(9298);function m(t){var e;return"string"==typeof t||t instanceof String?t:("object"==typeof t||t instanceof Object)&&"$thrownJsError"in t?m(t.$thrownJsError):t instanceof Error?null!==(e=t.stack)&&void 0!==e?e:t.message:t.toString()}var d,g,p=s(7958),f=s(8770),y=s(2991);HTMLCanvasElement.prototype.getCursorPosition=function(t,e){const s=this.getBoundingClientRect();return new i.Point((t.clientX-s.left)*e,(t.clientY-s.top)*e)},i.Rect.prototype.contains=function(t,e){return this.left<=t&&t<=this.right&&this.top<=e&&e<=this.bottom};class w{constructor(t=0,e){this.valueList=null,this.valueIdx=0,this.value=this.rowCount=t,this.bounds=e}push(t){this.valueList||(this.valueList=new Array(this.rowCount),this.valueIdx=0),this.valueList[this.valueIdx]=t,++this.valueIdx}aggregate(t){this.value=t(this.valueList)??0,this.valueList=null}}class b{get label(){return this._label?this._label:this.name}constructor(t,e,s,n){this.sumRowCount=0,this.pos=t,this.name=e,this._freqs=s??{},n?.sumRowCount&&(this.sumRowCount=n.sumRowCount),n?.sumValueForHeight&&(this.sumPlotValue=n.sumValueForHeight),n?.label&&(this._label=n.label)}getMonomers(){return Object.keys(this._freqs)}hasMonomer(t){return t in this._freqs}getFreq(t){let e=this._freqs[t];return e||(e=this._freqs[t]=new w),e}aggregate(t){const e=function(t){return e=>{const s=function(t){let e;const s="agg";return e=t instanceof Float32Array?i.Column.fromFloat32Array(s,t):t instanceof Int32Array?i.Column.fromInt32Array(s,t):i.Column.fromList(i.COLUMN_TYPE.FLOAT,s,t),e}(e);return s.aggregate(t)}}(t);for(const[t,s]of Object.entries(this._freqs))s.aggregate(e)}getMinValue(){return Math.min(...Object.values(this._freqs).map((t=>t.value)))}calcPlotValue(t){for(const e of Object.values(this._freqs))e.plotValue=e.value-t}calcHeights(t){this.sumPlotValue=0;for(const t of Object.values(this._freqs))this.sumPlotValue+=t.plotValue;if(this.sumPlotValueForHeight=0,t===u.ES.Entropy){const t=Object.keys(this._freqs).length,e=.01*this.sumPlotValue,s=e/t;for(const t of Object.values(this._freqs)){const n=(t.plotValue+s)/(this.sumPlotValue+e);this.sumPlotValueForHeight+=-n*Math.log2(n)}}else if(t===u.ES.full)for(const[t,e]of Object.entries(this._freqs)){const t=e.plotValue/this.sumPlotValue;this.sumPlotValueForHeight+=t}}calcScreen(t,e,s,n,r,o,a,l,c,h){const m=r===u.ES.Entropy?n*(o-this.sumPlotValueForHeight)/o:n;let d=h*c+(n-m-1);const g=Object.entries(this._freqs).sort(((e,s)=>t(e[0])||t(s[0])?t(e[0])&&t(s[0])?0:t(e[0])?-1:1:s[1].value-e[1].value));for(const[t,n]of g){const t=m*n.plotValue/this.sumPlotValue;n.bounds=new i.Rect((e-s)*c*a,d,l*c,t),d+=t}}render(t,e,s,n,r,i){for(const[o,a]of Object.entries(this._freqs))if(!e(o)){const e=(0,h.GU)(o,5),l=a.bounds,c=l.left;t.resetTransform(),t.strokeStyle="lightgray",t.lineWidth=1,t.rect(c,l.top,l.width,l.height),t.fillStyle=i.get(o)??i.get("other"),t.textAlign="left",t.font=s;const u=t.measureText(e);t.setTransform(l.width/u.width,0,0,l.height/r,c,l.top),t.fillText(e,0,-n)}}getMonomerAt(t,e){const s=Object.entries(this._freqs).find((([s,n])=>n.bounds.contains(t,e)));return s?s[0]:void 0}buildCompositionTable(t){return(0,f._)(t,Object.assign({},...Object.entries(this._freqs).map((([t,e])=>({[t]:e.rowCount})))))}}!function(t){t.STYLE="Style",t.BEHAVIOR="Behavior",t.LAYOUT="Layout",t.DATA="Data"}(d||(d={})),function(t){t.sequenceColumnName="sequenceColumnName",t.valueAggrType="valueAggrType",t.valueColumnName="valueColumnName",t.startPositionName="startPositionName",t.endPositionName="endPositionName",t.skipEmptySequences="skipEmptySequences",t.skipEmptyPositions="skipEmptyPositions",t.shrinkEmptyTail="shrinkEmptyTail",t.backgroundColor="backgroundColor",t.positionHeight="positionHeight",t.positionWidth="positionWidth",t.verticalAlignment="verticalAlignment",t.horizontalAlignment="horizontalAlignment",t.fixWidth="fixWidth",t.fitArea="fitArea",t.minHeight="minHeight",t.maxHeight="maxHeight",t.showPositionLabels="showPositionLabels",t.positionMarginState="positionMarginState",t.positionMargin="positionMargin",t.filterSource="filterSource"}(g||(g={}));const T=u.vS;var C;!function(t){t[t.None=0]="None",t[t.Render=1]="Render",t[t.Layout=1]="Layout",t[t.Freqs=2]="Freqs"}(C||(C={}));class A extends i.JsViewer{get positionWidthWithMargin(){return this._positionWidthWithMargin}get Length(){return this.skipEmptyPositions?this.positions.length:this.startPosition<=this.endPosition?this.endPosition-this.startPosition+1:0}get positionMarginValue(){return this.positionMarginState===u.dE.AUTO&&!0===this.unitsHandler.getAlphabetIsMultichar()||this.positionMarginState===u.dE.ON?this.positionMargin:0}constructor(){super(),this.viewed=!1,this.viewerId=-1,this.initialized=!1,this.palette=null,this.seqCol=null,this.positions=[],this.visibleSlider=!1,this.allowResize=!0,this.turnOfResizeForOneSetValue=!1,this.backgroundColor=4294967295,this.positionMargin=0,this.positionNames=[],this.positionLabels=void 0,this.startPosition=-1,this.endPosition=-1,this.error=null,this.viewPromise=Promise.resolve(),this.setDataInProgress=!1,this.viewSubs=[],this._onSizeChanged=new l.Subject,this._onFreqsCalculated=new l.Subject,this._onLayoutCalculated=new l.Subject,this.requestedRenderLevel=C.Freqs,this.renderRequest=new l.Subject,this.viewerId=A.viewerCount,A.viewerCount+=1,this.textBaseline="top",this.unitsHandler=null,this.sequenceColumnName=this.string(g.sequenceColumnName,T.sequenceColumnName,{category:d.DATA});const t=[i.AGG.KEY,i.AGG.PIVOT,i.AGG.MISSING_VALUE_COUNT,i.AGG.SKEW,i.AGG.KURT,i.AGG.SELECTED_ROWS_COUNT],e=Object.values(i.AGG).filter((e=>!t.includes(e)));this.valueAggrType=this.string(g.valueAggrType,T.valueAggrType,{category:d.DATA,choices:e}),this.valueColumnName=this.string(g.valueColumnName,T.valueColumnName,{category:d.DATA}),this.startPositionName=this.string(g.startPositionName,T.startPositionName,{category:d.DATA}),this.endPositionName=this.string(g.endPositionName,T.endPositionName,{category:d.DATA}),this.skipEmptySequences=this.bool(g.skipEmptySequences,T.skipEmptySequences,{category:d.DATA}),this.skipEmptyPositions=this.bool(g.skipEmptyPositions,T.skipEmptyPositions,{category:d.DATA}),this.shrinkEmptyTail=this.bool(g.shrinkEmptyTail,T.shrinkEmptyTail,{category:d.DATA}),this.backgroundColor=this.int(g.backgroundColor,T.backgroundColor,{category:d.STYLE}),this.positionHeight=this.string(g.positionHeight,T.positionHeight,{category:d.STYLE,choices:Object.values(u.ES)}),this._positionWidth=this.positionWidth=this.float(g.positionWidth,T.positionWidth,{category:d.STYLE}),this.verticalAlignment=this.string(g.verticalAlignment,T.verticalAlignment,{category:d.LAYOUT,choices:Object.values(u.vw)}),this.horizontalAlignment=this.string(g.horizontalAlignment,T.horizontalAlignment,{category:d.LAYOUT,choices:Object.values(u.iD)}),this.fixWidth=this.bool(g.fixWidth,T.fixWidth,{category:d.LAYOUT,userEditable:!1}),this.fitArea=this.bool(g.fitArea,T.fitArea,{category:d.LAYOUT}),this.minHeight=this.float(g.minHeight,T.minHeight,{category:d.LAYOUT}),this.maxHeight=this.float(g.maxHeight,T.maxHeight,{category:d.LAYOUT}),this.showPositionLabels=this.bool(g.showPositionLabels,T.showPositionLabels,{category:d.LAYOUT}),this.positionMarginState=this.string(g.positionMarginState,T.positionMarginState,{category:d.LAYOUT,choices:Object.values(u.dE)});let s=0;"auto"===this.positionMarginState&&(s=4),this.positionMargin=this.int(g.positionMargin,s,{category:d.LAYOUT,min:0,max:16}),this.filterSource=this.string(g.filterSource,T.filterSource,{category:d.BEHAVIOR,choices:Object.values(u.Ct)}),this.slider=r.rangeSlider(0,100,0,20,!1,{style:"barbell"}),this.canvas=r.canvas(),this.canvas.classList.value="bio-wl-canvas",this.canvas.style.width="100%"}setData(){y._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.setData(), in`),this.viewPromise=this.viewPromise.then((async()=>{if(!this.setDataInProgress){this.setDataInProgress=!0;try{this.viewed&&(this.renderRequestSub.unsubscribe(),await this.destroyView(),this.viewed=!1),this.updateSeqCol(),this.updateEditors(),this.viewed||(await this.buildView(),this.viewed=!0)}catch(t){const[e,s]=(0,p.yf)(t);n.shell.error(e),y._package.logger.error(e,void 0,s)}finally{this.setDataInProgress=!1}}}))}async destroyView(){for(const t of this.viewSubs)t.unsubscribe();this.viewSubs=[];const t=this.dataFrame?"data":"null";y._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.destroyView( dataFrame = ${t} ) start`),this.host.remove(),this.msgHost=void 0,this.host=void 0,y._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.destroyView() end`)}async buildView(){const t=this.dataFrame?"data":"null";y._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.buildView( dataFrame = ${t} ) start`),window.devicePixelRatio,this.viewSubs.push(i.debounce(this.renderRequest).subscribe(this.renderRequestOnDebounce.bind(this))),this.helpUrl="/help/visualize/viewers/web-logo.md",this.msgHost=r.div("No message",{classes:"bio-wl-msg"}),this.msgHost.style.display="none",this.canvas=r.canvas(),this.canvas.style.width="100%",this.slider.root.style.position="absolute",this.slider.root.style.zIndex="999",this.slider.root.style.display="none",this.slider.root.style.height="0.7em",this.visibleSlider=!1,this.host=r.div([this.msgHost,this.canvas],{classes:"bio-wl-host",style:{display:"flex",flexDirection:"row",flexWrap:"wrap"}}),this.root.append(this.host),this.root.append(this.slider.root),this.error&&(this.msgHost.innerText=this.error.message,r.tooltip.bind(this.msgHost,this.error.stack),this.msgHost.style.setProperty("display",null)),this.dataFrame&&(this.viewSubs.push(this.dataFrame.filter.onChanged.subscribe(this.dataFrameFilterOnChanged.bind(this))),this.viewSubs.push(this.dataFrame.selection.onChanged.subscribe(this.dataFrameSelectionOnChanged.bind(this)))),this.viewSubs.push(r.onSizeChanged(this.root).subscribe(this.rootOnSizeChanged.bind(this))),this.viewSubs.push(this.slider.onValuesChanged.subscribe(this.sliderOnValuesChanged.bind(this))),this.viewSubs.push((0,l.fromEvent)(this.canvas,"mousemove").subscribe(this.canvasOnMouseMove.bind(this))),this.viewSubs.push((0,l.fromEvent)(this.canvas,"mousedown").subscribe(this.canvasOnMouseDown.bind(this))),this.viewSubs.push((0,l.fromEvent)(this.canvas,"wheel").subscribe(this.canvasOnWheel.bind(this))),await this.render(C.Freqs,"buildView"),y._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.buildView() end`)}rootOnSizeChanged(){y._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.rootOnSizeChanged(), start `),this.render(C.Layout,"rootOnSizeChanged")}updateEditors(){this.props.getProperty(g.valueColumnName).choices=a()(this.dataFrame.columns.numerical).map((t=>t.name)).toArray()}updateSeqCol(){if(this.dataFrame&&(this.seqCol=this.sequenceColumnName?this.dataFrame.col(this.sequenceColumnName):null,null==this.seqCol&&(this.seqCol=(0,h.up)(this.dataFrame),this.sequenceColumnName=this.seqCol?this.seqCol.name:null),this.seqCol)){try{this.unitsHandler=c.Cn.getOrCreate(this.seqCol),this.palette=(0,h.dQ)(this.seqCol),this.updatePositions(),this.error=null}catch(t){throw this.seqCol=null,this.error=t instanceof Error?t:new Error(t.toString()),t}this.seqCol||(this.unitsHandler=null,this.positionNames=[],this.positionLabels=[],this.startPosition=-1,this.endPosition=-1,this.palette=null)}}updatePositions(){if(!this.seqCol)return;const t=this.getFilter(),e=0===t.trueCount?this.unitsHandler.maxLength:a().enumerate(this.unitsHandler.splitted).map((([e,s])=>t.get(s)&&e?e.length:0)).reduce(((t,e)=>Math.max(t,e)),0),s=this.seqCol.getTag(".positionNames"),n=this.seqCol.getTag(".positionLabels");this.positionNames=s?s.split(h.CI).map((t=>t.trim())):[...Array(e).keys()].map((t=>`${t+1}`)),this.positionLabels=n?n.split(h.CI).map((t=>t.trim())):void 0,this.startPosition=this.startPositionName&&this.positionNames&&this.positionNames.includes(this.startPositionName)?this.positionNames.indexOf(this.startPositionName):0,this.endPosition=this.endPositionName&&this.positionNames&&this.positionNames.includes(this.endPositionName)?this.positionNames.indexOf(this.endPositionName):e-1,this.render(C.Freqs,"updatePositions")}getFilter(){let t;switch(this.filterSource){case u.Ct.Filtered:t=this.dataFrame.filter;break;case u.Ct.Selected:t=0===this.dataFrame.selection.trueCount?this.dataFrame.filter:this.dataFrame.selection}return t}setSliderVisibility(t){t?(this.slider.root.style.display="inherit",this.visibleSlider=!0):(this.slider.root.style.display="none",this.visibleSlider=!1)}calcLayout(t){this.host&&this.canvas&&this.slider&&(this.host.classList.remove("bio-wl-fixWidth","bio-wl-fitArea"),this.canvas.classList.remove("bio-wl-fixWidth","bio-wl-fitArea"),this._positionWidth=this.positionWidth,this._positionMargin=this.positionMargin,this._positionWidthWithMargin=this._positionWidth+this.positionMarginValue,this.fixWidth?this.calcLayoutFixWidth(t):this.fitArea?this.calcLayoutFitArea(t):this.calcLayoutNoFitArea(t),this.slider.root.style.width=`${this.host.clientWidth}px`)}calcLayoutFixWidth(t){if(!this.host||!this.canvas||!this.slider)return;this.host.classList.add("bio-wl-fixWidth"),this.canvas.classList.add("bio-wl-fitArea");const e=this._positionWidthWithMargin*this.Length,s=Math.min(Math.max(this.minHeight,this.root.clientHeight),this.maxHeight);this.host.style.justifyContent=u.iD.LEFT,this.host.style.removeProperty("margin-left"),this.host.style.removeProperty("margin-top"),this.host.style.width=this.canvas.style.width=`${e}px`,this.host.style.height=this.canvas.style.height=`${s}px`,this.host.style.left=this.canvas.style.left="0",this.host.style.top=this.canvas.style.top="0",this.host.style.setProperty("overflow","hidden","important"),this.slider.root.style.display="none",this.slider.setValues(0,Math.max(0,this.Length-1),0,Math.max(0,this.Length-1)),this.canvas.width=e*t,this.canvas.height=s*t}calcLayoutNoFitArea(t){if(!this.host||!this.canvas||!this.slider)return;const e=this._positionWidthWithMargin*this.Length,s=Math.min(Math.max(this.minHeight,this.root.clientHeight),this.maxHeight),n=Math.min(this.root.clientWidth,e);this.canvas.style.width=`${n}px`,this.canvas.style.height=`${s}px`,this.host.style.width=`${n}px`,this.host.style.height=`${this.root.clientHeight}px`,this.host.style.justifyContent=this.horizontalAlignment,this.host.style.alignContent=this.verticalAlignment===u.vw.TOP?"start":this.verticalAlignment===u.vw.MIDDLE?"center":this.verticalAlignment===u.vw.BOTTOM?"end":"inherit",this.root.clientHeight<this.minHeight&&(this.host.style.alignContent="start",this.host.style.width=`${n+6}px`),this.host.style.width=`${this.host}px`;const r=e>n;if(this.setSliderVisibility(r),r){this.slider.root.style.removeProperty("display"),this.host.style.justifyContent="left",this.host.style.height=this.root.clientHeight-this.slider.root.offsetHeight+"px",this.slider.root.style.top=`${this.host.offsetHeight}px`;let t=Math.min(Math.max(0,this.slider.min),this.Length-.001),e=Math.min(Math.max(0,this.slider.max),this.Length-.001);const s=this.root.clientWidth/this._positionWidthWithMargin;e=Math.min(Math.max(t,0)+s,this.Length-.001),t=Math.max(0,Math.min(e,this.Length-.001)-s),this.slider.setValues(0,Math.max(this.Length-.001),t,e)}else this.slider.setValues(0,Math.max(0,this.Length-.001),0,Math.max(0,this.Length-.001));this.canvas.width=n*t,this.canvas.height=s*t}calcLayoutFitArea(t){if(!this.host||!this.canvas||!this.slider)return;const e=this._positionWidth*this.Length,s=Math.min(Math.max(this.minHeight,this.root.clientHeight),this.maxHeight),n=e>0?(this.root.clientWidth-this.positionMarginValue*this.Length)/e:0,r=this.root.clientHeight/s,i=Math.max(1,Math.min(n,r));this._positionWidth=this.positionWidth*i,this._positionWidthWithMargin=this._positionWidth+this.positionMarginValue;const o=(this._positionWidth+this.positionMarginValue)*this.Length,a=i*s,l=Math.min(this.root.clientWidth,o);this.canvas.style.width=`${l}px`,this.canvas.style.height=`${a}px`,this.host.style.width=`${l}px`,this.host.style.height=`${this.root.clientHeight}px`,this.host.style.justifyContent=this.horizontalAlignment,this.host.style.alignContent=this.verticalAlignment===u.vw.TOP?"start":this.verticalAlignment===u.vw.MIDDLE?"center":this.verticalAlignment===u.vw.BOTTOM?"end":"inherit",this.root.clientHeight<this.minHeight&&(this.host.style.alignContent="start",this.host.style.width=`${l+6}px`),this.host.style.width=`${this.host}px`;const c=o>l;if(this.setSliderVisibility(c),c){this.slider.root.style.removeProperty("display"),this.host.style.justifyContent="left",this.host.style.height=this.root.clientHeight-this.slider.root.offsetHeight+"px",this.slider.root.style.top=`${this.host.offsetHeight}px`;let t=Math.min(Math.max(0,this.slider.min),this.Length-.001),e=Math.min(Math.max(0,this.slider.max),this.Length-.001);const s=this.root.clientWidth/this._positionWidthWithMargin;e=Math.min(Math.max(t,0)+s,this.Length-.001),t=Math.max(0,Math.min(e,this.Length-.001)-s),this.slider.setValues(0,Math.max(0,this.Length-.001),t,e)}else this.slider.setValues(0,Math.max(0,this.Length-.001),0,Math.max(0,this.Length-.001));this.canvas.width=l*t,this.canvas.height=a*t}onPropertyChanged(t){switch(super.onPropertyChanged(t),t.name){case g.sequenceColumnName:this.updateSeqCol();break;case g.sequenceColumnName:case g.startPositionName:case g.endPositionName:case g.filterSource:case g.shrinkEmptyTail:case g.skipEmptyPositions:case g.positionHeight:this.updatePositions();break;case g.valueColumnName:case g.valueAggrType:this.render(C.Freqs,`onPropertyChanged(${t.name})`);break;case g.minHeight:case g.maxHeight:case g.positionWidth:case g.showPositionLabels:case g.fixWidth:case g.fitArea:case g.horizontalAlignment:case g.verticalAlignment:case g.positionMargin:case g.positionMarginState:this.render(C.Layout,`onPropertyChanged(${t.name})`);break;case g.backgroundColor:this.render(C.Render,`onPropertyChanged(${t.name})`)}}onTableAttached(){y._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.onTableAttached(), `),super.onTableAttached(),this.setData()}async detach(){y._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.detach(), `);const t=super.detach.bind(this);this.viewPromise=this.viewPromise.then((async()=>{this.setDataInProgress||(this.viewed&&(await this.destroyView(),this.viewed=!1),t())})).catch((t=>{const[e,s]=(0,p.yf)(t);y._package.logger.error(e,void 0,s)}))}get onSizeChanged(){return this._onSizeChanged}get onFreqsCalculated(){return this._onFreqsCalculated}get onLayoutCalculated(){return this._onLayoutCalculated}getMonomer(t,e){const s=t.x,n=Math.floor(t.x/(this._positionWidthWithMargin*e)+Math.floor(this.slider.min)),r=this.positions[n];if(!r)return[null,null,null];const i=r.getMonomerAt(s,t.y);return void 0===i?[r,null,null]:[r,i,r.getFreq(i)]}_nullSequence(t="X"){return this.skipEmptySequences?"":new Array(this.Length).fill(t).join("")}_removeEmptyPositions(){this.skipEmptyPositions&&(this.positions=a()(this.positions).filter((t=>{const e=this.unitsHandler.defaultGapSymbol;return!t.hasMonomer(e)||t.getFreq(e).rowCount!==t.sumRowCount})).toArray())}render(t,e){y._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.render( recalcLevelVal=${t}, reason='${e}' )`),this.requestedRenderLevel=Math.max(this.requestedRenderLevel,t),this.renderRequest.next(this.requestedRenderLevel)}async renderInt(t){if(y._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.render.renderInt( renderLevel=${t} ), start `),this.msgHost&&(this.seqCol&&!this.palette?(this.msgHost.innerText=`Unknown palette (column semType: '${this.seqCol.semType}').`,this.msgHost.style.display=""):this.msgHost.style.display="none"),!this.seqCol||!this.dataFrame||!this.palette||null==this.host||null==this.slider)return;const e=window.devicePixelRatio,s=this.showPositionLabels?12:0;if(t>=C.Freqs&&(()=>{if(y._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.render.calculateFreqsInt(), start `),!this.host||!this.seqCol||!this.dataFrame)return;const t=this.startPosition<=this.endPosition?this.endPosition-this.startPosition+1:0;this.unitsHandler=c.Cn.getOrCreate(this.seqCol);const e=this.startPosition<=this.endPosition?this.endPosition-this.startPosition+1:0;this.positions=new Array(e);for(let e=0;e<t;e++){const t=this.positionNames[this.startPosition+e],s=this.positionLabels?this.positionLabels[this.startPosition+e]:void 0;this.positions[e]=new b(this.startPosition+e,t,{},{label:s})}const s=this.getFilter(),n=this.dataFrame.rowCount,r=this.unitsHandler.splitted;for(let e=0;e<t;++e){for(let t=0;t<n;++t)if(s.get(t)){const s=r[t][this.startPosition+e]||this.unitsHandler.defaultGapSymbol,n=this.positions[e],i=n.getFreq(s);++n.sumRowCount,i.value=++i.rowCount}if(this.valueAggrType===i.AGG.TOTAL_COUNT)continue;let t=null;try{t=this.dataFrame.getCol(this.valueColumnName),t.matches("numerical")||(t=null)}catch{t=null}if(t){for(let i=0;i<n;++i)if(s.get(i)){const s=r[i][this.startPosition+e]||this.unitsHandler.defaultGapSymbol,n=t.get(i);this.positions[e].getFreq(s).push(n)}this.positions[e].aggregate(this.valueAggrType)}}const o=this.valueAggrType===i.AGG.TOTAL_COUNT?0:Math.min(0,Math.min(...this.positions.map((t=>t.getMinValue()))));for(let e=0;e<t;++e)this.positions[e].calcPlotValue(o),this.positions[e].calcHeights(this.positionHeight);this._removeEmptyPositions(),this._onFreqsCalculated.next()})(),this.calcLayout(e),-1===this.startPosition)return;const r=Math.max(Math.floor(this.slider.min),0),o=Math.min(this.positions.length-1,Math.floor(this.slider.max));t>=C.Layout&&((t,e,s,r)=>{y._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.render.calculateLayoutInt(), start `);const o=this.canvas.height-r*s;let l;if(this.valueAggrType===i.AGG.TOTAL_COUNT){const t=this.getAlphabetSize();this.positionHeight==u.ES.Entropy&&null==t&&n.shell.error("WebLogo: alphabet is undefined."),l=Math.log2(t)}else l=Math.max(...a().count(t).takeWhile((t=>t<=e)).map((t=>this.positions[t].sumPlotValueForHeight)));for(let n=t;n<=e;++n)n in this.positions?this.positions[n].calcScreen((t=>this.unitsHandler.isGap(t)),n,this.slider.min,o,this.positionHeight,l,this._positionWidthWithMargin,this._positionWidth,s,r):y._package.logger.warning(`Bio: WebLogoViewer<${this.viewerId}>.render.calculateLayoutInt() this.positions.length = ${this.positions.length}, jPos = ${n}`);y._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.render.calculateLayoutInt(), end `),this._onLayoutCalculated.next()})(r,o,window.devicePixelRatio,s);const l=this.canvas.getContext("2d");if(l){l.save();try{this.Length,l.resetTransform(),l.fillStyle=function(t){const e=i.Color.a(t);return`#${(16777215&t).toString(16).padStart(6,"0")}`+e.toString(16).padStart(2,"0")}(this.backgroundColor),l.fillRect(0,0,this.canvas.width,this.canvas.height),l.textBaseline=this.textBaseline;const t=10*e;l.resetTransform(),l.fillStyle="black",l.textAlign="center",l.font=`${t.toFixed(1)}px Roboto, Roboto Local, sans-serif`,s>0&&this.positions.length>0&&function(t,e,s,n,r,i,o,a){t.save();try{t.textAlign="center";let l=null,c=null;for(let e=Math.floor(o);e<=Math.floor(a);e++){const s=i[e],n=t.measureText(s.name),r=n.actualBoundingBoxDescent-n.actualBoundingBoxAscent;l=null===l?n.width:Math.max(l,n.width),c=null===c?r:Math.max(c,r)}const h=l<n*e-2?1:(n*e-2)/l;for(let l=Math.floor(o);l<=Math.floor(a);l++){const a=i[l],u=(l-o)*s*e+n*e/2,m=(r*e-c)/2;t.setTransform(h,0,0,1,u,m),t.measureText(a.label),t.fillText(a.label,0,0)}}finally{t.restore()}}(l,e,this._positionWidthWithMargin,this._positionWidth,s,this.positions,this.slider.min,this.slider.max);const n="16px Roboto, Roboto Local, sans-serif",a=.25,c=12.2;for(let t=r;t<=o;t++)this.positions[t].render(l,(t=>this.unitsHandler.isGap(t)),n,a,c,this.palette)}finally{l.restore()}y._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.render.renderInt( recalcLevel=${t} ), end`)}}renderRequestOnDebounce(t){this.requestedRenderLevel=C.None,this.renderInt(t).catch((t=>{const[e,s]=(0,p.yf)(t);y._package.logger.error(e,void 0,s)}))}getAlphabetSize(){return this.unitsHandler?.getAlphabetSize()??0}sliderOnValuesChanged(t){try{const t={minRange:this.slider.minRange,min:this.slider.min,max:this.slider.max,maxRange:this.slider.maxRange};y._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.sliderOnValuesChanged( ${JSON.stringify(t)} ), start`),this.render(C.Layout,"sliderOnValuesChanged")}catch(t){const e=m(t);y._package.logger.error(`Bio: WebLogoViewer<${this.viewerId}>.sliderOnValuesChanged() error:\n`+e)}}dataFrameFilterOnChanged(t){y._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.dataFrameFilterChanged()`);try{this.updatePositions(),this.filterSource===u.Ct.Filtered&&this.render(C.Freqs,"dataFrameFilterOnChanged")}catch(t){const e=m(t);y._package.logger.error(`Bio: WebLogoViewer<${this.viewerId}>.dataFrameFilterOnChanged() error:\n`+e)}}dataFrameSelectionOnChanged(t){y._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.dataFrameSelectionOnChanged()`);try{this.filterSource===u.Ct.Selected&&this.render(C.Freqs,"dataFrameSelectionOnChanged")}catch(t){const e=m(t);y._package.logger.error(`Bio: WebLogoViewer<${this.viewerId}>.dataFrameSelectionOnChanged() error:\n`+e)}}canvasOnMouseMove(t){const e=window.devicePixelRatio;try{const s=t,n=this.canvas.getCursorPosition(s,e),[o,a]=this.getMonomer(n,e),l=this.showPositionLabels?12*e:0;if(null!==o&&null===a&&0<=n.y&&n.y<=l){const t=[r.divText(`Position ${o.label}`)];this.valueAggrType===i.AGG.TOTAL_COUNT&&t.push(o.buildCompositionTable(this.palette));const e=r.divV(t);r.tooltip.show(e,s.x+16,s.y+16)}else if(null!==o&&a&&this.dataFrame&&this.seqCol&&this.unitsHandler){const t=o.getFreq(a),e=[r.div(`${a}`),r.div(`${t.rowCount} rows`)];this.valueAggrType!==i.AGG.TOTAL_COUNT&&e.push(r.div(`${this.valueAggrType}: ${t.value.toFixed(3)}`));const n=r.divV(e);r.tooltip.show(n,s.x+16,s.y+16)}else r.tooltip.hide()}catch(t){const e=m(t);y._package.logger.error(`Bio: WebLogoViewer<${this.viewerId}>.canvasOnMouseMove() error:\n`+e)}}canvasOnMouseDown(t){try{const e=t,s=window.devicePixelRatio,[n,r]=this.getMonomer(this.canvas.getCursorPosition(e,s),s);if(null!==n&&null!==r&&this.dataFrame&&this.seqCol&&this.unitsHandler){const t=i.BitSet.create(this.dataFrame.selection.length,(t=>function(t,e,s,n,r,i){const o=e.splitted[n],a=i.pos<o.length?o[i.pos]:null;return a===r||""===a&&r===e.defaultGapSymbol}(this.dataFrame,this.unitsHandler,this.getFilter(),t,r,n)));this.dataFrame.selection.init((e=>t.get(e)))}}catch(t){const e=m(t);y._package.logger.error(`Bio: WebLogoViewer<${this.viewerId}>.canvasOnMouseDown() error:\n`+e)}}canvasOnWheel(t){const e=window.devicePixelRatio;try{if(!this.visibleSlider)return;const s=this.canvas.width/(this._positionWidthWithMargin*e),n=t.deltaY/100*Math.max(Math.floor(s/5),1);this.slider.scrollBy(this.slider.min+n)}catch(t){const e=m(t);y._package.logger.error(`Bio: WebLogoViewer<${this.viewerId}>.canvasOnWheel() error:\n`+e)}}}function S(t,e,s,n,r){let i=0,o=-1;for(;-1!=(o=s.findNext(o,!0));){const t=e.splitted[o],s=r.pos;(s<t.length?t[s]:null)===n&&i++}return i}A.residuesSet="nucleotides",A.viewerCount=0},4413:(t,e,s)=>{"use strict";s.d(e,{ST:()=>p});var n=s(3870),r=s(976),i=s(4469),o=s(6414),a=s.n(o),l=s(7983),c=s(701),h=s(4293),u=s(8447),m=s(1061);const d=rxjs.operators;var g=s(3377);class p extends r.Filter{get calculating(){return"initial"==this.loader.style.display}set calculating(t){this.loader.style.display=t?"initial":"none"}get filterSummary(){return this.bioFilter.substructure}get isFiltering(){return super.isFiltering&&""!==this.bioFilter.substructure}get isReadyToApplyFilter(){return!this.calculating&&null!=this.bitset}get _debounceTime(){if(null==this.column)return 1e3;const t=this.column.length;return t<500?0:t>1e4?1e3:Math.floor((t-500)/9500*1e3)}constructor(){super(),this.bioFilter=null,this.bitset=null,this.loader=n.loader(),this.notation=void 0,this.root=n.divV([]),this.calculating=!1}attach(t){super.attach(t),this.column=t.columns.bySemType(r.SEMTYPE.MACROMOLECULE),this.columnName??(this.columnName=this.column?.name),this.notation??(this.notation=this.column?.getTag(r.TAGS.UNITS)),this.bioFilter=this.notation===u.r2.FASTA?new y:this.notation===u.r2.SEPARATOR?new w(this.column.getTag("separator")):new b,this.root.appendChild(this.bioFilter.filterPanel),this.root.appendChild(this.loader),this.onBioFilterChangedSubs?.unsubscribe();let e=this.bioFilter.onChanged;e=e.pipe((0,d.debounceTime)(this._debounceTime)),this.onBioFilterChangedSubs=e.subscribe((async t=>await this._onInputChanged())),this.subs.push(i.events.onResetFilterRequest.subscribe((t=>{this.bioFilter?.resetFilter()})))}detach(){super.detach()}applyFilter(){this.bitset&&!this.isDetached&&this.dataFrame?.filter.and(this.bitset)}saveState(){const t=super.saveState();return t.bioSubstructure=this.bioFilter?.substructure,t}applyState(t){super.applyState(t),t.bioSubstructure&&(this.bioFilter.substructure=t.bioSubstructure);const e=this;t.bioSubstructure&&setTimeout((function(){e._onInputChanged()}),1e3)}async _onInputChanged(){if(g._package.logger.debug("Bio: BioSubstructureFilter._onInputChanged(), start"),this.isFiltering){if(a()(this.dataFrame.rows.filters).has(`${this.columnName}: ${this.filterSummary}`))return;this.calculating=!0;try{this.bitset=await(this.bioFilter?.substructureSearch(this.column)),this.calculating=!1,this.dataFrame?.rows.requestFilter()}finally{this.calculating=!1}}else this.bitset=null,this.dataFrame?.rows.requestFilter()}}class f{constructor(){this.onChanged=new c.Subject}get filterPanel(){return new HTMLElement}get substructure(){return""}set substructure(t){}async substructureSearch(t){return null}}class y extends f{constructor(){super(),this.substructureInput=n.stringInput("","",(()=>{this.onChanged.next()}),{placeholder:"Substructure"})}get filterPanel(){return this.substructureInput.root}get substructure(){return this.substructureInput.value}set substructure(t){this.substructureInput.value=t}async substructureSearch(t){return(0,l.pf)(this.substructure,t)}resetFilter(){this.substructureInput.value=""}}class w extends y{constructor(t){super(),this.colSeparator="",this.separatorInput=n.stringInput("","",(()=>{this.onChanged.next()}),{placeholder:"Separator"}),this.colSeparator=t,this.separatorInput.value=t}get filterPanel(){return n.divV([this.substructureInput.root,this.separatorInput.root])}get substructure(){return this.separatorInput.value&&this.separatorInput.value!==this.colSeparator?this.substructureInput.value.replaceAll(this.separatorInput.value,this.colSeparator):this.substructureInput.value}set substructure(t){this.substructureInput.value=t}async substructureSearch(t){return(0,l.pf)(this.substructure,t,this.colSeparator)}}class b extends f{constructor(){super(),this._filterPanel=n.div("",{style:{cursor:"pointer"}}),this.helmSubstructure="",this.init()}async init(){this.helmEditor=await i.functions.call("HELM:helmWebEditor"),await n.tools.waitForElementInDom(this._filterPanel),this.updateFilterPanel(),this._filterPanel.addEventListener("click",(t=>{const{editorDiv:e,webEditor:s}=this.helmEditor.createWebEditor(this.helmSubstructure);n.dialog({showHeader:!1,showFooter:!0}).add(e).onOK((()=>{const t=s.canvas.getHelm(!0).replace(/<\/span>/g,"").replace(/<span style='background:#bbf;'>/g,"");this.helmSubstructure=t,this.updateFilterPanel(this.substructure),setTimeout((()=>{this.onChanged.next()}),10)})).show({modal:!0,fullScreen:!0})})),n.onSizeChanged(this._filterPanel).subscribe((t=>{const e=this.helmEditor.webEditor.canvas.getHelm(!0).replace(/<\/span>/g,"").replace(/<span style='background:#bbf;'>/g,"");this.updateFilterPanel(e)}))}get filterPanel(){return this._filterPanel}get substructure(){return this.helmSubstructure}set substructure(t){this.helmEditor.editor.setHelm(t)}updateFilterPanel(t){const e=this._filterPanel.parentElement.clientWidth<100?100:this._filterPanel.parentElement.clientWidth,s=e/2;if(t)(0,h.Y)(this._filterPanel,this.helmEditor.host),this.helmEditor.editor.setHelm(t),this.helmEditor.resizeEditor(e,s);else{const t=n.divText("Click to edit","helm-substructure-filter");(0,h.Y)(this._filterPanel,t)}}async substructureSearch(t){n.setUpdateIndicator(this._filterPanel,!0),await(0,m.gw)(10);const e=await(0,l.QF)(this.substructure,t);return n.setUpdateIndicator(this._filterPanel,!1),e}resetFilter(){console.debug("Bio: HelmFilter.resetFilter()"),this.helmSubstructure="",this.updateFilterPanel(this.substructure)}}},8770:(t,e,s)=>{"use strict";s.d(e,{_:()=>w});var n=s(3870),r=(s(976),s(6414),s(8447),s(7331),s(3379)),i=s.n(r),o=s(7795),a=s.n(o),l=s(569),c=s.n(l),h=s(3565),u=s.n(h),m=s(9216),d=s.n(m),g=s(4589),p=s.n(g),f=s(5362),y={};function w(t,e){let s=0,r=null;for(const t of Object.values(e))s+=t,r=null===r?t:Math.max(r,t);const i=r/s,o=Object.assign({},...Array.from(Object.entries(e)).sort(((t,e)=>e[1]-t[1])).map((([e,r])=>{const o=r/s,a=t.get(e),l=n.div("",{classes:"macromolecule-cell-comp-analysis-bar"});l.style.width=50*o/i+"px",l.style.backgroundColor=a;const c=n.div(`${(100*o).toFixed(2)}%`);return{[e]:n.div([l,c],{classes:"macromolecule-cell-comp-analysis-value"})}}))),a=n.tableFromMap(o);return Array.from(a.rows).forEach((t=>{const e=t.getElementsByClassName("macromolecule-cell-comp-analysis-bar")[0].style.backgroundColor;t.cells[0].style.color=e})),a}y.styleTagTransform=p(),y.setAttributes=u(),y.insert=c().bind(null,"head"),y.domAPI=a(),y.insertStyleElement=d(),i()(f.Z,y),f.Z&&f.Z.locals&&f.Z.locals,s(499)},3336:t=>{"use strict";t.exports=$},976:t=>{"use strict";t.exports=DG},4469:t=>{"use strict";t.exports=grok},701:t=>{"use strict";t.exports=rxjs},3870:t=>{"use strict";t.exports=ui},6414:t=>{"use strict";t.exports=wu}},e={};function s(n){var r=e[n];if(void 0!==r)return r.exports;var i=e[n]={id:n,exports:{}};return t[n].call(i.exports,i,i.exports,s),i.exports}s.m=t,s.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return s.d(e,{a:e}),e},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.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.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),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&&(t=e.currentScript.src),!t)){var n=e.getElementsByTagName("script");if(n.length)for(var r=n.length-1;r>-1&&!t;)t=n[r--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),s.p=t})(),s.b=document.baseURI||self.location.href,s.nc=void 0;var n=s(3377);bio_test=n})();
|
|
2
|
+
var bio_test;(()=>{var t={2012:(t,e,s)=>{"use strict";s.d(e,{f:()=>r});var n=s(9976);class r extends n.B{static get Lesk(){return void 0===this.lesk&&(this.lesk=this.makePalette([[["G","A","S","T"],"orange"],[["C","V","I","L","P","F","Y","M","W"],"all_green"],[["N","Q","H"],"magenta"],[["D","E"],"red"],[["K","R"],"all_blue"]],!1,r)),this.lesk}static get GrokGroups(){return void 0===this.grokGroups&&(this.grokGroups=this.makePalette([[["C","U"],"yellow"],[["G","P"],"red"],[["A","V","I","L","M","F","Y","W"],"all_green"],[["R","H","K"],"light_blue"],[["D","E"],"dark_blue"],[["S","T","N","Q"],"orange"]],!1,r)),this.grokGroups}static get RasMol(){return void 0===this.rasMol&&(this.rasMol=new r({D:"#E60A0A",E:"#E60A0A",C:"#E6E600",M:"#E6E600",K:"#145AFF",R:"#145AFF",S:"#FA9600",T:"#FA9600",F:"#3232AA",Y:"#3232AA",N:"#00DCDC",Q:"#00DCDC",G:"#EBEBEB",L:"#0F820F",V:"#0F820F",I:"#0F820F",A:"#C8C8C8",W:"#B45AB4",H:"#8282D2",P:"#DC9682",others:"#BEA06E"})),this.rasMol}get(t){const e=t in r.aaSynonyms?r.aaSynonyms[t]:t;return super.get(e)}}r.aaSynonyms={MeNle:"L",MeA:"A",MeG:"G",MeF:"F"};class i{static getPalette(t="grok"){switch(t){case"grok":return r.GrokGroups;case"lesk":return r.Lesk;default:throw new Error(`ChemPalette: scheme \`${t}\` does not exist`)}}static getInnerOuter(t){let e=0,s="",n="";for(const r of t)"("==r?e++:")"==r?e--:e?s+=r:n+=r;return isNaN(parseInt(s))?[n,s]:[n,""]}static getColorAAPivot(t="",e="grok"){const s=this.getPalette(e);let[n,r]=this.getInnerOuter(t);if(n=n.length>6?`${n.slice(0,3)}...`:n,r=r.length>6?`${r.slice(0,3)}...`:r,1==t.length||"("==t[1]){const e=t[0]?.toUpperCase();return e in s?[s.get(e),e,r,1]:[this.undefinedColor,n,r,1]}if("d"==t[0]&&t[1]in s&&(2==t.length||"("==t[2])){const e=t[1]?.toUpperCase();return e in s?[s.get(e),e,r,2]:[this.undefinedColor,n,r,2]}if(t.substring(0,3)in this.AAFullNames&&(3==t.length||"("==t[3])){const e=this.AAFullNames[t.substring(0,3)];return e in s?[s.get(e),e,r,3]:[this.undefinedColor,n,r,3]}if(t[0]?.toLowerCase()==t[0]&&t.substring(1,3)in this.AAFullNames&&(4==t.length||"("==t[4])){const e=this.AAFullNames[t.substring(1,3)];return e in s?[s.get(e),e,r,4]:[this.undefinedColor,n,r,4]}return[this.undefinedColor,n,r,0]}}i.SemType="Aminoacids",i.SemTypeMultipleAlignment="AminoacidsMultipleAlignment",i.undefinedColor="rgb(100,100,100)",i.Names={G:"Glycine",L:"Leucine",Y:"Tyrosine",S:"Serine",E:"Glutamic acid",Q:"Glutamine",D:"Aspartic acid",N:"Asparagine",F:"Phenylalanine",A:"Alanine",K:"Lysine",R:"Arginine",H:"Histidine",C:"Cysteine",V:"Valine",P:"Proline",W:"Tryptophan",I:"Isoleucine",M:"Methionine",T:"Threonine"},i.AASmiles={G:"NCC(=O)O",L:"N[C@H](CC(C)C)C(=O)O",Y:"NC(CC1=CC=C(O)C=C1)C(=O)O",S:"NC(CO)C(=O)O",E:"N[C@@H](CCC(O)=O)C(=O)O",Q:"N[C@@H](CCC(N)=O)C(=O)O",D:"N[C@@H](CC(O)=O)C(=O)O",N:"N[C@@H](CC(N)=O)C(=O)O",F:"NC(CC1=CC=CC=C1)C(=O)O",A:"N[C@H](C)C(=O)O",K:"NC(CCCCN)C(=O)O",R:"N[C@H](CCCNC(=N)C)C(=O)O",H:"NC(CC1=CN=C[N]1)C(=O)O",C:"N[C@@H](CS)C(=O)O",V:"NC(C(C)C)C(=O)O",P:"N(CCC1)C1C(=O)O",W:"N[C@@H](Cc1c2ccccc2n([H])c1)C(=O)O",I:"N[C@H]([C@H](C)CC)C(=O)O",M:"NC(CCSC)C(=O)O",T:"NC(C(O)C)C(=O)O"},i.AASmilesTruncated={G:"*C*",L:"CC(C)C[C@H](*)*",Y:"C1=CC(=CC=C1CC(*)*)O",S:"OCC(*)C*",E:"*[C@@H](CCC(O)=O)*",Q:"*N[C@@H](CCC(N)=O)*",D:"*[C@@H](CC(O)=O)*",N:"*[C@@H](CC(N)=O)*",F:"C1=CC=C(C=C1)CC(*)*",A:"C[C@H](*)*",K:"C(CCN)CC(*)*",R:"*[C@H](CCCNC(=N)C)*",H:"C1=C(NC=N1)CC(*)*",C:"C([C@@H](*)*)S",V:"CC(C)C(*)*",P:"C1CCN(*)C1*",W:"*[C@@H](Cc1c2ccccc2n([H])c1)*",I:"CC[C@H](C)[C@H](*)*",M:"CSCCC(*)*",T:"CC(O)C(*)*"},i.AAFullNames={Ala:"A",Arg:"R",Asn:"N",Asp:"D",Cys:"C",Gln:"Q",Glu:"E",Gly:"G",His:"H",Ile:"I",Leu:"L",Lys:"K",Met:"M",Phe:"F",Pro:"P",Ser:"S",Thr:"T",Trp:"W",Tyr:"Y",Val:"V"}},6584:(t,e,s)=>{"use strict";s.d(e,{BX:()=>i,nW:()=>l,tW:()=>c,tb:()=>h});var n=s(4469);const r="Libraries",i="System:AppData/Bio/libraries/",o={explicit:["HELMCoreLibrary.json"],exclude:[]};let a=Promise.resolve();async function l(){let t;return a=a.then((async()=>{const e=await n.dapi.userDataStorage.getValue(r,"Settings",!0);t=e?JSON.parse(e):{exclude:[],explicit:[]},t.exclude=t.exclude instanceof Array?t.exclude:[],t.explicit=t.explicit instanceof Array?t.explicit:[],console.debug(`Bio: getUserLibSettings()\n${JSON.stringify(t,void 0,2)}`)})),await a,t}async function c(t){a=a.then((async()=>{console.debug(`Bio: setUserLibSettings()\n${JSON.stringify(t,void 0,2)}`),await n.dapi.userDataStorage.postValue(r,"Settings",JSON.stringify(t),!0)})),await a}async function h(){await c(o)}},7228:(t,e,s)=>{"use strict";s.d(e,{JN:()=>l,PF:()=>h,Qx:()=>c,Xk:()=>a});var n=s(976),r=s(4469),i=s(1047),o=(s(499),s(8457));function a(t){const e=[];for(let s=0;s<t.rowCount;s++){const n={};Object.keys(i.K4).forEach((e=>{if("symbol"===e){const r=t.get(i.K4[e],s);n[e]="."===r?t.get(i.At,s):r}else if("rgroups"===e){const r=t.get(i.K4[e],s).split("\n"),o=[];r.forEach((t=>{const e={},s=t.substring(t.lastIndexOf("]")+1),n=t.match(/\[R(\d+)\]/)[1];e.capGroupSmiles="H"===s?`[*:${n}][H]`:`O[*:${n}]`,e.alternateId="H"===s?`R${n}-H`:`R${n}-OH`,e.capGroupName="H"===s?"H":"OH",e.label=`R${n}`,o.push(e)})),n[e]=o}else i.K4[e]&&(n[e]=t.get(i.K4[e],s))})),e.push(n)}return e}async function l(){const t=n.Func.find({package:"Bio",name:"getMonomerLibHelper"});if(0===t.length)throw new Error('Package "Bio" must be installed for MonomerLibHelper.');return(await t[0].prepare().call()).getOutputParamValue()}async function c(t,e){t instanceof n.Column&&(t=(0,o.O)(t).columns.toList());const s=(await l()).getBioLib(),i=new Array(t.length),a=t[0].length,c=new Float32Array(a);for(let o=0;o<t.length;++o){const l=e[o],h=s.getMonomer("PEPTIDE",l)?.smiles??"",u=t[o],m=u.getRawData(),d=u.categories,p=d.indexOf("");if(i[o]={categories:d,data:m,emptyIndex:p},void 0===l)continue;const g=n.Column.fromStrings("smiles",d.map((t=>s.getMonomer("PEPTIDE",t)?.smiles??""))),f=(n.DataFrame.fromColumns([g]),(await r.chem.getSimilarities(g,h)).getRawData());for(let t=0;t<a;++t){const e=m[t];c[t]+=""!==l&&e!==p?f[e]:""===l&&e===p?1:0}}for(let s=0;s<c.length;++s){let r=c[s]/e.length;for(let o=0;o<t.length;++o){const t=i[o];if(o>=e.length&&t.data[s]!==t.emptyIndex||t.data[s]===t.emptyIndex&&o<e.length){r=n.FLOAT_NULL;break}}c[s]=r}return n.Column.fromFloat32Array("Similarity",c)}async function h(t){const e=(await l()).getBioLib(),s=[],i={},o=t.map((t=>e.getMonomer("PEPTIDE",t)?.smiles??"")),a=n.Column.fromStrings("smiles",o);for(let e=0;e<o.length;++e){i[t[e]]=e;const n=o[e],l=""===n?new Array(o.length).fill(0):(await r.chem.getSimilarities(a,n)).getRawData();l[e]=1,s[e]=Array.from(l)}return{scoringMatrix:s,alphabetIndexes:i}}},8601:(t,e,s)=>{"use strict";s.d(e,{i0:()=>m});var n=s(4469),r=s(976),i=s(6414),o=s.n(i),a=s(1821),l=s(499);const c={V2K_RGP_SHIFT:8,V2K_RGP_LINE:"M RGP",V2K_A_LINE:"A ",V3K_COUNTS_SHIFT:14,V3K_IDX_SHIFT:7,V3K_HEADER_FIRST_LINE:"\nDatagrok macromolecule handler\n\n",V3K_HEADER_SECOND_LINE:" 0 0 0 0 0 0 999 V3000\n",V3K_BEGIN_CTAB_BLOCK:"M V30 BEGIN CTAB\n",V3K_END_CTAB_BLOCK:"M V30 END CTAB\n",V3K_BEGIN_COUNTS_LINE:"M V30 COUNTS ",V3K_COUNTS_LINE_ENDING:" 0 0 0\n",V3K_BEGIN_ATOM_BLOCK:"M V30 BEGIN ATOM\n",V3K_END_ATOM_BLOCK:"M V30 END ATOM\n",V3K_BEGIN_BOND_BLOCK:"M V30 BEGIN BOND\n",V3K_END_BOND_BLOCK:"M V30 END BOND\n",V3K_BOND_CONFIG:" CFG=",V3K_BEGIN_DATA_LINE:"M V30 ",V3K_END:"M END",PRECISION_FACTOR:1e4,DEOXYRIBOSE:"d",RIBOSE:"r",PHOSPHATE:"p",OXYGEN:"O",HYDROGEN:"H"};var h=s(1047);function u(t){return Math.round(c.PRECISION_FACTOR*t)/c.PRECISION_FACTOR}async function m(t,e,i){if(0===r.Func.find({package:"Chem",name:"getRdKitModule"}).length)return{col:null,warnings:['Transformation to atomic level requires the package "Chem" installed.']};if(e.semType!==r.SEMTYPE.MACROMOLECULE)return{col:null,warnings:[`Only the ${r.SEMTYPE.MACROMOLECULE} columns can be converted to atomic level, the chosen column has semType '${e.semType}'`]};let u=e;const m=l.Cn.getOrCreate(e);m.isHelm()&&(u=m.convert(a.r2.SEPARATOR,"."),u.name=e.name);const p=l.Cn.getOrCreate(u).alphabet;let g;if("PT"===p||"UN"===p)g="PEPTIDE";else{if("RNA"!==p&&"DNA"!==p)return{col:null,warnings:[`Unexpected column's '${u.name}' alphabet '${p}'.`]};g="RNA"}const f=function(t){const e=t.length,s=new Array(e),n=l.Cn.getOrCreate(t).getSplitter();for(let r=0;r<e;++r){const e=t.get(r);s[r]=e?o()(n(e)).filter((t=>""!==t)).toArray():[]}return s}(u),y=await async function(t,e,s,r){const i=function(t,e,s){const n=new Map;for(const r of t.getMonomerSymbolsByType(e)){const i=t.getMonomer(e,r);if("RNA"===e&&("Branch"===i.monomerType||"DNA"===s&&i.symbol===c.DEOXYRIBOSE||"RNA"===s&&i.symbol===c.RIBOSE||i.symbol===c.PHOSPHATE)||"PEPTIDE"===e&&"Branch"!==i.monomerType){const t={};h.rx.forEach((e=>{t[e]=i[e]})),n.set(i.symbol,t)}}return n}(e,s,r),o=new Map,a=await n.functions.call("Chem:getRdKitModule"),l={value:null};if("RNA"===s){const t="RNA"===r?[c.RIBOSE,c.PHOSPHATE]:[c.DEOXYRIBOSE,c.PHOSPHATE];for(const e of t)d(o,e,i,a,s,l)}for(let e=0;e<t.length;++e){const n=t[e];for(const t of n)if(""!==t)try{d(o,t,i,a,s,l)}catch(e){const s=e instanceof Error?e.message:e.toString(),n=e instanceof Error?e.stack:void 0;throw console.error(`bio lib: getMonomersDictFromLib() sym='${t}', error:\n${s}\n${n}`),new Error(`Can't get monomer '${t}' from library: ${s}`)}}return o}(f,i,g,p),w=u.length,{molfileList:C,molfileWarningList:b}=await async function(t,e,n,r,i){const o=Math.max(navigator.hardwareConcurrency-2,1),a=new Array(o).fill(null).map((()=>new Worker(new URL(s.p+s.u(79),s.b)))),l=i/o;let c=[],h=[];const u=new Array(o);for(let s=0;s<o;s++){const c=Math.floor(s*l),h=s===o-1?i:Math.floor((s+1)*l);a[s].postMessage({monomerSequencesArray:t,monomersDict:e,alphabet:n,polymerType:r,start:c,end:h}),u[s]=new Promise((t=>{a[s].onmessage=({data:{molfileList:e,molfileWarningList:s}})=>{t({molfileList:e,molfileWarningList:s})}}))}return(await Promise.all(u)).forEach((t=>{c=c.concat(...t.molfileList),h=h.concat(...t.molfileWarningList)})),setTimeout((()=>{a.forEach((t=>{t.terminate()}))}),0),{molfileList:c,molfileWarningList:h}}(f,y,p,g,w);if(b.length>.05*w)throw new Error("Too many errors getting molfiles.");const T=`molfile(${u.name})`,A=t.columns.getUnusedName(T),S=r.Column.fromStrings(A,C);return S.semType=r.SEMTYPE.MOLECULE,S.setTag(r.TAGS.UNITS,r.UNITS.Molecule.MOLBLOCK),{col:S,warnings:b}}function d(t,e,s,n,r,i){if(!t.has(e)){const o=function(t,e,s,n,r){if(e.has(t)){const i=e.get(t),o=function(t){const e=[];for(const s of t){let t=s.capGroupSmiles;t||(t=s.capGroupSMILES),t=t.replace(/(\[|\]|\*|:|\d)/g,""),e.push(t)}return e}(i.rgroups),a=function(t){const e=new Map;let s=t.indexOf(c.V2K_A_LINE,0),n=s;for(;-1!==s;){n=t.indexOf("\n",s);const r=parseInt(t.substring(s,n).replace(/^A\s+/,""));s=t.indexOf("R",n),n=t.indexOf("\n",s);const i=parseInt(t.substring(s,n).replace(/^R/,""));e.set(r,i),s=t.indexOf(c.V2K_A_LINE,n)}for(s=t.indexOf(c.V2K_RGP_LINE,0),n=t.indexOf("\n",s);-1!==s;){s+=c.V2K_RGP_SHIFT,n=t.indexOf("\n",s);const r=t.substring(s,n).replaceAll(/\s+/g," ").split(" ").map((t=>parseInt(t))).slice(1);for(let t=0;t<r.length;t+=2){if(e.has(r[t])&&e.get(r[t])!==r[t+1])throw new Error(`r-group index ${r[t]} has already been added with a different value`);e.set(r[t],r[t+1])}s=t.indexOf(c.V2K_RGP_LINE,n)}return e}(i.molfile),l=function(t,e){const s=e.get_mol(t),n=s.get_v3Kmolblock();return s.delete(),n}(function(t){let e=t.indexOf(c.V2K_A_LINE,0);-1===e&&(e=t.indexOf(c.V2K_RGP_LINE));const s=t.indexOf(c.V3K_END,e);return t.substring(0,e)+t.substring(s)}(i.molfile),s),h=function(t){let e=(t=t.replaceAll("\r","")).indexOf(c.V3K_BEGIN_COUNTS_LINE)+c.V3K_COUNTS_SHIFT,s=t.indexOf(" ",e+1);const n=parseInt(t.substring(e,s));return e=s+1,s=t.indexOf(" ",e+1),{atomCount:n,bondCount:parseInt(t.substring(e,s))}}(l),m=function(t,e){const s=new Array(e),n=new Float32Array(e),r=new Float32Array(e),i=new Array(e);let o=t.indexOf(c.V3K_BEGIN_ATOM_BLOCK);o=t.indexOf("\n",o);let a=o;for(let l=0;l<e;l++){o=t.indexOf(c.V3K_BEGIN_DATA_LINE,o)+c.V3K_IDX_SHIFT,a=t.indexOf(" ",o),o=a+1,a=t.indexOf(" ",o),s[l]=t.substring(o,a);const e=new Array(2);for(let s=0;s<2;++s)o=a+1,a=t.indexOf(" ",o),e[s]=parseFloat(t.substring(o,a));n[l]=e[0],r[l]=e[1],o=a,a=t.indexOf("\n",o)+1,i[l]=t.slice(o,a),o=a}return{atomTypes:s,x:n,y:r,kwargs:i}}(l,h.atomCount),d=function(t,e){const s=new Uint32Array(e),n=new Array(e),r=new Map,i=new Map;let o=t.indexOf(c.V3K_BEGIN_BOND_BLOCK);o=t.indexOf("\n",o);let a=o;for(let l=0;l<e;++l){const e=new Array(3);o=t.indexOf(c.V3K_BEGIN_DATA_LINE,a)+c.V3K_IDX_SHIFT,a=t.indexOf(" ",o);for(let s=0;s<3;++s)o=a+1,a=Math.min(t.indexOf("\n",o),t.indexOf(" ",o)),e[s]=parseInt(t.slice(o,a));s[l]=e[0],n[l]=e.slice(1);const h=t.indexOf("\n",o);let u=t.slice(a,h),m=u.indexOf(c.V3K_BOND_CONFIG);if(-1!==m){m=u.indexOf("=",m)+1;let t=u.indexOf(" ",m);-1===t&&(t=u.length);const e=parseInt(u.slice(m,t));r.set(l,e);const s=c.V3K_BOND_CONFIG+e.toString();u=u.replace(s,"")}u||i.set(l,u)}return{bondTypes:s,atomPairs:n,bondConfiguration:r,kwargs:i}}(l,h.bondCount),y={atoms:m,bonds:d,meta:p(m,d,o,a)};return"PEPTIDE"===n?function(t){const e=t.meta.terminalNodes[0]-1,s=t.meta.rNodes[0]-1,n=t.atoms.x,r=t.atoms.y;S(t,-n[e],-r[e]);const i=b(n[s],r[s]);T(t.atoms,-i),n[t.meta.rNodes[1]-1]<0&&function(t){A(t,!1)}(t);const o=function(t){const e=function(t){const e=new Map;for(const s of t.bonds.atomPairs)for(let t=0;t<2;t++){const n=s[t],r=s[(t+1)%2];e.has(n)?e.get(n)?.push(r):e.set(n,new Array(1).fill(r))}return e}(t);let s=0;const n=t.atoms.atomTypes.length;let r=0;for(;0===s;){const i=e.get(t.meta.terminalNodes[1])[r];if(t.atoms.atomTypes[i-1]===c.OXYGEN&&i!==t.meta.rNodes[1]&&(s=i),r++,r>n)throw new Error(`Search for double-bonded Oxygen in ${t} has exceeded the limit of ${n}`)}return s}(t);!function(t,e){t.atoms.y[t.meta.rNodes[1]-1]<0&&t.atoms.y[e-1]<0&&(function(t){A(t,!0)}(t),T(t.atoms,-function(t,e){return b(t,e)+Math.PI/2}(t.atoms.x[t.meta.terminalNodes[1]-1],t.atoms.y[t.meta.terminalNodes[1]-1])))}(t,o),function(t,e){const s=t.atoms.x;s[t.meta.rNodes[1]-1]>s[e-1]&&function(t,e,s){const n=e-1,r=s-1,i=t.atoms.x,o=t.atoms.y,a=i[n],l=o[n];i[n]=i[r],o[n]=o[r],i[r]=a,o[r]=l}(t,e,t.meta.rNodes[1])}(t,o)}(y):t===c.RIBOSE||t===c.DEOXYRIBOSE?function(t,e){const s=t.atoms.x,n=t.atoms.y;let r=t.meta.terminalNodes[0]-1;const i=t.meta.rNodes[1]-1;S(t,-s[r],-n[r]);const o=b(s[i],n[i]);T(t.atoms,3*Math.PI/2-o),e.value=function(t){const e=t.atoms.x,s=t.atoms.y,n=t.meta.rNodes[2]-1,r=t.meta.terminalNodes[2]-1,i=e[n]-e[r],o=s[n]-s[r];return Math.atan(o/i)+Math.PI/2}(t),r=t.meta.terminalNodes[0]-1,S(t,-s[r],-n[r])}(y,r):t===c.PHOSPHATE?function(t){const e=t.meta.terminalNodes[0]-1,s=t.meta.rNodes[0]-1,n=t.atoms.x,r=t.atoms.y;S(t,-n[e],-r[e]);const i=b(n[s],r[s]);T(t.atoms,Math.PI/2-i)}(y):function(t,e){const s=t.atoms.x,n=t.atoms.y,r=t.meta.terminalNodes[0]-1,i=t.meta.rNodes[0]-1;S(t,-s[r],-n[r]);const o=b(s[i],n[i]),a=e.value;if(!a)throw new Error("The value of sugarBranchToOYAngle is null");T(t.atoms,Math.PI-o+a);const l=function(t,e){return u(Math.sqrt((t.x-e.x)**2+(t.y-e.y)**2))}({x:s[t.meta.rNodes[0]-1],y:n[t.meta.rNodes[0]-1]},{x:s[t.meta.terminalNodes[0]-1],y:n[t.meta.terminalNodes[0]-1]});if(1!=l)for(let t=0;t<s.length;++t)s[t]=u(s[t]/l),n[t]=u(n[t]/l)}(y,r),function(t,e,s){"PEPTIDE"===t?(f(e,t),w(e,e.meta.rNodes[1])):s===c.RIBOSE||s===c.DEOXYRIBOSE?(w(e,e.meta.rNodes[1]),e.meta.rNodes[1]=e.meta.terminalNodes[1],g(e.bonds,e.meta),f(e,t),w(e,e.meta.rNodes[1]),w(e,e.meta.rNodes[0]),w(e,e.meta.rNodes[2])):s===c.PHOSPHATE&&(e.meta.terminalNodes[0]=e.meta.rNodes[0],S(e,-e.atoms.x[e.meta.terminalNodes[0]-1],-e.atoms.y[e.meta.terminalNodes[0]-1]),f(e,t),w(e,e.meta.rNodes[1]))}(n,y,t),function(t){let e=0;for(;e<t.atoms.atomTypes.length;)t.atoms.atomTypes[e]===c.HYDROGEN&&(w(t,e+1),--e),++e}(y),y}return null}(e,s,n,r,i);if(!o)throw new Error(`Monomer with symbol '${e}' is absent the monomer library`);t.set(e,o)}}function p(t,e,s,n){const r={backboneShift:null,branchShift:null,terminalNodes:[],rNodes:[]};return function(t,e,s){for(const[n,r]of s)t.atomTypes[n-1]=e[r-1]}(t,s,n),function(t,e){e.rNodes=Array.from(t.keys());for(let s=0;s<e.rNodes.length;s++)for(const n of[1,2])if(t.get(e.rNodes[s])===n){const t=e.rNodes[n-1];e.rNodes[n-1]=e.rNodes[s],e.rNodes[s]=t}}(n,r),g(e,r),r}function g(t,e){const s=e.rNodes;e.terminalNodes=new Array(s.length).fill(0);const n=e.terminalNodes,r=t.atomPairs;let i=0,o=0;for(;i<r.length&&o<n.length;){for(let t=0;t<n.length;++t)for(let e=0;e<2;++e)r[i][e]===s[t]&&(n[t]=r[i][(e+1)%2],s.length,++o);++i}}function f(t,e){t.meta.rNodes.length>1&&(t.meta.backboneShift=y(t,t.meta.rNodes[1]-1,t.meta.terminalNodes[0]-1)),"RNA"===e&&t.meta.rNodes.length>2&&(t.meta.branchShift=y(t,t.meta.rNodes[2]-1,t.meta.terminalNodes[0]-1))}function y(t,e,s){return[u(t.atoms.x[e]-t.atoms.x[s]),u(t.atoms.y[e]-t.atoms.y[s])]}function w(t,e){if(void 0!==e){const s=e-1,n=t.atoms,r=t.bonds,i=t.meta;n.atomTypes.splice(s,1),n.x=C(Float32Array,n.x,s,1),n.y=C(Float32Array,n.y,s,1),n.kwargs.splice(s,1);for(let t=0;t<i.terminalNodes.length;++t)i.terminalNodes[t]>e?--i.terminalNodes[t]:i.terminalNodes[t]===e&&(i.terminalNodes[t]=-1);for(let t=0;t<i.rNodes.length;++t)i.rNodes[t]>e?--i.rNodes[t]:i.rNodes[t]===e&&(i.rNodes[t]=-1);let o=0;for(;o<r.atomPairs.length;){const t=r.atomPairs[o][0],s=r.atomPairs[o][1];t===e||s===e?(r.atomPairs.splice(o,1),r.bondTypes=C(Uint32Array,r.bondTypes,o,1),r.bondConfiguration.has(o)&&r.bondConfiguration.delete(o),r.kwargs.has(o)&&r.kwargs.delete(o),--o):(r.atomPairs[o][0]=t>e?t-1:t,r.atomPairs[o][1]=s>e?s-1:s),++o}let a=Array.from(r.bondConfiguration.keys());a.forEach((t=>{if(r.bondConfiguration.has(t)&&t>s){const e=r.bondConfiguration.get(t);r.bondConfiguration.delete(t),r.bondConfiguration.set(t-1,e)}})),a=Array.from(r.kwargs.keys()),a.forEach((t=>{if(r.kwargs.has(t)&&t>s){const e=r.kwargs.get(t);r.kwargs.delete(t),r.kwargs.set(t-1,e)}}))}}function C(t,e,s,n){const r=new t(e.length-n);let i=0,o=0;for(;i<e.length;)i===s&&(i+=n),r[o]=e[i],++o,++i;return r}function b(t,e){let s;if(0===t)s=e>0?0:Math.PI;else if(0===e)s=t>0?-Math.PI/2:Math.PI/2;else{const n=e/t,r=Math.atan(n);s=t<0?Math.PI/2+r:-Math.PI/2+r}return s}function T(t,e){if(0!==e){const s=t.x,n=t.y,r=Math.cos(e),i=Math.sin(e);for(let t=0;t<s.length;++t){const e=s[t];s[t]=u(e*r-n[t]*i),n[t]=u(e*i+n[t]*r)}}}function A(t,e){if(e){const e=t.atoms.y;for(let t=0;t<e.length;t++)e[t]=-e[t]}else{const e=t.atoms.x;for(let t=0;t<e.length;t++)e[t]=-e[t]}const s=t.bonds.bondConfiguration;for(const[t,e]of s){const n=1===e?3:1;s.set(t,n)}}function S(t,e,s){const n=t.atoms.x,r=t.atoms.y;for(let t=0;t<n.length;++t)n[t]=u(n[t]+e),void 0!==s&&(r[t]=u(r[t]+s))}},6137:(t,e,s)=>{"use strict";s.d(e,{J:()=>r,V:()=>i});var n=s(9976);class r extends n.B{static get Chromatogram(){return void 0===this.chromatogram&&(this.chromatogram=new r({A:"green",C:"blue",G:"black",T:"red",U:"red",others:"gray"})),this.chromatogram}}class i{}i.SemType="Nucleotides",i.SemTypeMultipleAlignment="NucleotidesMultipleAlignment",i.Names={A:"Adenine",C:"Cytosine",G:"Guanine",T:"Thymine",U:"Uracil"}},9976:(t,e,s)=>{"use strict";s.d(e,{B:()=>n});class n{static makePalette(t,e=!1,s=n){const r={};return t.forEach((t=>{const s=t[0],n=t[1];s.forEach(((t,s)=>{r[t]=this.colourPalette[n][e?0:s]}))})),new s(r)}constructor(t){this._palette=t}get(t){return this._palette[t]}}n.undefinedColor="rgb(100,100,100)",n.colourPalette={orange:["rgb(255,187,120)","rgb(245,167,100)","rgb(235,137,70)","rgb(205, 111, 71)"],all_green:["rgb(44,160,44)","rgb(74,160,74)","rgb(23,103,57)","rgb(30,110,96)","rgb(60,131,95)","rgb(24,110,79)","rgb(152,223,138)","rgb(182, 223, 138)","rgb(152, 193, 138)"],all_blue:["rgb(31,119,180)","rgb(23,190,207)","rgb(122, 102, 189)","rgb(158,218,229)","rgb(141, 124, 217)","rgb(31, 120, 150)"],magenta:["rgb(162,106,192)","rgb(197,165,224)","rgb(208,113,218)"],red:["rgb(214,39,40)","rgb(255,152,150)"],st_blue:["rgb(23,190,207)","rgb(158,218,229)","rgb(31,119,180)"],dark_blue:["rgb(31,119,180)","rgb(31, 120, 150)"],light_blue:["rgb(23,190,207)","rgb(158,218,229)","rgb(108, 218, 229)","rgb(23,190,227)"],lilac_blue:["rgb(124,102,211)","rgb(149,134,217)","rgb(97, 81, 150)"],dark_green:["rgb(23,103,57)","rgb(30,110,96)","rgb(60,131,95)","rgb(24,110,79)"],green:["rgb(44,160,44)","rgb(74,160,74)"],light_green:["rgb(152,223,138)","rgb(182, 223, 138)","rgb(152, 193, 138)"],st_green:["rgb(44,160,44)","rgb(152,223,138)","rgb(39, 174, 96)","rgb(74,160,74)"],pink:["rgb(247,182,210)"],brown:["rgb(140,86,75)","rgb(102, 62, 54)"],gray:["rgb(127,127,127)","rgb(199,199,199)","rgb(196,156,148)","rgb(222, 222, 180)"],yellow:["rgb(188,189,34)"],white:["rgb(230,230,230)"]}},7331:(t,e,s)=>{"use strict";s.d(e,{UE:()=>c,kQ:()=>o});var n=s(976),r=s(9976);class i{static hashCode(t){let e=0;if(0===t.length)return e;for(let s=0;s<t.length;s++)e=(e<<5)-e+t.charCodeAt(s),e|=0;return e}}class o{}class a extends o{get(t){return"#666666"}}class l extends o{static buildPalette(){return[].concat(...Object.values(r.B.colourPalette))}get(t){const e=i.hashCode(t)%l.palette.length;return function(t){if(null==t)return"rgb(100,100,100)";const e=n.Color.fromHtml(t),s=n.Color.g(e),r=n.Color.r(e),i=n.Color.b(e),o=Math.sqrt(Math.pow(0-r,2)+Math.pow(0-s,2)+Math.pow(0-i,2));return o>210?`rgb(${r/o*210},${s/o*210},${i/o*210})`:n.Color.toRgb(e)}(l.palette[e])}}l.palette=l.buildPalette();class c extends r.B{static get Gray(){return void 0===this.gray&&(this.gray=new a),this.gray}static get Color(){return void 0===this.color&&(this.color=new l),this.color}}},9611:(t,e,s)=>{"use strict";s.d(e,{A:()=>c});var n=s(4469),r=s(976),i=s(6414),o=s.n(i),a=s(8447);const l={DNA:"RNA",RNA:"RNA",PT:"PEPTIDE",UN:"PEPTIDE"};class c{get updated(){return this._updated}constructor(t,e,s){this.grid=t,this.col=e,this.propsProvider=s,this._monomerLengthList=null,this.separatorWidth=5,this._updated=!1,this._monomerLengthMap={},this._monomerStructureMap={},this.subs=[],this._splitter=(0,a.Mj)(this.col),this.props=this.propsProvider(),this._rowsProcessed=r.BitSet.create(this.col.length),this.grid&&(this.subs.push(e.dataFrame.onDataChanged.subscribe((()=>{this.props=this.propsProvider(),this._monomerLengthList=null,this._rowsProcessed=r.BitSet.create(this.col.length)}))),this.subs.push(n.events.onViewRemoved.subscribe((t=>{this.grid?.view?.id===t.id&&this.destroy()}))))}destroy(){for(const t of this.subs)t.unsubscribe()}getCellMonomerLengths(t){const e=this.props.unitsHandler.isMsa()?this.getCellMonomerLengthsForSeqMsa():this.getCellMonomerLengthsForSeq(t),s=new Array(e.length+1);s[0]=5;for(let t=1;t<s.length;t++)s[t]=s[t-1]+e[t-1];return[e,s]}getCellMonomerLengthsForSeq(t){null===this._monomerLengthList&&(this._monomerLengthList=new Array(this.col.length).fill(null),this._updated=!0);let e=this._monomerLengthList[t];if(null===e){const s=this.getSeqMonList(t);e=this._monomerLengthList[t]=new Array(s.length);for(const[t,n]of o().enumerate(s)){const s=this.props.monomerToShort(t,this.props.monomerLengthLimit),r=(this.props.unitsHandler.isSeparator()?this.separatorWidth:this.props.separatorWidth)+s.length*this.props.monomerCharWidth;e[n]=r}this._updated=!0}return e}getCellMonomerLengthsForSeqMsa(){var t;null===this._monomerLengthList&&(this._monomerLengthList=new Array(1).fill(null),this._updated=!0),(t=this._monomerLengthList)[0]??(t[0]=new Array(0));const e=this._monomerLengthList[0],s=Math.max(Math.floor((this.grid?.vertScroll.min??0)-10),0),n=Math.min(Math.ceil((this.grid?.vertScroll.max??0)+10),this.col.length);for(let t=s;t<n;t++){if(this._rowsProcessed.get(t))continue;const s=this.getSeqMonList(t);s.length>e.length&&e.push(...new Array(s.length-e.length).fill(0));for(const[t,n]of o().enumerate(s)){const s=this.props.monomerToShort(t,this.props.monomerLengthLimit),r=this.props.separatorWidth+s.length*this.props.monomerCharWidth;e[n]=Math.max(e[n]??0,r)}this._updated=!0}return e}getPosition(t,e){const[s,n]=this.getCellMonomerLengths(t),r=this.col.get(t),i=o()(this._splitter(r)).toArray();if(0===i.length)return null;let a=100,l=null,c=i.length,h=!1,u=0;if(n[0]<=e&&e<n.slice(-1)[0])for(;!h;)if(u=Math.floor((c+(l??0))/2),e>=n[u]&&e<=n[u+1]?(l=u,h=!0):e<n[u]?c=u-1:e>n[u+1]&&(l=u+1),l==c&&(h=!0),--a<=0)throw new Error(`Get position for pointer x = ${e} searching has not converged on ${JSON.stringify(n)}. `);return l}getSeqMonList(t){const e=this.col.get(t);return e?o()(this._splitter(e)).toArray():[]}getMonomer(t){const e=this.props.unitsHandler.alphabet??"UN",s=l[e];return this.props.monomerLib?.getMonomer(s,t)??null}setMonomerLengthLimit(t){this.props.monomerLengthLimit=t,this._updated=!0}setSeparatorWidth(t){this.props.separatorWidth=t,this._updated=!0}isMsa(){return this.props.unitsHandler.isMsa()}}},1047:(t,e,s)=>{"use strict";s.d(e,{$3:()=>c,At:()=>r,K4:()=>a,Wc:()=>i,Z2:()=>l,nJ:()=>o,pU:()=>h,rx:()=>n});const n=["symbol","molfile","rgroups","name"],r="MonomerName",i={symbol:"Short Name",name:"Medium Name",smiles:"SMILES"},o=[{capGroupSmiles:"[*:1][H]",alternateId:"R1-H",capGroupName:"H",label:"R1"},{capGroupSmiles:"O[*:2]",alternateId:"R2-OH",capGroupName:"OH",label:"R2"},{capGroupSmiles:"[*:3][H]",alternateId:"R3-H",capGroupName:"H",label:"R3"}],a={monomerType:null,smiles:null,name:"MonomerName",author:null,molfile:"molecule",naturalAnalog:"MonomerNaturalAnalogCode",rgroups:"MonomerCaps",createDate:null,id:null,polymerType:"MonomerType",symbol:"MonomerCode"},l={monomerType:"Backbone",smiles:"",name:"",author:"Datagrok",molfile:"",naturalAnalog:"",rgroups:[],createDate:null,id:0,polymerType:"PEPTIDE",symbol:""},c="p",h=new RegExp(`[rd]\\((\\w)\\)${c}?`,"g")},7945:(t,e,s)=>{"use strict";function n(t){return"string"==typeof t||t instanceof String?t:"StateError"===t.constructor.name?t.message:"StateError"===t.constructor.name&&"$thrownJsError"in t?n(t.$thrownJsError):t instanceof Error?t.message:t.toString()}function r(t){return t instanceof Error?t.stack:"StateError"===t.constructor.name&&"$thrownJsError"in t?r(t.$thrownJsError):void 0}function i(t){return[n(t),r(t)]}s.d(e,{yf:()=>i})},5226:(t,e,s)=>{"use strict";s.d(e,{i:()=>o});var n=s(976),r=s(499),i=s(1821);class o{get descriptionsArray(){return this._descriptionsArray}get sequencesArray(){return this._sequencesArray}parseMacromolecule(t,e){return this._fileContent.slice(t,e).split(/\s/).join("")}parseColumns(){const t=/^>(.*)$/gm;let e,s=0;for(;e=t.exec(this._fileContent);){const n=this._fileContent.substring(e.index+1,t.lastIndex);this._descriptionsArray.push(n),0!==s&&this._sequencesArray.push(this.parseMacromolecule(s,e.index)),s=t.lastIndex+1}this._sequencesArray.push(this.parseMacromolecule(s,-1))}importFasta(){const t=n.Column.fromStrings("description",this.descriptionsArray),e=n.Column.fromStrings("sequence",this.sequencesArray);return e.semType=n.SEMTYPE.MACROMOLECULE,e.setTag(n.TAGS.UNITS,i.r2.FASTA),r.Cn.getOrCreate(e),[n.DataFrame.fromColumns([t,e])]}constructor(t){this._descriptionsArray=[],this._sequencesArray=[],this._fileContent=t,this.parseColumns()}}},1821:(t,e,s)=>{"use strict";s.d(e,{BM:()=>o,CI:()=>i,XS:()=>l,r2:()=>n,se:()=>a});var n,r=s(6286);!function(t){t.FASTA="fasta",t.SEPARATOR="separator",t.HELM="helm"}(n||(n={}));const i=", ",o=/(?:\[([A-Za-z0-9_\-,()]+)\])|([A-Za-z\-])/g,a=new class{constructor(){this.fasta={peptide:new Set(["G","L","Y","S","E","Q","D","N","F","A","K","R","H","C","V","P","W","I","M","T"]),dna:new Set(["A","C","G","T"]),rna:new Set(["A","C","G","U"])}}},l=[new r.L("PT",a.fasta.peptide,.5),new r.L("DNA",a.fasta.dna,.55),new r.L("RNA",a.fasta.rna,.55)]},8447:(t,e,s)=>{"use strict";s.d(e,{CI:()=>n.CI,GU:()=>r.GU,KX:()=>r.KX,Mj:()=>r.Mj,XS:()=>n.XS,dQ:()=>r.dQ,gM:()=>r.gM,gP:()=>r.gP,kB:()=>r.kB,py:()=>r.py,r2:()=>n.r2,up:()=>r.up});var n=s(1821),r=s(585)},6286:(t,e,s)=>{"use strict";s.d(e,{L:()=>n,d:()=>r});class n{constructor(t,e,s){this.name=t,this.alphabet=e,this.cutoff=s}}class r extends n{constructor(t,e,s){super(t.name,t.alphabet,t.cutoff),this.freq=e,this.similarity=s}}},585:(t,e,s)=>{"use strict";s.d(e,{Ar:()=>y,FJ:()=>f,GU:()=>E,KX:()=>M,Mj:()=>A,dQ:()=>N,gM:()=>v,gP:()=>b,jY:()=>p,kB:()=>g,py:()=>L,up:()=>_,vU:()=>T,w4:()=>x});var n=s(976),r=s(6414),i=s.n(r),o=s(6286),a=s(1821),l=s(499),c=s(3659),h=s(850),u=s(2012),m=s(6137),d=s(7331);function p(t,e,s){return t.categories,function(t,e){const s={};let n=!0,r=null;for(const i of t)if(null==r?r=i.length:i.length!==r&&(n=!1),i.length>=e)for(const t of i)t in s||(s[t]=0),s[t]+=1;return{freq:s,sameLength:n}}(i()(t.getRawData()).map((e=>s(t.categories[e]))),e)}function g(t){return i()(t.toString().matchAll(a.BM)).map((t=>t[2]??t[1])).toArray()}function f(t){return t||[]}function y(t,e=undefined){return s=>s?s.replaceAll('"-"',"").replaceAll("'-'","").split(t,e):[]}const w=/(PEPTIDE1|DNA1|RNA1)\{([^}]+)}/g,C=/\[([^\[\]]+)]/g;function b(t){w.lastIndex=0;const e=w.exec(t.toString()),s=e?e[2]:null;return(s?s.split("."):[]).map((t=>{C.lastIndex=0;const e=C.exec(t);return e&&e.length>=2?e[1]:t}))}function T(t,e,s=undefined){if(t.toLowerCase().startsWith(a.r2.FASTA))return g;if(t.toLowerCase().startsWith(a.r2.SEPARATOR))return y(e,s);if(t.toLowerCase().startsWith(a.r2.HELM))return b;throw new Error(`Unexpected units ${t} .`)}function A(t){return l.Cn.getOrCreate(t).getSplitter()}const S=/([^\W_]+)/g;function E(t,e){if(t.length<=e)return t;const s=t.match(S),n=t.length>e||(s?.length??0)>1,r=s?.[0]??" ";return n?r.substring(0,e-1)+"…":r}function v(t){switch(t){case"DNA":return a.se.fasta.dna;case"RNA":return a.se.fasta.rna;case"PT":return a.se.fasta.peptide;default:throw new Error(`Unsupported alphabet '${t}'.`)}}function M(t,e,s="-"){const n=new Set([...new Set(Object.keys(t)),...e]);n.delete(s);const r=[],i=[];for(const s of n)r.push(s in t?t[s]:0),i.push(e.has(s)?1:0);const o=new c.OW(r),a=new c.OW(i);return(0,h.MA)(o,a)/((0,h.$G)(o)*(0,h.$G)(a))}function x(t,e,s="-"){const n=e.map((e=>{const n=M(t,e.alphabet,s);return new o.d(e,t,n)}));let r;const i=Math.max(...n.map((t=>t.similarity>t.cutoff?t.similarity:-1)));return r=i>0?n.find((t=>t.similarity===i)).name:"UN",r}function N(t,e=5){let s;return s=t.semType==n.SEMTYPE.MACROMOLECULE?l.Cn.getOrCreate(t).alphabet:x(p(t,e,g).freq,a.XS),L(s)}function L(t){switch(t){case"PT":return u.f.GrokGroups;case"DNA":case"RNA":return m.J.Chromatogram;default:return d.UE.Color}}function _(t){const e=t.columns.bySemTypeAll(n.SEMTYPE.MACROMOLECULE);let s=e.find((t=>{const e=t.getTag(n.TAGS.UNITS);return!!e&&-1!==e.indexOf("MSA")}))??null;return!s&&e.length>0&&(s=e[0]),s}},8457:(t,e,s)=>{"use strict";s.d(e,{O:()=>a});var n=s(976),r=s(6414),i=s.n(r),o=s(585);function a(t){const e=(0,o.Mj)(t),s=t=>{const e=l.columns.addNewString((t+1).toString());return r.push(e),e},r=[],a=t.length,l=n.DataFrame.create(a);for(let n=0;n<a;++n){const o=t.get(n);if(null==o)continue;const a=e(o);for(const[t,e]of i().enumerate(a))((r[e]??null)||s(e)).set(n,t||"-",!1)}return l}},172:(t,e,s)=>{"use strict";s.d(e,{c:()=>i});var n,r=s(7945);!function(t){t[t.error=0]="error",t[t.warning=1]="warning",t[t.info=2]="info",t[t.debug=3]="debug"}(n||(n={}));class i{constructor(t){this.logger=t,this.promise=Promise.resolve(),this.syncCounter=0}sync(t,e){const s=++this.syncCounter;this.logger.debug(`${t}, SYNC syncId = ${s}, IN `),this.promise=this.promise.then((async()=>{this.logger.debug(`${t}, SYNC syncId = ${s}, START `),await e(),this.logger.debug(`${t}, SYNC syncId = ${s}, END `)})).catch((e=>{const[n,i]=(0,r.yf)(e);this.logger.error(`${t}, SYNC syncId = ${s}, ERROR:\n${n}`,void 0,i)}))}}},499:(t,e,s)=>{"use strict";s.d(e,{Cn:()=>d,_9:()=>m});var n=s(976),r=s(6414),i=s.n(r),o=s(8447),a=s(585),l=s(489),c=s(7228),h=s(1047);const u=new class{constructor(){this.uh=`units-handler.${n.SEMTYPE.MACROMOLECULE}`}},m={[o.r2.FASTA]:"-",[o.r2.SEPARATOR]:"",[o.r2.HELM]:"*"};class d{static setUnitsToFastaColumn(t){if(t.column.semType!==n.SEMTYPE.MACROMOLECULE||t.column.getTag(n.TAGS.UNITS)!==o.r2.FASTA)throw new Error(`The column of notation '${o.r2.FASTA}' must be '${n.SEMTYPE.MACROMOLECULE}'.`);t.column.setTag(n.TAGS.UNITS,o.r2.FASTA),d.setTags(t)}static setUnitsToSeparatorColumn(t,e){if(t.column.semType!==n.SEMTYPE.MACROMOLECULE||t.column.getTag(n.TAGS.UNITS)!==o.r2.SEPARATOR)throw new Error(`The column of notation '${o.r2.SEPARATOR}' must be '${n.SEMTYPE.MACROMOLECULE}'.`);if(!e)throw new Error(`The column of notation '${o.r2.SEPARATOR}' must have the separator tag.`);t.column.setTag(n.TAGS.UNITS,o.r2.SEPARATOR),t.column.setTag("separator",e),d.setTags(t)}static setUnitsToHelmColumn(t){if(t.column.semType!==n.SEMTYPE.MACROMOLECULE)throw new Error(`The column of notation '${o.r2.HELM}' must be '${n.SEMTYPE.MACROMOLECULE}'`);t.column.setTag(n.TAGS.UNITS,o.r2.HELM),d.setTags(t)}static setTags(t){const e=t.column.getTag(n.TAGS.UNITS),s=t.stats;if(Object.keys(s.freq).some((t=>t.length>1)),[o.r2.FASTA,o.r2.SEPARATOR].includes(e)){if(!t.column.getTag("alphabet")&&0===Object.keys(s.freq).length)throw new Error("Alphabet is empty and not annotated.");let e=t.column.getTag("aligned");null===e&&(e=s.sameLength?"SEQ.MSA":"SEQ",t.column.setTag("aligned",e));let n=t.column.getTag("alphabet");if(null===n&&(n=(0,a.w4)(s.freq,o.XS),t.column.setTag("alphabet",n)),"UN"===n){const e=Object.keys(s.freq).length,n=Object.keys(s.freq).some((t=>t.length>1));t.column.setTag(".alphabetSize",e.toString()),t.column.setTag(".alphabetIsMultichar",n?"true":"false")}}}get column(){return this._column}get units(){return this._units}get notation(){return this._notation}get defaultGapSymbol(){return this._defaultGapSymbol}get separator(){const t=this.column.getTag("separator")??void 0;if(this.notation===o.r2.SEPARATOR&&void 0===t)throw new Error(`Separator is mandatory for column '${this.column.name}' of notation '${this.notation}'.`);return t}get aligned(){const t=this.column.getTag("aligned");if(!t&&(this.isFasta()||this.isSeparator()))throw new Error("Tag aligned not set");return t}get alphabet(){const t=this.column.getTag("alphabet");if(!t&&(this.isFasta()||this.isSeparator()))throw new Error("Tag alphabet not set");return t}get helmCompatible(){return this.column.getTag(".isHelmCompatible")}getAlphabetSize(){if(this.notation==o.r2.HELM||"UN"==this.alphabet){const t=this.column.getTag(".alphabetSize");let e;if(t)e=parseInt(t);else{const t=this.stats;e=Object.keys(t.freq).length}return e}switch(this.alphabet){case"PT":return 20;case"DNA":case"RNA":return 4;case"NT":return console.warn("Unexpected alphabet 'NT'."),4;default:throw new Error(`Unexpected alphabet '${this.alphabet}'.`)}}getAlphabetIsMultichar(){return this.notation===o.r2.HELM||"UN"===this.alphabet&&"true"===this.column.getTag(".alphabetIsMultichar")}get splitted(){if(null===this._splitted){const t=this.getSplitter(),e=this._column.length;this._splitted=new Array(e);const s=this._column.getRawData(),n=this._column.categories;for(let r=0;r<e;r++){const e=n[s[r]];this._splitted[r]=t(e)}}return this._splitted}get stats(){if(null===this._stats){const t={};let e=!0,s=null;for(const n of this.splitted){null==s?s=n.length:n.length!==s&&(e=!1);for(const e of n)e in t||(t[e]=0),t[e]+=1}this._stats={freq:t,sameLength:e}}return this._stats}get maxLength(){return null===this._maxLength&&(this._maxLength=0===this.splitted.length?0:Math.max(...this.splitted.map((t=>t.length)))),this._maxLength}get posList(){if(null===this._posList){const t=this.column.getTag(".positionNames");this._posList=t?t.split(o.CI).map((t=>t.trim())):i().count(1).take(this.maxLength).map((t=>t.toString())).toArray()}return this._posList}isFasta(){return this.notation===o.r2.FASTA}isSeparator(){return this.notation===o.r2.SEPARATOR}isHelm(){return this.notation===o.r2.HELM}isRna(){return"RNA"===this.alphabet}isDna(){return"DNA"===this.alphabet}isPeptide(){return"PT"===this.alphabet}isMsa(){return!!this.aligned&&this.aligned.toUpperCase().includes("MSA")}isHelmCompatible(){return"true"===this.helmCompatible}isGap(t){return!t||this.units===o.r2.FASTA&&t===m[o.r2.FASTA]||this.units===o.r2.HELM&&t===m[o.r2.HELM]}getNotation(){if(this.units.toLowerCase().startsWith(o.r2.FASTA))return o.r2.FASTA;if(this.units.toLowerCase().startsWith(o.r2.SEPARATOR))return o.r2.SEPARATOR;if(this.units.toLowerCase().startsWith(o.r2.HELM))return o.r2.HELM;throw new Error(`Column '${this.column.name}' has unexpected notation '${this.units}'.`)}getHelmWrappers(){return[this.isDna()||this.isRna()||this.isHelmCompatible()?"RNA1{":"PEPTIDE1{",this.isDna()?"d(":this.isRna()?"r(":"",this.isDna()||this.isRna()?")p":"","}$$$$"]}getNewColumn(t,e){const s=this.column,r=s.length,i=t.toLowerCase()+"("+s.name+")",a=s.dataFrame.columns.getUnusedName(i),l=n.Column.fromList("string",a,new Array(r).fill(""));if(l.semType=n.SEMTYPE.MACROMOLECULE,l.setTag(n.TAGS.UNITS,t),t===o.r2.SEPARATOR){if(!e)throw new Error(`Notation '${o.r2.SEPARATOR}' requires separator value.`);l.setTag("separator",e)}l.setTag(n.TAGS.CELL_RENDERER,"Macromolecule");const c=s.getTag("aligned");c&&l.setTag("aligned",c);const h=s.getTag("alphabet");null!=h&&l.setTag("alphabet",h);let u=s.getTag(".alphabetSize");null!=h&&u&&l.setTag(".alphabetSize",u);const m=s.getTag(".alphabetIsMultichar");return null!=h&&void 0!==m&&l.setTag(".alphabetIsMultichar",m),t==o.r2.HELM&&(u=this.getAlphabetSize().toString(),l.setTag(".alphabetSize",u)),l}static getNewColumn(t){const e=d.getOrCreate(t),s=e.notation;return e.getNewColumn(s)}static unitsStringIsValid(t){return t=t.toLowerCase(),[o.r2.FASTA,o.r2.SEPARATOR,o.r2.HELM].some((e=>t.startsWith(e.toLowerCase())))}static getNewColumnFromParams(t,e,s){if(!d.unitsStringIsValid(s))throw new Error("Invalid format of 'units' parameter");const r=n.Column.fromList("string",e,new Array(t).fill(""));return r.semType=n.SEMTYPE.MACROMOLECULE,r.setTag(n.TAGS.UNITS,s),r}getSplitter(t){if(this.units.toLowerCase().startsWith(o.r2.FASTA))return null===this.column.getTag("alphabet")||this.getAlphabetIsMultichar()?a.kB:a.FJ;if(this.units.toLowerCase().startsWith(o.r2.SEPARATOR))return(0,a.Ar)(this.separator,t);if(this.units.toLowerCase().startsWith(o.r2.HELM))return a.gP;throw new Error(`Unexpected units ${this.units} .`)}getDistanceFunctionName(){if(!this.isFasta())throw new Error("Only FASTA notation is supported");return this.isMsa()?l.U.HAMMING:(this.alphabet,l.U.LEVENSHTEIN)}getDistanceFunction(){return l.o[this.getDistanceFunctionName()]()}async checkHelmCompatibility(){if(this.column.tags.has(".isHelmCompatible"))return"true"===this.column.getTag(".isHelmCompatible");const t=(await(0,c.JN)()).getBioLib().getMonomerSymbolsByType("PEPTIDE".toString()),e=new Set(t),s=(0,a.Ar)(this.separator);for(const t of this.column.categories){const n=s(t);for(const t of n)if(!e.has(t))return this.column.setTag(".isHelmCompatible","false"),!1}return this.column.setTag(".isHelmCompatible","true"),!0}get splitter(){return null===this._splitter&&(this._splitter=(0,a.Mj)(this.column)),this._splitter}toFasta(t){return t===o.r2.FASTA}toSeparator(t){return t===o.r2.SEPARATOR}toHelm(t){return t===o.r2.HELM}convertHelmToFastaSeparator(t,e,s,n){n||(n=this.toFasta(e)?m[o.r2.FASTA]:m[o.r2.SEPARATOR]),s||(s=this.toFasta(e)?"":this.separator);const r=t.startsWith("RNA"),i=this.splitter(t),a=[];for(let t=0;t<i.length;t++){let s=i[t];if(r&&(s=s.replace(h.pU,"")),s===m[o.r2.HELM])a.push(n);else if(this.toFasta(e)&&s.length>1){const t="["+s+"]";a.push(t)}else a.push(s)}return a.join(s)}convert(t,e){const s=this.getConverter(t,e),n=this.getNewColumn(t,e);return n.init((t=>s(this.column.get(t)))),n}getRegion(t,e,s){const n=this.getNewColumn(this.notation,this.separator);n.name=s,Math.max(...this.splitted.map((t=>t.length)));const r=t??0,i=e??this.maxLength-1,a=this.getJoiner(),l=i-r+1;n.init((t=>{const e=this.splitted[t],s=new Array(l);for(let t=0;t<l;++t){const n=r+t;s[t]=n<e.length?e[n]:m[this.notation]}return a(s)}));const c=t=>{const e=t.split(",").map((t=>t.trim())),s=new Array(l);for(let t=0;t<l;++t){const n=r+t;s[t]=n<e.length?e[n]:"?"}return s.join(o.CI)},h=this.column.getTag(".positionNames");h&&n.setTag(".positionNames",c(h));const u=this.column.getTag(".positionLabels");return u&&n.setTag(".positionLabels",c(u)),n}getJoiner(){if(void 0===this._joiner){const t=this;if(this.notation===o.r2.FASTA)this._joiner=function(e){return p(t,e)};else if(this.notation===o.r2.SEPARATOR)this._joiner=function(e){return g(t,e,t.separator)};else{if(this.notation!==o.r2.HELM)throw new Error;{const e="DNA"===t.alphabet||"RNA"===t.alphabet;this._joiner=function(s){return f(t,s,e)}}}}return this._joiner}getConverter(t,e=undefined){if(t===o.r2.SEPARATOR&&!e)throw new Error(`Target separator is not specified for target units '${o.r2.SEPARATOR}'.`);const s=this;if(t===o.r2.FASTA)return function(t){return function(t,e){const s=t.isHelm()?y(t,e):t.getSplitter()(e);return p(t,s)}(s,t)};if(t===o.r2.HELM)return function(t){return function(t,e){const s=e.startsWith("DNA")||e.startsWith("RNA"),n=t.getSplitter()(e);return f(t,n,s)}(s,t)};if(t===o.r2.SEPARATOR)return function(t){return function(t,e,s){const n=t.isHelm()?y(t,e):t.getSplitter()(e);return g(t,n,s)}(s,t,e)};throw new Error}constructor(t){if(this._splitter=null,this._splitted=null,this._stats=null,this._maxLength=null,this._posList=null,this._joiner=void 0,t.type!==n.TYPE.STRING)throw new Error(`Unexpected column type '${t.type}', must be '${n.TYPE.STRING}'.`);this._column=t;const e=this._column.getTag(n.TAGS.UNITS);if(null==e)throw new Error("Units are not specified in column");if(this._units=e,this._notation=this.getNotation(),this._defaultGapSymbol=this.isFasta()?m[o.r2.FASTA]:this.isHelm()?m[o.r2.HELM]:m[o.r2.SEPARATOR],!this.column.tags.has("aligned")||!this.column.tags.has("alphabet")||!this.column.tags.has(".alphabetIsMultichar")&&!this.isHelm()&&"UN"===this.alphabet)if(this.isFasta())d.setUnitsToFastaColumn(this);else if(this.isSeparator()){const e=t.getTag("separator");d.setUnitsToSeparatorColumn(this,e)}else{if(!this.isHelm())throw new Error(`Unexpected units '${this.column.getTag(n.TAGS.UNITS)}'.`);d.setUnitsToHelmColumn(this)}if(!this.column.tags.has(".alphabetIsMultichar"))if(this.isHelm())this.column.setTag(".alphabetIsMultichar","true");else if(["UN"].includes(this.alphabet))throw new Error(`For column '${this.column.name}' of alphabet '${this.alphabet}' tag '.alphabetIsMultichar' is mandatory.`)}static getOrCreate(t){let e=t.temp[u.uh];return e||(e=t.temp[u.uh]=new d(t)),e}}function p(t,e){const s=new Array(e.length);for(const[n,r]of i().enumerate(e)){let i=n;t.isHelm()&&(i=n.replace(h.pU,"$1")),t.isGap(i)?i=m[o.r2.FASTA]:i.length>1&&(i="["+e[r]+"]"),s[r]=i}return s.join("")}function g(t,e,s){const n=new Array(e.length);for(const[s,r]of i().enumerate(e)){let e=s;t.isGap(e)&&(e=m[o.r2.SEPARATOR]),n[r]=e}return n.map((t=>t??"")).join(s)}function f(t,e,s){const[n,r,a,l]=t.getHelmWrappers();return`${n}${i()(e).map((e=>{let n=e;return n=t.isGap(n)?m[o.r2.HELM]:s?n.replace(h.pU,"$1"):1==e.length?`${r}${e}${a}`:`${r}[${e}]${a}`,n})).toArray().join(".")}${l}`}function y(t,e){const s=t.getSplitter()(e),n=new Array(s.length),r=e.startsWith("DNA"),o=e.startsWith("RNA");for(const[t,e]of i().enumerate(s)){let s=t;(r||o)&&(s=s.replace(h.pU,"$1"),s=s===h.$3?null:s),n[e]=s}return n.filter((t=>null!==t))}},9298:(t,e,s)=>{"use strict";s.d(e,{Ct:()=>l,DX:()=>n,ES:()=>r,dE:()=>a,iD:()=>o,vS:()=>h,vw:()=>i});var n,r,i,o,a,l,c=s(976);!function(t){t.tooltipWebLogo=".tooltipWebLogo"}(n||(n={})),function(t){t.Entropy="Entropy",t.full="100%"}(r||(r={})),function(t){t.TOP="top",t.MIDDLE="middle",t.BOTTOM="bottom"}(i||(i={})),function(t){t.LEFT="left",t.CENTER="center",t.RIGHT="right"}(o||(o={})),function(t){t.AUTO="auto",t.ON="on",t.OFF="off"}(a||(a={})),function(t){t.Filtered="Filtered",t.Selected="Selected"}(l||(l={}));const h=new class{constructor(){this.sequenceColumnName=null,this.valueAggrType=c.AGG.TOTAL_COUNT,this.valueColumnName="Activity",this.startPositionName=null,this.endPositionName=null,this.skipEmptySequences=!0,this.skipEmptyPositions=!1,this.shrinkEmptyTail=!0,this.backgroundColor=4294967295,this.positionHeight=r.Entropy,this.positionWidth=16,this.verticalAlignment=i.MIDDLE,this.horizontalAlignment=o.CENTER,this.fixWidth=!1,this.fitArea=!0,this.minHeight=50,this.maxHeight=100,this.showPositionLabels=!0,this.positionMarginState=a.AUTO,this.positionMargin=0,this.filterSource=l.Filtered}}},922:(t,e,s)=>{"use strict";s.d(e,{_:()=>l});class n{constructor(t){this.init(t)}init(t){this.fileContent=t.replace(/\r/g,""),this._atomCount=void 0,this._atomTypes=void 0,this._bondCount=void 0,this._bondTypes=void 0,this.xyzAtomCoordinates=void 0,this._pairsOfBondedAtoms=void 0}get atomCount(){return void 0===this._atomCount&&this.setAtomAndBondCounts(),this._atomCount}get bondCount(){return void 0===this._bondCount&&this.setAtomAndBondCounts(),this._bondCount}get x(){var t;return null!==(t=this.xyzAtomCoordinates)&&void 0!==t||(this.xyzAtomCoordinates=this.parseAtomCoordinates()),this.xyzAtomCoordinates.x}get y(){var t;return null!==(t=this.xyzAtomCoordinates)&&void 0!==t||(this.xyzAtomCoordinates=this.parseAtomCoordinates()),this.xyzAtomCoordinates.y}get z(){var t;return null!==(t=this.xyzAtomCoordinates)&&void 0!==t||(this.xyzAtomCoordinates=this.parseAtomCoordinates()),this.xyzAtomCoordinates.z}get atomTypes(){var t;return null!==(t=this._atomTypes)&&void 0!==t||(this._atomTypes=this.parseAtomTypes()),this._atomTypes}get pairsOfBondedAtoms(){var t;return null!==(t=this._pairsOfBondedAtoms)&&void 0!==t||(this._pairsOfBondedAtoms=this.parseBondedAtomPairs()),this._pairsOfBondedAtoms}get bondTypes(){var t;return null!==(t=this._bondTypes)&&void 0!==t||(this._bondTypes=this.parseBondTypes()),this._bondTypes}setAtomAndBondCounts(){const{atomCount:t,bondCount:e}=this.parseAtomAndBondCounts();this._atomCount=t,this._bondCount=e}getNextColumnIdx(t){for(;!this.isWhitespace(t);)++t;for(;this.isWhitespace(t);)++t;return t}shiftIdxToSpecifiedColumn(t,e){let s=t;const n=this.isWhitespace(s)?e:e-1;for(let t=0;t<n;t++)s=this.getNextColumnIdx(s);return s}parseAtomTypes(){const t=this.atomCount,e=new Array(t);let s=this.getAtomBlockIdx();for(let n=0;n<t;n++)s=this.shiftIdxToAtomType(s),e[n]=this.parseAtomType(s),s=this.getNextLineIdx(s);return e}parseAtomCoordinates(){const t=new Float32Array(this.atomCount),e=new Float32Array(this.atomCount),s=new Float32Array(this.atomCount);let n=this.getAtomBlockIdx();for(let r=0;r<this.atomCount;r++){n=this.shiftIdxToXColumn(n);for(const i of[t,e,s])i[r]=this.parseFloatValue(n),n=this.getNextColumnIdx(n);n=this.getNextLineIdx(n)}return{x:t,y:e,z:s}}parseBondedAtomPairs(){const t=new Array(this.bondCount);let e=this.getBondBlockIdx();for(let s=0;s<this.bondCount;s++){e=this.shiftIdxToBondedAtomsPair(e);const n=new Uint16Array(2);n[0]=this.parseIntValue(e),e=this.getNextColumnIdx(e),n[1]=this.parseIntValue(e),t[s]=n,e=this.getNextLineIdx(e)}return t}parseBondTypes(){const t=this.bondCount,e=new Uint16Array(t);let s=this.getBondBlockIdx();for(let n=0;n<t;n++)s=this.shiftIdxToBondType(s),e[n]=this.parseIntValue(s),s=this.getNextLineIdx(s);return e}isWhitespace(t){const e=this.fileContent[t];return" "===e||"\t"===e}getNextLineIdx(t){return"\n"!==this.fileContent[t]?this.fileContent.indexOf("\n",t)+1:t+1}parseFloatValue(t){return this.parseNumericValue(parseFloat,t)}parseIntValue(t){return this.parseNumericValue(parseInt,t)}parseNumericValue(t,e){let s=e+1;for(;!this.isWhitespace(s);)++s;return t(this.fileContent.substring(e,s))}}class r extends n{constructor(t){super(t),this.init(t)}init(t){super.init(t)}parseAtomType(t){let e=t,s=e;return this.isQuote(e)?(s=this.getNextIdenticalChar(e),e++):s=this.fileContent.indexOf(" ",s),this.fileContent.substring(e,s)}isQuote(t){const e=this.fileContent[t].charCodeAt(0);return 39===e||34===e}getNextIdenticalChar(t){const e=this.fileContent[t];return e?this.fileContent.indexOf(e,t+1):-1}isQuery(){return this.isQueryOrFragment(((t,e)=>{return 39===t||34===t||76===t&&!((s=this.fileContent.charCodeAt(e+1))>64&&s<91||s>96&&s<123);var s}))}isFragment(){return this.isQueryOrFragment((t=>82===t||42===t))}isQueryOrFragment(t){const e=this.atomCount;let s=this.getAtomBlockIdx();for(let n=0;n<e;n++){if(s=this.shiftIdxToAtomType(s),t(this.fileContent.charCodeAt(s),s))return!0;s=this.getNextLineIdx(s)}return!1}}var i;!function(t){t.HEADER="V2000",t[t.NUM_OF_HEADER_LINES=3]="NUM_OF_HEADER_LINES",t[t.NUM_OF_COUNTS_DIGITS=3]="NUM_OF_COUNTS_DIGITS",t[t.ATOM_TYPE_COL=4]="ATOM_TYPE_COL",t[t.FIRST_BONDED_ATOM_COL=1]="FIRST_BONDED_ATOM_COL",t[t.BOND_TYPE_COL=3]="BOND_TYPE_COL",t[t.RGP_SHIFT=8]="RGP_SHIFT",t.RGP_LINE="M RGP",t.A_LINE="A ",t.END="M END"}(i||(i={}));class o extends r{constructor(t){super(t)}static validate(t){return-1!==t.indexOf(i.HEADER)&&-1!==t.indexOf(i.END)}shiftIdxToAtomType(t){return this.shiftIdxToSpecifiedColumn(t,i.ATOM_TYPE_COL)}getCountsLineIdx(){let t=0;for(let e=0;e<i.NUM_OF_HEADER_LINES;++e)t=this.getNextLineIdx(t);return t}getAtomBlockIdx(){let t=this.getCountsLineIdx();return t=this.getNextLineIdx(t),t}shiftIdxToXColumn(t){return this.getNextColumnIdx(t)}shiftIdxToBondedAtomsPair(t){return this.shiftIdxToSpecifiedColumn(t,i.FIRST_BONDED_ATOM_COL)}shiftIdxToBondType(t){return this.shiftIdxToSpecifiedColumn(t,i.BOND_TYPE_COL)}getBondBlockIdx(){let t=this.getAtomBlockIdx();for(let e=0;e<this.atomCount;e++)t=this.getNextLineIdx(t);return t}parseAtomAndBondCounts(){let t=this.getCountsLineIdx(),e=t+i.NUM_OF_COUNTS_DIGITS;const s=parseInt(this.fileContent.substring(t,e));return t=e,e+=i.NUM_OF_COUNTS_DIGITS,{atomCount:s,bondCount:parseInt(this.fileContent.substring(t,e))}}}class a extends r{constructor(t){super(t),this.init(t)}shiftIdxToAtomType(t){return this.shiftIdxToSpecifiedColumn(t,4)}getCountsLineIdx(){return this.fileContent.indexOf("M V30 COUNTS ")}getAtomBlockIdx(){let t=this.fileContent.indexOf("M V30 BEGIN ATOM");return t=this.getNextLineIdx(t),t}shiftIdxToXColumn(t){let e=this.shiftIdxToAtomType(t);return this.isQuote(e)?(e=this.getNextIdenticalChar(e),e=this.getNextColumnIdx(e),e):this.shiftIdxToSpecifiedColumn(t,5)}shiftIdxToBondedAtomsPair(t){return this.shiftIdxToSpecifiedColumn(t,5)}shiftIdxToBondType(t){return this.shiftIdxToSpecifiedColumn(t,4)}getBondBlockIdx(){return this.getNextLineIdx(this.fileContent.indexOf("M V30 BEGIN BOND"))}static validate(t){return-1!==t.indexOf("V3000")&&-1!==t.indexOf("M END")}parseAtomAndBondCounts(){let t=this.fileContent.indexOf("M V30 COUNTS ")+14,e=this.fileContent.indexOf(" ",t+1);const s=parseInt(this.fileContent.substring(t,e));return t=e+1,e=this.fileContent.indexOf(" ",t+1),{atomCount:s,bondCount:parseInt(this.fileContent.substring(t,e))}}}class l{constructor(){}static getInstance(t){if(o.validate(t))return new o(t);if(a.validate(t))return new a(t);throw new Error("Malformed molfile")}}},2198:(t,e,s)=>{"use strict";s.d(e,{g:()=>r}),t=s.hmd(t);var n,r=(n="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0,function(t={}){var e,s,r=void 0!==t?t:{};r.ready=new Promise((function(t,n){e=t,s=n}));var i,o=Object.assign({},r),a="object"==typeof window,l="function"==typeof importScripts,c=("object"==typeof process&&"object"==typeof process.versions&&process.versions.node,"");(a||l)&&(l?c=self.location.href:"undefined"!=typeof document&&document.currentScript&&(c=document.currentScript.src),n&&(c=n),c=0!==c.indexOf("blob:")?c.substr(0,c.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 h,u,m=r.printErr||console.warn.bind(console);Object.assign(r,o),o=null,r.arguments&&r.arguments,r.thisProgram&&r.thisProgram,r.quit&&r.quit,r.wasmBinary&&(h=r.wasmBinary),r.noExitRuntime,"object"!=typeof WebAssembly&&E("no native wasm support detected");var d,p,g,f=!1;function y(){var t=u.buffer;r.HEAP8=d=new Int8Array(t),r.HEAP16=new Int16Array(t),r.HEAP32=new Int32Array(t),r.HEAPU8=p=new Uint8Array(t),r.HEAPU16=new Uint16Array(t),r.HEAPU32=g=new Uint32Array(t),r.HEAPF32=new Float32Array(t),r.HEAPF64=new Float64Array(t)}var w=[],C=[],b=[],T=0,A=null,S=null;function E(t){r.onAbort&&r.onAbort(t),m(t="Aborted("+t+")"),f=!0,t+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(t);throw s(e),e}var v,M,x="data:application/octet-stream;base64,";function N(t){return t.startsWith(x)}function L(t){try{if(t==v&&h)return new Uint8Array(h);if(i)return i(t);throw"both async and sync fetching of the wasm failed"}catch(t){E(t)}}function _(t,e,s){return function(t){return h||!a&&!l||"function"!=typeof fetch?Promise.resolve().then((function(){return L(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 L(t)}))}(t).then((function(t){return WebAssembly.instantiate(t,e)})).then((function(t){return t})).then(s,(function(t){m("failed to asynchronously prepare wasm: "+t),E(t)}))}function P(t){for(;t.length>0;)t.shift()(r)}function R(t){this.excPtr=t,this.ptr=t-24,this.set_type=function(t){g[this.ptr+4>>2]=t},this.get_type=function(){return g[this.ptr+4>>2]},this.set_destructor=function(t){g[this.ptr+8>>2]=t},this.get_destructor=function(){return g[this.ptr+8>>2]},this.set_caught=function(t){t=t?1:0,d[this.ptr+12>>0]=t},this.get_caught=function(){return 0!=d[this.ptr+12>>0]},this.set_rethrown=function(t){t=t?1:0,d[this.ptr+13>>0]=t},this.get_rethrown=function(){return 0!=d[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){g[this.ptr+16>>2]=t},this.get_adjusted_ptr=function(){return g[this.ptr+16>>2]},this.get_exception_ptr=function(){if(V(this.get_type()))return g[this.excPtr>>2];var t=this.get_adjusted_ptr();return 0!==t?t:this.excPtr}}function I(t){var e=u.buffer;try{return u.grow(t-e.byteLength+65535>>>16),y(),1}catch(t){}}function O(t){return r["_"+t]}N(v="wasmDbscan.wasm")||(M=v,v=r.locateFile?r.locateFile(M,c):c+M);var G="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function F(t,e,s,n,r){var i={string:t=>{var e=0;return null!=t&&0!==t&&(e=function(t){var e=function(t){for(var e=0,s=0;s<t.length;++s){var n=t.charCodeAt(s);n<=127?e++:n<=2047?e+=2:n>=55296&&n<=57343?(e+=4,++s):e+=3}return e}(t)+1,s=B(e);return function(t,e,s){!function(t,e,s,n){if(!(n>0))return 0;for(var r=s+n-1,i=0;i<t.length;++i){var o=t.charCodeAt(i);if(o>=55296&&o<=57343&&(o=65536+((1023&o)<<10)|1023&t.charCodeAt(++i)),o<=127){if(s>=r)break;e[s++]=o}else if(o<=2047){if(s+1>=r)break;e[s++]=192|o>>6,e[s++]=128|63&o}else if(o<=65535){if(s+2>=r)break;e[s++]=224|o>>12,e[s++]=128|o>>6&63,e[s++]=128|63&o}else{if(s+3>=r)break;e[s++]=240|o>>18,e[s++]=128|o>>12&63,e[s++]=128|o>>6&63,e[s++]=128|63&o}}e[s]=0}(t,p,e,s)}(t,s,e),s}(t)),e},array:t=>{var e,s,n=B(t.length);return e=t,s=n,d.set(e,s),n}},o=O(t),a=[],l=0;if(n)for(var c=0;c<n.length;c++){var h=i[s[c]];h?(0===l&&(l=W()),a[c]=h(n[c])):a[c]=n[c]}var u=o.apply(null,a);return function(t){return 0!==l&&k(l),function(t){return"string"===e?(s=t)?function(t,e,s){for(var n=e+s,r=e;t[r]&&!(r>=n);)++r;if(r-e>16&&t.buffer&&G)return G.decode(t.subarray(e,r));for(var i="";e<r;){var o=t[e++];if(128&o){var a=63&t[e++];if(192!=(224&o)){var l=63&t[e++];if((o=224==(240&o)?(15&o)<<12|a<<6|l:(7&o)<<18|a<<12|l<<6|63&t[e++])<65536)i+=String.fromCharCode(o);else{var c=o-65536;i+=String.fromCharCode(55296|c>>10,56320|1023&c)}}else i+=String.fromCharCode((31&o)<<6|a)}else i+=String.fromCharCode(o)}return i}(p,s,n):"":"boolean"===e?Boolean(t):t;var s,n}(t)}(u)}var H,D={__cxa_throw:function(t,e,s){throw new R(t).init(e,s),t},abort:function(){E("")},emscripten_memcpy_big:function(t,e,s){p.copyWithin(t,e,e+s)},emscripten_resize_heap:function(t){var e,s=p.length,n=2147483648;if((t>>>=0)>n)return!1;for(var r=1;r<=4;r*=2){var i=s*(1+.2/r);if(i=Math.min(i,t+100663296),I(Math.min(n,(e=Math.max(t,i))+(65536-e%65536)%65536)))return!0}return!1}},W=(function(){var t,e,n,i,o={env:D,wasi_snapshot_preview1:D};function a(t,e){var s,n=t.exports;return r.asm=n,u=r.asm.memory,y(),r.asm.__indirect_function_table,s=r.asm.__wasm_call_ctors,C.unshift(s),function(t){if(T--,r.monitorRunDependencies&&r.monitorRunDependencies(T),0==T&&(null!==A&&(clearInterval(A),A=null),S)){var e=S;S=null,e()}}(),n}if(T++,r.monitorRunDependencies&&r.monitorRunDependencies(T),r.instantiateWasm)try{return r.instantiateWasm(o,a)}catch(t){m("Module.instantiateWasm callback failed with error: "+t),s(t)}(t=h,e=v,n=o,i=function(t){a(t.instance)},t||"function"!=typeof WebAssembly.instantiateStreaming||N(e)||"function"!=typeof fetch?_(e,n,i):fetch(e,{credentials:"same-origin"}).then((function(t){return WebAssembly.instantiateStreaming(t,n).then(i,(function(t){return m("wasm streaming compile failed: "+t),m("falling back to ArrayBuffer instantiation"),_(e,n,i)}))}))).catch(s)}(),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(W=r.asm.stackSave).apply(null,arguments)}),k=function(){return(k=r.asm.stackRestore).apply(null,arguments)},B=function(){return(B=r.asm.stackAlloc).apply(null,arguments)},V=function(){return(V=r.asm.__cxa_is_pointer_type).apply(null,arguments)};function U(){function t(){H||(H=!0,r.calledRun=!0,f||(P(C),e(r),r.onRuntimeInitialized&&r.onRuntimeInitialized(),function(){if(r.postRun)for("function"==typeof r.postRun&&(r.postRun=[r.postRun]);r.postRun.length;)t=r.postRun.shift(),b.unshift(t);var t;P(b)}()))}T>0||(function(){if(r.preRun)for("function"==typeof r.preRun&&(r.preRun=[r.preRun]);r.preRun.length;)t=r.preRun.shift(),w.unshift(t);var t;P(w)}(),T>0||(r.setStatus?(r.setStatus("Running..."),setTimeout((function(){setTimeout((function(){r.setStatus("")}),1),t()}),1)):t()))}if(r.ccall=F,r.cwrap=function(t,e,s,n){var r=!s||s.every((t=>"number"===t||"boolean"===t));return"string"!==e&&r&&!n?O(t):function(){return F(t,e,s,arguments)}},S=function t(){H||U(),H||(S=t)},r.preInit)for("function"==typeof r.preInit&&(r.preInit=[r.preInit]);r.preInit.length>0;)r.preInit.pop()();return U(),t.ready});"object"==typeof exports?t.exports=r:"function"==typeof define&&s.amdO?define([],(function(){return r})):"object"==typeof exports&&(exports.exportCppDbscanLib=r)},2669:(t,e,s)=>{"use strict";s.d(e,{m:()=>n});class n{constructor(t=!0,e=!0){const n=navigator.hardwareConcurrency;this._workerCount=t?Math.max(n-2,1):1,this._workers=new Array(this._workerCount).fill(null).map((()=>new Worker(new URL(s.p+s.u(65),s.b)))),this._terminateOnComplete=e}async calc(t,e,s=!0,n){return new Promise((async(r,i)=>{try{const i=t.length,o=new Array(this._workerCount),a=i*(i-1)/2;this._workerCount=Math.min(this._workerCount,a);const l=a/this._workerCount,c=new Float32Array(a);let h=0,u=1,m=0,d=Number.MIN_VALUE;for(let s=0;s<this._workerCount;s++){const r=Math.floor(s*l),p=s===this._workerCount-1?a:Math.floor((s+1)*l),g=h,f=u;s!==this._workerCount-1&&(h=i-2-Math.floor(Math.sqrt(-8*p+4*i*(i-1)-7)/2-.5),u=p-i*h+Math.floor((h+1)*(h+2)/2)),this._workers[s].postMessage({values:t,fnName:e,startRow:g,startCol:f,chunckSize:p-r,opts:n}),o[s]=new Promise(((t,e)=>{this._workers[s].onmessage=({data:{error:n,distanceMatrixData:i,min:o,max:a}})=>{this._terminateOnComplete&&this._workers[s].terminate(),n?e(n):(c.set(i,r),o<m&&(m=o),a>d&&(d=a),t())}}))}await Promise.all(o),s&&c.forEach(((t,e)=>{c[e]=(t-m)/(d-m)})),r(c)}catch(t){i(t)}}))}terminate(){this._workers.forEach((t=>t.terminate()))}}},3914:(t,e,s)=>{"use strict";s.d(e,{H:()=>r});var n=s(6814);class r{get data(){return this._data}get size(){return this._size}constructor(t,e){if(null==e){if(null==t)throw new Error("Arguments error: data or size is required.");if(this._data=t,this._size=(1+Math.sqrt(1+8*this._data.length))/2,this._size!=Math.floor(this._size))throw new Error(`Invalid data length ${this._data.length} leads to non integer size ${this._size}`)}else{this._size=e;const s=e*(e-1)/2;if(t){if(t.length!=s)throw new Error(`Invalid data length. Observations size ${e} requires data length ${s}.`);this._data=t}else this._data=new Float32Array(s)}}_linearizeIJ(t,e){if(!(t<e))throw new Error("i must be less than j");return this._size*t+e-Math.floor((t+2)*(t+1)/2)}get(t,e){return t==e?0:t<e?this._data[this._linearizeIJ(t,e)]:this._data[this._linearizeIJ(e,t)]}set(t,e,s){this._data[this._linearizeIJ(t,e)]=s}static calc(t,e){const s=t.length,i=new r(void 0,s);for(let r=0;r<s;r++)for(let o=r+1;o<s;o++)i.set(r,o,(0,n.k)(t[r])||(0,n.k)(t[o])?1:e(t[r],t[o]));return i}square(){for(let t=0;t<this._data.length;t++)this._data[t]=this._data[t]**2}add(t){if(this._size!==t._size)throw new Error(`Matrices must have the same size. This size: ${this._size}, other size: ${t._size}`);for(let e=0;e<this._data.length;e++)this._data[e]+=t._data[e]}sqrt(){for(let t=0;t<this._data.length;t++)this._data[t]=Math.sqrt(this._data[t])}normalize(){let t=0,e=this._data[0];for(let s=0;s<this._data.length;s++)this._data[s]<t&&(t=this._data[s]),this._data[s]>e&&(e=this._data[s]);const s=e-t;for(let n=0;n<this._data.length;n++)this._data[n]=0===s?this._data[n]-t:(this._data[n]-t)/(e-t)}}},6254:(t,e,s)=>{"use strict";function n(t,e){const s=r(e);function n(t,e){const n=Number(t),r=Number(e);return s(n,r)}const i={get:(t,s,r)=>"length"===s?e:new Proxy(t,function(t){return{get:(e,s,r)=>t===s?0:e[Number(t)>Number(s)?n(s,t):n(t,s)]}}(s))};return new Proxy(t,i)}function r(t){return(e,s)=>t*e+s-Math.floor((e+2)*(e+1)/2)}s.d(e,{_:()=>n,y:()=>r})},2590:(t,e,s)=>{"use strict";s.d(e,{_:()=>o});var n=s(5697),r=s(6361),i=s(6814);class o{constructor(){this._workerCount=Math.max(navigator.hardwareConcurrency-2,1)}async calc(t,e,n,r={}){const i=t.length*(t.length-1)/2,o=Math.floor(i/this._workerCount),a=t.length>2e4?await this.getMinimalThreshold(t,e,r):0;n<a&&(console.log(`using threshold ${a}`),n=a),r.threshold=n;const l=new Array(this._workerCount),c=new Array(this._workerCount).fill(null).map((()=>new Worker(new URL(s.p+s.u(23),s.b))));for(let s=0;s<this._workerCount;s++)l[s]=new Promise(((a,l)=>{const h=s*o,u=s===this._workerCount-1?i:(s+1)*o;u<=h&&a({i:new Int32Array(0),j:new Int32Array(0),distance:new Float32Array(0),idx:s}),c[s].postMessage({values:t,startIdx:h,endIdx:u,threshold:n,fnName:e,opts:r}),c[s].onmessage=({data:{error:t,i:e,j:n,distance:r}})=>{t?(c[s].terminate(),l(t)):(c[s].terminate(),a({i:e,j:n,distance:r,idx:s}))}}));const h=await Promise.all(l),u=h.reduce(((t,e)=>t+e.i.length),0),m=new Int32Array(u),d=new Int32Array(u),p=new Float32Array(u);let g=0;for(const t of h)m.set(t.i,g),d.set(t.j,g),p.set(t.distance,g),g+=t.i.length;return{i:m,j:d,distance:p}}async getKNN(t,e,n=15,r={}){const o=t.length*(t.length-1)/2,a=Math.floor(o/this._workerCount),l=new Array(this._workerCount),c=new Array(this._workerCount).fill(null).map((()=>new Worker(new URL(s.p+s.u(282),s.b))));for(let s=0;s<this._workerCount;s++)l[s]=new Promise(((i,l)=>{const h=s*a,u=s===this._workerCount-1?o:(s+1)*a;u<=h&&i({knnDistances:new Array(0),knnIndexes:new Array(0)}),c[s].postMessage({values:t,startIdx:h,endIdx:u,fnName:e,opts:r,nNeighbours:n}),c[s].onmessage=({data:{error:t,knnDistances:e,knnIndexes:n}})=>{t?(c[s].terminate(),l(t)):(c[s].terminate(),i({knnDistances:e,knnIndexes:n}))}}));const h=await Promise.all(l),u={knnDistances:new Array(t.length).fill(null).map((()=>new Array(n).fill(99999))),knnIndexes:new Array(t.length).fill(null).map((()=>new Array(n).fill(-1)))};for(const e of h)for(let s=0;s<t.length;++s)for(let t=0;t<e.knnDistances[s]?.length;++t)(0,i.c)(u.knnDistances[s],u.knnIndexes[s],e.knnDistances[s][t],e.knnIndexes[s][t]);return u}async getSampleDistances(t,e,n={}){const r=new Array(this._workerCount).fill(null).map((()=>new Worker(new URL(s.p+s.u(40),s.b)))),i=t.slice();for(let t=i.length-1;t>0;t--){const e=Math.floor(Math.random()*(t+1));[i[t],i[e]]=[i[e],i[t]]}try{const s=t.length*(t.length-1)/2,o=Math.floor(s/this._workerCount),a=1e6,l=Math.max(Math.min(s/1e3,a),Math.min(s,a)),c=Math.floor(l/this._workerCount),h=new Array(this._workerCount);for(let t=0;t<this._workerCount;t++)h[t]=new Promise(((a,l)=>{const h=t*o,u=t===this._workerCount-1?s:(t+1)*o;r[t].postMessage({values:i,startIdx:h,endIdx:u,sampleLength:c,fnName:e,opts:n}),r[t].onmessage=({data:{error:e,distance:s}})=>{r[t].terminate(),e?l(e):a({distance:s})}}));const u=await Promise.all(h),m=u.reduce(((t,e)=>t+e.distance.length),0),d=new Float32Array(m);let p=0;for(const t of u)d.set(t.distance,p),p+=t.distance.length;return d.sort(),d}catch(t){return r?.forEach((t=>t?.terminate())),console.error(t),new Float32Array(1).fill(.5)}}async getMinimalThreshold(t,e,s={}){try{const n=t.length*(t.length-1)/2,r=await this.getSampleDistances(t,e,s);return 1-r[Math.floor(7e7/n*r.length)]}catch(t){return console.error(t),.5}}static calcSync(t,e,s,o){const a=[],l=[],c=[];let h=0,u=0,m=0;const d=t.length*(t.length-1)/2;for(;h<d;){const d=(0,i.k)(t[u])||(0,i.k)(t[m])?1:s(t[u],t[m]);(Object.values(r.gk).some((t=>t===e))?(0,n.Om)(d):1-d)>=o&&(a.push(u),l.push(m),c.push(d)),h++,m++,m===t.length&&(u++,m=u+1)}return{i:new Int32Array(a),j:new Int32Array(l),distance:new Float32Array(c)}}}},6814:(t,e,s)=>{"use strict";s.d(e,{c:()=>r,k:()=>n});const n=t=>null==t;function r(t,e,s,n){if(s>t[t.length-1])return;const r=t.findIndex((t=>s>t))+1;t.pop(),t.splice(r,0,s),e.pop(),e.splice(r,0,n)}},5697:(t,e,s)=>{"use strict";s.d(e,{Dz:()=>w,FV:()=>c,KR:()=>l,MI:()=>b,NB:()=>p,Om:()=>T,UX:()=>d,WI:()=>m,Zd:()=>u,_h:()=>h,aW:()=>f,bX:()=>S,eo:()=>A,fX:()=>C,kg:()=>o,s:()=>g,yU:()=>y});var n=s(9657),r=s(1040),i=s(489);r.gk.Tanimoto,r.gk.Dice,r.gk.Asymmetric,r.gk.BraunBlanquet,r.gk.Cosine,r.gk.Kulczynski,r.gk.McConnaughey,r.gk.RogotGoldberg,r.gk.Russel,r.gk.Sokal,r.gk.Hamming,r.gk.Euclidean,r.gk.Tanimoto,r.gk.Dice,r.gk.Asymmetric,r.gk.BraunBlanquet,r.gk.Cosine,r.gk.Kulczynski,r.gk.McConnaughey,r.gk.RogotGoldberg,r.gk.Russel,r.gk.Sokal,r.gk.Hamming,r.gk.Euclidean;const o=[r.gk.Tanimoto,r.gk.Dice,r.gk.Cosine];function a(t,e){const s=t.trueCount()+e.trueCount();if(0==s)return 1;const n=t.andWithCountBits(e,!0);return n/(s-n)}function l(t,e){return A(a(t,e))}function c(t,e){return A(a(new n.Z(t,32*t.length),new n.Z(e,32*e.length)))}function h(t,e){return A(function(t,e){const s=t.trueCount()+e.trueCount();return 0==s?0:2*t.andWithCountBits(e,!0)/s}(t,e))}function u(t,e){return A(function(t,e){const s=t.trueCount()*e.trueCount();return 0==s?0:t.andWithCountBits(e,!0)/Math.sqrt(s)}(t,e))}function m(t,e){return Math.sqrt(t.trueCount()+e.trueCount()-2*t.andWithCountBits(e,!0))}function d(t,e){return t.trueCount()+e.trueCount()-2*t.andWithCountBits(e,!0)}function p(t,e){return A(function(t,e){const s=t.trueCount()+e.trueCount(),n=t.andWithCountBits(e,!0);return n/(2*s-3*n)}(t,e))}function g(t,e){return A(function(t,e){const s=t.trueCount()+e.trueCount(),n=t.trueCount()*e.trueCount();return 0==n?0:t.andWithCountBits(e,!0)*s/(2*n)}(t,e))}function f(t,e){return A(function(t,e){const s=t.trueCount()+e.trueCount(),n=t.trueCount()*e.trueCount();return 0==n?0:(t.andWithCountBits(e,!0)*s-n)/n}(t,e))}function y(t,e){return A(function(t,e){const s=Math.min(t.trueCount(),e.trueCount());return 0==s?0:t.andWithCountBits(e,!0)/s}(t,e))}function w(t,e){return A(function(t,e){const s=Math.max(t.trueCount(),e.trueCount());return 0==s?0:t.andWithCountBits(e,!0)/s}(t,e))}function C(t,e){return A(function(t,e){return 0==t.length?0:t.andWithCountBits(e,!0)/t.length}(t,e))}function b(t,e){return A(function(t,e){const s=t.andWithCountBits(e,!0),n=t.countBits(!0)+e.countBits(!0),r=t.length,i=r-n+s;return s==r||i==r?1:s/n+i/(2*r-n)}(t,e))}function T(t){return 1/(1+t)}function A(t){return 0===t?3402823e32:1/t-1}function S(t,e){return Math.abs(t-e)}r.gk.Tanimoto,r.gk.Asymmetric,r.gk.Cosine,r.gk.Sokal,i.U.HAMMING,i.U.LEVENSHTEIN,i.U.MONOMER_CHEMICAL_DISTANCE,i.U.NEEDLEMANN_WUNSCH},3277:(t,e,s)=>{"use strict";s.d(e,{sS:()=>n});const n="bypassLargeDataWarning"},779:(t,e,s)=>{"use strict";function n(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,s=t.scoringMatrix,n=Math.min(...Object.keys(e).map((t=>t.charCodeAt(0))))+1,r=new Float32Array((s.length+n)*(s.length+n));return Object.entries(e).forEach((([t,n])=>{const i=s[n];Object.entries(e).forEach((([e,n])=>{r[t.charCodeAt(0)*s.length+e.charCodeAt(0)]=i[n]}))})),(t,e)=>r[t.charCodeAt(0)*s.length+e.charCodeAt(0)]}(),s=t?.threshold??0;return(t,n)=>{let r=0;const i=t.length,o=n.length,a=Math.max(i,o)*(1-s);i!==o&&(r=Math.abs(i-o));let l=0;for(let s=0;s<Math.min(i,o);s++)if(t[s]!==n[s]&&(l+=e(t[s],n[s]),l>a))return 1;return l+=r,l/=Math.max(i,o),l}}s.d(e,{j:()=>n})},489:(t,e,s)=>{"use strict";s.d(e,{U:()=>n.U,o:()=>n.o});var n=s(5540)},458:(t,e,s)=>{"use strict";s.d(e,{r:()=>r});var n=s(1811);function r(){return(t,e)=>(0,n.T)(t,e)/Math.max(t.length,e.length)}},5540:(t,e,s)=>{"use strict";s.d(e,{U:()=>n,o:()=>a});var n,r=s(779),i=s(458),o=s(6683);!function(t){t.HAMMING="Hamming",t.LEVENSHTEIN="Levenshtein",t.NEEDLEMANN_WUNSCH="Needlemann-Wunsch",t.MONOMER_CHEMICAL_DISTANCE="Monomer chemical distance"}(n||(n={}));const a={[n.HAMMING]:r.j,[n.LEVENSHTEIN]:i.r,[n.NEEDLEMANN_WUNSCH]:o.n,[n.MONOMER_CHEMICAL_DISTANCE]:r.j}},6683:(t,e,s)=>{"use strict";s.d(e,{n:()=>r});const n={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}};function r(t){const e=new Uint16Array(65536),{gapOpen:s,gapExtend:r,scoringMatrix:i,alphabetIndexes:o}={...n,...t};Object.entries(o).forEach((([t,s])=>e[t.charCodeAt(0)]=s));const a=[new Float32Array(1e4),new Float32Array(1e4)];return(t,n)=>{const o=new Array(t.length+1).fill(!1),l=new Array(t.length+1).fill(!1);let c=0,h=1;for(let e=1;e<t.length+1;e++)a[0][e]=-s-(e-1)*r,a[1][e]=0;for(let u=1;u<n.length+1;u++){a[h][0]=-s-(u-1)*r;for(let m=1;m<t.length+1;m++){const d=a[c][m-1]+i[e[t.charCodeAt(m-1)]][e[n.charCodeAt(u-1)]],p=a[c][m]-(o[m]?r:s),g=a[h][m-1]-(l[m-1]?r:s);a[h][m]=Math.max(d,g,p),a[h][m]===d?(o[m]=!1,l[m]=!1):a[h][m]===g?(o[m]=!1,l[m]=!0):(o[m]=!0,l[m]=!1)}c=h,h=(h+1)%2}const u=Math.max(t.length,n.length);return(u-a[c][t.length])/u}}},116:(t,e,s)=>{"use strict";var n;s.d(e,{AL:()=>n}),s(7659),s(3659),s(850),s(9006),s(7861),s(9657),s(1729),s(2669),s(3914),s(6254),s(2590),function(t){t.UMAP="UMAP",t.T_SNE="t-SNE"}(n||(n={}))},9006:(t,e,s)=>{"use strict";s.d(e,{Ek:()=>l,a1:()=>a,nR:()=>c});var n=s(850),r=s(4588),i=s(6254),o=s(2669);class a{constructor(t){this.steps=t?.steps??0,this.cycles=t?.cycles??1e6,this.cutoff=t?.cutoff??0,this.lambda=t?.lambda??2,this.dlambda=t?.dlambda??.01,this.lambda2=this.lambda/2,this.dlambda2=this.dlambda/2,this.epsilon=t?.epsilon??1e-10,this.distanceFunction=t?.distance??n.dP,this.distance=new Float32Array,this.distanceFunctionName=t?.distanceFunctionName}async initDistance(t){this.dmIndexFunct=(0,i.y)(t.length);const e=new o.m(!0,!1);this.distance=await e.calc(t,this.distanceFunctionName),e.terminate()}calcDistance(t,e,s){return this.distance[this.dmIndexFunct(e,s)]}async embed(t){const e=t.length,s=(0,n.kO)(e,a.dimension,40);let i=this.lambda2;0===this.steps&&(this.steps=t.length-1),await this.initDistance(t);for(let o=0;o<this.cycles;++o){for(let o=0;o<this.steps;++o){const o=(0,r.I)(e);let a=(0,r.I)(e);for(;o==a;)a=(0,r.I)(e);const l=s[o],c=s[a],h=this.calcDistance(t,o,a),u=(0,n.dP)(l,c);if(0==this.cutoff||h<=this.cutoff||u<h){const t=i*(h-u)/(u+this.epsilon),e=(0,n.On)(l,c,-1);s[o]=(0,n.On)(l,e,t),s[a]=(0,n.On)(c,e,-t)}}if(i-=this.dlambda2,i<=0)break}return s}}a.dimension=2;class l extends a{async embed(t){const e=t.length,s=(0,n.kO)(e,l.dimension,40);let i=this.lambda;await this.initDistance(t);for(let o=0;o<this.cycles;++o){const o=(0,r.I)(e),a=s[o];for(let r=0;r<e;++r){if(o==r)continue;const e=s[r],l=this.calcDistance(t,o,r),c=(0,n.dP)(a,e);if(0==this.cutoff||l<=this.cutoff||c<l){const t=i*(l-c)/(c+this.epsilon),o=(0,n.On)(a,e,-1);s[r]=(0,n.On)(e,o,-t)}}if(i-=this.dlambda,i<=0)break}return s}}class c extends a{constructor(t){super(t),this.cycles=t?.cycles??1e3,this.steps=t?.steps??1e5,this.radiusPercent=t?.radiusPercent??1,this.maxDistance=t?.maxDistance??null,this.maxDistanceSteps=t?.maxDistanceSteps??null}async embed(t){const e=t.length,s=(0,n.kO)(e,c.dimension,40);if(await this.initDistance(t),null===this.maxDistanceSteps&&(this.maxDistanceSteps=e*Math.floor((e-1)/2)),null===this.maxDistance){this.maxDistance=-1e37;for(let s=0;s<this.maxDistanceSteps;s++){const s=(0,r.I)(e);let n=(0,r.I)(e);for(;s==n;)n=(0,r.I)(e);const i=this.calcDistance(t,s,n);i>this.maxDistance&&(this.maxDistance=i)}}let i=this.lambda;const o=0==this.radiusPercent?this.maxDistance:this.maxDistance*this.radiusPercent;for(let a=0;a<this.cycles;++a){for(let a=0;a<this.steps;++a){const a=(0,r.I)(e);let l=(0,r.I)(e);for(;a==l;)l=(0,r.I)(e);const c=s[a],h=s[l],u=this.calcDistance(t,a,l),m=(0,n.dP)(c,h);if(u<=o||m<u){const t=.5*i*(u-m)/(m+this.epsilon),e=(0,n.On)(c,h,-1);s[a]=(0,n.On)(c,e,t),s[l]=(0,n.On)(h,e,-t)}}if(i-=(this.lambda-this.dlambda)/(this.cycles-1),i<this.dlambda)break}return s}}},1040:(t,e,s)=>{"use strict";var n,r,i,o,a,l;s.d(e,{CF:()=>r,Qe:()=>a,W:()=>n,Yc:()=>l,gd:()=>o,gk:()=>i}),function(t){t.Levenshtein="Levenshtein",t.JaroWinkler="Jaro-Winkler",t.Manhattan="Manhattan"}(n||(n={})),function(t){t.Euclidean="Euclidean"}(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"}(i||(i={})),function(t){t.TanimotoIntArray="TanimotoIntArray"}(o||(o={})),function(t){t.Vector="Vector",t.String="String",t.BitArray="BitArray",t.MacroMolecule="MacroMolecule",t.Number="Number",t.IntArray="IntArray"}(a||(a={})),function(t){t.Difference="Difference"}(l||(l={}))},6361:(t,e,s)=>{"use strict";s.d(e,{gk:()=>n.gk});var n=s(1040);s(7861)},7861:(t,e,s)=>{"use strict";var n=s(1811),r=s(3979),i=s(5697),o=s(850),a=s(489),l=s(1040);const c={[l.CF.Euclidean]:o.dP},h={[l.W.Levenshtein]:n.T,[l.W.JaroWinkler]:r.H$,[l.W.Manhattan]:function(t,e){if(t.length!==e.length)return 1;{let s=0;for(let n=1;n<t.length;n++)s+=t[n]==e[n]?0:1;return s/t.length}}},u={[l.gk.Tanimoto]:i.KR,[l.gk.Dice]:i._h,[l.gk.Asymmetric]:i.yU,[l.gk.BraunBlanquet]:i.Dz,[l.gk.Cosine]:i.Zd,[l.gk.Kulczynski]:i.s,[l.gk.McConnaughey]:i.aW,[l.gk.RogotGoldberg]:i.MI,[l.gk.Russel]:i.fX,[l.gk.Sokal]:i.NB,[l.gk.Hamming]:i.UX,[l.gk.Euclidean]:i.WI},m={[l.gd.TanimotoIntArray]:i.FV},d={[l.Yc.Difference]:i.bX},p={[l.Qe.Vector]:{[l.CF.Euclidean]:c[l.CF.Euclidean]},[l.Qe.String]:{[l.W.Levenshtein]:h[l.W.Levenshtein],[l.W.JaroWinkler]:h[l.W.JaroWinkler],[l.W.Manhattan]:h[l.W.Manhattan]},[l.Qe.BitArray]:{[l.gk.Tanimoto]:u[l.gk.Tanimoto],[l.gk.Dice]:u[l.gk.Dice],[l.gk.Asymmetric]:u[l.gk.Asymmetric],[l.gk.BraunBlanquet]:u[l.gk.BraunBlanquet],[l.gk.Cosine]:u[l.gk.Cosine],[l.gk.Kulczynski]:u[l.gk.Kulczynski],[l.gk.McConnaughey]:u[l.gk.McConnaughey],[l.gk.RogotGoldberg]:u[l.gk.RogotGoldberg],[l.gk.Russel]:u[l.gk.Russel],[l.gk.Sokal]:u[l.gk.Sokal]},[l.Qe.MacroMolecule]:{[a.U.HAMMING]:a.o[a.U.HAMMING],[a.U.LEVENSHTEIN]:a.o[a.U.LEVENSHTEIN],[a.U.NEEDLEMANN_WUNSCH]:a.o[a.U.NEEDLEMANN_WUNSCH],[a.U.MONOMER_CHEMICAL_DISTANCE]:a.o[a.U.MONOMER_CHEMICAL_DISTANCE]},[l.Qe.Number]:{[l.Yc.Difference]:d[l.Yc.Difference]},[l.Qe.IntArray]:{[l.gd.TanimotoIntArray]:m[l.gd.TanimotoIntArray]}};Object.keys(p).reduce(((t,e)=>{for(const s of Object.keys(p[e]))t[s]=e;return t}),{})},6490:(t,e,s)=>{"use strict";s.d(e,{M6:()=>i,SB:()=>l,Sr:()=>a,VA:()=>r,XV:()=>o,oi:()=>c,w5:()=>u});var n=s(9533);function r(t,e){const s=s=>n.cS(t).map((()=>n.VI(e,s))),r=[];return r.push(s(-1)),r.push(s(1/0)),r.push(s(0)),r}function i(t,e,s){const r=n.ll(t);for(let i=0;i<t;i++){let t=!0,o=0;for(;t;){o=n.AH(e,s);let a=!1;for(let t=0;t<i;t++)if(o===r[t]){a=!0;break}a||(t=!1)}r[i]=o}return r}function o(t,e,s,n,r){e=Math.floor(e);const i=t[0][e],o=t[1][e];if(t[2][e],s>=o[0])return 0;for(let t=0;t<i.length;t++)if(n===i[t])return 0;return a(t,e,s,n,r)}function a(t,e,s,n,r){const i=t[0][e],o=t[1][e],a=t[2][e];if(s>=o[0])return 0;o[0]=s,i[0]=n,a[0]=r;let l=0,c=0;for(;;){const e=2*l+1,n=e+1,r=t[0][0].length;if(e>=r)break;if(n>=r){if(!(o[e]>s))break;c=e}else if(o[e]>=o[n]){if(!(s<o[e]))break;c=e}else{if(!(s<o[n]))break;c=n}o[l]=o[c],i[l]=i[c],a[l]=a[c],l=c}return o[l]=s,i[l]=n,a[l]=r,1}function l(t,e,s,i,a){const l=r(e,i);for(let r=0;r<e;r++)for(let e=0;e<s;e++){if(t[0][r][e]<0)continue;const s=t[0][r][e],i=t[2][r][e],c=n.mH(a);o(l,r,c,s,i),o(l,s,c,r,i),t[2][r][e]=0}return l}function c(t){const e=t[0],s=t[1];for(let t=0;t<e.length;t++){const n=e[t],r=s[t];for(let t=0;t<n.length-1;t++){const e=n.length-t-1,s=r.length-t-1,i=n[0];n[0]=n[e],n[e]=i;const o=r[0];r[0]=r[s],r[s]=o,h(r,n,s,0)}}return{indices:e,weights:s}}function h(t,e,s,n){for(;2*n+1<s;){const r=2*n+1,i=r+1;let o=n;if(t[o]<t[r]&&(o=r),i<s&&t[o]<t[i]&&(o=i),o===n)break;{const s=t[n];t[n]=t[o],t[o]=s;const r=e[n];e[n]=e[o],e[o]=r,n=o}}}function u(t,e){const s=t[0][e],n=t[1][e],r=t[2][e];let i=1/0,o=-1;for(let t=0;t>s.length;t++)1===r[t]&&n[t]<i&&(i=n[t],o=t);return o>=0?(r[o]=0,Math.floor(s[o])):-1}},1729:(t,e,s)=>{"use strict";s.d(e,{u:()=>n.uB});var n=s(3585)},6802:(t,e,s)=>{"use strict";s.d(e,{$X:()=>l,A7:()=>r,Fv:()=>m,Hp:()=>g,IH:()=>a,NT:()=>o,RH:()=>u,cf:()=>h,gW:()=>c,p4:()=>i});var n=s(9533);class r{constructor(t,e,s,n){if(this.entries=new Map,this.nRows=0,this.nCols=0,t.length!==e.length||t.length!==s.length)throw new Error("rows, cols and values arrays must all have the same length");this.nRows=n[0],this.nCols=n[1];for(let n=0;n<s.length;n++){const r=t[n],i=e[n];this.checkDims(r,i);const o=this.makeKey(r,i);this.entries.set(o,{value:s[n],row:r,col:i})}}makeKey(t,e){return`${t}:${e}`}checkDims(t,e){if(!(t<this.nRows&&e<this.nCols))throw new Error("row and/or col specified outside of matrix dimensions")}set(t,e,s){this.checkDims(t,e);const n=this.makeKey(t,e);this.entries.has(n)?this.entries.get(n).value=s:this.entries.set(n,{value:s,row:t,col:e})}get(t,e,s=0){const n=this.makeKey(t,e);return this.entries.has(n)?this.entries.get(n).value:s}getAll(t=!0){const e=new Array(this.entries.size).fill(null);let s=0;return this.entries.forEach((t=>{e[s++]=t})),t&&e.sort(((t,e)=>t.row===e.row?t.col-e.col:t.row-e.row)),e}getDims(){return[this.nRows,this.nCols]}getRows(){return Array.from(this.entries,(([t,e])=>e.row))}getCols(){return Array.from(this.entries,(([t,e])=>e.col))}getValues(){return Array.from(this.entries,(([t,e])=>e.value))}forEach(t){this.entries.forEach((e=>t(e.value,e.row,e.col)))}map(t){const e=new Float32Array(this.entries.size);let s=0;this.entries.forEach((n=>{e[s++]=t(n.value,n.row,n.col)}));const n=[this.nRows,this.nCols];return new r(this.getRows(),this.getCols(),e,n)}toArray(){const t=n.cS(this.nRows).map((()=>n.ll(this.nCols)));return this.entries.forEach((e=>{t[e.row][e.col]=e.value})),t}}function i(t){const e=t.getRows(),s=t.getCols(),n=t.getValues(),i=s.length,o=new Int32Array(i),a=new Int32Array(i),l=new Float32Array(i);o.set(e),a.set(s),l.set(n);const c=[t.nCols,t.nRows];return new r(a,o,l,c)}function o(t,e){return p(t,e,((t,e)=>t*e))}function a(t,e){return p(t,e,((t,e)=>t+e))}function l(t,e){return p(t,e,((t,e)=>t-e))}function c(t,e){return p(t,e,((t,e)=>t>e?t:e))}function h(t,e){return t.map((t=>t*e))}function u(t){const e=new Set,s=t.getValues(),n=t.getRows(),i=t.getCols();for(let t=0;t<s.length;t++)0===s[t]&&e.add(t);const o=(t,s)=>!e.has(s),a=s.filter(o),l=n.filter(o),c=i.filter(o);return new r(l,c,a,t.getDims())}function m(t,e="l2"){const s=d[e],n=new Map;t.forEach(((t,e,s)=>{const r=n.get(e)||[];r.push(s),n.set(e,r)}));const i=new r([],[],[],t.getDims());for(let e of n.keys()){const r=n.get(e).sort(),o=s(r.map((s=>t.get(e,s))));for(let t=0;t<o.length;t++)i.set(e,r[t],o[t])}return i}const d={max:t=>{let e=-1/0;for(let s=0;s<t.length;s++)e=t[s]>e?t[s]:e;return t.map((t=>t/e))},l1:t=>{let e=0;for(let s=0;s<t.length;s++)e+=t[s];return t.map((t=>t/e))},l2:t=>{let e=0;for(let s=0;s<t.length;s++)e+=t[s]**2;return t.map((t=>Math.sqrt(t**2/e)))}};function p(t,e,s){const n=new Set,i=[],o=[],a=[],l=(n,r)=>{i.push(n),o.push(r);const l=s(t.get(n,r),e.get(n,r));a.push(l)},c=t.getValues(),h=t.getRows(),u=t.getCols();for(let t=0;t<c.length;t++){const e=h[t],s=u[t],r=`${e}:${s}`;n.add(r),l(e,s)}const m=e.getValues(),d=e.getRows(),p=e.getCols();for(let t=0;t<m.length;t++){const e=d[t],s=p[t],r=`${e}:${s}`;n.has(r)||l(e,s)}const g=[t.nRows,t.nCols];return new r(i,o,a,g)}function g(t){const e=[];t.forEach(((t,s,n)=>{e.push({value:t,row:s,col:n})})),e.sort(((t,e)=>t.row===e.row?t.col-e.col:t.row-e.row));const s=[],n=[],r=[];let i=-1;for(let t=0;t<e.length;t++){const{row:o,col:a,value:l}=e[t];o!==i&&(i=o,r.push(t)),s.push(a),n.push(l)}return{indices:s,values:n,indptr:r}}},1595:(t,e,s)=>{"use strict";s.d(e,{WX:()=>a,gK:()=>h,n_:()=>c,vF:()=>l});var n=s(6490),r=s(6802),i=s(4972),o=s(9533);function a(t,e){return function(s,r,i,a=10,l=50,c=.001,h=.5,u=!0){const m=s.length,d=n.VA(s.length,i);for(let r=0;r<s.length;r++){const o=n.M6(i,s.length,e);for(let e=0;e<o.length;e++){const i=t(s[r],s[o[e]]);n.XV(d,r,i,o[e],1),n.XV(d,o[e],i,r,1)}}if(u)for(let e=0;e<r.length;e++)for(let i=0;i<r[e].length&&!(r[e][i]<0);i++)for(let o=i+1;o<r[e].length&&!(r[e][o]<0);o++){const a=t(s[r[e][i]],s[r[e][o]]);n.XV(d,r[e][i],a,r[e][o],1),n.XV(d,r[e][o],a,r[e][i],1)}for(let r=0;r<a;r++){const r=n.SB(d,m,i,l,e);let a=0;for(let i=0;i<m;i++)for(let c=0;c<l;c++){let u=Math.floor(r[0][i][c]);if(!(u<0||o.mH(e)<h))for(let e=0;e<l;e++){const o=Math.floor(r[0][i][e]),l=r[2][i][c],h=r[2][i][e];if(o<0||!l&&!h)continue;const m=t(s[u],s[o]);a+=n.XV(d,u,m,o,1),a+=n.XV(d,o,m,u,1)}}if(a<=c*i*s.length)break}return n.oi(d)}}function l(t){return{initFromRandom:function(e,s,r,i,a){for(let l=0;l<r.length;l++){const c=o.M6(e,s.length,a);for(let e=0;e<c.length;e++){if(c[e]<0)continue;const o=t(s[c[e]],r[l]);n.XV(i,l,o,c[e],1)}}},initFromTree:function(e,s,r,o,a){for(let l=0;l<r.length;l++){const c=i.ii(r[l],e,a);for(let e=0;e<c.length;e++){if(c[e]<0)return;const i=t(s[c[e]],r[l]);n.XV(o,l,i,c[e],1)}}}}}function c(t){return function(e,s,i,o){const{indices:a,indptr:l}=r.Hp(s);for(let s=0;s<o.length;s++){const r=new Set(i[0][s]);for(;;){const c=n.w5(i,s);if(-1===c)break;const h=a.slice(l[c],l[c+1]);for(const a of h){if(a===c||-1===a||r.has(a))continue;const l=t(e[a],o[s]);n.Sr(i,s,l,a,1),r.add(a)}}}return i}}function h(t,e,s,r,i,o,a){const l=n.VA(s.length,r);if(i(r,e,s,l,a),t)for(let n of t)o(n,e,s,l,a);return l}},4972:(t,e,s)=>{"use strict";s.d(e,{HO:()=>h,Zv:()=>i,ii:()=>m});var n=s(9533);class r{constructor(t,e,s,n){this.hyperplanes=t,this.offsets=e,this.children=s,this.indices=n}}function i(t,e,s,i){const h=Math.max(10,e),u=n.w6(s).map(((e,s)=>function(t,e=30,s,r){return o(t,n.w6(t.length),e,s,r)}(t,h,s,i))),m=u.map((t=>function(t,e){const s=l(t),i=c(t),o=n.w6(s).map((()=>t.hyperplane?1:0)),h=n.ll(s),u=n.w6(s).map((()=>[-1,-1])),m=n.w6(i).map((()=>n.w6(e).map((()=>-1))));return a(t,o,h,u,m,0,0),new r(o,h,u,m)}(t,h)));return m}function o(t,e,s=30,r,i){if(e.length>s){const a=function(t,e,s){let r=n.AH(e.length,s),i=n.AH(e.length,s);i+=r===i?1:0,i%=e.length;const o=e[r],a=e[i];let l=0,c=0;c=t[o]-t[a],l-=c*(t[o]+t[a])/2;let h=0,u=0;const m=n.ll(e.length);for(let r=0;r<e.length;r++){let i=l;i+=c*t[e[r]],0===i?(m[r]=n.AH(2,s),0===m[r]?h+=1:u+=1):i>0?(m[r]=0,h+=1):(m[r]=1,u+=1)}const d=n.ll(h),p=n.ll(u);h=0,u=0;for(let t=0;t<m.length;t++)0===m[t]?(d[h]=e[t],h+=1):(p[u]=e[t],u+=1);return{indicesLeft:d,indicesRight:p,hyperplane:c,offset:l}}(t,e,i),{indicesLeft:l,indicesRight:c,hyperplane:h,offset:u}=a;return{leftChild:o(t,l,s,r+1,i),rightChild:o(t,c,s,r+1,i),isLeaf:!1,hyperplane:h,offset:u}}return{indices:e,isLeaf:!0}}function a(t,e,s,n,r,i,o){if(t.isLeaf)return n[i][0]=-o,r[o].splice(0,t.indices.length,...t.indices),{nodeNum:i,leafNum:o+=1};{e[i]=t.hyperplane,s[i]=t.offset,n[i][0]=i+1;const l=i;let c=a(t.leftChild,e,s,n,r,i+1,o);return i=c.nodeNum,o=c.leafNum,n[l][1]=i+1,c=a(t.rightChild,e,s,n,r,i+1,o),{nodeNum:c.nodeNum,leafNum:c.leafNum}}}function l(t){return t.isLeaf?1:1+l(t.leftChild)+l(t.rightChild)}function c(t){return t.isLeaf?1:c(t.leftChild)+c(t.rightChild)}function h(t){if(t.length>0){const e=[];for(let s of t)e.push(...s.indices);return e}return[[-1]]}function u(t,e,s,r){let i=e;return i+=t*s,0===i?n.AH(2,r):i>0?0:1}function m(t,e,s){let n=0;for(;e.children[n][0]>0;)n=0===u(e.hyperplanes[n],e.offsets[n],t,s)?e.children[n][0]:e.children[n][1];const r=-1*e.children[n][0];return e.indices[r]}},3585:(t,e,s)=>{"use strict";s.d(e,{uB:()=>u});var n=s(6490),r=s(6802),i=s(1595),o=s(4972),a=s(9533),l=s(3107);const c=1e-5,h=.001;class u{get neighbors(){return this.nNeighbors}constructor(t={}){this.learningRate=1,this.localConnectivity=1,this.minDist=.1,this.nComponents=2,this.nEpochs=0,this.nNeighbors=15,this.negativeSampleRate=5,this.random=Math.random,this.repulsionStrength=1,this.setOpMixRatio=1,this.spread=1,this.transformQueueSize=4,this.targetMetric="categorical",this.targetWeight=.5,this.targetNNeighbors=this.nNeighbors,this.distanceFn=m,this.isInitialized=!1,this.rpForest=[],this.embedding=[],this.optimizationState=new d;const e=e=>{void 0!==t[e]&&(this[e]=t[e])};e("distanceFn"),e("learningRate"),e("localConnectivity"),e("minDist"),e("nComponents"),e("nEpochs"),e("nNeighbors"),e("negativeSampleRate"),e("random"),e("repulsionStrength"),e("setOpMixRatio"),e("spread"),e("transformQueueSize")}fit(t){return this.initializeFit(t),this.optimizeLayout(),this.embedding}async fitAsync(t,e=(()=>!0)){return this.initializeFit(t),await this.optimizeLayoutAsync(e),this.embedding}setSupervisedProjection(t,e={}){this.Y=t,this.targetMetric=e.targetMetric||this.targetMetric,this.targetWeight=e.targetWeight||this.targetWeight,this.targetNNeighbors=e.targetNNeighbors||this.targetNNeighbors}setPrecomputedKNN(t,e){this.knnIndices=t,this.knnDistances=e}initializeFit(t){if(t.length<=this.nNeighbors)throw new Error(`Not enough data points (${t.length}) to create nNeighbors: ${this.nNeighbors}. Add more data points or adjust the configuration.`);if(this.X===t&&this.isInitialized)return this.getNEpochs();if(this.X=t,!this.knnIndices&&!this.knnDistances){const e=this.nearestNeighbors(t);this.knnIndices=e.knnIndices,this.knnDistances=e.knnDistances}this.graph=this.fuzzySimplicialSet(t,this.nNeighbors,this.setOpMixRatio),this.makeSearchFns(),this.searchGraph=this.makeSearchGraph(t),this.processGraphForSupervisedProjection();const{head:e,tail:s,epochsPerSample:n}=this.initializeSimplicialSetEmbedding();return this.optimizationState.head=e,this.optimizationState.tail=s,this.optimizationState.epochsPerSample=n,this.initializeOptimization(),this.prepareForOptimizationLoop(),this.isInitialized=!0,this.getNEpochs()}makeSearchFns(){const{initFromTree:t,initFromRandom:e}=i.vF(this.distanceFn);this.initFromTree=t,this.initFromRandom=e,this.search=i.n_(this.distanceFn)}makeSearchGraph(t){const e=this.knnIndices,s=this.knnDistances,n=[t.length,t.length],i=new r.A7([],[],[],n);for(let t=0;t<e.length;t++){const n=e[t],r=s[t];for(let e=0;e<n.length;e++){const s=n[e],o=r[e];o>0&&i.set(t,s,o)}}const o=r.p4(i);return r.gW(i,o)}transform(t){const e=this.X;if(void 0===e||0===e.length)throw new Error("No data has been fit.");let s=Math.floor(this.nNeighbors*this.transformQueueSize);s=Math.min(e.length,s);const o=i.gK(this.rpForest,e,t,s,this.initFromRandom,this.initFromTree,this.random),l=this.search(e,this.searchGraph,o,t);let{indices:c,weights:h}=n.oi(l);c=c.map((t=>t.slice(0,this.nNeighbors))),h=h.map((t=>t.slice(0,this.nNeighbors)));const u=Math.max(0,this.localConnectivity-1),{sigmas:m,rhos:d}=this.smoothKNNDistance(h,this.nNeighbors,u),{rows:p,cols:g,vals:f}=this.computeMembershipStrengths(c,h,m,d),y=[t.length,e.length];let w=new r.A7(p,g,f,y);const C=r.Fv(w,"l1"),b=r.Hp(C),T=t.length,A=function(t,e,s){const n=a.ll(t.length).map((t=>a.ll(s[0].length)));for(let r=0;r<t.length;r++)for(let i=0;i<t[0].length;i++)for(let o=0;o<s[0].length;o++){const a=t[r][i];n[r][o]+=e[r][i]*s[a][o]}return n}(a.HU(b.indices,T,this.nNeighbors),a.HU(b.values,T,this.nNeighbors),this.embedding),S=this.nEpochs?this.nEpochs/3:w.nRows<=1e4?100:30,E=w.getValues().reduce(((t,e)=>e>t?e:t),0);w=w.map((t=>t<E/S?0:t)),w=r.RH(w);const v=this.makeEpochsPerSample(w.getValues(),S),M=w.getRows(),x=w.getCols();return this.assignOptimizationStateParameters({headEmbedding:A,tailEmbedding:this.embedding,head:M,tail:x,currentEpoch:0,nEpochs:S,nVertices:w.getDims()[1],epochsPerSample:v}),this.prepareForOptimizationLoop(),this.optimizeLayout()}processGraphForSupervisedProjection(){const{Y:t,X:e}=this;if(t){if(t.length!==e.length)throw new Error("Length of X and y must be equal");if("categorical"===this.targetMetric){const e=this.targetWeight<1?1/(1-this.targetWeight)*2.5:1e12;this.graph=this.categoricalSimplicialSetIntersection(this.graph,t,e)}}}step(){const{currentEpoch:t}=this.optimizationState;return t<this.getNEpochs()&&this.optimizeLayoutStep(t),this.optimizationState.currentEpoch}getEmbedding(){return this.embedding}nearestNeighbors(t){const{distanceFn:e,nNeighbors:s}=this,n=i.WX(e,this.random),r=5+Math.floor(.5==(a=t.length**.5/20)?0:Math.round(a));var a;const l=Math.max(5,Math.floor(Math.round((t=>Math.log(t)/Math.log(2))(t.length))));this.rpForest=o.Zv(t,s,r,this.random);const c=o.HO(this.rpForest),{indices:h,weights:u}=n(t,c,s,l);return{knnIndices:h,knnDistances:u}}fuzzySimplicialSet(t,e,s=1){const{knnIndices:n=[],knnDistances:i=[],localConnectivity:o}=this,{sigmas:a,rhos:l}=this.smoothKNNDistance(i,e,o),{rows:c,cols:h,vals:u}=this.computeMembershipStrengths(n,i,a,l),m=[t.length,t.length],d=new r.A7(c,h,u,m),p=r.p4(d),g=r.NT(d,p),f=r.$X(r.IH(d,p),g),y=r.cf(f,s),w=r.cf(g,1-s);return r.IH(y,w)}categoricalSimplicialSetIntersection(t,e,s,n=1){let i=function(t,e,s=1,n=5){return t.map(((t,r,i)=>-1===e[r]||-1===e[i]?t*Math.exp(-s):e[r]!==e[i]?t*Math.exp(-n):t))}(t,e,n,s);return i=r.RH(i),function(t){t=r.Fv(t,"max");const e=r.p4(t),s=r.NT(e,t);return t=r.IH(t,r.$X(e,s)),r.RH(t)}(i)}smoothKNNDistance(t,e,s=1,n=64,r=1){const i=Math.log(e)/Math.log(2)*r,o=a.ll(t.length),l=a.ll(t.length);for(let e=0;e<t.length;e++){let r=0,u=1/0,m=1;const d=t[e],p=d.filter((t=>t>0));if(p.length>=s){let t=Math.floor(s),n=s-t;t>0?(o[e]=p[t-1],n>c&&(o[e]+=n*(p[t]-p[t-1]))):o[e]=n*p[0]}else p.length>0&&(o[e]=a.Fp(p));for(let s=0;s<n;s++){let s=0;for(let n=1;n<t[e].length;n++){const r=t[e][n]-o[e];s+=r>0?Math.exp(-r/m):1}if(Math.abs(s-i)<c)break;s>i?(u=m,m=(r+u)/2):(r=m,u===1/0?m*=2:m=(r+u)/2)}if(l[e]=m,o[e]>0){const t=a.J6(d);l[e]<h*t&&(l[e]=h*t)}else{const s=a.J6(t.map(a.J6));l[e]<h*s&&(l[e]=h*s)}}return{sigmas:l,rhos:o}}computeMembershipStrengths(t,e,s,n){const r=t.length,i=t[0].length,o=a.ll(r*i),l=a.ll(r*i),c=a.ll(r*i);for(let a=0;a<r;a++)for(let r=0;r<i;r++){let h=0;-1!==t[a][r]&&(h=t[a][r]===a?0:e[a][r]-n[a]<=0?1:Math.exp(-(e[a][r]-n[a])/s[a]),o[a*i+r]=a,l[a*i+r]=t[a][r],c[a*i+r]=h)}return{rows:o,cols:l,vals:c}}initializeSimplicialSetEmbedding(){const t=this.getNEpochs(),{nComponents:e}=this,s=this.graph.getValues();let n=0;for(let t=0;t<s.length;t++){const e=s[t];n<s[t]&&(n=e)}const r=this.graph.map((e=>e<n/t?0:e));this.embedding=a.ll(r.nRows).map((()=>a.ll(e).map((()=>20*a.mH(this.random)-10))));const i=[],o=[],l=[],c=r.getAll();for(let t=0;t<c.length;t++){const e=c[t];e.value&&(i.push(e.value),l.push(e.row),o.push(e.col))}return{head:o,tail:l,epochsPerSample:this.makeEpochsPerSample(i,t)}}makeEpochsPerSample(t,e){const s=a.VI(t.length,-1),n=a.Fp(t),r=t.map((t=>t/n*e));return r.forEach(((t,n)=>{t>0&&(s[n]=e/r[n])})),s}assignOptimizationStateParameters(t){Object.assign(this.optimizationState,t)}prepareForOptimizationLoop(){const{repulsionStrength:t,learningRate:e,negativeSampleRate:s}=this,{epochsPerSample:n,headEmbedding:r,tailEmbedding:i}=this.optimizationState,o=r[0].length,a=r.length===i.length,l=n.map((t=>t/s)),c=[...l],h=[...n];this.assignOptimizationStateParameters({epochOfNextSample:h,epochOfNextNegativeSample:c,epochsPerNegativeSample:l,moveOther:a,initialAlpha:e,alpha:e,gamma:t,dim:o})}initializeOptimization(){const t=this.embedding,e=this.embedding,{head:s,tail:n,epochsPerSample:r}=this.optimizationState,i=this.getNEpochs(),o=this.graph.nCols,{a:c,b:h}=function(t,e){const s=a.GE(0,3*t,300).map((t=>t<e?1:t)),n=a.ll(s.length).map(((n,r)=>s[r]>=e?Math.exp(-(s[r]-e)/t):n)),r={x:s,y:n},{parameterValues:i}=(0,l.Z)(r,(([t,e])=>s=>1/(1+t*s**(2*e))),{damping:1.5,initialValues:[.5,.5],gradientDifference:.1,maxIterations:100,errorTolerance:.01}),[o,c]=i;return{a:o,b:c}}(this.spread,this.minDist);this.assignOptimizationStateParameters({headEmbedding:t,tailEmbedding:e,head:s,tail:n,epochsPerSample:r,a:c,b:h,nEpochs:i,nVertices:o})}optimizeLayoutStep(t){const{optimizationState:e}=this,{head:s,tail:n,headEmbedding:r,tailEmbedding:i,epochsPerSample:o,epochOfNextSample:l,epochOfNextNegativeSample:c,epochsPerNegativeSample:h,moveOther:u,initialAlpha:m,alpha:d,gamma:f,a:y,b:w,dim:C,nEpochs:b,nVertices:T}=e;for(let e=0;e<o.length;e++){if(l[e]>t)continue;const m=s[e],b=n[e],A=r[m],S=i[b],E=g(A,S);let v=0;E>0&&(v=-2*y*w*Math.pow(E,w-1),v/=y*Math.pow(E,w)+1);for(let t=0;t<C;t++){const e=p(v*(A[t]-S[t]),4);A[t]+=e*d,u&&(S[t]+=-e*d)}l[e]+=o[e];const M=Math.floor((t-c[e])/h[e]);for(let t=0;t<M;t++){const t=a.AH(T,this.random),e=i[t],s=g(A,e);let n=0;if(s>0)n=2*f*w,n/=(.001+s)*(y*Math.pow(s,w)+1);else if(m===t)continue;for(let t=0;t<C;t++){let s=4;n>0&&(s=p(n*(A[t]-e[t]),4)),A[t]+=s*d}}c[e]+=M*h[e]}return e.alpha=m*(1-t/b),e.currentEpoch+=1,r}optimizeLayoutAsync(t=(()=>!0)){return new Promise(((e,s)=>{const n=async()=>{try{const{nEpochs:s,currentEpoch:r}=this.optimizationState;this.embedding=this.optimizeLayoutStep(r);const i=this.optimizationState.currentEpoch,o=!1===t(i),a=i===s;if(o||a)return e(a);setTimeout((()=>n()),0)}catch(t){s(t)}};setTimeout((()=>n()),0)}))}optimizeLayout(t=(()=>!0)){let e=!1,s=[];for(;!e;){const{nEpochs:n,currentEpoch:r}=this.optimizationState;s=this.optimizeLayoutStep(r);const i=this.optimizationState.currentEpoch,o=!1===t(i);e=i===n||o}return s}getNEpochs(){const t=this.graph;if(this.nEpochs>0)return this.nEpochs;if(!t)return 200;const e=t.nRows;return e<=2500?500:e<=5e3?400:e<=7500?300:200}}function m(t,e){return Math.abs(t-e)}class d{constructor(){this.currentEpoch=0,this.headEmbedding=[],this.tailEmbedding=[],this.head=[],this.tail=[],this.epochsPerSample=[],this.epochOfNextSample=[],this.epochOfNextNegativeSample=[],this.epochsPerNegativeSample=[],this.moveOther=!0,this.initialAlpha=1,this.alpha=1,this.gamma=1,this.a=1.5769434603113077,this.b=.8950608779109733,this.dim=2,this.nEpochs=500,this.nVertices=0}}function p(t,e){return t>e?e:t<-e?-e:t}function g(t,e){let s=0;for(let n=0;n<t.length;n++)s+=Math.pow(t[n]-e[n],2);return s}},9533:(t,e,s)=>{"use strict";function n(t,e){return Math.floor(e()*t)}function r(t){return t()}function i(t){const e=[];for(let s=0;s<t;s++)e.push(void 0);return e}function o(t){return i(t).map(((t,e)=>e))}function a(t,e){return i(t).map((()=>e))}function l(t){return a(t,0)}function c(t,e,s){return i(s).map(((n,r)=>t+r*((e-t)/(s-1))))}function h(t){return function(t){return t.reduce(((t,e)=>t+e))}(t)/t.length}function u(t){let e=0;for(let s=0;s<t.length;s++)e=t[s]>e?t[s]:e;return e}function m(t,e,s){const r=l(t);for(let i=0;i<t;i++){let t=!0;for(;t;){const o=n(e,s);let a=!1;for(let t=0;t<i;t++)if(o===r[t]){a=!0;break}a||(t=!1),r[i]=o}}return r}function d(t,e,s){const n=[];let r=0,i=0;if(t.length!==e*s)throw new Error("Array dimensions must match input length.");for(let o=0;o<e;o++){const e=[];for(let n=0;n<s;n++)e.push(t[i]),i+=1;n.push(e),r+=1}return n}s.d(e,{AH:()=>n,Fp:()=>u,GE:()=>c,HU:()=>d,J6:()=>h,M6:()=>m,VI:()=>a,cS:()=>i,ll:()=>l,mH:()=>r,w6:()=>o})},9657:(t,e,s)=>{"use strict";s.d(e,{Z:()=>n});class n{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 s=t,r=n._createBuffer(s);if(e)for(let t=0;t<r.length;t++)r[t]=-1;this._data=r,this._length=s}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,s,n){if(t<e||t>s)throw new Error(`Argument ${n} (${t}) out of range (${e}, ${s})`)}copy(t,e,s){for(let n=0;n<s;n++)e[n]=t[n]}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 s=new n(t._length);s._length=t._length,s._data=n._createBuffer(s._length),s._version=0;const r=t.lengthInInts;for(let n=0;n<r;n++)s._data[n]=t._data[n]&e._data[n];return s}static _createBuffer(t){return new Uint32Array(Math.floor((t+31)/32))}static fromValues(t){const e=new n(t.length);e._version=0;for(let s=0;s<e._length;s++)t[s]&&(e._data[Math.floor(s/32)]|=1<<(s%32&31));return e}static fromSeq(t,e){const s=new n(t);for(let n=0;n<t;++n)s.setBit(n,e(n));return s._version=0,s}static fromString(t){return n.fromSeq(t.length,(e=>"1"==t.charAt(e)))}static fromUint32Array(t,e){const s=new n(t);return s._data=e,s}static fromBytes(t){const e=t.length,s=new n(8*e);s._data=new Uint32Array(Math.floor((e+3)/4)),s._length=8*e;let r=0,i=0;for(;e-i>=4;)s._data[r++]=255&t[i]|(255&t[i+1])<<8|(255&t[i+2])<<16|(255&t[i+3])<<24,i+=4;return e-i==3&&(s._data[r]=(255&t[i+2])<<16),e-i==2&&(s._data[r]|=(255&t[i+1])<<8),e-i==1&&(s._data[r]|=255&t[i]),s._version=0,s}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 n(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 s=t?-1:0,n=this.lengthInInts;for(let t=0;t<n;t++)this._data[t]=s;this.incrementVersion(e)}setIndexes(t,e=!0,s=!0,n=!0){s&&this.setAll(!e,!1);for(const s of t)this.setFast(s,e);this.incrementVersion(n)}everyIndex(t,e=!0){for(const s of t)if(this.getBit(s)!=e)return!1;return!0}anyIndex(t,e=!0){for(const s of t)if(this.getBit(s)==e)return!0;return!1}setWhere(t,e=!0,s=!0,n=!0,r=!0){if(s&&r&&this.setAll(!e,!1),r)for(let s=0;s<this._length;s++)t(s)&&this.setFast(s,e);else for(let s=0;s<this._length;s++)this.setFast(s,t(s)?e:!e);this.incrementVersion(n)}getRange(t,e){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(e,0,this._length,"to");const s=[];for(let n=t;n<e;++n)s.push(this.getBit(n));return n.fromValues(s)}getRangeAsList(t,e){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(e,0,this._length,"to");const s=[];for(let n=t;n<e;++n)s.push(this.getBit(n));return s}setRange(t,e,s,n=!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(s)for(let t=r;t<=i;t++)this.setTrue(t);else for(let t=r;t<=i;t++)this.setFalse(t);return this.incrementVersion(n),this}setRandom(t,e,s=!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 s=0;s<t;){const t=Math.floor(Math.random()*this._length);this.getBit(t)!=e&&(this.setFast(t,e),s++)}this.incrementVersion(s)}and(t,e=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let e=0,s=this.lengthInInts;e<s;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 s=this.lengthInInts;for(let e=0;e<s;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,s=this.lengthInInts;e<s;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,s=this.lengthInInts;e<s;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,s=this.lengthInInts;e<s;e++)this._data[e]^=t._data[e];return this.incrementVersion(e),this}insertAt(t,e,s=!1){if(this.assureInRange(t,0,this._length,"pos"),0==e)return;const n=this._length;this.setLength(this._length+e);for(let s=n-1;s>=t;s--)this.setBit(s+e,this.getBit(s));for(let n=t;n<t+e;n++)this.setBit(n,s)}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 s=t;s<this._length-e;s++)this.setBit(s,this.getBit(s+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 s=0;for(let n=-1;-1!=(n=t.findNext(n,!e));)this.setFast(s++,this.getBit(n));this._length=s,this._version++}return this}getBit(t){return 0!=(this._data[Math.floor(t/32)]&1<<(31&t))}setBit(t,e,s=!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+=n._onBitCount[255&t];let s=this._data[e];const r=31&this._length;for(0!=r&&(s&=~(4294967295<<r));0!=s;s>>>=8)this._selectedCount+=n._onBitCount[255&s];this._selectedCountVersion=this._version}return t?this._selectedCount:this._length-this._selectedCount}countWhere(t){let e=0;if(this.trueCount()==this._length)for(let s=0;s<this._length;s++)e+=t(s)?1:0;else for(let s=-1;-1!=(s=this.findNext(s,!0));)e+=t(s)?1:0;return e}andWithCountBits(t,e){if(0==this._length)return 0;let s=0;const r=this.lengthInInts;let i=0;for(;i<r-1;i++)for(let e=this._data[i]&t._data[i];0!=e;e>>>=8)s+=n._onBitCount[255&e];let o=this._data[i]&t._data[i];const a=31&this._length;for(0!=a&&(o&=~(4294967295<<a));0!=o;o>>>=8)s+=n._onBitCount[255&o];return e?s:this._length-s}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 s=31&(t=t<0?0:t+1);const r=this.lengthInInts;for(let i=Math.floor(t/32);i<r;i++){let r=e?this._data[i]:~this._data[i];if(0!=s)r&=4294967295<<s&4294967295,s=0;else if(!e&&-4294967296==r)continue;for(let e=0;0!=r;e+=8,r>>>=8){const s=n._firstOnBit[255&r];if(s>=0)return(t=s+32*i+e)>=this._length?-1:t}}return-1}findPrev(t,e=!0){if(0==t)return-1;this.assureInRange(t,-1,this._length,"index");let s=1+(t=t<0?this._length-1:t-1)&31;for(let r=Math.floor(t/32);r>=0;r--){let t=e?this._data[r]:~this._data[r];0!=s&&(t&=~(4294967295<<s),s=0);for(let e=24;0!=t;e-=8,t<<=8){const s=n._lastOnBit[t>>>24];if(s>=0)return s+32*r+e}}return-1}}n._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]),n._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]),n._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])},4588:(t,e,s)=>{"use strict";function n(t){return Math.random()*t}function r(t){return Math.floor(n(t))}s.d(e,{I:()=>r,t:()=>n})},8467:(t,e,s)=>{"use strict";s.d(e,{X5:()=>M,ow:()=>R,bb:()=>v,W3:()=>E,gw:()=>P,l_:()=>b,f6:()=>S,jh:()=>T,Wh:()=>A,ci:()=>N,Bu:()=>C,zg:()=>w,AB:()=>G,QK:()=>c});var n=s(4469),r=s(976);s(9133);const i=r.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 ATOM END,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 ATOM END,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 ATOM END,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 ATOM END,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 ATOM END,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 ATOM END,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 ATOM END,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 ATOM END,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 ATOM END,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 ATOM END,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,,,,,,,,,,,,,,,,,,,,,');i.columns.add(r.Column.fromList(r.TYPE.BYTE_ARRAY,"BinaryImage",Array.from(new Uint8Array(11))));var o=function(t,e,s,n){return new(s||(s=Promise))((function(r,i){function o(t){try{l(n.next(t))}catch(t){i(t)}}function a(t){try{l(n.throw(t))}catch(t){i(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof s?e:new s((function(t){t(e)}))).then(o,a)}l((n=n.apply(t,e||[])).next())}))};const a=3e4,l=108e5,c={},h="Auto Tests",u="Demo",m="Detectors",d={};let p;var g;!function(t){t.notNull=function(t,e){if(null==t)throw new Error(`${null==e?"Value":e} not defined`)}}(g||(g={}));class f{constructor(t,e){this.catchUnhandled=!0,this.report=!1,void 0!==t&&(this.catchUnhandled=t),void 0!==e&&(this.report=e)}}class y{constructor(t,e,s,n){var r;this.category=t,this.name=e,null!=n||(n={}),null!==(r=n.timeout)&&void 0!==r||(n.timeout=a),this.options=n,this.test=()=>o(this,void 0,void 0,(function*(){return new Promise(((t,e)=>o(this,void 0,void 0,(function*(){let n="";try{n=yield s()}catch(t){e(t)}t(n)}))))}))}}function w(t,e,s,n=0){return o(this,void 0,void 0,(function*(){return new Promise(((r,i)=>{const o=t.subscribe((t=>{try{e(t),r("OK")}catch(t){i(t)}o.unsubscribe(),clearTimeout(a)})),a=setTimeout((()=>{o.unsubscribe(),i("timeout")}),n);s()}))}))}function C(t,e,s){null==c[p]&&(c[p]={}),null==c[p].tests&&(c[p].tests=[]),c[p].tests.push(new y(p,t,e,s))}function b(t,e=!0,s){if(s=s?`${s}, `:"",t!==e)throw new Error(`${s}Expected "${e}", got "${t}"`)}function T(t,e,s=.001,n){if(t===Number.POSITIVE_INFINITY&&e===Number.POSITIVE_INFINITY||t===Number.NEGATIVE_INFINITY&&e===Number.NEGATIVE_INFINITY||t===Number.NaN&&e===Number.NaN||isNaN(t)&&isNaN(e))return;const r=Math.abs(t-e)<s;if(b(r,!0,`${null!=n?n:""} (tolerance = ${s})`),!r)throw new Error(`Expected ${e}, got ${t} (tolerance = ${s})`)}function A(t,e){for(const[s,n]of Object.entries(e)){if(!t.hasOwnProperty(s))throw new Error(`Expected property "${s}" not found`);const e=t[s];if(e instanceof Array&&n instanceof Array)S(e,n);else if(e instanceof Object&&n instanceof Object)A(e,n);else if(Number.isFinite(e)&&Number.isFinite(n))T(e,n);else if(e!=n)throw new Error(`Expected (${n}) for key '${s}', got (${e})`)}}function S(t,e){const s=t.length,n=e.length;if(s!=n)throw new Error(`Arrays are of different length: actual array length is ${s} and expected array length is ${n}`);for(let n=0;n<s;n++)if(t[n]instanceof Array&&e[n]instanceof Array)S(t[n],e[n]);else if(t[n]instanceof Object&&e[n]instanceof Object)A(t[n],e[n]);else if(t[n]!=e[n])throw new Error(`Expected ${e[n]} at position ${n}, got ${t[n]}`)}function E(t,e,s){var n;p=t,e(),c[p]&&(c[p].clear=null===(n=null==s?void 0:s.clear)||void 0===n||n,c[p].timeout=null==s?void 0:s.timeout)}function v(t){null==c[p]&&(c[p]={}),c[p].before=t}function M(t){null==c[p]&&(c[p]={}),c[p].after=t}function x(t,e){return t.replace(new RegExp(e.name,"gi"),e.nqName)}function N(t,e){var s,a,l,p,g,w;return o(this,void 0,void 0,(function*(){const C=null===(a=null===(s=n.functions.getCurrentCall())||void 0===s?void 0:s.func)||void 0===a?void 0:a.package;yield function(t,e){return o(this,void 0,void 0,(function*(){if(d[t])return;const e=c;if(void 0!==e[h]||void 0!==e[u]||Object.keys(e).find((t=>t.startsWith(h))))return void(d[t]=!0);const s=[],r=[],a=[],l=yield n.dapi.functions.filter(`package.id = "${t}"`).list(),p=new RegExp(/skip:\s*([^,\s]+)|wait:\s*(\d+)|cat:\s*([^,\s]+)/g);for(const t of l){const l=t.options.test,c=t.options.demoPath;if(l&&Array.isArray(l)&&l.length)for(let r=0;r<l.length;r++){const i=l[r].matchAll(p),a={};Array.from(i).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])}));const c=new y(h,1===l.length?t.name:`${t.name} ${r+1}`,(()=>o(this,void 0,void 0,(function*(){const e=yield n.functions.eval(x(l[r],t));if(a.wait&&(yield P(a.wait)),"boolean"==typeof e&&!e)throw`Failed: ${l[r]}, expected true, got ${e}`}))),{skipReason:a.skip});if(a.cat){const t=h+": "+a.cat;c.category=t,void 0===e[t]&&(e[t]={tests:[],clear:!0}),e[t].tests.push(c)}else s.push(c)}if(c){const e=t.options.demoWait?parseInt(t.options.demoWait):void 0,s=new y(u,t.friendlyName,(()=>o(this,void 0,void 0,(function*(){if(n.shell.lastError="",yield t.apply(),yield P(e||2e3),n.shell.lastError)throw new Error(n.shell.lastError)}))),{skipReason:t.options.demoSkip});r.push(s)}if(t.hasTag("semTypeDetector")){const e=new y(m,t.friendlyName,(()=>o(this,void 0,void 0,(function*(){const e=[];for(const s of i.clone().columns){const n=yield t.apply([s]);e.push(n||s.semType)}b(e.filter((t=>t)).length,1)}))),{skipReason:t.options.skipTest});a.push(e)}}d[t]=!0,s.length&&(e[h]={tests:s,clear:!0}),r.length&&(e[u]={tests:r,clear:!0}),a.length&&(e[m]={tests:a,clear:!1})}))}(C.id);const T=[];console.log("Running tests"),null!=t||(t={}),null!==(l=(w=t).testContext)&&void 0!==l||(w.testContext=new f),n.shell.lastError="";const A=[];for(const[s,i]of Object.entries(c)){if((null==t?void 0:t.category)&&!s.toLowerCase().startsWith(null==t?void 0:t.category.toLowerCase())||(null==e?void 0:e.some((t=>s.startsWith(t)))))continue;console.log(`Started ${s} category`),A.push(s);const o=null===(p=i.tests)||void 0===p?void 0:p.every((t=>{var e;return null===(e=t.options)||void 0===e?void 0:e.skipReason}));try{i.before&&!o&&(yield i.before())}catch(t){i.beforeStatus=L(t)}const a=null!==(g=i.tests)&&void 0!==g?g:[],l=[];if(i.clear)for(let e=0;e<a.length;e++)l.push(yield _(a[e],null==t?void 0:t.test,i.timeout,C.name)),n.shell.closeAll(),r.Balloon.closeAll();else for(let e=0;e<a.length;e++)l.push(yield _(a[e],null==t?void 0:t.test,i.timeout,C.name));const c=(yield Promise.all(l)).filter((t=>"skipped"!=t.result));try{i.after&&!o&&(yield i.after())}catch(t){i.afterStatus=L(t)}i.afterStatus&&c.push({category:s,name:"init",result:i.afterStatus,success:!1,ms:0,skipped:!1}),i.beforeStatus&&c.push({category:s,name:"init",result:i.beforeStatus,success:!1,ms:0,skipped:!1}),T.push(...c)}if(t.testContext.catchUnhandled&&(yield P(1e3),n.shell.lastError.length>0&&T.push({category:"Unhandled exceptions",name:"exceptions",result:n.shell.lastError,success:!1,ms:0,skipped:!1})),!t.test&&T.length){const e=T.filter((t=>t.success)).length,s=T.filter((t=>t.skipped)).length,i=T.filter((t=>!t.success)),o=C.name;for(const t of A){const e=T.filter((e=>e.category===t)),s=e.filter((t=>!t.success)).length,r={success:0===s,passed:e.filter((t=>t.success)).length,skipped:e.filter((t=>t.skipped)).length,failed:s,type:"package",packageName:o,category:t};n.log.usage(`${o}: ${t}`,r,`category-package ${o}: ${t}`)}if(!t.category){const t={success:0===i.length,passed:e,skipped:s,failed:i.length,type:"package",packageName:o};n.log.usage(o,t,`package-package ${o}`)}if(t.testContext.report){const t=new r.Logger,n="Package @package tested: @successful successful, @skipped skipped, @failed failed tests",o={successful:e,skipped:s,failed:i.length,package:C};for(const t of i)Object.assign(o,{[`${t.category} | ${t.name}`]:t.result});t.log(n,o,"package-tested")}}return T}))}function L(t){return`${t.toString()}\n${t.stack?r.Logger.translateStackTrace(t.stack):""}`}function _(t,e,s,i){var c,h,u,m,d;return o(this,void 0,void 0,(function*(){let o;const p=null!=e&&t.name.toLowerCase()!==e.toLowerCase(),g=(null===(c=t.options)||void 0===c?void 0:c.skipReason)||p,f=p?"skipped":null===(h=t.options)||void 0===h?void 0:h.skipReason;g||console.log(`Started ${t.category} ${t.name}`);const y=Date.now();try{if(g)o={success:!0,result:f,ms:0,skipped:!0};else{let e=(null===(u=t.options)||void 0===u?void 0:u.timeout)===a&&s?s:null===(m=t.options)||void 0===m?void 0:m.timeout;e=r.Test.isInBenchmark&&e===a?l:e,o={success:!0,result:null!==(d=yield I(t.test,e))&&void 0!==d?d:"OK",ms:0,skipped:!1}}}catch(t){o={success:!1,result:L(t),ms:0,skipped:!1}}if(o.ms=Date.now()-y,g||console.log(`Finished ${t.category} ${t.name} for ${o.ms} ms`),o.category=t.category,o.name=t.name,!p){let e={success:o.success,result:o.result,ms:o.ms,skipped:o.skipped,type:"package",packageName:i,category:t.category,test:t.name};if(o.result.constructor==Object){const t=Object.keys(o.result).reduce(((t,e)=>Object.assign(Object.assign({},t),{["result."+e]:o.result[e]})),{});e=Object.assign(Object.assign({},e),t)}n.log.usage(`${i}: ${t.category}: ${t.name}`,e,`test-package ${i}: ${t.category}: ${t.name}`)}return o}))}function P(t){return o(this,void 0,void 0,(function*(){yield new Promise((e=>setTimeout(e,t)))}))}function R(t,e="Timeout exceeded",s=500,n=50){return o(this,void 0,void 0,(function*(){return new Promise(((r,i)=>{setTimeout((()=>{clearInterval(o),i(new Error(e))}),s);const o=setInterval((()=>{t()&&(clearInterval(o),r())}),n)}))}))}function I(t,e){return o(this,void 0,void 0,(function*(){let s=null;const n=new Promise(((t,n)=>{s=setTimeout((()=>{n("EXECUTION TIMEOUT")}),e)}));try{return yield Promise.race([t(),n])}finally{s&&clearTimeout(s)}}))}const O=r.DataFrame.fromColumns([r.Column.fromStrings("col",["val1","val2","val3"])]);function G(t,e,s){var i;return o(this,void 0,void 0,(function*(){(null==s?void 0:s.detectSemanticTypes)&&(yield n.data.detectSemanticTypes(e));let o=n.shell.addTableView(e);const a=`[name=viewer-${t.replace(/\s+/g,"-")} i]`,l=`${a} canvas,${a} svg,${a} img,\n ${a} input,${a} h1,${a} a,${a} .d4-viewer-error`,c=[];try{let h=o.addViewer(t);yield R((()=>null!==document.querySelector(l)),"cannot load viewer",3e3);const u=null===(i=document.querySelector(l))||void 0===i?void 0:i.tagName;if(c.push(Array.from(o.viewers).length),!(null==s?void 0:s.readOnly)){Array.from(e.row(0).cells).forEach((t=>t.value=null));const t=e.rowCount<20?Math.floor(e.rowCount/2):10;e.rows.select((e=>e.idx>=0&&e.idx<t)),yield P(50);for(let s=t;s<2*t;s++)e.filter.set(s,!1);yield P(50),e.currentRowIdx=1;const s=e.clone();e.columns.names().slice(0,Math.ceil(e.columns.length/2)).forEach((t=>e.columns.remove(t))),yield P(100),o.dataFrame=s}let m,d;try{m=h.getOptions(!0).look}catch(t){throw new Error("Viewer's .getOptions() error.",{cause:t})}try{d=h.getProperties()}catch(t){throw new Error("Viewer's .getProperties() error.",{cause:t})}const p={};Object.keys(m).filter((t=>"boolean"==typeof m[t])).forEach((t=>p[t]=!m[t])),d.filter((t=>null!==t.choices)).forEach((t=>p[t.name]=t.choices.find((e=>e!==m[t.name])))),h.setOptions(p),yield P(300);const g=o.saveLayout(),f=h.getOptions().look;o.resetLayout(),c.push(Array.from(o.viewers).length),o.loadLayout(g);const y=`${a} ${u}`;if(yield R((()=>null!==document.querySelector(y)),"cannot load viewer from layout",3e3),c.push(Array.from(o.viewers).length),h=Array.from(o.viewers).find((t=>"Grid"!==t.type)),S(c,[2,1,2]),b(JSON.stringify(h.getOptions().look),JSON.stringify(f)),!1!==(null==s?void 0:s.arbitraryDfTest)){n.shell.closeAll(),yield P(100),o=n.shell.addTableView(O);try{h=o.addViewer(t)}catch(t){return n.shell.closeAll(),void r.Balloon.closeAll()}yield R((()=>null!==document.querySelector(l)),"cannot load viewer on arbitrary dataset",3e3)}}finally{}}))}},3659:(t,e,s)=>{"use strict";s.d(e,{OW:()=>n});class n extends Float32Array{}},850:(t,e,s)=>{"use strict";s.d(e,{$G:()=>a,Fv:()=>u,MA:()=>l,On:()=>o,dP:()=>h,hu:()=>i,kO:()=>c});var n=s(3659),r=s(4588);function i(t=!1,e="Assertion error."){if(!t)throw new Error(e)}function o(t,e,s=1){const r=t.length;i(r==e.length,"Vector lengths do not match.");const o=new n.OW(r);for(let n=0;n<t.length;++n)o[n]=t[n]+s*e[n];return o}function a(t){let e=0;for(let s=0;s<t.length;s++)e+=t[s]*t[s];return Math.sqrt(e)}function l(t,e){if(t.length!=e.length)throw new Error("The dimensionality of the vectors must match");let s=0;for(let n=0;n<t.length;n++)s+=t[n]*e[n];return s}function c(t,e,s=1){const i=function(t,e,s=0){return new Array(t).fill(s).map((()=>new n.OW(e).fill(s)))}(t,e);for(let n=0;n<t;++n)for(let t=0;t<e;++t)i[n][t]=(0,r.t)(s);return i}function h(t,e){let s=0;const n=t.length;if(n!==e.length)throw new Error("The dimensionality of the vectors must match");for(let r=0;r<n;++r)s+=Math.pow(t[r]-e[r],2);return Math.sqrt(s)}function u(t){const e=t.length;let s=0,n=0;for(let r=0;r<e;++r)s+=t[r],n+=Math.pow(t[r],2);const r=s/e,i=1/Math.sqrt(n/e-Math.pow(r,2));for(let s=0;s<e;++s)t[s]=(t[s]-r)*i;return t}},7659:(t,e,s)=>{"use strict";e.Z=void 0;var n=s(6215);Object.defineProperty(e,"Z",{enumerable:!0,get:function(){return n.TSNE}})},6215:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.TSNE=void 0,e.TSNE=class{constructor(t){this.returnV=!1,this.vValue=0,this.iter=0,t=t||{},this.perplexity=this.getopt(t,"perplexity",30),this.dim=this.getopt(t,"dim",2),this.epsilon=this.getopt(t,"epsilon",10)}assert(t,e){if(!t)throw e||"Assertion failed"}getopt(t,e,s){return t.hasOwnProperty(e)?t[e]:s}gaussRandom(){if(this.returnV)return this.returnV=!1,this.vValue;const t=2*Math.random()-1,e=2*Math.random()-1,s=t*t+e*e;if(0===s||s>1)return this.gaussRandom();const n=Math.sqrt(-2*Math.log(s)/s);return this.vValue=e*n,this.returnV=!0,t*n}randn(t,e){return t+this.gaussRandom()*e}zeros(t){if(void 0===t||isNaN(t))return[];if("undefined"==typeof ArrayBuffer){const e=new Array(t);for(let s=0;s<t;s++)e[s]=0;return e}return new Float64Array(t)}randn2d(t,e,s){const n=void 0!==s,r=[];for(let i=0;i<t;i++){const t=[];for(let r=0;r<e;r++)n?t.push(s):t.push(this.randn(0,1e-4));r.push(t)}return r}L2(t,e){const s=t.length;let n=0;for(let r=0;r<s;r++){const s=t[r],i=e[r];n+=(s-i)*(s-i)}return n}xtod(t){const e=t.length,s=this.zeros(e*e);for(let n=0;n<e;n++)for(let r=n+1;r<e;r++){const i=this.L2(t[n],t[r]);s[n*e+r]=i,s[r*e+n]=i}return s}d2p(t,e,s){const n=Math.sqrt(t.length),r=Math.floor(n);this.assert(r===n,"D should have square number of elements.");const i=Math.log(e),o=this.zeros(r*r),a=this.zeros(r);for(let e=0;e<r;e++){let n=-1/0,l=1/0,c=1,h=!1;const u=50;let m=0;for(;!h;){let o=0;for(let s=0;s<r;s++){let n=Math.exp(-t[e*r+s]*c);e===s&&(n=0),a[s]=n,o+=n}let d=0;for(let t=0;t<r;t++){let e;e=0===o?0:a[t]/o,a[t]=e,e>1e-7&&(d-=e*Math.log(e))}d>i?(n=c,l===1/0?c*=2:c=(c+l)/2):(l=c,n===-1/0?c/=2:c=(c+n)/2),m++,Math.abs(d-i)<s&&(h=!0),m>=u&&(h=!0)}for(let t=0;t<r;t++)o[e*r+t]=a[t]}const l=this.zeros(r*r),c=2*r;for(let t=0;t<r;t++)for(let e=0;e<r;e++)l[t*r+e]=Math.max((o[t*r+e]+o[e*r+t])/c,1e-100);return l}sign(t){return t>0?1:t<0?-1:0}initDataRaw(t){const e=t.length,s=t[0].length;this.assert(e>0," X is empty? You must have some data!"),this.assert(s>0," X[0] is empty? Where is the data?");const n=this.xtod(t);this.P=this.d2p(n,this.perplexity,1e-4),this.N=e,this.initSolution()}initDataDist(t){const e=t.length;this.assert(e>0," X is empty? You must have some data!");const s=this.zeros(e*e);for(let n=0;n<e;n++)for(let r=n+1;r<e;r++){const i=t[n][r];s[n*e+r]=i,s[r*e+n]=i}this.P=this.d2p(s,this.perplexity,1e-4),this.N=e,this.initSolution()}initSolution(){this.Y=this.randn2d(this.N,this.dim),this.gains=this.randn2d(this.N,this.dim,1),this.ystep=this.randn2d(this.N,this.dim,0),this.iter=0}getSolution(){return this.Y}step(){this.iter+=1;const t=this.N,e=this.costGrad(this.Y),s=e.cost,n=e.grad,r=this.zeros(this.dim);for(let e=0;e<t;e++)for(let t=0;t<this.dim;t++){const s=n[e][t],i=this.ystep[e][t],o=this.gains[e][t];let a=this.sign(s)===this.sign(i)?.8*o:o+.2;a<.01&&(a=.01),this.gains[e][t]=a;const l=(this.iter<250?.5:.8)*i-this.epsilon*a*n[e][t];this.ystep[e][t]=l,this.Y[e][t]+=l,r[t]+=this.Y[e][t]}for(let e=0;e<t;e++)for(let s=0;s<this.dim;s++)this.Y[e][s]-=r[s]/t;return s}debugGrad(){const t=this.N,e=this.costGrad(this.Y),s=(e.cost,e.grad),n=1e-5;for(let e=0;e<t;e++)for(let t=0;t<this.dim;t++){const r=this.Y[e][t];this.Y[e][t]=r+n;const i=this.costGrad(this.Y);this.Y[e][t]=r-n;const o=this.costGrad(this.Y),a=s[e][t],l=(i.cost-o.cost)/(2*n);console.log(e+","+t+": gradcheck analytic: "+a+" vs. numerical: "+l),this.Y[e][t]=r}}costGrad(t){const e=this.N,s=this.dim,n=this.P,r=this.iter<100?4:1,i=this.zeros(e*e);let o=0;for(let n=0;n<e;n++)for(let r=n+1;r<e;r++){let a=0;for(let e=0;e<s;e++){const s=t[n][e]-t[r][e];a+=s*s}const l=1/(1+a);i[n*e+r]=l,i[r*e+n]=l,o+=2*l}const a=e*e,l=this.zeros(a);for(let t=0;t<a;t++)l[t]=Math.max(i[t]/o,1e-100);let c=0;const h=[];for(let o=0;o<e;o++){const a=new Array(s);for(let t=0;t<s;t++)a[t]=0;for(let h=0;h<e;h++){c+=-n[o*e+h]*Math.log(l[o*e+h]);const u=4*(r*n[o*e+h]-l[o*e+h])*i[o*e+h];for(let e=0;e<s;e++)a[e]+=u*(t[o][e]-t[h][e])}h.push(a)}return{cost:c,grad:h}}}},5362:(t,e,s)=>{"use strict";s.d(e,{Z:()=>a});var n=s(7537),r=s.n(n),i=s(3645),o=s.n(i)()(r());o.push([t.id,".macromolecule-cell-comp-analysis-host{\n max-height: 250px;\n overflow-y: scroll;\n}\n\n.macromolecule-cell-comp-analysis-bar{\n height: inherit;\n display: block;\n margin-top: 1.5px;\n margin-bottom: 1.5px;\n margin-right: 3px;\n}\n\n.macromolecule-cell-comp-analysis-value{\n display: flex;\n}","",{version:3,sources:["webpack://./css/composition-analysis.css"],names:[],mappings:"AAAA;IACI,iBAAiB;IACjB,kBAAkB;AACtB;;AAEA;IACI,eAAe;IACf,cAAc;IACd,iBAAiB;IACjB,oBAAoB;IACpB,iBAAiB;AACrB;;AAEA;IACI,aAAa;AACjB",sourcesContent:[".macromolecule-cell-comp-analysis-host{\n max-height: 250px;\n overflow-y: scroll;\n}\n\n.macromolecule-cell-comp-analysis-bar{\n height: inherit;\n display: block;\n margin-top: 1.5px;\n margin-bottom: 1.5px;\n margin-right: 3px;\n}\n\n.macromolecule-cell-comp-analysis-value{\n display: flex;\n}"],sourceRoot:""}]);const a=o},9564:(t,e,s)=>{"use strict";s.d(e,{Z:()=>a});var n=s(7537),r=s.n(n),i=s(3645),o=s.n(i)()(r());o.push([t.id,".kalign-version {\n margin-bottom: 0;\n text-align: end;\n font-size: 12px;\n opacity: 0.8;\n}\nbutton.msa-params-button.ui-btn {\n justify-content: end;\n}","",{version:3,sources:["webpack://./css/msa.css"],names:[],mappings:"AAAA;IACI,gBAAgB;IAChB,eAAe;IACf,eAAe;IACf,YAAY;AAChB;AACA;IACI,oBAAoB;AACxB",sourcesContent:[".kalign-version {\n margin-bottom: 0;\n text-align: end;\n font-size: 12px;\n opacity: 0.8;\n}\nbutton.msa-params-button.ui-btn {\n justify-content: end;\n}"],sourceRoot:""}]);const a=o},9414:(t,e,s)=>{"use strict";s.d(e,{Z:()=>a});var n=s(7537),r=s.n(n),i=s(3645),o=s.n(i)()(r());o.push([t.id,".scatter_plot_link {\n position: absolute!important;\n right: 10px;\n}\n\n.cliffs_grid {\n top: 10px;\n}\n\n.show_only_cliffs {\n top: 30px;\n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings {\n font-size: 18px;\n position: absolute;\n height: 28px;\n}\n","",{version:3,sources:["webpack://./node_modules/@datagrok-libraries/ml/css/styles.css"],names:[],mappings:"AAAA;IACI,4BAA4B;IAC5B,WAAW;AACf;;AAEA;IACI,SAAS;AACb;;AAEA;IACI,SAAS;AACb;;AAEA;IACI,eAAe;IACf,kBAAkB;IAClB,YAAY;AAChB",sourcesContent:[".scatter_plot_link {\n position: absolute!important;\n right: 10px;\n}\n\n.cliffs_grid {\n top: 10px;\n}\n\n.show_only_cliffs {\n top: 30px;\n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings {\n font-size: 18px;\n position: absolute;\n height: 28px;\n}\n"],sourceRoot:""}]);const a=o},3645:t=>{"use strict";t.exports=function(t){var e=[];return e.toString=function(){return this.map((function(e){var s="",n=void 0!==e[5];return e[4]&&(s+="@supports (".concat(e[4],") {")),e[2]&&(s+="@media ".concat(e[2]," {")),n&&(s+="@layer".concat(e[5].length>0?" ".concat(e[5]):""," {")),s+=t(e),n&&(s+="}"),e[2]&&(s+="}"),e[4]&&(s+="}"),s})).join("")},e.i=function(t,s,n,r,i){"string"==typeof t&&(t=[[null,t,void 0]]);var o={};if(n)for(var a=0;a<this.length;a++){var l=this[a][0];null!=l&&(o[l]=!0)}for(var c=0;c<t.length;c++){var h=[].concat(t[c]);n&&o[h[0]]||(void 0!==i&&(void 0===h[5]||(h[1]="@layer".concat(h[5].length>0?" ".concat(h[5]):""," {").concat(h[1],"}")),h[5]=i),s&&(h[2]?(h[1]="@media ".concat(h[2]," {").concat(h[1],"}"),h[2]=s):h[2]=s),r&&(h[4]?(h[1]="@supports (".concat(h[4],") {").concat(h[1],"}"),h[4]=r):h[4]="".concat(r)),e.push(h))}},e}},7537:t=>{"use strict";t.exports=function(t){var e=t[1],s=t[3];if(!s)return e;if("function"==typeof btoa){var n=btoa(unescape(encodeURIComponent(JSON.stringify(s)))),r="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(n),i="/*# ".concat(r," */");return[e].concat([i]).join("\n")}return[e].join("\n")}},9133:function(t,e,s){var n;!function(e,r){var i={};!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 s(t,s,n,r,i){for(var o,a,l,c,h,u,m,d,p,g,f,y,w;i>=64;){for(o=s[0],a=s[1],l=s[2],c=s[3],h=s[4],u=s[5],m=s[6],d=s[7],g=0;g<16;g++)f=r+4*g,t[g]=(255&n[f])<<24|(255&n[f+1])<<16|(255&n[f+2])<<8|255&n[f+3];for(g=16;g<64;g++)y=((p=t[g-2])>>>17|p<<15)^(p>>>19|p<<13)^p>>>10,w=((p=t[g-15])>>>7|p<<25)^(p>>>18|p<<14)^p>>>3,t[g]=(y+t[g-7]|0)+(w+t[g-16]|0);for(g=0;g<64;g++)y=(((h>>>6|h<<26)^(h>>>11|h<<21)^(h>>>25|h<<7))+(h&u^~h&m)|0)+(d+(e[g]+t[g]|0)|0)|0,w=((o>>>2|o<<30)^(o>>>13|o<<19)^(o>>>22|o<<10))+(o&a^o&l^a&l)|0,d=m,m=u,u=h,h=c+y|0,c=l,l=a,a=o,o=y+w|0;s[0]+=o,s[1]+=a,s[2]+=l,s[3]+=c,s[4]+=h,s[5]+=u,s[6]+=m,s[7]+=d,r+=64,i-=64}return r}var n=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 n=0;if(this.bytesHashed+=e,this.bufferLength>0){for(;this.bufferLength<64&&e>0;)this.buffer[this.bufferLength++]=t[n++],e--;64===this.bufferLength&&(s(this.temp,this.state,this.buffer,0,64),this.bufferLength=0)}for(e>=64&&(n=s(this.temp,this.state,t,n,e),e%=64);e>0;)this.buffer[this.bufferLength++]=t[n++],e--;return this},e.prototype.finish=function(t){if(!this.finished){var e=this.bytesHashed,n=this.bufferLength,r=e/536870912|0,i=e<<3,o=e%64<56?64:128;this.buffer[n]=128;for(var a=n+1;a<o-8;a++)this.buffer[a]=0;this.buffer[o-8]=r>>>24&255,this.buffer[o-7]=r>>>16&255,this.buffer[o-6]=r>>>8&255,this.buffer[o-5]=r>>>0&255,this.buffer[o-4]=i>>>24&255,this.buffer[o-3]=i>>>16&255,this.buffer[o-2]=i>>>8&255,this.buffer[o-1]=i>>>0&255,s(this.temp,this.state,this.buffer,0,o),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 s=0;s<this.state.length;s++)this.state[s]=t[s];this.bytesHashed=e,this.finished=!1,this.bufferLength=0},e}();t.Hash=n;var r=function(){function t(t){this.inner=new n,this.outer=new n,this.blockSize=this.inner.blockSize,this.digestLength=this.inner.digestLength;var e=new Uint8Array(this.blockSize);if(t.length>this.blockSize)(new n).update(t).finish(e).clean();else for(var s=0;s<t.length;s++)e[s]=t[s];for(s=0;s<e.length;s++)e[s]^=54;for(this.inner.update(e),s=0;s<e.length;s++)e[s]^=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),s=0;s<e.length;s++)e[s]=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 n).update(t),s=e.digest();return e.clean(),s}function o(t,e){var s=new r(t).update(e),n=s.digest();return s.clean(),n}function a(t,e,s,n){var r=n[0];if(0===r)throw new Error("hkdf: cannot expand more");e.reset(),r>1&&e.update(t),s&&e.update(s),e.update(n),e.finish(t),n[0]++}t.HMAC=r,t.hash=i,t.default=i,t.hmac=o;var l=new Uint8Array(t.digestLength);t.hkdf=function(t,e,s,n){void 0===e&&(e=l),void 0===n&&(n=32);for(var i=new Uint8Array([1]),c=o(e,t),h=new r(c),u=new Uint8Array(h.digestLength),m=u.length,d=new Uint8Array(n),p=0;p<n;p++)m===u.length&&(a(u,h,s,i),m=0),d[p]=u[m++];return h.clean(),u.fill(0),i.fill(0),d},t.pbkdf2=function(t,e,s,n){for(var i=new r(t),o=i.digestLength,a=new Uint8Array(4),l=new Uint8Array(o),c=new Uint8Array(o),h=new Uint8Array(n),u=0;u*o<n;u++){var m=u+1;a[0]=m>>>24&255,a[1]=m>>>16&255,a[2]=m>>>8&255,a[3]=m>>>0&255,i.reset(),i.update(e),i.update(a),i.finish(c);for(var d=0;d<o;d++)l[d]=c[d];for(d=2;d<=s;d++){i.reset(),i.update(c).finish(c);for(var p=0;p<o;p++)l[p]^=c[p]}for(d=0;d<o&&u*o+d<n;d++)h[u*o+d]=l[d]}for(u=0;u<o;u++)l[u]=c[u]=0;for(u=0;u<4;u++)a[u]=0;return i.clean(),h}}(i);var o=i.default;for(var a in i)o[a]=i[a];"object"==typeof t.exports?t.exports=o:void 0===(n=function(){return o}.call(i,s,i,t))||(t.exports=n)}()},1811:(t,e,s)=>{"use strict";s.d(e,{T:()=>r});const n=new Uint32Array(65536),r=(t,e)=>{if(t.length<e.length){const s=e;e=t,t=s}return 0===e.length?t.length:t.length<=32?((t,e)=>{const s=t.length,r=e.length,i=1<<s-1;let o=-1,a=0,l=s,c=s;for(;c--;)n[t.charCodeAt(c)]|=1<<c;for(c=0;c<r;c++){let t=n[e.charCodeAt(c)];const s=t|a;t|=(t&o)+o^o,a|=~(t|o),o&=t,a&i&&l++,o&i&&l--,a=a<<1|1,o=o<<1|~(s|a),a&=s}for(c=s;c--;)n[t.charCodeAt(c)]=0;return l})(t,e):((t,e)=>{const s=e.length,r=t.length,i=[],o=[],a=Math.ceil(s/32),l=Math.ceil(r/32);for(let t=0;t<a;t++)o[t]=-1,i[t]=0;let c=0;for(;c<l-1;c++){let a=0,l=-1;const h=32*c,u=Math.min(32,r)+h;for(let e=h;e<u;e++)n[t.charCodeAt(e)]|=1<<e;for(let t=0;t<s;t++){const s=n[e.charCodeAt(t)],r=o[t/32|0]>>>t&1,c=i[t/32|0]>>>t&1,h=s|a,u=((s|c)&l)+l^l|s|c;let m=a|~(u|l),d=l&u;m>>>31^r&&(o[t/32|0]^=1<<t),d>>>31^c&&(i[t/32|0]^=1<<t),m=m<<1|r,d=d<<1|c,l=d|~(h|m),a=m&h}for(let e=h;e<u;e++)n[t.charCodeAt(e)]=0}let h=0,u=-1;const m=32*c,d=Math.min(32,r-m)+m;for(let e=m;e<d;e++)n[t.charCodeAt(e)]|=1<<e;let p=r;for(let t=0;t<s;t++){const s=n[e.charCodeAt(t)],a=o[t/32|0]>>>t&1,l=i[t/32|0]>>>t&1,c=s|h,m=((s|l)&u)+u^u|s|l;let d=h|~(m|u),g=u&m;p+=d>>>r-1&1,p-=g>>>r-1&1,d>>>31^a&&(o[t/32|0]^=1<<t),g>>>31^l&&(i[t/32|0]^=1<<t),d=d<<1|a,g=g<<1|l,u=g|~(c|d),h=d&c}for(let e=m;e<d;e++)n[t.charCodeAt(e)]=0;return p})(t,e)}},7531:(t,e,s)=>{"use strict";s.d(e,{Z:()=>r});const n=Object.prototype.toString;function r(t){return n.call(t).endsWith("Array]")}},3979:(t,e)=>{"use strict";e.H$=void 0,e.H$=function(t,e,s){var n=function(t,e,s){if(0===t.length||0===e.length)return 0;if(s&&!s.caseSensitive&&(t=t.toUpperCase(),e=e.toUpperCase()),t===e)return 1;for(var n=0,r=t.length,i=e.length,o=Math.floor(Math.max(r,i)/2)-1,a=new Array(r),l=new Array(i),c=0;c<r;c++)for(var h=Math.max(0,c-o);h<=Math.min(i,c+o+1);h++)if(!a[c]&&!l[h]&&t[c]===e[h]){++n,a[c]=l[h]=!0;break}if(0===n)return 0;var u=0,m=0;for(c=0;c<r;c++)if(a[c]){for(;!l[m];)m++;t.charAt(c)!==e.charAt(m++)&&u++}return(n/r+n/i+(n-(u/=2))/n)/3}(t,e,s),r=0;if(n>.7){for(var i=Math.min(t.length,e.length),o=0;t[o]===e[o]&&o<4&&o<i;)++r,o++;n+=.1*r*(1-n)}return n}},5111:(t,e,s)=>{"use strict";s.d(e,{Z:()=>r});var n=s(6044);function r(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!(0,n.N)(t))throw new TypeError("input must be an array");if(0===t.length)throw new TypeError("input must not be empty");var s=e.fromIndex,r=void 0===s?0:s,i=e.toIndex,o=void 0===i?t.length:i;if(r<0||r>=t.length||!Number.isInteger(r))throw new Error("fromIndex must be a positive integer smaller than length");if(o<=r||o>t.length||!Number.isInteger(o))throw new Error("toIndex must be an integer greater than fromIndex and at most equal to length");for(var a=t[r],l=r+1;l<o;l++)t[l]>a&&(a=t[l]);return a}},6044:(t,e,s)=>{"use strict";s.d(e,{N:()=>r});const n=Object.prototype.toString;function r(t){return n.call(t).endsWith("Array]")}},1772:(t,e,s)=>{"use strict";s.d(e,{Z:()=>r});var n=s(994);function r(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!(0,n.N)(t))throw new TypeError("input must be an array");if(0===t.length)throw new TypeError("input must not be empty");var s=e.fromIndex,r=void 0===s?0:s,i=e.toIndex,o=void 0===i?t.length:i;if(r<0||r>=t.length||!Number.isInteger(r))throw new Error("fromIndex must be a positive integer smaller than length");if(o<=r||o>t.length||!Number.isInteger(o))throw new Error("toIndex must be an integer greater than fromIndex and at most equal to length");for(var a=t[r],l=r+1;l<o;l++)t[l]<a&&(a=t[l]);return a}},994:(t,e,s)=>{"use strict";s.d(e,{N:()=>r});const n=Object.prototype.toString;function r(t){return n.call(t).endsWith("Array]")}},5408:(t,e,s)=>{"use strict";s.d(e,{Z:()=>o});var n=s(6241),r=s(5111),i=s(1772);function o(t){var e,s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!(0,n.N)(t))throw new TypeError("input must be an array");if(0===t.length)throw new TypeError("input must not be empty");if(void 0!==s.output){if(!(0,n.N)(s.output))throw new TypeError("output option must be an array if specified");e=s.output}else e=new Array(t.length);var o=(0,i.Z)(t),a=(0,r.Z)(t);if(o===a)throw new RangeError("minimum and maximum input values are equal. Cannot rescale a constant array");var l=s.min,c=void 0===l?s.autoMinMax?o:0:l,h=s.max,u=void 0===h?s.autoMinMax?a:1:h;if(c>=u)throw new RangeError("min option must be smaller than max option");for(var m=(u-c)/(a-o),d=0;d<t.length;d++)e[d]=(t[d]-o)*m+c;return e}},6241:(t,e,s)=>{"use strict";s.d(e,{N:()=>r});const n=Object.prototype.toString;function r(t){return n.call(t).endsWith("Array]")}},1353:(t,e,s)=>{"use strict";function n(t,e,s){let n=0;const r=s(e);for(let e=0;e<t.x.length;e++)n+=Math.abs(t.y[e]-r(t.x[e]));return n}s.d(e,{Z:()=>n})},3107:(t,e,s)=>{"use strict";s.d(e,{Z:()=>o});var n=s(7531),r=s(1353),i=s(8188);function o(t,e,s={}){let{maxIterations:o=100,gradientDifference:a=.1,damping:l=0,errorTolerance:c=.01,minValues:h,maxValues:u,initialValues:m}=s;if(l<=0)throw new Error("The damping option must be a positive number");if(!t.x||!t.y)throw new Error("The data parameter must have x and y elements");if(!(0,n.Z)(t.x)||t.x.length<2||!(0,n.Z)(t.y)||t.y.length<2)throw new Error("The data parameter elements must be an array with more than 2 points");if(t.x.length!==t.y.length)throw new Error("The data parameter elements must have the same size");let d=m||new Array(e.length).fill(1),p=d.length;if(u=u||new Array(p).fill(Number.MAX_SAFE_INTEGER),h=h||new Array(p).fill(Number.MIN_SAFE_INTEGER),u.length!==h.length)throw new Error("minValues and maxValues must be the same size");if(!(0,n.Z)(d))throw new Error("initialValues must be an array");let g,f=(0,r.Z)(t,d,e),y=f<=c;for(g=0;g<o&&!y;g++){d=(0,i.Z)(t,d,l,a,e);for(let t=0;t<p;t++)d[t]=Math.min(Math.max(h[t],d[t]),u[t]);if(f=(0,r.Z)(t,d,e),isNaN(f))break;y=f<=c}return{parameterValues:d,parameterError:f,iterations:g}}},8188:(t,e,s)=>{"use strict";s.d(e,{Z:()=>i});var n=s(1174),r=s(8345);function i(t,e,s,i,o){let a=s*i*i,l=n.Z.eye(e.length,e.length,a);const c=o(e);let h=new Float64Array(t.x.length);for(let e=0;e<t.x.length;e++)h[e]=c(t.x[e]);let u=function(t,e,s,r,i){const o=s.length,a=t.x.length;let l=new Array(o);for(let n=0;n<o;n++){l[n]=new Array(a);let o=s.slice();o[n]+=r;let c=i(o);for(let s=0;s<a;s++)l[n][s]=e[s]-c(t.x[s])}return new n.Z(l)}(t,h,e,i,o),m=function(t,e){const s=t.x.length;let r=new Array(s);for(let n=0;n<s;n++)r[n]=[t.y[n]-e[n]];return new n.Z(r)}(t,h),d=(0,r.S)(l.add(u.mmul(u.transpose())));return(e=(e=new n.Z([e])).sub(d.mmul(u).mmul(m).mul(i).transpose())).to1DArray()}},5776:(t,e,s)=>{"use strict";s.d(e,{N:()=>r});const n=Object.prototype.toString;function r(t){return n.call(t).endsWith("Array]")}},2313:(t,e,s)=>{"use strict";s.d(e,{Z:()=>i});var n=s(1174),r=s(8353);class i{constructor(t){let e,s,n,i,o,a,l,c,h,u=(t=r.Z.checkMatrix(t)).clone(),m=u.rows,d=u.columns,p=new Float64Array(m),g=1;for(e=0;e<m;e++)p[e]=e;for(c=new Float64Array(m),s=0;s<d;s++){for(e=0;e<m;e++)c[e]=u.get(e,s);for(e=0;e<m;e++){for(h=Math.min(e,s),o=0,n=0;n<h;n++)o+=u.get(e,n)*c[n];c[e]-=o,u.set(e,s,c[e])}for(i=s,e=s+1;e<m;e++)Math.abs(c[e])>Math.abs(c[i])&&(i=e);if(i!==s){for(n=0;n<d;n++)a=u.get(i,n),u.set(i,n,u.get(s,n)),u.set(s,n,a);l=p[i],p[i]=p[s],p[s]=l,g=-g}if(s<m&&0!==u.get(s,s))for(e=s+1;e<m;e++)u.set(e,s,u.get(e,s)/u.get(s,s))}this.LU=u,this.pivotVector=p,this.pivotSign=g}isSingular(){let t=this.LU,e=t.columns;for(let s=0;s<e;s++)if(0===t.get(s,s))return!0;return!1}solve(t){t=n.Z.checkMatrix(t);let e=this.LU;if(e.rows!==t.rows)throw new Error("Invalid matrix dimensions");if(this.isSingular())throw new Error("LU matrix is singular");let s,r,i,o=t.columns,a=t.subMatrixRow(this.pivotVector,0,o-1),l=e.columns;for(i=0;i<l;i++)for(s=i+1;s<l;s++)for(r=0;r<o;r++)a.set(s,r,a.get(s,r)-a.get(i,r)*e.get(s,i));for(i=l-1;i>=0;i--){for(r=0;r<o;r++)a.set(i,r,a.get(i,r)/e.get(i,i));for(s=0;s<i;s++)for(r=0;r<o;r++)a.set(s,r,a.get(s,r)-a.get(i,r)*e.get(s,i))}return a}get determinant(){let t=this.LU;if(!t.isSquare())throw new Error("Matrix must be square");let e=this.pivotSign,s=t.columns;for(let n=0;n<s;n++)e*=t.get(n,n);return e}get lowerTriangularMatrix(){let t=this.LU,e=t.rows,s=t.columns,r=new n.Z(e,s);for(let n=0;n<e;n++)for(let e=0;e<s;e++)n>e?r.set(n,e,t.get(n,e)):n===e?r.set(n,e,1):r.set(n,e,0);return r}get upperTriangularMatrix(){let t=this.LU,e=t.rows,s=t.columns,r=new n.Z(e,s);for(let n=0;n<e;n++)for(let e=0;e<s;e++)n<=e?r.set(n,e,t.get(n,e)):r.set(n,e,0);return r}get pivotPermutationVector(){return Array.from(this.pivotVector)}}},7072:(t,e,s)=>{"use strict";s.d(e,{Z:()=>o});var n=s(1174),r=s(8353),i=s(6310);class o{constructor(t){let e,s,n,o,a=(t=r.Z.checkMatrix(t)).clone(),l=t.rows,c=t.columns,h=new Float64Array(c);for(n=0;n<c;n++){let t=0;for(e=n;e<l;e++)t=(0,i.G)(t,a.get(e,n));if(0!==t){for(a.get(n,n)<0&&(t=-t),e=n;e<l;e++)a.set(e,n,a.get(e,n)/t);for(a.set(n,n,a.get(n,n)+1),s=n+1;s<c;s++){for(o=0,e=n;e<l;e++)o+=a.get(e,n)*a.get(e,s);for(o=-o/a.get(n,n),e=n;e<l;e++)a.set(e,s,a.get(e,s)+o*a.get(e,n))}}h[n]=-t}this.QR=a,this.Rdiag=h}solve(t){t=n.Z.checkMatrix(t);let e=this.QR,s=e.rows;if(t.rows!==s)throw new Error("Matrix row dimensions must agree");if(!this.isFullRank())throw new Error("Matrix is rank deficient");let r,i,o,a,l=t.columns,c=t.clone(),h=e.columns;for(o=0;o<h;o++)for(i=0;i<l;i++){for(a=0,r=o;r<s;r++)a+=e.get(r,o)*c.get(r,i);for(a=-a/e.get(o,o),r=o;r<s;r++)c.set(r,i,c.get(r,i)+a*e.get(r,o))}for(o=h-1;o>=0;o--){for(i=0;i<l;i++)c.set(o,i,c.get(o,i)/this.Rdiag[o]);for(r=0;r<o;r++)for(i=0;i<l;i++)c.set(r,i,c.get(r,i)-c.get(o,i)*e.get(r,o))}return c.subMatrix(0,h-1,0,l-1)}isFullRank(){let t=this.QR.columns;for(let e=0;e<t;e++)if(0===this.Rdiag[e])return!1;return!0}get upperTriangularMatrix(){let t,e,s=this.QR,r=s.columns,i=new n.Z(r,r);for(t=0;t<r;t++)for(e=0;e<r;e++)t<e?i.set(t,e,s.get(t,e)):t===e?i.set(t,e,this.Rdiag[t]):i.set(t,e,0);return i}get orthogonalMatrix(){let t,e,s,r,i=this.QR,o=i.rows,a=i.columns,l=new n.Z(o,a);for(s=a-1;s>=0;s--){for(t=0;t<o;t++)l.set(t,s,0);for(l.set(s,s,1),e=s;e<a;e++)if(0!==i.get(s,s)){for(r=0,t=s;t<o;t++)r+=i.get(t,s)*l.get(t,e);for(r=-r/i.get(s,s),t=s;t<o;t++)l.set(t,e,l.get(t,e)+r*i.get(t,s))}}return l}}},6943:(t,e,s)=>{"use strict";s.d(e,{Z:()=>o});var n=s(1174),r=s(8353),i=s(6310);class o{constructor(t,e={}){if((t=r.Z.checkMatrix(t)).isEmpty())throw new Error("Matrix must be non-empty");let s=t.rows,o=t.columns;const{computeLeftSingularVectors:a=!0,computeRightSingularVectors:l=!0,autoTranspose:c=!1}=e;let h,u=Boolean(a),m=Boolean(l),d=!1;if(s<o)if(c){h=t.transpose(),s=h.rows,o=h.columns,d=!0;let e=u;u=m,m=e}else h=t.clone(),console.warn("Computing SVD on a matrix with more columns than rows. Consider enabling autoTranspose");else h=t.clone();let p=Math.min(s,o),g=Math.min(s+1,o),f=new Float64Array(g),y=new n.Z(s,p),w=new n.Z(o,o),C=new Float64Array(o),b=new Float64Array(s),T=new Float64Array(g);for(let t=0;t<g;t++)T[t]=t;let A=Math.min(s-1,o),S=Math.max(0,Math.min(o-2,s)),E=Math.max(A,S);for(let t=0;t<E;t++){if(t<A){f[t]=0;for(let e=t;e<s;e++)f[t]=(0,i.G)(f[t],h.get(e,t));if(0!==f[t]){h.get(t,t)<0&&(f[t]=-f[t]);for(let e=t;e<s;e++)h.set(e,t,h.get(e,t)/f[t]);h.set(t,t,h.get(t,t)+1)}f[t]=-f[t]}for(let e=t+1;e<o;e++){if(t<A&&0!==f[t]){let n=0;for(let r=t;r<s;r++)n+=h.get(r,t)*h.get(r,e);n=-n/h.get(t,t);for(let r=t;r<s;r++)h.set(r,e,h.get(r,e)+n*h.get(r,t))}C[e]=h.get(t,e)}if(u&&t<A)for(let e=t;e<s;e++)y.set(e,t,h.get(e,t));if(t<S){C[t]=0;for(let e=t+1;e<o;e++)C[t]=(0,i.G)(C[t],C[e]);if(0!==C[t]){C[t+1]<0&&(C[t]=0-C[t]);for(let e=t+1;e<o;e++)C[e]/=C[t];C[t+1]+=1}if(C[t]=-C[t],t+1<s&&0!==C[t]){for(let e=t+1;e<s;e++)b[e]=0;for(let e=t+1;e<s;e++)for(let s=t+1;s<o;s++)b[e]+=C[s]*h.get(e,s);for(let e=t+1;e<o;e++){let n=-C[e]/C[t+1];for(let r=t+1;r<s;r++)h.set(r,e,h.get(r,e)+n*b[r])}}if(m)for(let e=t+1;e<o;e++)w.set(e,t,C[e])}}let v=Math.min(o,s+1);if(A<o&&(f[A]=h.get(A,A)),s<v&&(f[v-1]=0),S+1<v&&(C[S]=h.get(S,v-1)),C[v-1]=0,u){for(let t=A;t<p;t++){for(let e=0;e<s;e++)y.set(e,t,0);y.set(t,t,1)}for(let t=A-1;t>=0;t--)if(0!==f[t]){for(let e=t+1;e<p;e++){let n=0;for(let r=t;r<s;r++)n+=y.get(r,t)*y.get(r,e);n=-n/y.get(t,t);for(let r=t;r<s;r++)y.set(r,e,y.get(r,e)+n*y.get(r,t))}for(let e=t;e<s;e++)y.set(e,t,-y.get(e,t));y.set(t,t,1+y.get(t,t));for(let e=0;e<t-1;e++)y.set(e,t,0)}else{for(let e=0;e<s;e++)y.set(e,t,0);y.set(t,t,1)}}if(m)for(let t=o-1;t>=0;t--){if(t<S&&0!==C[t])for(let e=t+1;e<o;e++){let s=0;for(let n=t+1;n<o;n++)s+=w.get(n,t)*w.get(n,e);s=-s/w.get(t+1,t);for(let n=t+1;n<o;n++)w.set(n,e,w.get(n,e)+s*w.get(n,t))}for(let e=0;e<o;e++)w.set(e,t,0);w.set(t,t,1)}let M=v-1,x=0,N=Number.EPSILON;for(;v>0;){let t,e;for(t=v-2;t>=-1&&-1!==t;t--){const e=Number.MIN_VALUE+N*Math.abs(f[t]+Math.abs(f[t+1]));if(Math.abs(C[t])<=e||Number.isNaN(C[t])){C[t]=0;break}}if(t===v-2)e=4;else{let s;for(s=v-1;s>=t&&s!==t;s--){let e=(s!==v?Math.abs(C[s]):0)+(s!==t+1?Math.abs(C[s-1]):0);if(Math.abs(f[s])<=N*e){f[s]=0;break}}s===t?e=3:s===v-1?e=1:(e=2,t=s)}switch(t++,e){case 1:{let e=C[v-2];C[v-2]=0;for(let s=v-2;s>=t;s--){let n=(0,i.G)(f[s],e),r=f[s]/n,a=e/n;if(f[s]=n,s!==t&&(e=-a*C[s-1],C[s-1]=r*C[s-1]),m)for(let t=0;t<o;t++)n=r*w.get(t,s)+a*w.get(t,v-1),w.set(t,v-1,-a*w.get(t,s)+r*w.get(t,v-1)),w.set(t,s,n)}break}case 2:{let e=C[t-1];C[t-1]=0;for(let n=t;n<v;n++){let r=(0,i.G)(f[n],e),o=f[n]/r,a=e/r;if(f[n]=r,e=-a*C[n],C[n]=o*C[n],u)for(let e=0;e<s;e++)r=o*y.get(e,n)+a*y.get(e,t-1),y.set(e,t-1,-a*y.get(e,n)+o*y.get(e,t-1)),y.set(e,n,r)}break}case 3:{const e=Math.max(Math.abs(f[v-1]),Math.abs(f[v-2]),Math.abs(C[v-2]),Math.abs(f[t]),Math.abs(C[t])),n=f[v-1]/e,r=f[v-2]/e,a=C[v-2]/e,l=f[t]/e,c=C[t]/e,h=((r+n)*(r-n)+a*a)/2,d=n*a*(n*a);let p=0;0===h&&0===d||(p=h<0?0-Math.sqrt(h*h+d):Math.sqrt(h*h+d),p=d/(h+p));let g=(l+n)*(l-n)+p,b=l*c;for(let e=t;e<v-1;e++){let n=(0,i.G)(g,b);0===n&&(n=Number.MIN_VALUE);let r=g/n,a=b/n;if(e!==t&&(C[e-1]=n),g=r*f[e]+a*C[e],C[e]=r*C[e]-a*f[e],b=a*f[e+1],f[e+1]=r*f[e+1],m)for(let t=0;t<o;t++)n=r*w.get(t,e)+a*w.get(t,e+1),w.set(t,e+1,-a*w.get(t,e)+r*w.get(t,e+1)),w.set(t,e,n);if(n=(0,i.G)(g,b),0===n&&(n=Number.MIN_VALUE),r=g/n,a=b/n,f[e]=n,g=r*C[e]+a*f[e+1],f[e+1]=-a*C[e]+r*f[e+1],b=a*C[e+1],C[e+1]=r*C[e+1],u&&e<s-1)for(let t=0;t<s;t++)n=r*y.get(t,e)+a*y.get(t,e+1),y.set(t,e+1,-a*y.get(t,e)+r*y.get(t,e+1)),y.set(t,e,n)}C[v-2]=g,x+=1;break}case 4:if(f[t]<=0&&(f[t]=f[t]<0?-f[t]:0,m))for(let e=0;e<=M;e++)w.set(e,t,-w.get(e,t));for(;t<M&&!(f[t]>=f[t+1]);){let e=f[t];if(f[t]=f[t+1],f[t+1]=e,m&&t<o-1)for(let s=0;s<o;s++)e=w.get(s,t+1),w.set(s,t+1,w.get(s,t)),w.set(s,t,e);if(u&&t<s-1)for(let n=0;n<s;n++)e=y.get(n,t+1),y.set(n,t+1,y.get(n,t)),y.set(n,t,e);t++}x=0,v--}}if(d){let t=w;w=y,y=t}this.m=s,this.n=o,this.s=f,this.U=y,this.V=w}solve(t){let e=t,s=this.threshold,r=this.s.length,i=n.Z.zeros(r,r);for(let t=0;t<r;t++)Math.abs(this.s[t])<=s?i.set(t,t,0):i.set(t,t,1/this.s[t]);let o=this.U,a=this.rightSingularVectors,l=a.mmul(i),c=a.rows,h=o.rows,u=n.Z.zeros(c,h);for(let t=0;t<c;t++)for(let e=0;e<h;e++){let s=0;for(let n=0;n<r;n++)s+=l.get(t,n)*o.get(e,n);u.set(t,e,s)}return u.mmul(e)}solveForDiagonal(t){return this.solve(n.Z.diag(t))}inverse(){let t=this.V,e=this.threshold,s=t.rows,r=t.columns,i=new n.Z(s,this.s.length);for(let n=0;n<s;n++)for(let s=0;s<r;s++)Math.abs(this.s[s])>e&&i.set(n,s,t.get(n,s)/this.s[s]);let o=this.U,a=o.rows,l=o.columns,c=new n.Z(s,a);for(let t=0;t<s;t++)for(let e=0;e<a;e++){let s=0;for(let n=0;n<l;n++)s+=i.get(t,n)*o.get(e,n);c.set(t,e,s)}return c}get condition(){return this.s[0]/this.s[Math.min(this.m,this.n)-1]}get norm2(){return this.s[0]}get rank(){let t=Math.max(this.m,this.n)*this.s[0]*Number.EPSILON,e=0,s=this.s;for(let n=0,r=s.length;n<r;n++)s[n]>t&&e++;return e}get diagonal(){return Array.from(this.s)}get threshold(){return Number.EPSILON/2*Math.max(this.m,this.n)*this.s[0]}get leftSingularVectors(){return this.U}get rightSingularVectors(){return this.V}get diagonalMatrix(){return n.Z.diag(this.s)}}},6310:(t,e,s)=>{"use strict";function n(t,e){let s=0;return Math.abs(t)>Math.abs(e)?(s=e/t,Math.abs(t)*Math.sqrt(1+s*s)):0!==e?(s=t/e,Math.abs(e)*Math.sqrt(1+s*s)):0}s.d(e,{G:()=>n})},8345:(t,e,s)=>{"use strict";s.d(e,{S:()=>l});var n=s(2313),r=s(7072),i=s(6943),o=s(1174),a=s(8353);function l(t,e=!1){return t=a.Z.checkMatrix(t),e?new i.Z(t).inverse():function(t,e,s=!1){return t=a.Z.checkMatrix(t),e=a.Z.checkMatrix(e),s?new i.Z(t).solve(e):t.isSquare()?new n.Z(t).solve(e):new r.Z(t).solve(e)}(t,o.Z.eye(t.rows))}},3559:(t,e,s)=>{"use strict";s.d(e,{M:()=>o,V:()=>i});const n=" ".repeat(2),r=" ".repeat(4);function i(){return o(this)}function o(t,e={}){const{maxRows:s=15,maxColumns:i=10,maxNumSize:o=8,padMinus:l="auto"}=e;return`${t.constructor.name} {\n${n}[\n${r}${function(t,e,s,n,i){const{rows:o,columns:l}=t,c=Math.min(o,e),h=Math.min(l,s),u=[];if("auto"===i){i=!1;t:for(let e=0;e<c;e++)for(let s=0;s<h;s++)if(t.get(e,s)<0){i=!0;break t}}for(let e=0;e<c;e++){let s=[];for(let r=0;r<h;r++)s.push(a(t.get(e,r),n,i));u.push(`${s.join(" ")}`)}return h!==l&&(u[u.length-1]+=` ... ${l-s} more columns`),c!==o&&u.push(`... ${o-e} more rows`),u.join(`\n${r}`)}(t,s,i,o,l)}\n${n}]\n${n}rows: ${t.rows}\n${n}columns: ${t.columns}\n}`}function a(t,e,s){return(t>=0&&s?` ${l(t,e-1)}`:l(t,e)).padEnd(e)}function l(t,e){let s=t.toString();if(s.length<=e)return s;let n=t.toFixed(e);if(n.length>e&&(n=t.toFixed(Math.max(0,e-(n.length-e)))),n.length<=e&&!n.startsWith("0.000")&&!n.startsWith("-0.000"))return n;let r=t.toExponential(e);return r.length>e&&(r=t.toExponential(Math.max(0,e-(r.length-e)))),r.slice(0)}},5401:(t,e,s)=>{"use strict";function n(t,e){t.prototype.add=function(t){return"number"==typeof t?this.addS(t):this.addM(t)},t.prototype.addS=function(t){for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)+t);return this},t.prototype.addM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)+t.get(e,s));return this},t.add=function(t,s){return new e(t).add(s)},t.prototype.sub=function(t){return"number"==typeof t?this.subS(t):this.subM(t)},t.prototype.subS=function(t){for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)-t);return this},t.prototype.subM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)-t.get(e,s));return this},t.sub=function(t,s){return new e(t).sub(s)},t.prototype.subtract=t.prototype.sub,t.prototype.subtractS=t.prototype.subS,t.prototype.subtractM=t.prototype.subM,t.subtract=t.sub,t.prototype.mul=function(t){return"number"==typeof t?this.mulS(t):this.mulM(t)},t.prototype.mulS=function(t){for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)*t);return this},t.prototype.mulM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)*t.get(e,s));return this},t.mul=function(t,s){return new e(t).mul(s)},t.prototype.multiply=t.prototype.mul,t.prototype.multiplyS=t.prototype.mulS,t.prototype.multiplyM=t.prototype.mulM,t.multiply=t.mul,t.prototype.div=function(t){return"number"==typeof t?this.divS(t):this.divM(t)},t.prototype.divS=function(t){for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)/t);return this},t.prototype.divM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)/t.get(e,s));return this},t.div=function(t,s){return new e(t).div(s)},t.prototype.divide=t.prototype.div,t.prototype.divideS=t.prototype.divS,t.prototype.divideM=t.prototype.divM,t.divide=t.div,t.prototype.mod=function(t){return"number"==typeof t?this.modS(t):this.modM(t)},t.prototype.modS=function(t){for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)%t);return this},t.prototype.modM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)%t.get(e,s));return this},t.mod=function(t,s){return new e(t).mod(s)},t.prototype.modulus=t.prototype.mod,t.prototype.modulusS=t.prototype.modS,t.prototype.modulusM=t.prototype.modM,t.modulus=t.mod,t.prototype.and=function(t){return"number"==typeof t?this.andS(t):this.andM(t)},t.prototype.andS=function(t){for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)&t);return this},t.prototype.andM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)&t.get(e,s));return this},t.and=function(t,s){return new e(t).and(s)},t.prototype.or=function(t){return"number"==typeof t?this.orS(t):this.orM(t)},t.prototype.orS=function(t){for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)|t);return this},t.prototype.orM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)|t.get(e,s));return this},t.or=function(t,s){return new e(t).or(s)},t.prototype.xor=function(t){return"number"==typeof t?this.xorS(t):this.xorM(t)},t.prototype.xorS=function(t){for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)^t);return this},t.prototype.xorM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)^t.get(e,s));return this},t.xor=function(t,s){return new e(t).xor(s)},t.prototype.leftShift=function(t){return"number"==typeof t?this.leftShiftS(t):this.leftShiftM(t)},t.prototype.leftShiftS=function(t){for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)<<t);return this},t.prototype.leftShiftM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)<<t.get(e,s));return this},t.leftShift=function(t,s){return new e(t).leftShift(s)},t.prototype.signPropagatingRightShift=function(t){return"number"==typeof t?this.signPropagatingRightShiftS(t):this.signPropagatingRightShiftM(t)},t.prototype.signPropagatingRightShiftS=function(t){for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)>>t);return this},t.prototype.signPropagatingRightShiftM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)>>t.get(e,s));return this},t.signPropagatingRightShift=function(t,s){return new e(t).signPropagatingRightShift(s)},t.prototype.rightShift=function(t){return"number"==typeof t?this.rightShiftS(t):this.rightShiftM(t)},t.prototype.rightShiftS=function(t){for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)>>>t);return this},t.prototype.rightShiftM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)>>>t.get(e,s));return this},t.rightShift=function(t,s){return new e(t).rightShift(s)},t.prototype.zeroFillRightShift=t.prototype.rightShift,t.prototype.zeroFillRightShiftS=t.prototype.rightShiftS,t.prototype.zeroFillRightShiftM=t.prototype.rightShiftM,t.zeroFillRightShift=t.rightShift,t.prototype.not=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,~this.get(t,e));return this},t.not=function(t){return new e(t).not()},t.prototype.abs=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.abs(this.get(t,e)));return this},t.abs=function(t){return new e(t).abs()},t.prototype.acos=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.acos(this.get(t,e)));return this},t.acos=function(t){return new e(t).acos()},t.prototype.acosh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.acosh(this.get(t,e)));return this},t.acosh=function(t){return new e(t).acosh()},t.prototype.asin=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.asin(this.get(t,e)));return this},t.asin=function(t){return new e(t).asin()},t.prototype.asinh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.asinh(this.get(t,e)));return this},t.asinh=function(t){return new e(t).asinh()},t.prototype.atan=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.atan(this.get(t,e)));return this},t.atan=function(t){return new e(t).atan()},t.prototype.atanh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.atanh(this.get(t,e)));return this},t.atanh=function(t){return new e(t).atanh()},t.prototype.cbrt=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.cbrt(this.get(t,e)));return this},t.cbrt=function(t){return new e(t).cbrt()},t.prototype.ceil=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.ceil(this.get(t,e)));return this},t.ceil=function(t){return new e(t).ceil()},t.prototype.clz32=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.clz32(this.get(t,e)));return this},t.clz32=function(t){return new e(t).clz32()},t.prototype.cos=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.cos(this.get(t,e)));return this},t.cos=function(t){return new e(t).cos()},t.prototype.cosh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.cosh(this.get(t,e)));return this},t.cosh=function(t){return new e(t).cosh()},t.prototype.exp=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.exp(this.get(t,e)));return this},t.exp=function(t){return new e(t).exp()},t.prototype.expm1=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.expm1(this.get(t,e)));return this},t.expm1=function(t){return new e(t).expm1()},t.prototype.floor=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.floor(this.get(t,e)));return this},t.floor=function(t){return new e(t).floor()},t.prototype.fround=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.fround(this.get(t,e)));return this},t.fround=function(t){return new e(t).fround()},t.prototype.log=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.log(this.get(t,e)));return this},t.log=function(t){return new e(t).log()},t.prototype.log1p=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.log1p(this.get(t,e)));return this},t.log1p=function(t){return new e(t).log1p()},t.prototype.log10=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.log10(this.get(t,e)));return this},t.log10=function(t){return new e(t).log10()},t.prototype.log2=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.log2(this.get(t,e)));return this},t.log2=function(t){return new e(t).log2()},t.prototype.round=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.round(this.get(t,e)));return this},t.round=function(t){return new e(t).round()},t.prototype.sign=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.sign(this.get(t,e)));return this},t.sign=function(t){return new e(t).sign()},t.prototype.sin=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.sin(this.get(t,e)));return this},t.sin=function(t){return new e(t).sin()},t.prototype.sinh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.sinh(this.get(t,e)));return this},t.sinh=function(t){return new e(t).sinh()},t.prototype.sqrt=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.sqrt(this.get(t,e)));return this},t.sqrt=function(t){return new e(t).sqrt()},t.prototype.tan=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.tan(this.get(t,e)));return this},t.tan=function(t){return new e(t).tan()},t.prototype.tanh=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.tanh(this.get(t,e)));return this},t.tanh=function(t){return new e(t).tanh()},t.prototype.trunc=function(){for(let t=0;t<this.rows;t++)for(let e=0;e<this.columns;e++)this.set(t,e,Math.trunc(this.get(t,e)));return this},t.trunc=function(t){return new e(t).trunc()},t.pow=function(t,s){return new e(t).pow(s)},t.prototype.pow=function(t){return"number"==typeof t?this.powS(t):this.powM(t)},t.prototype.powS=function(t){for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,Math.pow(this.get(e,s),t));return this},t.prototype.powM=function(t){if(t=e.checkMatrix(t),this.rows!==t.rows||this.columns!==t.columns)throw new RangeError("Matrices dimensions must be equal");for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,Math.pow(this.get(e,s),t.get(e,s)));return this}}s.d(e,{z:()=>n})},1174:(t,e,s)=>{"use strict";s.d(e,{X:()=>c,Z:()=>u});var n=s(5776),r=s(5408),i=s(3559),o=s(5401),a=s(9515),l=s(3018);class c{static from1DArray(t,e,s){if(t*e!==s.length)throw new RangeError("data length does not match given dimensions");let n=new u(t,e);for(let r=0;r<t;r++)for(let t=0;t<e;t++)n.set(r,t,s[r*e+t]);return n}static rowVector(t){let e=new u(1,t.length);for(let s=0;s<t.length;s++)e.set(0,s,t[s]);return e}static columnVector(t){let e=new u(t.length,1);for(let s=0;s<t.length;s++)e.set(s,0,t[s]);return e}static zeros(t,e){return new u(t,e)}static ones(t,e){return new u(t,e).fill(1)}static rand(t,e,s={}){if("object"!=typeof s)throw new TypeError("options must be an object");const{random:n=Math.random}=s;let r=new u(t,e);for(let s=0;s<t;s++)for(let t=0;t<e;t++)r.set(s,t,n());return r}static randInt(t,e,s={}){if("object"!=typeof s)throw new TypeError("options must be an object");const{min:n=0,max:r=1e3,random:i=Math.random}=s;if(!Number.isInteger(n))throw new TypeError("min must be an integer");if(!Number.isInteger(r))throw new TypeError("max must be an integer");if(n>=r)throw new RangeError("min must be smaller than max");let o=r-n,a=new u(t,e);for(let s=0;s<t;s++)for(let t=0;t<e;t++){let e=n+Math.round(i()*o);a.set(s,t,e)}return a}static eye(t,e,s){void 0===e&&(e=t),void 0===s&&(s=1);let n=Math.min(t,e),r=this.zeros(t,e);for(let t=0;t<n;t++)r.set(t,t,s);return r}static diag(t,e,s){let n=t.length;void 0===e&&(e=n),void 0===s&&(s=e);let r=Math.min(n,e,s),i=this.zeros(e,s);for(let e=0;e<r;e++)i.set(e,e,t[e]);return i}static min(t,e){t=this.checkMatrix(t),e=this.checkMatrix(e);let s=t.rows,n=t.columns,r=new u(s,n);for(let i=0;i<s;i++)for(let s=0;s<n;s++)r.set(i,s,Math.min(t.get(i,s),e.get(i,s)));return r}static max(t,e){t=this.checkMatrix(t),e=this.checkMatrix(e);let s=t.rows,n=t.columns,r=new this(s,n);for(let i=0;i<s;i++)for(let s=0;s<n;s++)r.set(i,s,Math.max(t.get(i,s),e.get(i,s)));return r}static checkMatrix(t){return c.isMatrix(t)?t:new u(t)}static isMatrix(t){return null!=t&&"Matrix"===t.klass}get size(){return this.rows*this.columns}apply(t){if("function"!=typeof t)throw new TypeError("callback must be a function");for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)t.call(this,e,s);return this}to1DArray(){let t=[];for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)t.push(this.get(e,s));return t}to2DArray(){let t=[];for(let e=0;e<this.rows;e++){t.push([]);for(let s=0;s<this.columns;s++)t[e].push(this.get(e,s))}return t}toJSON(){return this.to2DArray()}isRowVector(){return 1===this.rows}isColumnVector(){return 1===this.columns}isVector(){return 1===this.rows||1===this.columns}isSquare(){return this.rows===this.columns}isEmpty(){return 0===this.rows||0===this.columns}isSymmetric(){if(this.isSquare()){for(let t=0;t<this.rows;t++)for(let e=0;e<=t;e++)if(this.get(t,e)!==this.get(e,t))return!1;return!0}return!1}isEchelonForm(){let t=0,e=0,s=-1,n=!0,r=!1;for(;t<this.rows&&n;){for(e=0,r=!1;e<this.columns&&!1===r;)0===this.get(t,e)?e++:1===this.get(t,e)&&e>s?(r=!0,s=e):(n=!1,r=!0);t++}return n}isReducedEchelonForm(){let t=0,e=0,s=-1,n=!0,r=!1;for(;t<this.rows&&n;){for(e=0,r=!1;e<this.columns&&!1===r;)0===this.get(t,e)?e++:1===this.get(t,e)&&e>s?(r=!0,s=e):(n=!1,r=!0);for(let s=e+1;s<this.rows;s++)0!==this.get(t,s)&&(n=!1);t++}return n}echelonForm(){let t=this.clone(),e=0,s=0;for(;e<t.rows&&s<t.columns;){let n=e;for(let r=e;r<t.rows;r++)t.get(r,s)>t.get(n,s)&&(n=r);if(0===t.get(n,s))s++;else{t.swapRows(e,n);let r=t.get(e,s);for(let n=s;n<t.columns;n++)t.set(e,n,t.get(e,n)/r);for(let n=e+1;n<t.rows;n++){let r=t.get(n,s)/t.get(e,s);t.set(n,s,0);for(let i=s+1;i<t.columns;i++)t.set(n,i,t.get(n,i)-t.get(e,i)*r)}e++,s++}}return t}reducedEchelonForm(){let t=this.echelonForm(),e=t.columns,s=t.rows,n=s-1;for(;n>=0;)if(0===t.maxRow(n))n--;else{let r=0,i=!1;for(;r<s&&!1===i;)1===t.get(n,r)?i=!0:r++;for(let s=0;s<n;s++){let i=t.get(s,r);for(let o=r;o<e;o++){let e=t.get(s,o)-i*t.get(n,o);t.set(s,o,e)}}n--}return t}set(){throw new Error("set method is unimplemented")}get(){throw new Error("get method is unimplemented")}repeat(t={}){if("object"!=typeof t)throw new TypeError("options must be an object");const{rows:e=1,columns:s=1}=t;if(!Number.isInteger(e)||e<=0)throw new TypeError("rows must be a positive integer");if(!Number.isInteger(s)||s<=0)throw new TypeError("columns must be a positive integer");let n=new u(this.rows*e,this.columns*s);for(let t=0;t<e;t++)for(let e=0;e<s;e++)n.setSubMatrix(this,this.rows*t,this.columns*e);return n}fill(t){for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,t);return this}neg(){return this.mulS(-1)}getRow(t){(0,l.zb)(this,t);let e=[];for(let s=0;s<this.columns;s++)e.push(this.get(t,s));return e}getRowVector(t){return u.rowVector(this.getRow(t))}setRow(t,e){(0,l.zb)(this,t),e=(0,l.on)(this,e);for(let s=0;s<this.columns;s++)this.set(t,s,e[s]);return this}swapRows(t,e){(0,l.zb)(this,t),(0,l.zb)(this,e);for(let s=0;s<this.columns;s++){let n=this.get(t,s);this.set(t,s,this.get(e,s)),this.set(e,s,n)}return this}getColumn(t){(0,l.bp)(this,t);let e=[];for(let s=0;s<this.rows;s++)e.push(this.get(s,t));return e}getColumnVector(t){return u.columnVector(this.getColumn(t))}setColumn(t,e){(0,l.bp)(this,t),e=(0,l.Um)(this,e);for(let s=0;s<this.rows;s++)this.set(s,t,e[s]);return this}swapColumns(t,e){(0,l.bp)(this,t),(0,l.bp)(this,e);for(let s=0;s<this.rows;s++){let n=this.get(s,t);this.set(s,t,this.get(s,e)),this.set(s,e,n)}return this}addRowVector(t){t=(0,l.on)(this,t);for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)+t[s]);return this}subRowVector(t){t=(0,l.on)(this,t);for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)-t[s]);return this}mulRowVector(t){t=(0,l.on)(this,t);for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)*t[s]);return this}divRowVector(t){t=(0,l.on)(this,t);for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)/t[s]);return this}addColumnVector(t){t=(0,l.Um)(this,t);for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)+t[e]);return this}subColumnVector(t){t=(0,l.Um)(this,t);for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)-t[e]);return this}mulColumnVector(t){t=(0,l.Um)(this,t);for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)*t[e]);return this}divColumnVector(t){t=(0,l.Um)(this,t);for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.set(e,s,this.get(e,s)/t[e]);return this}mulRow(t,e){(0,l.zb)(this,t);for(let s=0;s<this.columns;s++)this.set(t,s,this.get(t,s)*e);return this}mulColumn(t,e){(0,l.bp)(this,t);for(let s=0;s<this.rows;s++)this.set(s,t,this.get(s,t)*e);return this}max(t){if(this.isEmpty())return NaN;switch(t){case"row":{const t=new Array(this.rows).fill(Number.NEGATIVE_INFINITY);for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.get(e,s)>t[e]&&(t[e]=this.get(e,s));return t}case"column":{const t=new Array(this.columns).fill(Number.NEGATIVE_INFINITY);for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.get(e,s)>t[s]&&(t[s]=this.get(e,s));return t}case void 0:{let t=this.get(0,0);for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.get(e,s)>t&&(t=this.get(e,s));return t}default:throw new Error(`invalid option: ${t}`)}}maxIndex(){(0,l.cT)(this);let t=this.get(0,0),e=[0,0];for(let s=0;s<this.rows;s++)for(let n=0;n<this.columns;n++)this.get(s,n)>t&&(t=this.get(s,n),e[0]=s,e[1]=n);return e}min(t){if(this.isEmpty())return NaN;switch(t){case"row":{const t=new Array(this.rows).fill(Number.POSITIVE_INFINITY);for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.get(e,s)<t[e]&&(t[e]=this.get(e,s));return t}case"column":{const t=new Array(this.columns).fill(Number.POSITIVE_INFINITY);for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.get(e,s)<t[s]&&(t[s]=this.get(e,s));return t}case void 0:{let t=this.get(0,0);for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)this.get(e,s)<t&&(t=this.get(e,s));return t}default:throw new Error(`invalid option: ${t}`)}}minIndex(){(0,l.cT)(this);let t=this.get(0,0),e=[0,0];for(let s=0;s<this.rows;s++)for(let n=0;n<this.columns;n++)this.get(s,n)<t&&(t=this.get(s,n),e[0]=s,e[1]=n);return e}maxRow(t){if((0,l.zb)(this,t),this.isEmpty())return NaN;let e=this.get(t,0);for(let s=1;s<this.columns;s++)this.get(t,s)>e&&(e=this.get(t,s));return e}maxRowIndex(t){(0,l.zb)(this,t),(0,l.cT)(this);let e=this.get(t,0),s=[t,0];for(let n=1;n<this.columns;n++)this.get(t,n)>e&&(e=this.get(t,n),s[1]=n);return s}minRow(t){if((0,l.zb)(this,t),this.isEmpty())return NaN;let e=this.get(t,0);for(let s=1;s<this.columns;s++)this.get(t,s)<e&&(e=this.get(t,s));return e}minRowIndex(t){(0,l.zb)(this,t),(0,l.cT)(this);let e=this.get(t,0),s=[t,0];for(let n=1;n<this.columns;n++)this.get(t,n)<e&&(e=this.get(t,n),s[1]=n);return s}maxColumn(t){if((0,l.bp)(this,t),this.isEmpty())return NaN;let e=this.get(0,t);for(let s=1;s<this.rows;s++)this.get(s,t)>e&&(e=this.get(s,t));return e}maxColumnIndex(t){(0,l.bp)(this,t),(0,l.cT)(this);let e=this.get(0,t),s=[0,t];for(let n=1;n<this.rows;n++)this.get(n,t)>e&&(e=this.get(n,t),s[0]=n);return s}minColumn(t){if((0,l.bp)(this,t),this.isEmpty())return NaN;let e=this.get(0,t);for(let s=1;s<this.rows;s++)this.get(s,t)<e&&(e=this.get(s,t));return e}minColumnIndex(t){(0,l.bp)(this,t),(0,l.cT)(this);let e=this.get(0,t),s=[0,t];for(let n=1;n<this.rows;n++)this.get(n,t)<e&&(e=this.get(n,t),s[0]=n);return s}diag(){let t=Math.min(this.rows,this.columns),e=[];for(let s=0;s<t;s++)e.push(this.get(s,s));return e}norm(t="frobenius"){let e=0;if("max"===t)return this.max();if("frobenius"===t){for(let t=0;t<this.rows;t++)for(let s=0;s<this.columns;s++)e+=this.get(t,s)*this.get(t,s);return Math.sqrt(e)}throw new RangeError(`unknown norm type: ${t}`)}cumulativeSum(){let t=0;for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)t+=this.get(e,s),this.set(e,s,t);return this}dot(t){c.isMatrix(t)&&(t=t.to1DArray());let e=this.to1DArray();if(e.length!==t.length)throw new RangeError("vectors do not have the same size");let s=0;for(let n=0;n<e.length;n++)s+=e[n]*t[n];return s}mmul(t){t=u.checkMatrix(t);let e=this.rows,s=this.columns,n=t.columns,r=new u(e,n),i=new Float64Array(s);for(let o=0;o<n;o++){for(let e=0;e<s;e++)i[e]=t.get(e,o);for(let t=0;t<e;t++){let e=0;for(let n=0;n<s;n++)e+=this.get(t,n)*i[n];r.set(t,o,e)}}return r}strassen2x2(t){t=u.checkMatrix(t);let e=new u(2,2);const s=this.get(0,0),n=t.get(0,0),r=this.get(0,1),i=t.get(0,1),o=this.get(1,0),a=t.get(1,0),l=this.get(1,1),c=t.get(1,1),h=(s+l)*(n+c),m=(o+l)*n,d=s*(i-c),p=l*(a-n),g=(s+r)*c,f=h+p-g+(r-l)*(a+c),y=d+g,w=m+p,C=h-m+d+(o-s)*(n+i);return e.set(0,0,f),e.set(0,1,y),e.set(1,0,w),e.set(1,1,C),e}strassen3x3(t){t=u.checkMatrix(t);let e=new u(3,3);const s=this.get(0,0),n=this.get(0,1),r=this.get(0,2),i=this.get(1,0),o=this.get(1,1),a=this.get(1,2),l=this.get(2,0),c=this.get(2,1),h=this.get(2,2),m=t.get(0,0),d=t.get(0,1),p=t.get(0,2),g=t.get(1,0),f=t.get(1,1),y=t.get(1,2),w=t.get(2,0),C=t.get(2,1),b=t.get(2,2),T=(s-i)*(-d+f),A=(-s+i+o)*(m-d+f),S=(i+o)*(-m+d),E=s*m,v=(-s+l+c)*(m-p+y),M=(-s+l)*(p-y),x=(l+c)*(-m+p),N=(-r+c+h)*(f+w-C),L=(r-h)*(f-C),_=r*w,P=(c+h)*(-w+C),R=(-r+o+a)*(y+w-b),I=(r-a)*(y-b),O=(o+a)*(-w+b),G=E+_+n*g,F=(s+n+r-i-o-c-h)*f+A+S+E+N+_+P,H=E+v+x+(s+n+r-o-a-l-c)*y+_+R+O,D=T+o*(-m+d+g-f-y-w+b)+A+E+_+R+I,W=T+A+S+E+a*C,k=_+R+I+O+i*p,B=E+v+M+c*(-m+p+g-f-y-w+C)+N+L+_,V=N+L+_+P+l*d,U=E+v+M+x+h*b;return e.set(0,0,G),e.set(0,1,F),e.set(0,2,H),e.set(1,0,D),e.set(1,1,W),e.set(1,2,k),e.set(2,0,B),e.set(2,1,V),e.set(2,2,U),e}mmulStrassen(t){t=u.checkMatrix(t);let e=this.clone(),s=e.rows,n=e.columns,r=t.rows,i=t.columns;function o(t,e,s){let n=t.rows,r=t.columns;if(n===e&&r===s)return t;{let n=c.zeros(e,s);return n=n.setSubMatrix(t,0,0),n}}n!==r&&console.warn(`Multiplying ${s} x ${n} and ${r} x ${i} matrix: dimensions do not match.`);let a=Math.max(s,r),l=Math.max(n,i);return e=o(e,a,l),function t(e,s,n,r){if(n<=512||r<=512)return e.mmul(s);n%2==1&&r%2==1?(e=o(e,n+1,r+1),s=o(s,n+1,r+1)):n%2==1?(e=o(e,n+1,r),s=o(s,n+1,r)):r%2==1&&(e=o(e,n,r+1),s=o(s,n,r+1));let i=parseInt(e.rows/2,10),a=parseInt(e.columns/2,10),l=e.subMatrix(0,i-1,0,a-1),h=s.subMatrix(0,i-1,0,a-1),u=e.subMatrix(0,i-1,a,e.columns-1),m=s.subMatrix(0,i-1,a,s.columns-1),d=e.subMatrix(i,e.rows-1,0,a-1),p=s.subMatrix(i,s.rows-1,0,a-1),g=e.subMatrix(i,e.rows-1,a,e.columns-1),f=s.subMatrix(i,s.rows-1,a,s.columns-1),y=t(c.add(l,g),c.add(h,f),i,a),w=t(c.add(d,g),h,i,a),C=t(l,c.sub(m,f),i,a),b=t(g,c.sub(p,h),i,a),T=t(c.add(l,u),f,i,a),A=t(c.sub(d,l),c.add(h,m),i,a),S=t(c.sub(u,g),c.add(p,f),i,a),E=c.add(y,b);E.sub(T),E.add(S);let v=c.add(C,T),M=c.add(w,b),x=c.sub(y,w);x.add(C),x.add(A);let N=c.zeros(2*E.rows,2*E.columns);return N=N.setSubMatrix(E,0,0),N=N.setSubMatrix(v,E.rows,0),N=N.setSubMatrix(M,0,E.columns),N=N.setSubMatrix(x,E.rows,E.columns),N.subMatrix(0,n-1,0,r-1)}(e,t=o(t,a,l),a,l)}scaleRows(t={}){if("object"!=typeof t)throw new TypeError("options must be an object");const{min:e=0,max:s=1}=t;if(!Number.isFinite(e))throw new TypeError("min must be a number");if(!Number.isFinite(s))throw new TypeError("max must be a number");if(e>=s)throw new RangeError("min must be smaller than max");let n=new u(this.rows,this.columns);for(let t=0;t<this.rows;t++){const i=this.getRow(t);i.length>0&&(0,r.Z)(i,{min:e,max:s,output:i}),n.setRow(t,i)}return n}scaleColumns(t={}){if("object"!=typeof t)throw new TypeError("options must be an object");const{min:e=0,max:s=1}=t;if(!Number.isFinite(e))throw new TypeError("min must be a number");if(!Number.isFinite(s))throw new TypeError("max must be a number");if(e>=s)throw new RangeError("min must be smaller than max");let n=new u(this.rows,this.columns);for(let t=0;t<this.columns;t++){const i=this.getColumn(t);i.length&&(0,r.Z)(i,{min:e,max:s,output:i}),n.setColumn(t,i)}return n}flipRows(){const t=Math.ceil(this.columns/2);for(let e=0;e<this.rows;e++)for(let s=0;s<t;s++){let t=this.get(e,s),n=this.get(e,this.columns-1-s);this.set(e,s,n),this.set(e,this.columns-1-s,t)}return this}flipColumns(){const t=Math.ceil(this.rows/2);for(let e=0;e<this.columns;e++)for(let s=0;s<t;s++){let t=this.get(s,e),n=this.get(this.rows-1-s,e);this.set(s,e,n),this.set(this.rows-1-s,e,t)}return this}kroneckerProduct(t){t=u.checkMatrix(t);let e=this.rows,s=this.columns,n=t.rows,r=t.columns,i=new u(e*n,s*r);for(let o=0;o<e;o++)for(let e=0;e<s;e++)for(let s=0;s<n;s++)for(let a=0;a<r;a++)i.set(n*o+s,r*e+a,this.get(o,e)*t.get(s,a));return i}kroneckerSum(t){if(t=u.checkMatrix(t),!this.isSquare()||!t.isSquare())throw new Error("Kronecker Sum needs two Square Matrices");let e=this.rows,s=t.rows,n=this.kroneckerProduct(u.eye(s,s)),r=u.eye(e,e).kroneckerProduct(t);return n.add(r)}transpose(){let t=new u(this.columns,this.rows);for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)t.set(s,e,this.get(e,s));return t}sortRows(t=h){for(let e=0;e<this.rows;e++)this.setRow(e,this.getRow(e).sort(t));return this}sortColumns(t=h){for(let e=0;e<this.columns;e++)this.setColumn(e,this.getColumn(e).sort(t));return this}subMatrix(t,e,s,n){(0,l.J5)(this,t,e,s,n);let r=new u(e-t+1,n-s+1);for(let i=t;i<=e;i++)for(let e=s;e<=n;e++)r.set(i-t,e-s,this.get(i,e));return r}subMatrixRow(t,e,s){if(void 0===e&&(e=0),void 0===s&&(s=this.columns-1),e>s||e<0||e>=this.columns||s<0||s>=this.columns)throw new RangeError("Argument out of range");let n=new u(t.length,s-e+1);for(let r=0;r<t.length;r++)for(let i=e;i<=s;i++){if(t[r]<0||t[r]>=this.rows)throw new RangeError(`Row index out of range: ${t[r]}`);n.set(r,i-e,this.get(t[r],i))}return n}subMatrixColumn(t,e,s){if(void 0===e&&(e=0),void 0===s&&(s=this.rows-1),e>s||e<0||e>=this.rows||s<0||s>=this.rows)throw new RangeError("Argument out of range");let n=new u(s-e+1,t.length);for(let r=0;r<t.length;r++)for(let i=e;i<=s;i++){if(t[r]<0||t[r]>=this.columns)throw new RangeError(`Column index out of range: ${t[r]}`);n.set(i-e,r,this.get(i,t[r]))}return n}setSubMatrix(t,e,s){if((t=u.checkMatrix(t)).isEmpty())return this;let n=e+t.rows-1,r=s+t.columns-1;(0,l.J5)(this,e,n,s,r);for(let n=0;n<t.rows;n++)for(let r=0;r<t.columns;r++)this.set(e+n,s+r,t.get(n,r));return this}selection(t,e){(0,l.ZR)(this,t),(0,l.g)(this,e);let s=new u(t.length,e.length);for(let n=0;n<t.length;n++){let r=t[n];for(let t=0;t<e.length;t++){let i=e[t];s.set(n,t,this.get(r,i))}}return s}trace(){let t=Math.min(this.rows,this.columns),e=0;for(let s=0;s<t;s++)e+=this.get(s,s);return e}clone(){let t=new u(this.rows,this.columns);for(let e=0;e<this.rows;e++)for(let s=0;s<this.columns;s++)t.set(e,s,this.get(e,s));return t}sum(t){switch(t){case"row":return(0,a.bQ)(this);case"column":return(0,a.Dm)(this);case void 0:return(0,a.xo)(this);default:throw new Error(`invalid option: ${t}`)}}product(t){switch(t){case"row":return(0,a.Pw)(this);case"column":return(0,a.PI)(this);case void 0:return(0,a.tT)(this);default:throw new Error(`invalid option: ${t}`)}}mean(t){const e=this.sum(t);switch(t){case"row":for(let t=0;t<this.rows;t++)e[t]/=this.columns;return e;case"column":for(let t=0;t<this.columns;t++)e[t]/=this.rows;return e;case void 0:return e/this.size;default:throw new Error(`invalid option: ${t}`)}}variance(t,e={}){if("object"==typeof t&&(e=t,t=void 0),"object"!=typeof e)throw new TypeError("options must be an object");const{unbiased:s=!0,mean:r=this.mean(t)}=e;if("boolean"!=typeof s)throw new TypeError("unbiased must be a boolean");switch(t){case"row":if(!(0,n.N)(r))throw new TypeError("mean must be an array");return(0,a.we)(this,s,r);case"column":if(!(0,n.N)(r))throw new TypeError("mean must be an array");return(0,a._G)(this,s,r);case void 0:if("number"!=typeof r)throw new TypeError("mean must be a number");return(0,a.C)(this,s,r);default:throw new Error(`invalid option: ${t}`)}}standardDeviation(t,e){"object"==typeof t&&(e=t,t=void 0);const s=this.variance(t,e);if(void 0===t)return Math.sqrt(s);for(let t=0;t<s.length;t++)s[t]=Math.sqrt(s[t]);return s}center(t,e={}){if("object"==typeof t&&(e=t,t=void 0),"object"!=typeof e)throw new TypeError("options must be an object");const{center:s=this.mean(t)}=e;switch(t){case"row":if(!(0,n.N)(s))throw new TypeError("center must be an array");return(0,a.rU)(this,s),this;case"column":if(!(0,n.N)(s))throw new TypeError("center must be an array");return(0,a._f)(this,s),this;case void 0:if("number"!=typeof s)throw new TypeError("center must be a number");return(0,a.mm)(this,s),this;default:throw new Error(`invalid option: ${t}`)}}scale(t,e={}){if("object"==typeof t&&(e=t,t=void 0),"object"!=typeof e)throw new TypeError("options must be an object");let s=e.scale;switch(t){case"row":if(void 0===s)s=(0,a.kn)(this);else if(!(0,n.N)(s))throw new TypeError("scale must be an array");return(0,a.DU)(this,s),this;case"column":if(void 0===s)s=(0,a.Pr)(this);else if(!(0,n.N)(s))throw new TypeError("scale must be an array");return(0,a.Mj)(this,s),this;case void 0:if(void 0===s)s=(0,a.Y2)(this);else if("number"!=typeof s)throw new TypeError("scale must be a number");return(0,a.td)(this,s),this;default:throw new Error(`invalid option: ${t}`)}}toString(t){return(0,i.M)(this,t)}}function h(t,e){return t-e}c.prototype.klass="Matrix","undefined"!=typeof Symbol&&(c.prototype[Symbol.for("nodejs.util.inspect.custom")]=i.V),c.random=c.rand,c.randomInt=c.randInt,c.diagonal=c.diag,c.prototype.diagonal=c.prototype.diag,c.identity=c.eye,c.prototype.negate=c.prototype.neg,c.prototype.tensorProduct=c.prototype.kroneckerProduct;class u extends c{constructor(t,e){if(super(),u.isMatrix(t))return t.clone();if(Number.isInteger(t)&&t>=0){if(this.data=[],!(Number.isInteger(e)&&e>=0))throw new TypeError("nColumns must be a positive integer");for(let s=0;s<t;s++)this.data.push(new Float64Array(e))}else{if(!(0,n.N)(t))throw new TypeError("First argument must be a positive number or an array");{const s=t;if("number"!=typeof(e=(t=s.length)?s[0].length:0))throw new TypeError("Data must be a 2D array with at least one element");this.data=[];for(let n=0;n<t;n++){if(s[n].length!==e)throw new RangeError("Inconsistent array dimensions");if(!s[n].every((t=>"number"==typeof t)))throw new TypeError("Input data contains non-numeric values");this.data.push(Float64Array.from(s[n]))}}}this.rows=t,this.columns=e}set(t,e,s){return this.data[t][e]=s,this}get(t,e){return this.data[t][e]}removeRow(t){return(0,l.zb)(this,t),this.data.splice(t,1),this.rows-=1,this}addRow(t,e){return void 0===e&&(e=t,t=this.rows),(0,l.zb)(this,t,!0),e=Float64Array.from((0,l.on)(this,e)),this.data.splice(t,0,e),this.rows+=1,this}removeColumn(t){(0,l.bp)(this,t);for(let e=0;e<this.rows;e++){const s=new Float64Array(this.columns-1);for(let n=0;n<t;n++)s[n]=this.data[e][n];for(let n=t+1;n<this.columns;n++)s[n-1]=this.data[e][n];this.data[e]=s}return this.columns-=1,this}addColumn(t,e){void 0===e&&(e=t,t=this.columns),(0,l.bp)(this,t,!0),e=(0,l.Um)(this,e);for(let s=0;s<this.rows;s++){const n=new Float64Array(this.columns+1);let r=0;for(;r<t;r++)n[r]=this.data[s][r];for(n[r++]=e[s];r<this.columns+1;r++)n[r]=this.data[s][r-1];this.data[s]=n}return this.columns+=1,this}}(0,o.z)(c,u)},9515:(t,e,s)=>{"use strict";s.d(e,{C:()=>m,DU:()=>y,Dm:()=>i,Mj:()=>C,PI:()=>l,Pr:()=>w,Pw:()=>a,Y2:()=>b,_G:()=>u,_f:()=>p,bQ:()=>r,kn:()=>f,mm:()=>g,rU:()=>d,tT:()=>c,td:()=>T,we:()=>h,xo:()=>o});var n=s(3018);function r(t){let e=(0,n.B4)(t.rows);for(let s=0;s<t.rows;++s)for(let n=0;n<t.columns;++n)e[s]+=t.get(s,n);return e}function i(t){let e=(0,n.B4)(t.columns);for(let s=0;s<t.rows;++s)for(let n=0;n<t.columns;++n)e[n]+=t.get(s,n);return e}function o(t){let e=0;for(let s=0;s<t.rows;s++)for(let n=0;n<t.columns;n++)e+=t.get(s,n);return e}function a(t){let e=(0,n.B4)(t.rows,1);for(let s=0;s<t.rows;++s)for(let n=0;n<t.columns;++n)e[s]*=t.get(s,n);return e}function l(t){let e=(0,n.B4)(t.columns,1);for(let s=0;s<t.rows;++s)for(let n=0;n<t.columns;++n)e[n]*=t.get(s,n);return e}function c(t){let e=1;for(let s=0;s<t.rows;s++)for(let n=0;n<t.columns;n++)e*=t.get(s,n);return e}function h(t,e,s){const n=t.rows,r=t.columns,i=[];for(let o=0;o<n;o++){let n=0,a=0,l=0;for(let e=0;e<r;e++)l=t.get(o,e)-s[o],n+=l,a+=l*l;e?i.push((a-n*n/r)/(r-1)):i.push((a-n*n/r)/r)}return i}function u(t,e,s){const n=t.rows,r=t.columns,i=[];for(let o=0;o<r;o++){let r=0,a=0,l=0;for(let e=0;e<n;e++)l=t.get(e,o)-s[o],r+=l,a+=l*l;e?i.push((a-r*r/n)/(n-1)):i.push((a-r*r/n)/n)}return i}function m(t,e,s){const n=t.rows,r=t.columns,i=n*r;let o=0,a=0,l=0;for(let e=0;e<n;e++)for(let n=0;n<r;n++)l=t.get(e,n)-s,o+=l,a+=l*l;return e?(a-o*o/i)/(i-1):(a-o*o/i)/i}function d(t,e){for(let s=0;s<t.rows;s++)for(let n=0;n<t.columns;n++)t.set(s,n,t.get(s,n)-e[s])}function p(t,e){for(let s=0;s<t.rows;s++)for(let n=0;n<t.columns;n++)t.set(s,n,t.get(s,n)-e[n])}function g(t,e){for(let s=0;s<t.rows;s++)for(let n=0;n<t.columns;n++)t.set(s,n,t.get(s,n)-e)}function f(t){const e=[];for(let s=0;s<t.rows;s++){let n=0;for(let e=0;e<t.columns;e++)n+=Math.pow(t.get(s,e),2)/(t.columns-1);e.push(Math.sqrt(n))}return e}function y(t,e){for(let s=0;s<t.rows;s++)for(let n=0;n<t.columns;n++)t.set(s,n,t.get(s,n)/e[s])}function w(t){const e=[];for(let s=0;s<t.columns;s++){let n=0;for(let e=0;e<t.rows;e++)n+=Math.pow(t.get(e,s),2)/(t.rows-1);e.push(Math.sqrt(n))}return e}function C(t,e){for(let s=0;s<t.rows;s++)for(let n=0;n<t.columns;n++)t.set(s,n,t.get(s,n)/e[n])}function b(t){const e=t.size-1;let s=0;for(let n=0;n<t.columns;n++)for(let r=0;r<t.rows;r++)s+=Math.pow(t.get(r,n),2)/e;return Math.sqrt(s)}function T(t,e){for(let s=0;s<t.rows;s++)for(let n=0;n<t.columns;n++)t.set(s,n,t.get(s,n)/e)}},3018:(t,e,s)=>{"use strict";s.d(e,{B4:()=>u,J5:()=>h,Um:()=>a,ZR:()=>l,bp:()=>i,cT:()=>d,g:()=>c,on:()=>o,zb:()=>r});var n=s(5776);function r(t,e,s){let n=s?t.rows:t.rows-1;if(e<0||e>n)throw new RangeError("Row index out of range")}function i(t,e,s){let n=s?t.columns:t.columns-1;if(e<0||e>n)throw new RangeError("Column index out of range")}function o(t,e){if(e.to1DArray&&(e=e.to1DArray()),e.length!==t.columns)throw new RangeError("vector size must be the same as the number of columns");return e}function a(t,e){if(e.to1DArray&&(e=e.to1DArray()),e.length!==t.rows)throw new RangeError("vector size must be the same as the number of rows");return e}function l(t,e){if(!(0,n.N)(e))throw new TypeError("row indices must be an array");for(let s=0;s<e.length;s++)if(e[s]<0||e[s]>=t.rows)throw new RangeError("row indices are out of range")}function c(t,e){if(!(0,n.N)(e))throw new TypeError("column indices must be an array");for(let s=0;s<e.length;s++)if(e[s]<0||e[s]>=t.columns)throw new RangeError("column indices are out of range")}function h(t,e,s,n,r){if(5!==arguments.length)throw new RangeError("expected 4 arguments");if(m("startRow",e),m("endRow",s),m("startColumn",n),m("endColumn",r),e>s||n>r||e<0||e>=t.rows||s<0||s>=t.rows||n<0||n>=t.columns||r<0||r>=t.columns)throw new RangeError("Submatrix indices are out of range")}function u(t,e=0){let s=[];for(let n=0;n<t;n++)s.push(e);return s}function m(t,e){if("number"!=typeof e)throw new TypeError(`${t} must be a number`)}function d(t){if(t.isEmpty())throw new Error("Empty matrix has no elements to index")}},8353:(t,e,s)=>{"use strict";s.d(e,{Z:()=>r});var n=s(1174);class r extends n.X{constructor(t){super(),this.data=t,this.rows=t.length,this.columns=t[0].length}set(t,e,s){return this.data[t][e]=s,this}get(t,e){return this.data[t][e]}}},3379:t=>{"use strict";var e=[];function s(t){for(var s=-1,n=0;n<e.length;n++)if(e[n].identifier===t){s=n;break}return s}function n(t,n){for(var i={},o=[],a=0;a<t.length;a++){var l=t[a],c=n.base?l[0]+n.base:l[0],h=i[c]||0,u="".concat(c," ").concat(h);i[c]=h+1;var m=s(u),d={css:l[1],media:l[2],sourceMap:l[3],supports:l[4],layer:l[5]};if(-1!==m)e[m].references++,e[m].updater(d);else{var p=r(d,n);n.byIndex=a,e.splice(a,0,{identifier:u,updater:p,references:1})}o.push(u)}return o}function r(t,e){var s=e.domAPI(e);return s.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;s.update(t=e)}else s.remove()}}t.exports=function(t,r){var i=n(t=t||[],r=r||{});return function(t){t=t||[];for(var o=0;o<i.length;o++){var a=s(i[o]);e[a].references--}for(var l=n(t,r),c=0;c<i.length;c++){var h=s(i[c]);0===e[h].references&&(e[h].updater(),e.splice(h,1))}i=l}}},569:t=>{"use strict";var e={};t.exports=function(t,s){var n=function(t){if(void 0===e[t]){var s=document.querySelector(t);if(window.HTMLIFrameElement&&s instanceof window.HTMLIFrameElement)try{s=s.contentDocument.head}catch(t){s=null}e[t]=s}return e[t]}(t);if(!n)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");n.appendChild(s)}},9216:t=>{"use strict";t.exports=function(t){var e=document.createElement("style");return t.setAttributes(e,t.attributes),t.insert(e,t.options),e}},3565:(t,e,s)=>{"use strict";t.exports=function(t){var e=s.nc;e&&t.setAttribute("nonce",e)}},7795:t=>{"use strict";t.exports=function(t){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var e=t.insertStyleElement(t);return{update:function(s){!function(t,e,s){var n="";s.supports&&(n+="@supports (".concat(s.supports,") {")),s.media&&(n+="@media ".concat(s.media," {"));var r=void 0!==s.layer;r&&(n+="@layer".concat(s.layer.length>0?" ".concat(s.layer):""," {")),n+=s.css,r&&(n+="}"),s.media&&(n+="}"),s.supports&&(n+="}");var i=s.sourceMap;i&&"undefined"!=typeof btoa&&(n+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(i))))," */")),e.styleTagTransform(n,t,e.options)}(e,t,s)},remove:function(){!function(t){if(null===t.parentNode)return!1;t.parentNode.removeChild(t)}(e)}}}},4589: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))}}},7241:(t,e,s)=>{"use strict";s.d(e,{D:()=>h});var n=s(4469),r=s(976),i=s(6414),o=s.n(i),a=s(2712),l=s(499);const c=31;async function h(t,e=!1,s){const i=l.Cn.getOrCreate(t);let h;s??(s=new Map);const m=i.isHelm()?(0,a.getHelmMonomers)(t):Object.keys(i.stats.freq).filter((t=>""!==t));for(let t=0;t<m.length;t++)s.has(m[t])||s.set(m[t],`${s.size+1}`);if(i.isHelm())h=await n.functions.call("HELM:getMolFiles",{col:t}),h=function(t,e,s=!1){const n=new Array(t.length);for(let r=0;r<t.length;r++){let i=0,o=0,a="\n Datagrok macromolecule handler\n\n 0 0 0 0 0 0 999 V3000\nM V30 BEGIN CTAB\n";const l=t.get(r);i=l.indexOf("\n",i)+1,i=l.indexOf("\n",i)+1,i=l.indexOf("\n",i)+1;const h=parseInt(l.substring(i,i+3)),u=parseInt(l.substring(i+3,i+6));a+=`M V30 COUNTS ${h} ${u} 0 0 0\n`,a+="M V30 BEGIN ATOM\n";for(let t=0;t<h;t++){i=l.indexOf("\n",i)+1+c,o=l.indexOf(" ",i);const n=l.substring(i,o);a+=s?`M V30 ${t+1} R${e.get(n)} 0.000 0.000 0 0\n`:`M V30 ${t+1} At 0.000 0.000 0 0 MASS=${e.get(n)}\n`}a+="M V30 END ATOM\n",a+="M V30 BEGIN BOND\n";for(let t=0;t<u;t++){i=l.indexOf("\n",i)+1;const e=parseInt(l.substring(i,i+3).trim()),s=parseInt(l.substring(i+3,i+6).trim());a+=`M V30 ${t+1} ${parseInt(l.substring(i+6,i+9).trim())} ${e} ${s}\n`}a+="M V30 END BOND\n",a+="M V30 END CTAB\n",a+="M END",n[r]=a}return n}(h,s,e);else{h=new Array(t.length);for(let n=0;n<t.length;n++){const t=u(o()(i.splitted[n]).filter((t=>""!==t)).toArray(),s,e);h[n]=t}}return r.Column.fromStrings("monomericMols",h)}function u(t,e,s=!1){let n="\n Datagrok macromolecule handler\n\n 0 0 0 0 0 0 999 V3000\nM V30 BEGIN CTAB\n";n+=`M V30 COUNTS ${t.length} ${t.length?t.length-1:0} 0 0 0\n`,n+="M V30 BEGIN ATOM\n";for(let r=0;r<t.length;r++)n+=s?`M V30 ${r+1} R${e.get(t[r])} 0.000 0.000 0 0\n`:`M V30 ${r+1} At 0.000 0.000 0 0 MASS=${e.get(t[r])}\n`;n+="M V30 END ATOM\n",n+="M V30 BEGIN BOND\n";for(let e=0;e<t.length-1;e++)n+=`M V30 ${e+1} 1 ${e+1} ${e+2}\n`;return n+="M V30 END BOND\n",n+="M V30 END CTAB\n",n+="M END",n}},3377:(t,e,s)=>{"use strict";s.r(e),s.d(e,{_package:()=>pt,test:()=>gt,tests:()=>r.QK});var n=s(976),r=s(8467);(0,r.W3)("_first",(()=>{(0,r.Bu)("_first",(async()=>{}))}));var i=s(2012),o=s(9976),a=s(6137);(0,r.W3)("Palettes",(()=>{(0,r.Bu)("testPaletteN",(async()=>{await async function(){const t=a.J.Chromatogram;(0,r.l_)(t instanceof o.B,!0),(0,r.l_)(t instanceof a.J,!0)}()})),(0,r.Bu)("testPaletteAA",(async()=>{await async function(){const t=i.f.Lesk,e=i.f.RasMol,s=i.f.GrokGroups;(0,r.l_)(t instanceof o.B,!0),(0,r.l_)(e instanceof o.B,!0),(0,r.l_)(s instanceof o.B,!0),(0,r.l_)(t instanceof i.f,!0),(0,r.l_)(e instanceof i.f,!0),(0,r.l_)(s instanceof i.f,!0)}()})),(0,r.Bu)("testPalettePtMe",(async()=>{const t=i.f.GrokGroups.get("MeNle"),e=i.f.GrokGroups.get("MeA"),s=i.f.GrokGroups.get("MeG"),n=i.f.GrokGroups.get("MeF"),o=i.f.GrokGroups.get("L"),a=i.f.GrokGroups.get("A"),l=i.f.GrokGroups.get("G"),c=i.f.GrokGroups.get("F");(0,r.l_)(t,o),(0,r.l_)(e,a),(0,r.l_)(s,l),(0,r.l_)(n,c)}))}));var l=s(4469),c=s(2712),h=s(8447),u=s(499);async function m(t){const e=n.Column.fromList(n.TYPE.STRING,"col1",t);if(await l.functions.call("Bio:detectMacromolecule",{col:e}),e.semType===n.SEMTYPE.MACROMOLECULE){const t=`Negative test detected semType='${e.semType}', units='${e.getTag(n.TAGS.UNITS)}'.`;throw new Error(t)}}async function d(t,e){const s=(await t()).getCol(e),r=await l.functions.call("Bio:detectMacromolecule",{col:s});if(r&&(s.semType=r),s.semType===n.SEMTYPE.MACROMOLECULE){const t=`Negative test detected semType='${s.semType}', units='${s.getTag(n.TAGS.UNITS)}'.`;throw new Error(t)}}async function p(t,e,s,i,o,a,c=null){const h=n.Column.fromList(n.TYPE.STRING,"seq",t),m=await l.functions.call("Bio:detectMacromolecule",{col:h});m&&(h.semType=m),(0,r.l_)(h.semType,n.SEMTYPE.MACROMOLECULE),(0,r.l_)(h.getTag(n.TAGS.UNITS),e),(0,r.l_)(h.getTag("aligned"),s),(0,r.l_)(h.getTag("alphabet"),i),c&&(0,r.l_)(h.getTag("separator"),c);const d=u.Cn.getOrCreate(h);(0,r.l_)(d.getAlphabetSize(),o),(0,r.l_)(d.getAlphabetIsMultichar(),a),d.isHelm()||((0,r.l_)(d.aligned,s),(0,r.l_)(d.alphabet,i))}async function g(t,e,s,i,o,a,c,h=null){const m=(await t()).col(e),d=await l.functions.call("Bio:detectMacromolecule",{col:m});d&&(m.semType=d),(0,r.l_)(m.semType,n.SEMTYPE.MACROMOLECULE),(0,r.l_)(m.getTag(n.TAGS.UNITS),s),(0,r.l_)(m.getTag("aligned"),i),(0,r.l_)(m.getTag("alphabet"),o),h&&(0,r.l_)(m.getTag("separator"),h);const p=u.Cn.getOrCreate(m);(0,r.l_)(p.getAlphabetSize(),a),(0,r.l_)(p.getAlphabetIsMultichar(),c),p.isHelm()||((0,r.l_)(p.aligned,i),(0,r.l_)(p.alphabet,o))}(0,r.W3)("detectors",(()=>{var t,e,s,i,o,a,c,u,w,C,b,T,A,S,E,v,M,x,N,L;const _=new(L=class{constructor(){this[t]="id,col1\n1,\n2,\n3,\n4,\n5,",this[e]="col1\n1\n2\n3",this[s]="col1\n4\n5\n6\n7",this[i]="col1\n8\n9\n10\n11\n12",this[o]="col1\nCCCCN1C(=O)CN=C(c2cc(F)ccc12)C3CCCCC3\nC1CCCCC1\nCCCCCC",this[a]="seq\nACGTCACGTC\nCAGTGTCAGTGT\nTTCAACTTCAAC",this[c]="seq\nACGUCACGUC\nCAGUGUCAGUGU\nUUCAACUUCAAC",this[u]="seq\nFWPHEY\nYNRQWYV\nMKPSEYV",this[w]="seq\n[meI][hHis][Aca]NT[dE][Thr_PO3H2][Aca]DN\n[meI][hHis][Aca][Cys_SEt]T[dK][Thr_PO3H2][Aca][Tyr_PO3H2][Aca]\n[Lys_Boc][hHis][Aca][Cys_SEt]T[dK][Thr_PO3H2][Aca][Tyr_PO3H2][Aca]",this[C]="seq\nA*C*G*T*C*A*C*G*T*C\nC*A*G*T*G*T*C*A*G*T*G*T\nT*T*C*A*A*C*T*T*C*A*A*C",this[b]="seq\nA*C*G*U*C*A*C*G*U*C\nC*A*G*U*G*U*C*A*G*U*G*U\nU*U*C*A*A*C*U*U*C*A*A*C",this[T]="seq\nF-W-P-H-E-Y-F-W-P-H-E-Y\nY-N-R-Q-W-Y-V-Y-N-R-Q-W-Y-V\nM-K-P-S-E-Y-V-M-K-P-S-E-Y-V",this[A]="seq\nabc-dfgg-abc1-cfr3-rty-wert-cfr3-rty-wert\nrut12-her2-rty-wert-abc-abc1-dfgg-abc-abc1-dfgg\nrut12-rty-her2-abc-cfr3-wert-rut12-cfr3-wert-rut12",this[S]="seq\nabc/dfgg/abc1/cfr3/rty/wert/abc/dfgg/abc1/cfr3/rty/wert\nrut12/her2/rty/wert//abc/abc1/dfgg/rut12/her2/rty/wert//abc/abc1/dfgg\nrut12/rty/her2/abc/cfr3//wert/rut12/rut12/rty/her2/abc/cfr3//wert/rut12",this[E]="seq\nA-C--G-T--C-T-A-C--G-T--C-T\nC-A-C--T--G-T-C-A-C--T--G-T\nA-C-C-G-T-A-C-T-A-C-C-G-T-A-C-T",this[v]="seq\nm1-M-m3-mon4-mon5-N-T-MON8-N9-m1-M-m3-mon4-mon5-N-T-MON8-N9\nm1-mon2-m3-mon4-mon5-Num--MON8-N9-m1-mon2-m3-mon4-mon5-Num--MON8-N9\n\nmon1-M-mon3-mon4-mon5---MON8-N9-mon1-M-mon3-mon4-mon5---MON8-N9",this[M]="seq\nAc(1)-F-K(AEEA-AEEA-R-Ac)-L-mF-V-Y-mNle-D-W-N-mF-C(1)-G-NH2\nAc(1)-F-K(AEEA-ARRA-W-Ac)-L-mF-V-Y-mNle-D-W-N-mF-C(1)-G-NH2\nAc(1)-F-K(AEEA-AEEA-Ac)-L-mF-V-Y-mNle-D-W-N-mF-C(1)-G-NH2",this[x]="seq\nAC-GT-CTAC-GT-CT\nCAC-T-GTCAC-T-GT\nACCGTACTACCGTACT",this[N]="seq\nFWR-WYV-KHPFWR-WYV-KHP\nYNR-WYV-KHPYNR-WYV-KHP\nMWRSWY-CKHPMWRSWY-CKHP"}},t="negEmpty",e="neg1",s="neg2",i="neg3",o="negSmiles",a="csvFastaDna1",c="fastaRna1",u="fastaPt1",w="fastaUn",C="sepDna",b="sepRna",T="sepPt",A="sepUn1",S="sepUn2",E="sepMsaDna1",v="sepMsaUnWEmpty",M="sepComplex",x="fastaMsaDna1",N="fastaMsaPt1",L),P={fastaFasta:"System:AppData/Bio/data/sample_FASTA.fasta",fastaPtCsv:"System:AppData/Bio/data/sample_FASTA_PT.csv",msaComplex:"System:AppData/Bio/samples/MSA.csv",fastaCsv:"System:AppData/Bio/samples/FASTA.csv",helmCsv:"System:AppData/Bio/samples/HELM.csv",peptidesComplex:"System:AppData/Bio/tests/peptides_complex_msa.csv",peptidesSimple:"System:AppData/Bio/tests/peptides_simple_msa.csv",testDemogCsv:"System:AppData/Bio/tests/testDemog.csv",testHelmCsv:"System:AppData/Bio/tests/testHelm.csv",testIdCsv:"System:AppData/Bio/tests/testId.csv",testSmilesCsv:"System:AppData/Bio/tests/testSmiles.csv",testSmiles2Csv:"System:AppData/Bio/tests/testSmiles2.csv",testSmilesShort:"System:AppData/Bio/tests/testSmilesShort.csv",testActivityCliffsCsv:"System:AppData/Bio/tests/testActivityCliffs.csv",testCerealCsv:"System:AppData/Bio/tests/testCereal.csv",testUnichemSources:"System:AppData/Bio/tests/testUnichemSources.csv",testDmvOffices:"System:AppData/Bio/tests/testDmvOffices.csv",testAlertCollection:"System:AppData/Bio/tests/testAlertCollection.csv",testSpgi100:"System:AppData/Bio/tests/testSpgi100.csv",testSpgi:"System:AppData/Bio/tests/SPGI-derived.csv",testUrl:"System:AppData/Bio/tests/testUrl.csv"},R={};function I(t,e=O){return async()=>(t in R||(R[t]=(async()=>await e(P[t]))().catch((e=>{throw delete R[t],e}))),R[t])}async function O(t){const e=await l.dapi.files.readAsText(t);return n.DataFrame.fromCsv(e)}const G=t=>async()=>{const e=_[t],s=n.DataFrame.fromCsv(e);return await l.data.detectSemanticTypes(s),s};(0,r.Bu)("NegativeEmpty",(async()=>{await d(G("negEmpty"),"col1")})),(0,r.Bu)("Negative1",(async()=>{await d(G("neg1"),"col1")})),(0,r.Bu)("Negative2",(async()=>{await d(G("neg2"),"col1")})),(0,r.Bu)("Negative3",(async()=>{await d(G("neg3"),"col1")})),(0,r.Bu)("NegativeSmiles",(async()=>{await d(G("negSmiles"),"col1")})),(0,r.Bu)("NegativeStartEnd",(async()=>{await m(["START","END"])})),(0,r.Bu)("NegativeStartEndIntermediate",(async()=>{await m(["START","END","INTERMEDIATE"])})),(0,r.Bu)("FastaDna1",(async()=>{await g(G("csvFastaDna1"),"seq",h.r2.FASTA,"SEQ","DNA",4,!1)})),(0,r.Bu)("FastaRna1",(async()=>{await g(G("fastaRna1"),"seq",h.r2.FASTA,"SEQ","RNA",4,!1)})),(0,r.Bu)("FastaPt1",(async()=>{await g(G("fastaPt1"),"seq",h.r2.FASTA,"SEQ","PT",20,!1)})),(0,r.Bu)("FastaPtGaps",(()=>p(["FW-PH-EYY","FYNRQWYV-","FKP-Q-SEYV"],h.r2.FASTA,"SEQ","PT",20,!1))),(0,r.Bu)("FastaPtGapsMsa",(()=>p(["FW-PH-EYY","FYNRQWYV-","FKP-Q-SEY"],h.r2.FASTA,"SEQ.MSA","PT",20,!1))),(0,r.Bu)("FastaUn",(async()=>{await g(G("fastaUn"),"seq",h.r2.FASTA,"SEQ.MSA","UN",12,!0)})),(0,r.Bu)("FastaMsaDna1",(async()=>{await g(G("fastaMsaDna1"),"seq",h.r2.FASTA,"SEQ.MSA","DNA",4,!1)})),(0,r.Bu)("FastaMsaPt1",(async()=>{await g(G("fastaMsaPt1"),"seq",h.r2.FASTA,"SEQ.MSA","PT",20,!1)})),(0,r.Bu)("SepDna",(async()=>{await g(G("sepDna"),"seq",h.r2.SEPARATOR,"SEQ","DNA",4,!1,"*")})),(0,r.Bu)("SepRna",(async()=>{await g(G("sepRna"),"seq",h.r2.SEPARATOR,"SEQ","RNA",4,!1,"*")})),(0,r.Bu)("SepPt",(async()=>{await g(G("sepPt"),"seq",h.r2.SEPARATOR,"SEQ","PT",20,!1,"-")})),(0,r.Bu)("SepUn1",(async()=>{await g(G("sepUn1"),"seq",h.r2.SEPARATOR,"SEQ","UN",8,!0,"-")})),(0,r.Bu)("SepUn2",(async()=>{await g(G("sepUn2"),"seq",h.r2.SEPARATOR,"SEQ","UN",9,!0,"/")})),(0,r.Bu)("SepMsaN1",(async()=>{await g(G("sepMsaDna1"),"seq",h.r2.SEPARATOR,"SEQ.MSA","DNA",4,!1,"-")})),(0,r.Bu)("SepMsaUnWEmpty",(async()=>{await g(G("sepMsaUnWEmpty"),"seq",h.r2.SEPARATOR,"SEQ.MSA","UN",14,!0)})),(0,r.Bu)("SepComplex",(async()=>{await g(G("sepComplex"),"seq",h.r2.SEPARATOR,"SEQ","UN",18,!0)})),(0,r.Bu)("samplesFastaCsv",(async()=>{await y(I("fastaCsv"),{Sequence:new f(h.r2.FASTA,"SEQ","PT",20,!1)})})),(0,r.Bu)("samplesFastaFasta",(async()=>{await y(I("fastaFasta"),{sequence:new f(h.r2.FASTA,"SEQ","PT",20,!1)})})),(0,r.Bu)("samplesPeptidesComplex",(async()=>{await y(I("peptidesComplex"),{})})),(0,r.Bu)("samplesMsaComplex",(async()=>{await y(I("msaComplex"),{MSA:new f(h.r2.SEPARATOR,"SEQ.MSA","UN",161,!0,"/")})})),(0,r.Bu)("samplesIdCsv",(async()=>{await y(I("testIdCsv"),{})})),(0,r.Bu)("samplesSarSmallCsv",(async()=>{await y(I("testSmilesCsv"),{})})),(0,r.Bu)("samplesHelmCsv",(async()=>{await y(I("helmCsv"),{HELM:new f(h.r2.HELM,null,null,160,!0)})})),(0,r.Bu)("samplesTestHelmCsv",(async()=>{await y(I("testHelmCsv"),{"HELM string":new f(h.r2.HELM,null,null,9,!0)})})),(0,r.Bu)("samplesTestDemogCsv",(async()=>{await y(I("testDemogCsv"),{})})),(0,r.Bu)("samplesTestSmiles2Csv",(async()=>{await y(I("testSmiles2Csv"),{})})),(0,r.Bu)("samplesTestSmilesShort",(async()=>{await y(I("testSmilesShort"),{})})),(0,r.Bu)("samplesTestActivityCliffsNegativeSmiles",(async()=>{await y(I("testActivityCliffsCsv"),{})})),(0,r.Bu)("samplesFastaPtCsv",(async()=>{await y(I("fastaPtCsv"),{sequence:new f(h.r2.FASTA,"SEQ","PT",20,!1)})})),(0,r.Bu)("samplesTestCerealCsv",(async()=>{await y(I("testCerealCsv"),{})})),(0,r.Bu)("samplesTestUnichemSources",(async()=>{await y(I("testUnichemSources"),{})})),(0,r.Bu)("samplesTestDmvOffices",(async()=>{await y(I("testDmvOffices"),{})})),(0,r.Bu)("samplesTestAlertCollection",(async()=>{await y(I("testAlertCollection"),{})})),(0,r.Bu)("samplesTestSpgi",(async()=>{await y(I("testSpgi"),{})})),(0,r.Bu)("samplesTestSpgi100",(async()=>{await y(I("testSpgi100"),{})})),(0,r.Bu)("samplesTestUrl",(async()=>{await y(I("testUrl"),{})}))}));class f{constructor(t,e,s,n,r,i){this.units=t,this.aligned=e,this.alphabet=s,this.alphabetSize=n,this.alphabetIsMultichar=r,this.separator=i}}async function y(t,e){const s=await t(),n=[];for(const r of s.columns.names())if(r in e){const s=e[r];try{await g(t,r,s.units,s.aligned,s.alphabet,s.alphabetSize,s.alphabetIsMultichar,s.separator)}catch(t){const e=t.toString();n.push(`Positive col '${r}' failed: ${e}`)}}else try{await d(t,r)}catch(t){const e=t.toString();n.push(`Negative col '${r}' failed: ${e}`)}if(n.length>0)throw new Error(n.join("\n"))}(0,r.W3)("detectors:weak-and-likely",(()=>{const t={fastaDnaWeak1:"id,colName\n1,TTTTTTTTTT\n2,TTTTTTTTTT\n3,TTTTTTTTTT\n4,TTTTTTTTTT",fastaDnaWeak1LikelyName:"id,seq\n1,TTTTTTT\n2,TTTTTTT\n3,TTTTTTT\n4,TTTTTTT",fastaRnaWeak1:"id,colName\n1,UUUUUUUUUU\n2,UUUUUUUUUU\n3,UUUUUUUUUU\n4,UUUUUUUUUU",fastaRnaWeak1LikelyName:"id,seq\n1,UUUUUUU\n2,UUUUUUU\n3,UUUUUUU\n4,UUUUUUU",fastaPtWeak1:"id,colName\n1,SLSLSPGKSLSLSPGK\n2,SLSLSPGKSLSLSPGK\n3,SLSLSPGKSLSLSPGK\n4,SLSLSPGKSLSLSPGK",fastaPtWeak1LikelyName:"id,seq\n1,SLSLSPGKSLSLSPGK\n2,SLSLSPGKSLSLSPGK\n3,SLSLSPGKSLSLSPGK\n4,SLSLSPGKSLSLSPGK",fastaUn1:"id,colName\n1,word\n2,other\n3,some\n4,another",fastaUn1LikelyName:"id,seq\n1,word\n2,other\n3,some\n4,another",fastaUn2LikelyName:'protein\nBoombastic\nMegafantastic\n"just-a-random-thought,oy!"',fastaUnMsa1LikelyName:"id,seq\n1,word\n2,male\n3,bare\n4,core"},e=e=>async()=>{const s=t[e],r=n.DataFrame.fromCsv(s);return await l.data.detectSemanticTypes(r),r};(0,r.Bu)("fastaDnaWeak1",(async()=>{await d(e("fastaDnaWeak1"),"colName")})),(0,r.Bu)("fastaDnaWeak1LikelyName",(async()=>{await g(e("fastaDnaWeak1LikelyName"),"seq",h.r2.FASTA,"SEQ.MSA","DNA",4,!1)})),(0,r.Bu)("fastaRnaWeak1",(async()=>{await d(e("fastaRnaWeak1"),"colName")})),(0,r.Bu)("fastaRnaWeak1LikelyName",(async()=>{await g(e("fastaRnaWeak1LikelyName"),"seq",h.r2.FASTA,"SEQ.MSA","RNA",4,!1)})),(0,r.Bu)("fastaPtWeak1",(async()=>{await d(e("fastaPtWeak1"),"colName")})),(0,r.Bu)("fastaPtWeak1LikelyName",(async()=>{await g(e("fastaPtWeak1LikelyName"),"seq",h.r2.FASTA,"SEQ.MSA","PT",20,!1)})),(0,r.Bu)("fastaUn1",(async()=>{await d(e("fastaUn1"),"colName")})),(0,r.Bu)("fastaUn1LikelyName",(async()=>{await d(e("fastaUn1LikelyName"),"seq")})),(0,r.Bu)("fastaUn2LikelyName",(async()=>{await d(e("fastaUn2LikelyName"),"protein")})),(0,r.Bu)("fastaUnMsa1LikelyName",(async()=>{await d(e("fastaUnMsa1LikelyName"),"seq")}))})),(0,r.W3)("detectorsBenchmark",(()=>{let t;async function e(e,i,o,a,l,c){return await async function(e,m,d,p){const g=(()=>{const e=function(t,e,s,r,i){let o;switch(t){case h.r2.FASTA:o=t=>{let e="";for(let s=0;s<t.length;s++){const n=t[s];e+=1==n.length?n:`[${n}]`}return e};break;case h.r2.SEPARATOR:o=(t,e)=>t.join(e);break;default:throw new Error(`Not supported notation '${t}'.`)}const a=(t,e)=>{const s=new Array(e);for(let n=0;n<e;n++)s[n]=t[Math.floor(Math.random()*t.length)];return o(s,i)},l=Array(r);for(let t=0;t<r;t++)l[t]=a(e,s);return n.Column.fromStrings("seq",l)}(i,[...(0,h.gM)(o)],a,l,c),r=t.prepare({col:e});return s(r),r})(),f=Date.now(),y=await(async t=>s(t))(g),w=Date.now();(function(t,e){const s=u.Cn.getOrCreate(t);(0,r.l_)(t.semType===e.semType,!0),(0,r.l_)(s.notation===e.notation,!0),(0,r.l_)(s.alphabet===e.alphabet,!0),(0,r.l_)(s.separator===e.separator,!0)})(y,{semType:n.SEMTYPE.MACROMOLECULE,notation:i,alphabet:o,separator:c});const C=w-f;if(C>e){const t=`ET ${C} ms is more than max allowed ${e} ms.`;throw console.error(t),new Error(t)}return console.log(`ET ${C} ms is OK.`),C}(e)}function s(t){t.callSync();const e=t.getOutputParamValue(),s=t.inputs.col;return e&&(s.semType=e),s}(0,r.bb)((async()=>{const e=n.Func.find({package:"Bio",name:"detectMacromolecule"});t=e[0];const s=n.Column.fromStrings("seq",["ACGT","ACGT","ACGT"]);await t.prepare({col:s}).call()})),(0,r.Bu)("fastaDnaShorts50Few50",(async()=>{await e(10,h.r2.FASTA,"DNA",50,50)})),(0,r.Bu)("fastaDnaShorts50Many1E6",(async()=>{await e(20,h.r2.FASTA,"DNA",50,1e6)})),(0,r.Bu)("fastaDnaLong1e6Few50",(async()=>{await e(20,h.r2.FASTA,"DNA",1e6,50)})),(0,r.Bu)("separatorDnaShorts50Few50",(async()=>{await e(10,h.r2.SEPARATOR,"DNA",50,50,"/")})),(0,r.Bu)("separatorDnaShorts50Many1E6",(async()=>{await e(20,h.r2.SEPARATOR,"DNA",50,1e6,"/")})),(0,r.Bu)("separatorDnaLong1e6Few50",(async()=>{await e(20,h.r2.SEPARATOR,"DNA",1e6,50,"/")}))}));var w=s(6098),C=s(525);async function b(t){const e=await async function(t){return await pt.files.readAsText(t)}(t),s=n.DataFrame.fromCsv(e);return s.name=t.replace(".csv",""),s}async function T(t=1e4){const e=await l.dapi.docker.dockerContainers.filter("bio").first();"started"!==e.status&&"checking"!==e.status&&await(0,r.gw)(t)}async function A(t,e){const s=n.DataFrame.fromCsv(t),i=n.DataFrame.fromCsv(e),o=s.getCol("seq"),a=await l.functions.call("Bio:detectMacromolecule",{col:o});a&&(o.semType=a);const c=i.getCol("seq"),h=await(0,w.U)(o,!0);(0,r.f6)(h.toList(),c.toList())}async function S(t,e,s,i,o,a){const c=n.DataFrame.fromCsv(t),h=n.DataFrame.fromCsv(e),u=c.getCol("seq"),m=h.getCol("seq"),d=c.getCol("seq"),p=await l.functions.call("Bio:detectMacromolecule",{col:d});p&&(d.semType=p),await l.data.detectSemanticTypes(c),(0,r.l_)(u.semType,n.SEMTYPE.MACROMOLECULE),(0,r.l_)(u.getTag(n.TAGS.UNITS),s),o&&(0,r.l_)(u.getTag("alphabet"),o);const g=await(0,C.K)({col:u,pepsea:{method:a}});(0,r.l_)(g.semType,n.SEMTYPE.MACROMOLECULE),(0,r.l_)(g.getTag(n.TAGS.UNITS),i),(0,r.l_)(g.getTag("aligned"),"SEQ.MSA"),o&&(0,r.l_)(g.getTag("alphabet"),o),(0,r.f6)(g.toList(),m.toList())}(0,r.W3)("MSA",(async()=>{(0,r.Bu)("isCorrect",(async()=>{await A("seq\nFWRWYVKHP\nYNRWYVKHP\nMWRSWYCKHP","seq\nFWR-WYVKHP\nYNR-WYVKHP\nMWRSWYCKHP")})),(0,r.Bu)("isCorrectLong",(async()=>{await A("seq\nFWRWYVKHPFWRWYVKHPFWRWYVKHPFWRWYVKHPFWRWYVKHPFWRWYVKHPFWRWYVKHPFWRWYVKHP\nYNRWYVKHPYNRWYVKHPYNRWYVKHPYNRWYVKHPYNRWYVKHPYNRWYVKHPYNRWYVKHPYNRWYVKHP\nMWRSWYCKHPMWRSWYCKHPMWRSWYCKHPMWRSWYCKHPMWRSWYCKHPMWRSWYCKHPMWRSWYCKHPMWRSWYCKHP","seq\nFWR-WYVKHPFWR-WYVKHPFWR-WYVKHPFWR-WYVKHPFWR-WYVKHPFWR-WYVKHPFWR-WYVKHPFWR-WYVKHP\nYNR-WYVKHPYNR-WYVKHPYNR-WYVKHPYNR-WYVKHPYNR-WYVKHPYNR-WYVKHPYNR-WYVKHPYNR-WYVKHP\nMWRSWYCKHPMWRSWYCKHPMWRSWYCKHPMWRSWYCKHPMWRSWYCKHPMWRSWYCKHPMWRSWYCKHPMWRSWYCKHP")})),(0,r.Bu)("isCorrectHelm",(async()=>{await T(),await S("seq\n PEPTIDE1{meI.hHis.Aca.N.T.dE.Thr_PO3H2}$$$$\n PEPTIDE1{meI.Aca.N.T.dE.Thr_PO3H2}$$$$\n PEPTIDE1{hHis.Aca.N.T.dE.Thr_PO3H2}$$$$","seq\n meI.hHis.Aca.N.T.dE.Thr_PO3H2\n .meI.Aca.N.T.dE.Thr_PO3H2\n .hHis.Aca.N.T.dE.Thr_PO3H2",h.r2.HELM,h.r2.SEPARATOR,void 0,"mafft")}),{skipReason:"GROK-13221"}),(0,r.Bu)("isCorrectHelmLong",(async()=>{await T(),await S("seq\n PEPTIDE1{meI.hHis.Aca.N.T.dE.Thr_PO3H2.Aca.D-Tyr_Et.dV.E.N.D-Orn.D-aThr.Phe_4Me.Thr_PO3H2}$$$$\n PEPTIDE1{meI.hHis.Aca.Cys_SEt.T.dK.Tyr_PO3H2.D-Chg.dV.Phe_ab-dehydro.N.D-Orn.D-aThr.Phe_4Me}$$$$\n PEPTIDE1{Lys_Boc.hHis.Aca.Cys_SEt.T.dK.Tyr_PO3H2.D-Chg.dV.Thr_PO3H2.N.D-Orn.D-aThr.Phe_4Me}$$$$","seq\n meI.hHis.Aca.N.T.dE.Thr_PO3H2.Aca.D-Tyr_Et.dV.E.N.D-Orn.D-aThr.Phe_4Me.Thr_PO3H2\n meI.hHis.Aca.Cys_SEt.T.dK..Tyr_PO3H2.D-Chg.dV.Phe_ab-dehydro.N.D-Orn.D-aThr.Phe_4Me.\n Lys_Boc.hHis.Aca.Cys_SEt.T.dK..Tyr_PO3H2.D-Chg.dV.Thr_PO3H2.N.D-Orn.D-aThr.Phe_4Me.",h.r2.HELM,h.r2.SEPARATOR,void 0,"mafft")}),{skipReason:"GROK-13221"}),(0,r.Bu)("isCorrectSeparator",(async()=>{await S("seq\n F-W-P-H-E-Y\n Y-N-R-Q-W-Y-V\n M-K-P-S-E-Y-V","seq\n FWPHEY-\n YNRQWYV\n MKPSEYV",h.r2.SEPARATOR,h.r2.FASTA,"PT")})),(0,r.Bu)("isCorrectSeparatorLong",(async()=>{await S("seq\n M-I-E-V-F-L-F-G-I-V-L-G-L-I-P-I-T-L-A-G-L-F-V-T-A-Y-L-Q-Y-R-R-G-D-Q-L-D-L\n M-M-E-L-V-L-K-T-I-I-G-P-I-V-V-G-V-V-L-R-I-V-D-K-W-L-N-K-D-K\n M-D-R-T-D-E-V-S-N-H-T-H-D-K-P-T-L-T-W-F-E-E-I-F-E-E-Y-H-S-P-F-H-N","seq\n MIEV-FLFGIVLGLIPITLAGLFVTAYLQYRRGDQLDL\n MMEL-VLKTII-GPIVVGVVLRIVDKWLNKDK------\n MDRTDEVSNHTHDKPTLTWFEEIFEEYHSPFHN-----",h.r2.SEPARATOR,h.r2.FASTA,"PT")}))}));var E=s(3553),v=s(9416);async function M(t,e){const s=(0,h.kB)(t);console.debug(`Bio: tests: splitters: src=${JSON.stringify(t)}, res=${JSON.stringify(s)} .`),(0,r.f6)(s,e)}async function x(t,e){const s=(0,h.gP)(t);console.debug(`Bio: tests: splitters: src=${JSON.stringify(t)}, res=${JSON.stringify(s)} .`),(0,r.f6)(s,e)}(0,r.W3)("splitters",(async()=>{(0,r.bb)((async()=>{})),(0,r.X5)((async()=>{}));const t=["M[MeI]YKETLL[MeF]PKTDFPMRGGL[MeA]",["M","MeI","Y","K","E","T","L","L","MeF","P","K","T","D","F","P","M","R","G","G","L","MeA"]],e=["[meI][Pip][dK][Thr_PO3H2][L-hArg(Et,Et)][D-Tyr_Et][Tyr_ab-dehydroMe][dV]EN[D-Orn][D-aThr][Phe_4Me]",["meI","Pip","dK","Thr_PO3H2","L-hArg(Et,Et)","D-Tyr_Et","Tyr_ab-dehydroMe","dV","E","N","D-Orn","D-aThr","Phe_4Me"]],s=["PEPTIDE1{meI.hHis.Aca.N.T.dE.Thr_PO3H2.Aca.D-Tyr_Et.Tyr_ab-dehydroMe.dV.E.N.D-Orn.D-aThr.Phe_4Me}$$$",["meI","hHis","Aca","N","T","dE","Thr_PO3H2","Aca","D-Tyr_Et","Tyr_ab-dehydroMe","dV","E","N","D-Orn","D-aThr","Phe_4Me"]],i=["PEPTIDE1{meI.hHis.Aca.N.T.dK.Thr_PO3H2.Aca.D-Tyr_Et.D-Dap.dV.E.N.pnG.Phe_4Me}$$$",["meI","hHis","Aca","N","T","dK","Thr_PO3H2","Aca","D-Tyr_Et","D-Dap","dV","E","N","pnG","Phe_4Me"]],o=["PEPTIDE1{[meI].[hHis].[Aca].N.T.[dK].[Thr_PO3H2].[Aca].[D-Tyr_Et].[D-Dap].[dV].E.N.[pnG].[Phe_4Me]}$$$",["meI","hHis","Aca","N","T","dK","Thr_PO3H2","Aca","D-Tyr_Et","D-Dap","dV","E","N","pnG","Phe_4Me"]],a=["RNA1{R(U)P.R(T)P.R(G)P.R(C)P.R(A)}$$$$",["R(U)P","R(T)P","R(G)P","R(C)P","R(A)"]],h=["RNA1{P.R(U)P.R(T)}$$$$",["P","R(U)P","R(T)"]],u=["RNA1{P.R(U).P.R(T)}$$$$",["P","R(U)","P","R(T)"]];(0,r.Bu)("fastaMulti",(async()=>{await M(t[0],t[1])})),(0,r.Bu)("fastaFromHelm",(async()=>{await M(e[0],e[1])})),(0,r.Bu)("helm1",(async()=>{await x(s[0],s[1])})),(0,r.Bu)("helm2",(async()=>{await x(i[0],i[1])})),(0,r.Bu)("helm3-multichar",(async()=>{await x(o[0],o[1])})),(0,r.Bu)("testHelm1",(async()=>{await x(a[0],a[1])})),(0,r.Bu)("testHelm2",(async()=>{await x(h[0],h[1])})),(0,r.Bu)("testHelm3",(async()=>{await x(u[0],u[1])})),(0,r.Bu)("splitToMonomers",(async()=>{const t=await l.dapi.files.readCsv("System:AppData/Bio/samples/MSA.csv"),e=t.getCol("MSA"),s=await l.functions.call("Bio:detectMacromolecule",{col:e});s&&(e.semType=s),e.setTag("aligned",E.mU);const n=await(0,v.n)(t,e);(0,r.l_)(n.columns.names().includes("17"),!0),await l.data.detectSemanticTypes(n);const i=l.shell.addTableView(n);await(0,r.ow)((()=>i.grid.dataFrame!=t),"View grid has wrong data frame",100)})),(0,r.Bu)("getHelmMonomers",(async()=>{const t=n.DataFrame.fromCsv("HELM,Activity\nPEPTIDE1{hHis.N.T}$$$,5.30751\nPEPTIDE1{hHis.Aca.Cys_SEt}$$$,5.72388\n");await l.data.detectSemanticTypes(t);const e=["hHis","Aca","Cys_SEt","N","T"],s=t.getCol("HELM"),r=(0,c.getHelmMonomers)(s),i=e.filter((t=>!r.includes(t))),o=r.filter((t=>!e.includes(t)));if(i.length>0||o.length){const t=[];throw i.length>0&&t.push(`Missed monomers ${JSON.stringify(i)}.`),o.length>0&&t.push(`Unexpected monomers ${JSON.stringify(o)}.`),new Error(t.join(" "))}}))}));var N=s(7228),L=s(6584),_=s(2918);(0,r.W3)("monomerLibraries",(()=>{let t,e=null;(0,r.bb)((async()=>{t=await(0,N.JN)(),e=(0,L.nW)()})),(0,r.X5)((async()=>{await(0,L.tW)(e)})),(0,r.Bu)("default",(async()=>{await(0,L.tW)({exclude:[],explicit:[]}),await t.loadLibraries(!0);const e=t.getBioLib();(0,r.l_)(e.getPolymerTypes().length>0,!0)})),(0,r.Bu)("forTests",(async()=>{await(0,L.tb)(),await t.loadLibraries(!0);const e=t.getBioLib();(0,r.l_)(e.getPolymerTypes().length,2),(0,r.l_)(e.getMonomerSymbolsByType("PEPTIDE").length,322),(0,r.l_)(e.getMonomerSymbolsByType("RNA").length,383)})),(0,r.Bu)("empty",(async()=>{const e=await(0,L.nW)(),s=await(0,_.P4)();e.exclude=s,e.explicit=[],await(0,L.tW)(e),await t.loadLibraries(!0);const n=t.getBioLib();(0,r.l_)(0===n.getPolymerTypes().length,!0),n.getMonomerMolsByPolymerType("PEPTIDE")}))}));var P=s(4004);function R(){const t=[];return t.push(n.Column.fromList("string","MSA",new Array(10**6).fill("meI/hHis/Aca/N/T/dE/Thr_PO3H2/Aca/D-Tyr_Et/Tyr_ab-dehydroMe/dV/E/N/D-Orn/D-aThr//Phe_4Me"))),t.push(n.Column.fromList("string","Activity",new Array(10**6).fill("5.30751"))),t}function I(){const t=[],e="meI/hHis/Aca/N/T/dE/Thr_PO3H2/Aca/D-Tyr_Et/Tyr_ab-dehydroMe/dV/E/N/D-Orn/D-aThr".repeat(10**5);return t.push(n.Column.fromList("string","MSA",new Array(100).fill(e))),t.push(n.Column.fromList("string","Activity",new Array(100).fill("7.30751"))),t}async function O(t,e){const s=t(),i=n.DataFrame.fromColumns(s);await l.data.detectSemanticTypes(i);const o=Date.now(),a=(i.columns.byName("MSA"),l.shell.addTableView(i));await(0,r.ow)((()=>a.grid.dataFrame!==i),"View grid has wrong data frame ",100);const c=Date.now()-o;console.log(`Performance test: ${e}: ${c}ms`)}(0,r.W3)("renderers",(()=>{(0,r.Bu)("long sequence performance ",(async()=>{await O(I,"Long sequences")})),(0,r.Bu)("many sequence performance",(async()=>{await O(R,"Many sequences")})),(0,r.Bu)("many sequence performance",(async()=>{await O(R,"Many sequences")})),(0,r.Bu)("rendererMacromoleculeFasta",(async()=>{await async function(){const t=await l.dapi.files.readAsText("System:AppData/Bio/samples/FASTA.csv"),e=n.DataFrame.fromCsv(t),s=e.getCol("Sequence"),i=await l.functions.call("Bio:detectMacromolecule",{col:s});i&&(s.semType=i);const o=l.shell.addTableView(e);await l.data.detectSemanticTypes(e),await(0,r.ow)((()=>o.grid.dataFrame!=e),"View grid has wrong data frame",100);const a=s.getTag(n.TAGS.CELL_RENDERER);(0,r.l_)(a,"sequence")}()})),(0,r.Bu)("rendererMacromoleculeSeparator",(async()=>{await async function(){const t=await l.dapi.files.readAsText("System:AppData/Bio/data/sample_SEPARATOR_PT.csv"),e=n.DataFrame.fromCsv(t),s=e.getCol("sequence"),i=await l.functions.call("Bio:detectMacromolecule",{col:s});i&&(s.semType=i);const o=l.shell.addTableView(e);await l.data.detectSemanticTypes(e),await(0,r.ow)((()=>o.grid.dataFrame!=e),"View grid has wrong data frame",100);const a=s.getTag(n.TAGS.CELL_RENDERER);(0,r.l_)(a,"sequence")}()})),(0,r.Bu)("rendererMacromoleculeDifference",(async()=>{await async function(){const t=n.Column.fromStrings("SequencesDiff",["meI/hHis/Aca/N/T/dK/Thr_PO3H2/Aca#D-Tyr_Et/Tyr_ab-dehydroMe/meN/E/N/dV"]);t.setTag(n.TAGS.UNITS,h.r2.SEPARATOR),t.setTag("separator","/"),t.setTag("aligned","SEQ"),t.setTag("alphabet","UN"),t.setTag(".alphabetIsMultichar","true"),t.semType=E.Of.MACROMOLECULE_DIFFERENCE;const e=n.DataFrame.fromColumns([t]),s=l.shell.addTableView(e);await l.data.detectSemanticTypes(e),await(0,r.ow)((()=>s.grid.dataFrame!=e),"View grid has wrong data frame",100);const i=t.getTag(n.TAGS.CELL_RENDERER);(0,r.l_)(i,E.Of.MACROMOLECULE_DIFFERENCE)}()})),(0,r.Bu)("afterMsa",(async()=>{await async function(){const t=await l.dapi.files.readAsText("System:AppData/Bio/data/sample_FASTA.fasta"),e=(0,c.importFasta)(t)[0],s=e.getCol("sequence"),i=await l.functions.call("Bio:detectMacromolecule",{col:s});i&&(s.semType=i);const o=l.shell.addTableView(e);await l.data.detectSemanticTypes(e),console.log("Bio: tests/renderers/afterMsa, table view"),await(0,r.ow)((()=>o.grid.dataFrame!=e),"View grid has wrong data frame",100),console.log(`Bio: tests/renderers/afterMsa, src before test semType="${s.semType}", units="${s.getTag(n.TAGS.UNITS)}", cell.renderer="${s.getTag(n.TAGS.CELL_RENDERER)}"`),(0,r.l_)(s.semType,n.SEMTYPE.MACROMOLECULE),(0,r.l_)(s.getTag(n.TAGS.UNITS),h.r2.FASTA),(0,r.l_)(s.getTag("aligned"),"SEQ"),(0,r.l_)(s.getTag("alphabet"),"PT"),(0,r.l_)(s.getTag(n.TAGS.CELL_RENDERER),"sequence");const a=await(0,C.K)({col:s});o.grid.invalidate(),await(0,r.ow)((()=>o.grid.dataFrame!=e),"View grid has wrong data frame",100),(0,r.l_)(a.semType,n.SEMTYPE.MACROMOLECULE),(0,r.l_)(a.getTag(n.TAGS.UNITS),h.r2.FASTA),(0,r.l_)(a.getTag("aligned"),"SEQ.MSA"),(0,r.l_)(a.getTag("alphabet"),"PT"),(0,r.l_)(a.getTag(n.TAGS.CELL_RENDERER),"sequence"),u.Cn.getOrCreate(a)}()})),(0,r.Bu)("afterConvert",(async()=>{await async function(){const t=await l.dapi.files.readAsText("System:AppData/Bio/data/sample_FASTA_PT.csv"),e=n.DataFrame.fromCsv(t),s=e.col("sequence"),i=await l.functions.call("Bio:detectMacromolecule",{col:s});i&&(s.semType=i);const o=l.shell.addTableView(e);await l.data.detectSemanticTypes(e);const a=await(0,P.o)(s,h.r2.SEPARATOR,"/");await(0,r.ow)((()=>o.grid.dataFrame!=e),"View grid has wrong data frame",100);const c=a.getTag(n.TAGS.CELL_RENDERER);(0,r.l_)(c,"sequence"),u.Cn.getOrCreate(a)}()})),(0,r.Bu)("selectRendererBySemType",(async()=>{await async function(){const t=n.Column.fromStrings("SequencesDiff",["meI/hHis/Aca/N/T/dK/Thr_PO3H2/Aca#D-Tyr_Et/Tyr_ab-dehydroMe/meN/E/N/dV"]);t.setTag(n.TAGS.UNITS,h.r2.SEPARATOR),t.setTag("separator","/"),t.setTag("aligned","SEQ"),t.setTag("alphabet","UN"),t.setTag(".alphabetIsMultichar","true"),t.semType=E.Of.MACROMOLECULE_DIFFERENCE;const e=n.DataFrame.fromColumns([t]);l.shell.addTableView(e),await(0,r.gw)(100);const s=t.getTag(n.TAGS.CELL_RENDERER);if("MacromoleculeDifference"!==s)throw new Error(`Units 'separator', separator '/' and semType 'MacromoleculeDifference' have been manually set on column but after df was added as table, view renderer has set to '${s}' instead of correct 'MacromoleculeDifference'.`)}()}))}));var G=s(6414),F=s.n(G),H=s(9611);(0,r.W3)("renderers: monomerPlacer",(()=>{const t={splitter:{csv:"id,seq\nid1,m1-M-m3-mon4-mon5-N-T-MON8-N9\nid2,m1-mon2-m3-mon4-mon5-Num-MON8-N9\nid3,mon1-M-mon3-mon4-mon5-MON8-N9\n",testList:[{src:{row:0,x:-1},tgt:{pos:null}},{src:{row:1,x:0},tgt:{pos:null}},{src:{row:1,x:5},tgt:{pos:0}},{src:{row:1,x:6},tgt:{pos:0}},{src:{row:1,x:26},tgt:{pos:1}},{src:{row:1,x:160},tgt:{pos:6}},{src:{row:1,x:185},tgt:{pos:7}},{src:{row:2,x:140},tgt:{pos:5}},{src:{row:2,x:145},tgt:{pos:5}}]},splitterMsa:{csv:"id,seq\nid1,m1-M-m3-mon4-mon5-N-T-MON8-N9\nid2,m1-mon2-m3-mon4-mon5-Num--MON8-N9\nid3,\nid4,mon1-M-mon3-mon4-mon5---MON8-N9\n",testList:[{src:{row:0,x:-1},tgt:{pos:null}},{src:{row:1,x:0},tgt:{pos:null}},{src:{row:1,x:1},tgt:{pos:null}},{src:{row:1,x:4},tgt:{pos:null}},{src:{row:1,x:5},tgt:{pos:0}},{src:{row:1,x:37},tgt:{pos:0}},{src:{row:1,x:38},tgt:{pos:1}},{src:{row:1,x:170},tgt:{pos:4}},{src:{row:1,x:200},tgt:{pos:5}},{src:{row:2,x:20},tgt:{pos:null}},{src:{row:3,x:170},tgt:{pos:4}},{src:{row:3,x:200},tgt:{pos:5}},{src:{row:3,x:282},tgt:{pos:null}}]},fastaMsa:{csv:"id,seq\nid1,QQYNIYPLT\nid2,QQWSSFPYT\nid3,\nid3,QHIRE--LT\n",testList:[{src:{row:1,x:-1},tgt:{pos:null}},{src:{row:1,x:0},tgt:{pos:null}},{src:{row:1,x:1},tgt:{pos:null}},{src:{row:1,x:19},tgt:{pos:0}},{src:{row:1,x:170},tgt:{pos:8}},{src:{row:1,x:171},tgt:{pos:8}},{src:{row:2,x:5},tgt:{pos:null}},{src:{row:3,x:170},tgt:{pos:8}},{src:{row:3,x:181},tgt:{pos:null}}]}};for(const[e,s]of Object.entries(t))(0,r.Bu)(`getPosition-${e}`,(async()=>{const t=n.DataFrame.fromCsv(s.csv);await l.data.detectSemanticTypes(t);const e=t.getCol("seq"),r=new H.A(null,e,(()=>({unitsHandler:u.Cn.getOrCreate(e),monomerCharWidth:7,separatorWidth:12,monomerToShort:h.GU,monomerLengthLimit:3}))),i=s.testList;for(let t=0;t<e.length;++t)r.getCellMonomerLengths(t);const o=[];for(const[t,e]of F().enumerate(i)){const e={pos:r.getPosition(t.src.row,t.src.x)};t.tgt.pos!=e.pos&&o.push(`Test src ${JSON.stringify(t.src)} expected tgt ${JSON.stringify(t.tgt)}, but get ${JSON.stringify({res:e})}`)}if(o.length>0)throw new Error("Test failed error(s):\n"+o.join(", n"))}))})),(0,r.W3)("converters",(()=>{let t;!function(t){t.fastaPt="fastaPt",t.separatorPt="separatorPt",t.helmPt="helmPt",t.fastaDna="fastaDna",t.separatorDna="separatorDna",t.helmDna="helmDna",t.fastaRna="fastaRna",t.separatorRna="separatorRna",t.helmRna="helmRna",t.fastaGaps="fastaGaps",t.separatorGaps="separatorGaps",t.helmGaps="helmGaps",t.fastaUn="fastaUn",t.separatorUn="separatorUn",t.helmUn="helmUn",t.helmLoneDeoxyribose="helmLoneDeoxyribose",t.helmLoneRibose="helmLoneRibose",t.helmLonePhosphorus="helmLonePhosphorus",t.fastaLoneDeoxyribose="fastaLoneDeoxyribose",t.fastaLoneRibose="fastaLoneRibose",t.fastaLonePhosphorus="fastaLonePhosphorus"}(t||(t={}));const e={[t.fastaPt]:"seq\nFWPHEYFWPHEY\nYNRQWYVYNRQWYV\nMKPSEYVMKPSEYV",[t.separatorPt]:"seq\nF-W-P-H-E-Y-F-W-P-H-E-Y\nY-N-R-Q-W-Y-V-Y-N-R-Q-W-Y-V\nM-K-P-S-E-Y-V-M-K-P-S-E-Y-V",[t.helmPt]:"seq\nPEPTIDE1{F.W.P.H.E.Y.F.W.P.H.E.Y}$$$$\nPEPTIDE1{Y.N.R.Q.W.Y.V.Y.N.R.Q.W.Y.V}$$$$\nPEPTIDE1{M.K.P.S.E.Y.V.M.K.P.S.E.Y.V}$$$$",[t.fastaDna]:"seq\nACGTCACGTC\nCAGTGTCAGTGT\nTTCAACTTCAAC",[t.separatorDna]:"seq\nA/C/G/T/C/A/C/G/T/C\nC/A/G/T/G/T/C/A/G/T/G/T\nT/T/C/A/A/C/T/T/C/A/A/C",[t.helmDna]:"seq\nRNA1{d(A)p.d(C)p.d(G)p.d(T)p.d(C)p.d(A)p.d(C)p.d(G)p.d(T)p.d(C)p}$$$$\nRNA1{d(C)p.d(A)p.d(G)p.d(T)p.d(G)p.d(T)p.d(C)p.d(A)p.d(G)p.d(T)p.d(G)p.d(T)p}$$$$\nRNA1{d(T)p.d(T)p.d(C)p.d(A)p.d(A)p.d(C)p.d(T)p.d(T)p.d(C)p.d(A)p.d(A)p.d(C)p}$$$$",[t.fastaRna]:"seq\nACGUCACGUC\nCAGUGUCAGUGU\nUUCAACUUCAAC",[t.separatorRna]:"seq\nA*C*G*U*C*A*C*G*U*C\nC*A*G*U*G*U*C*A*G*U*G*U\nU*U*C*A*A*C*U*U*C*A*A*C",[t.helmRna]:"seq\nRNA1{r(A)p.r(C)p.r(G)p.r(U)p.r(C)p.r(A)p.r(C)p.r(G)p.r(U)p.r(C)p}$$$$\nRNA1{r(C)p.r(A)p.r(G)p.r(U)p.r(G)p.r(U)p.r(C)p.r(A)p.r(G)p.r(U)p.r(G)p.r(U)p}$$$$\nRNA1{r(U)p.r(U)p.r(C)p.r(A)p.r(A)p.r(C)p.r(U)p.r(U)p.r(C)p.r(A)p.r(A)p.r(C)p}$$$$",[t.fastaGaps]:"seq\nFW-PH-EYYFW-PH-EYY\nFYNRQWYV-FYNRQWYV-\nFKP-Q-SEYVFKP-Q-SEYV",[t.separatorGaps]:"seq\nF/W//P/H//E/Y/Y/F/W//P/H//E/Y/Y\nF/Y/N/R/Q/W/Y/V//F/Y/N/R/Q/W/Y/V/\nF/K/P//Q//S/E/Y/V/F/K/P//Q//S/E/Y/V",[t.helmGaps]:"seq\nPEPTIDE1{F.W.*.P.H.*.E.Y.Y.F.W.*.P.H.*.E.Y.Y}$$$$\nPEPTIDE1{F.Y.N.R.Q.W.Y.V.*.F.Y.N.R.Q.W.Y.V.*}$$$$\nPEPTIDE1{F.K.P.*.Q.*.S.E.Y.V.F.K.P.*.Q.*.S.E.Y.V}$$$$",[t.fastaUn]:"seq\n[meI][hHis][Aca]NT[dE][Thr_PO3H2][Aca]D[meI][hHis][Aca]NT[dE][Thr_PO3H2][Aca]D\n[meI][hHis][Aca][Cys_SEt]T[dK][Thr_PO3H2][Aca][Tyr_PO3H2][meI][hHis][Aca][Cys_SEt]T[dK][Thr_PO3H2][Aca][Tyr_PO3H2]\n[Lys_Boc][hHis][Aca][Cys_SEt]T[dK][Thr_PO3H2][Aca][Tyr_PO3H2][Lys_Boc][hHis][Aca][Cys_SEt]T[dK][Thr_PO3H2][Aca]",[t.separatorUn]:"seq\nmeI-hHis-Aca-N-T-dE-Thr_PO3H2-Aca-D-meI-hHis-Aca-N-T-dE-Thr_PO3H2-Aca-D\nmeI-hHis-Aca-Cys_SEt-T-dK-Thr_PO3H2-Aca-Tyr_PO3H2-meI-hHis-Aca-Cys_SEt-T-dK-Thr_PO3H2-Aca-Tyr_PO3H2\nLys_Boc-hHis-Aca-Cys_SEt-T-dK-Thr_PO3H2-Aca-Tyr_PO3H2-Lys_Boc-hHis-Aca-Cys_SEt-T-dK-Thr_PO3H2-Aca",[t.helmUn]:"seq\nPEPTIDE1{meI.hHis.Aca.N.T.dE.Thr_PO3H2.Aca.D.meI.hHis.Aca.N.T.dE.Thr_PO3H2.Aca.D}$$$$\nPEPTIDE1{meI.hHis.Aca.Cys_SEt.T.dK.Thr_PO3H2.Aca.Tyr_PO3H2.meI.hHis.Aca.Cys_SEt.T.dK.Thr_PO3H2.Aca.Tyr_PO3H2}$$$$\nPEPTIDE1{Lys_Boc.hHis.Aca.Cys_SEt.T.dK.Thr_PO3H2.Aca.Tyr_PO3H2.Lys_Boc.hHis.Aca.Cys_SEt.T.dK.Thr_PO3H2.Aca}$$$$",[t.helmLoneDeoxyribose]:"seq\nRNA1{d(A).d(C).d(G).d(T).d(C).d(A).d(C).d(G).d(T).d(C)}$$$$\nRNA1{d(C).d(A).d(G).d(T).d(G).d(T)p.d(C).d(A).d(G).d(T).d(G).d(T)p}$$$$\nRNA1{d(T).d(T).d(C).d(A).d(A).d(C)p.d(T).d(T).d(C).d(A).d(A).d(C)p}$$$$",[t.helmLoneRibose]:"seq\nRNA1{r(A).r(C).r(G).r(U).r(C).r(A).r(C).r(G).r(U).r(C)}$$$$\nRNA1{r(C).r(A).r(G).r(U).r(G).r(U)p.r(C).r(A).r(G).r(U).r(G).r(U)p}$$$$\nRNA1{r(U).r(U).r(C).r(A).r(A).r(C)p.r(U).r(U).r(C).r(A).r(A).r(C)p}$$$$",[t.helmLonePhosphorus]:"seq\nRNA1{p.p.r(A)p.r(C)p.r(G)p.r(U)p.r(C)p.r(A)p.r(C)p.r(G)p.r(U)p.r(C)p}$$$$\nRNA1{p.p.r(C)p.r(A)p.p.r(G)p.r(U)p.r(G)p.r(U)p.r(C)p.r(A)p.p.r(G)p.r(U)p.r(G)p.r(U)p}$$$$\nRNA1{p.r(U)p.r(U)p.r(C)p.r(A)p.r(A)p.r(C)p.r(U)p.r(U)p.r(C)p.r(A)p.r(A)p.r(C)p.p.p}$$$$"};async function s(t){const s=e[t],r=n.DataFrame.fromCsv(s);return await l.data.detectSemanticTypes(r),r}function i(t,e){if(t===h.r2.SEPARATOR&&!e)throw new Error(`Argument 'separator' is mandatory for target notation '${t.toString()}'.`);return function(s){const i=u.Cn.getOrCreate(s).convert(t,e);return(0,r.l_)(i.getTag(n.TAGS.UNITS),t),i}}async function o(t,e,n){const i=e((await s(t)).getCol("seq")),o=(await s(n)).getCol("seq");(0,r.f6)(i.toList(),o.toList()),u.Cn.getOrCreate(i)}(0,r.Bu)("testFastaPtToSeparator",(async()=>{await o(t.fastaPt,i(h.r2.SEPARATOR,"-"),t.separatorPt)})),(0,r.Bu)("testFastaDnaToSeparator",(async()=>{await o(t.fastaDna,i(h.r2.SEPARATOR,"/"),t.separatorDna)})),(0,r.Bu)("testFastaRnaToSeparator",(async()=>{await o(t.fastaRna,i(h.r2.SEPARATOR,"*"),t.separatorRna)})),(0,r.Bu)("testFastaGapsToSeparator",(async()=>{await o(t.fastaGaps,i(h.r2.SEPARATOR,"/"),t.separatorGaps)})),(0,r.Bu)("testFastaUnToSeparator",(async()=>{await o(t.fastaUn,i(h.r2.SEPARATOR,"-"),t.separatorUn)})),(0,r.Bu)("testFastaPtToHelm",(async()=>{await o(t.fastaPt,i(h.r2.HELM),t.helmPt)})),(0,r.Bu)("testFastaDnaToHelm",(async()=>{await o(t.fastaDna,i(h.r2.HELM),t.helmDna)})),(0,r.Bu)("testFastaRnaToHelm",(async()=>{await o(t.fastaRna,i(h.r2.HELM),t.helmRna)})),(0,r.Bu)("testFastaGapsToHelm",(async()=>{await o(t.fastaGaps,i(h.r2.HELM),t.helmGaps)})),(0,r.Bu)("testSeparatorPtToFasta",(async()=>{await o(t.separatorPt,i(h.r2.FASTA),t.fastaPt)})),(0,r.Bu)("testSeparatorDnaToFasta",(async()=>{await o(t.separatorDna,i(h.r2.FASTA),t.fastaDna)})),(0,r.Bu)("testSeparatorRnaToFasta",(async()=>{await o(t.separatorRna,i(h.r2.FASTA),t.fastaRna)})),(0,r.Bu)("testSeparatorGapsToFasta",(async()=>{await o(t.separatorGaps,i(h.r2.FASTA),t.fastaGaps)})),(0,r.Bu)("testSeparatorUnToFasta",(async()=>{await o(t.separatorUn,i(h.r2.FASTA),t.fastaUn)})),(0,r.Bu)("testSeparatorPtToHelm",(async()=>{await o(t.separatorPt,i(h.r2.HELM),t.helmPt)})),(0,r.Bu)("testSeparatorDnaToHelm",(async()=>{await o(t.separatorDna,i(h.r2.HELM),t.helmDna)})),(0,r.Bu)("testSeparatorRnaToHelm",(async()=>{await o(t.separatorRna,i(h.r2.HELM),t.helmRna)})),(0,r.Bu)("testSeparatorGapsToHelm",(async()=>{await o(t.separatorGaps,i(h.r2.HELM),t.helmGaps)})),(0,r.Bu)("testHelmDnaToFasta",(async()=>{await o(t.helmDna,i(h.r2.FASTA),t.fastaDna)})),(0,r.Bu)("testHelmRnaToFasta",(async()=>{await o(t.helmRna,i(h.r2.FASTA),t.fastaRna)})),(0,r.Bu)("testHelmPtToFasta",(async()=>{await o(t.helmPt,i(h.r2.FASTA),t.fastaPt)})),(0,r.Bu)("testHelmUnToFasta",(async()=>{await o(t.helmUn,i(h.r2.FASTA),t.fastaUn)})),(0,r.Bu)("testHelmDnaToSeparator",(async()=>{await o(t.helmDna,i(h.r2.SEPARATOR,"/"),t.separatorDna)})),(0,r.Bu)("testHelmRnaToSeparator",(async()=>{await o(t.helmRna,i(h.r2.SEPARATOR,"*"),t.separatorRna)})),(0,r.Bu)("testHelmPtToSeparator",(async()=>{await o(t.helmPt,i(h.r2.SEPARATOR,"-"),t.separatorPt)})),(0,r.Bu)("testHelmUnToSeparator",(async()=>{await o(t.helmUn,i(h.r2.SEPARATOR,"-"),t.separatorUn)})),(0,r.Bu)("testHelmLoneRibose",(async()=>{await o(t.helmLoneRibose,i(h.r2.FASTA),t.fastaRna)})),(0,r.Bu)("testHelmLoneDeoxyribose",(async()=>{await o(t.helmLoneDeoxyribose,i(h.r2.SEPARATOR,"/"),t.separatorDna)})),(0,r.Bu)("testHelmLonePhosphorus",(async()=>{await o(t.helmLonePhosphorus,i(h.r2.FASTA),t.fastaRna)}))}));var D=s(5226);(0,r.W3)("fastaFileHandler",(()=>{const t=["description:1","description:2","description:3","description:4"],e=(n.Column.fromStrings("description",t),["MDYKETLLMPKTDFPMRGGLPNKEPQIQEKW","MIEVFLFGIVLGLIPITLAGLFVTAYLQYRRGDQLDL","MMELVLKTIIGPIVVGVVLRIVDKWLNKDK","MDRTDEVSNHTHDKPTLTWFEEIFEEYHSPFHN"]);function s(s){const n=new D.i(s),i=n.descriptionsArray,o=n.sequencesArray;(0,r.f6)([i,o],[t,e])}(0,r.Bu)("testNormalFormatting",(async()=>{s(">description:1\nMDYKETLLMPKTDFPMRGGLPNKEPQIQEKW\n\n>description:2\nMIEVFLFGIVLGLIPITLAGLFVTAYLQYRRGDQLDL\n\n>description:3\nMMELVLKTIIGPIVVGVVLRIVDKWLNKDK\n\n>description:4\nMDRTDEVSNHTHDKPTLTWFEEIFEEYHSPFHN\n")})),(0,r.Bu)("testExtraSpaces",(async()=>{s(">description:1\n MDYKETLLMPKTDFPMRGGLPNKEPQIQEKW\n\n>description:2\nMI EVF LFGIVLGLI PITLAGLFVTAY LQYRRGDQLDL\n\n>description:3\nM MELVLKTI IGPI VVGVVLR IVDKWLNKDK\n\n>description:4\nMDR TDEVSNHTHDKP TLTWFEEIFEEYHSPFHN\n ")})),(0,r.Bu)("testExtraNewlines",(async()=>{s(">description:1\n\nMDYKETLLMPKTDFPMRGGLPNKEPQIQEKW\n\n>description:2\nMIEVF\nLFGIVLGLI\nPITLAGLFVTA\nYLQYRRGDQLDL\n\n>description:3\nM\nME\n\nLVLKTIIG\n\nPIVVGVVLRI\nVDKWLNKDK\n\n\n>description:4\n\nMDRT\n\nDEVSNHTHDKP\n\nTLTWFEEIFEE\n\n\n\nYHSPFHN\n")}))}));var W=s(9943);(0,r.W3)("fastaExport",(()=>{let t;!function(t){t.single="single",t.multi="multi"}(t||(t={}));const e={[t.single]:{src:"MDYKETLLMPKTDFPMRGGLP",tgt:["MDYKETLLMP","KTDFPMRGGL","P"]},[t.multi]:{src:"M[MeI]YKETLL[MeF]PKTDFPMRGGL[MeA]",tgt:["M[MeI]YKETLL[MeF]P","KTDFPMRGGL","[MeA]"]}};let s;!function(t){t.test1="test1",t.test2="test2"}(s||(s={}));const i={[s.test1]:{srcCsv:"id,seq\n1,MDYKETLLMP\n2,KTDFPMRGGL\n3,P",idCols:["id"],seqCol:"seq",lineWidth:10,tgtFasta:">1\nMDYKETLLMP\n>2\nKTDFPMRGGL\n>3\nP\n"},[s.test2]:{srcCsv:"id,id2,seq\n1,seqA,M[MeI]YKETLL[MeF]P\n2,seqB,KTDFPMRGGL\n3,seqC,[MeA]\n",idCols:["id2","id"],seqCol:"seq",lineWidth:5,tgtFasta:">seqA|1\nM[MeI]YKE\nTLL[MeF]P\n>seqB|2\nKTDFP\nMRGGL\n>seqC|3\n[MeA]\n"}};function o(t,s=10){const n=h.kB,i=e[t].src,o=(0,W.sK)(i,n,s),a=e[t].tgt;(0,r.f6)(o,a)}async function a(t){const e=n.DataFrame.fromCsv(t.srcCsv),s=e.getCol(t.seqCol),i=t.idCols.map((t=>e.getCol(t))),o=(0,W.i$)(i,s,t.lineWidth);(0,r.l_)(o,t.tgtFasta)}(0,r.Bu)("wrapSequenceSingle",(async()=>{o(t.single,10)})),(0,r.Bu)("wrapSequenceMulti",(async()=>{o(t.multi,10)})),(0,r.Bu)("saveAsFastaTest1",(async()=>{a(i[s.test1])})),(0,r.Bu)("saveAsFastaTest2",(async()=>{a(i[s.test2])}))}));var k=s(7331),B=s(585);(0,r.W3)("bio",(()=>{const t="seq\nACGTCT\nCAGTGT\nTTCAAC";(0,r.Bu)("testGetStatsHelm1",(async()=>{const t=n.DataFrame.fromCsv("seq\nPEPTIDE1{meI}$$$$").getCol("seq"),e=(0,B.jY)(t,1,h.gP);(0,r.Wh)(e.freq,{meI:1}),(0,r.l_)(e.sameLength,!0)})),(0,r.Bu)("testGetStatsN1",(async()=>{await async function(t){const e=n.DataFrame.fromCsv(t).col("seq"),s=(0,B.jY)(e,5,h.kB);(0,r.Wh)(s.freq,{A:4,C:5,G:3,T:6}),(0,r.l_)(s.sameLength,!0)}(t)})),(0,r.Bu)("testGetAlphabetSimilarity",(async()=>{await async function(){const t=new Set(Object.keys(a.V.Names)),e=(0,h.KX)({A:2041,C:3015,G:3015,T:2048,"-":1e3},t);(0,r.l_)(e>.6,!0)}()})),(0,r.Bu)("testPickupPaletteN1",(async()=>{await async function(t){const e=n.DataFrame.fromCsv(t).col("seq"),s=(0,h.dQ)(e);(0,r.l_)(s instanceof a.J,!0)}(t)})),(0,r.Bu)("testPickupPaletteN1e",(async()=>{await async function(t){const e=n.DataFrame.fromCsv("seq\nACGTAT\nCAGTTG\nTTCG2C").col("seq"),s=(0,h.dQ)(e);(0,r.l_)(s instanceof a.J,!0)}()})),(0,r.Bu)("testPickupPaletteAA1",(async()=>{await async function(t){const e=n.DataFrame.fromCsv("seq\nFWPHEYV\nYNRQWYV\nMKPSEYV").col("seq"),s=(0,h.dQ)(e);(0,r.l_)(s instanceof i.f,!0)}()})),(0,r.Bu)("testPickupPaletteX",(async()=>{await async function(t){const e=n.DataFrame.fromCsv("seq\nXZJ{}2\n5Z4733\n3Z6></\n675687").col("seq"),s=(0,h.dQ)(e);(0,r.l_)(s instanceof k.kQ,!0)}()}))})),(0,r.W3)("WebLogo.monomerToShort",(()=>{(0,r.Bu)("longMonomerSingle",(async()=>{(0,r.l_)((0,h.GU)("S",5),"S")})),(0,r.Bu)("longMonomerShort",(async()=>{(0,r.l_)((0,h.GU)("Short",5),"Short")})),(0,r.Bu)("longMonomerLong56",(async()=>{(0,r.l_)((0,h.GU)("Long56",6),"Long56")})),(0,r.Bu)("longMonomerComplexFirstPartShort",(async()=>{(0,r.l_)((0,h.GU)("Long-long",5),"Long…")})),(0,r.Bu)("longMonomerComplexFirstPartLong56",(async()=>{(0,r.l_)((0,h.GU)("Long56-long",6),"Long5…")})),(0,r.Bu)("monomerToShort",(async()=>{const t=[["AbC","AbC"],["AbCd","Ab…"],["ABc","ABc"],["ABcd","AB…"],["A_b","A_b"],["A_bc","A…"],["Ab_c","Ab…"],["A1_b","A1…"],["Abc_d","Ab…"],["Abcd_e","Ab…"],["A-b","A-b"],["A-bc","A…"],["Ab-c","Ab…"],["A1-b","A1…"],["Abc-d","Ab…"],["Abcd-e","Ab…"],["A","A"],["Ab","Ab"],["Abc","Abc"],["Ab…","Ab…"],["Abcd","Ab…"],["Abcde","Ab…"]],e=t.map((t=>t[0])),s=t.map((t=>t[1])),n=e.map((t=>(0,h.GU)(t,3)));(0,r.f6)(n,s)}))}));var V=s(8415);function U(t,e){(0,r.l_)(t.name,e.name),(0,r.f6)(t.getMonomers(),e.getMonomers());for(const s of t.getMonomers())(0,r.l_)(t.getFreq(s).rowCount,e.getFreq(s).rowCount)}(0,r.W3)("WebLogo-positions",(()=>{const t="seq\nATC-G-TTGC--\nATC-G-TTGC--\n-TC-G-TTGC--\n-TC-GCTTGC--\n-TC-GCTTGC--";(0,r.Bu)("allPositions",(async()=>{const e=n.DataFrame.fromCsv(t),s=l.shell.addTableView(e),i=e.getCol("seq");i.semType=n.SEMTYPE.MACROMOLECULE,i.setTag(n.TAGS.UNITS,h.r2.FASTA),i.setTag("alphabet","DNA"),i.setTag("aligned","SEQ.MSA");const o=await e.plot.fromType("WebLogo");await(0,r.zg)(o.onLayoutCalculated,(()=>{}),(()=>{s.dockManager.dock(o.root,n.DOCK_TYPE.DOWN)}),500);const a=o.positions,c=[new V.CK(0,"1",{A:new V.yW(2),"-":new V.yW(3)}),new V.CK(1,"2",{T:new V.yW(5)}),new V.CK(2,"3",{C:new V.yW(5)}),new V.CK(3,"4",{"-":new V.yW(5)}),new V.CK(4,"5",{G:new V.yW(5)}),new V.CK(5,"6",{"-":new V.yW(3),C:new V.yW(2)}),new V.CK(6,"7",{T:new V.yW(5)}),new V.CK(7,"8",{T:new V.yW(5)}),new V.CK(8,"9",{G:new V.yW(5)}),new V.CK(9,"10",{C:new V.yW(5)}),new V.CK(10,"11",{"-":new V.yW(5)}),new V.CK(11,"12",{"-":new V.yW(5)})];(0,r.l_)(a.length,c.length);for(let t=0;t<a.length;t++){(0,r.l_)(a[t].name,c[t].name);for(const e of a[t].getMonomers())(0,r.l_)(a[t].getFreq(e).rowCount,c[t].getFreq(e).rowCount)}})),(0,r.Bu)("positions with shrinkEmptyTail option true (filtered)",(async()=>{const t=n.DataFrame.fromCsv("seq\n-TC-G-TTGC--\n-TC-GCTTGC--\n-T--C-GT-\n-T--C-GT-\n-T--C-GT-\n-T--CCGT-"),e=l.shell.addTableView(t),s=t.getCol("seq");s.semType=n.SEMTYPE.MACROMOLECULE,s.setTag(n.TAGS.UNITS,h.r2.FASTA),s.setTag("alphabet","DNA"),s.setTag("aligned","SEQ"),t.filter.init((t=>t>2)),t.filter.fireChanged();const i=await t.plot.fromType("WebLogo",{shrinkEmptyTail:!0});await(0,r.zg)(i.onLayoutCalculated,(()=>{}),(()=>{e.dockManager.dock(i.root,n.DOCK_TYPE.DOWN)}),500);const o=i.positions,a=[new V.CK(0,"1",{"-":new V.yW(3)}),new V.CK(1,"2",{T:new V.yW(3)}),new V.CK(2,"3",{"-":new V.yW(3)}),new V.CK(3,"4",{"-":new V.yW(3)}),new V.CK(4,"5",{C:new V.yW(3)}),new V.CK(5,"6",{"-":new V.yW(2),C:new V.yW(1)}),new V.CK(6,"7",{G:new V.yW(3)}),new V.CK(7,"8",{T:new V.yW(3)}),new V.CK(8,"9",{"-":new V.yW(3)})];(0,r.l_)(o.length,a.length);for(let t=0;t<o.length;t++){(0,r.l_)(o[t].name,a[t].name);for(const e of o[t].getMonomers())(0,r.l_)(o[t].getFreq(e).rowCount,a[t].getFreq(e).rowCount)}})),(0,r.Bu)("positions with skipEmptyPositions option",(async()=>{const e=n.DataFrame.fromCsv(t),s=l.shell.addTableView(e),i=e.getCol("seq");i.semType=n.SEMTYPE.MACROMOLECULE,i.setTag(n.TAGS.UNITS,h.r2.FASTA),i.setTag("alphabet","DNA"),i.setTag("aligned","SEQ.MSA");const o=await e.plot.fromType("WebLogo",{skipEmptyPositions:!0});await(0,r.zg)(o.onLayoutCalculated,(()=>{}),(()=>{s.dockManager.dock(o.root,n.DOCK_TYPE.DOWN)}),500);const a=o.positions,c=[new V.CK(0,"1",{A:new V.yW(2),"-":new V.yW(3)}),new V.CK(1,"2",{T:new V.yW(5)}),new V.CK(2,"3",{C:new V.yW(5)}),new V.CK(4,"5",{G:new V.yW(5)}),new V.CK(5,"6",{"-":new V.yW(3),C:new V.yW(2)}),new V.CK(6,"7",{T:new V.yW(5)}),new V.CK(7,"8",{T:new V.yW(5)}),new V.CK(8,"9",{G:new V.yW(5)}),new V.CK(9,"10",{C:new V.yW(5)})];(0,r.l_)(a.length,c.length);for(let t=0;t<a.length;t++)U(a[t],c[t])})),(0,r.Bu)("count sequences for monomer at position",(async()=>{const e=function(t,e,s,r){const i=n.DataFrame.fromCsv(t),o=i.getCol("seq");return o.semType=n.SEMTYPE.MACROMOLECULE,o.setTag(n.TAGS.UNITS,e),o.setTag("alphabet","DNA"),o.setTag("aligned","SEQ.MSA"),i}(t,h.r2.FASTA),s=e.getCol("seq"),i=l.shell.addTableView(e),o=await e.plot.fromType("WebLogo",{startPositionName:"3",endPositionName:"7",skipEmptyPositions:!0});await(0,r.zg)(o.onLayoutCalculated,(()=>{}),(()=>{i.dockManager.dock(o.root,n.DOCK_TYPE.DOWN)}),500);const a=o.positions,c=[new V.CK(2,"3",{C:new V.yW(5)}),new V.CK(4,"5",{G:new V.yW(5)}),new V.CK(5,"6",{"-":new V.yW(3),C:new V.yW(2)}),new V.CK(6,"7",{T:new V.yW(5)})];(0,r.l_)(a.length,c.length);for(let t=0;t<a.length;t++)U(a[t],c[t]);const m=a[1],d=u.Cn.getOrCreate(s),p=(0,V.eZ)(e,d,e.filter,"G",m);(0,r.l_)(p,5)})),(0,r.Bu)("empty",(async()=>{const t=n.DataFrame.fromColumns([(()=>{const t=n.Column.fromStrings("seq",[]);return t.setTag(n.TAGS.SEMTYPE,n.SEMTYPE.MACROMOLECULE),t.setTag(n.TAGS.UNITS,h.r2.FASTA),t.setTag("alphabet","DNA"),t})()]),e=l.shell.addTableView(t),s=await t.plot.fromType("WebLogo");await(0,r.zg)(s.onLayoutCalculated,(()=>{}),(()=>{e.dockManager.dock(s.root,n.DOCK_TYPE.DOWN)}),500),s.positions}))}));var $=s(2568);function Y(t,e){let s=null;for(const n of t.viewers)n.type===e&&(s=n);return s}(0,r.W3)("checkInputColumn",(()=>{const t="seq\nseq1,\nseq2,\nseq3,\nseq4";(0,r.Bu)("testMsaPos",(async()=>{const e=n.DataFrame.fromCsv(t).getCol("seq");e.semType=n.SEMTYPE.MACROMOLECULE,e.setTag(n.TAGS.UNITS,h.r2.FASTA),e.setTag("alphabet","DNA"),e.setTag("aligned","SEQ");const[s,i]=(0,$.l)(e,"Test",[h.r2.FASTA],["DNA","RNA","PT"]);(0,r.l_)(s,!0)})),(0,r.Bu)("testMsaNegHelm",(async()=>{const e=n.DataFrame.fromCsv(t).getCol("seq");e.semType=n.SEMTYPE.MACROMOLECULE,e.setTag(n.TAGS.UNITS,h.r2.HELM),e.setTag(".alphabetIsMultichar","true");const[s,i]=(0,$.l)(e,"Test",[h.r2.FASTA],["DNA","RNA","PT"]);(0,r.l_)(s,!1)})),(0,r.Bu)("testMsaNegUN",(async()=>{const e=n.DataFrame.fromCsv(t).getCol("seq");e.semType=n.SEMTYPE.MACROMOLECULE,e.setTag(n.TAGS.UNITS,h.r2.FASTA),e.setTag("alphabet","UN"),e.setTag(".alphabetSize","11"),e.setTag(".alphabetIsMultichar","true"),e.setTag("aligned","SEQ");const[s,i]=(0,$.l)(e,"Test",[h.r2.FASTA],["DNA","RNA","PT"]);(0,r.l_)(s,!1)})),(0,r.Bu)("testGetActionFunctionMeta",(async()=>{n.Func.find({package:"Bio",name:"multipleSequenceAlignmentDialog"})[0].inputs.find((t=>"sequence"==t.name))}))})),(0,r.W3)("similarity/diversity",(async()=>{(0,r.Bu)("similaritySearchViewer",(async()=>{await async function(){const t=await pt.files.readAsText("tests/sample_MSA_data.csv"),e=n.DataFrame.fromCsv(t);await l.data.detectSemanticTypes(e);const s=l.shell.addTableView(e),i=s.dataFrame.getCol("MSA");(0,r.l_)(i.semType,n.SEMTYPE.MACROMOLECULE);const o=await s.dataFrame.plot.fromType("Sequence Similarity Search");let a=!1;if(o.computeCompleted.subscribe((t=>{t&&(a=!0)})),s.dockManager.dock(o,n.DOCK_TYPE.RIGHT,null,"Similarity"),await o.renderPromise,await(0,r.ow)((()=>void 0!==Y(s,"Sequence Similarity Search")),"Sequence Similarity Search viewer has not been created",100),!o.initialized)throw new Error("The viewer is not initialized.");if(!o.moleculeColumn)throw new Error("The viewer has not molecule column (onTableAttached).");if(!o.beforeRender())throw new Error("The viewer is not able to render.");if(!o.computeRequested)throw new Error("The viewer has not compute requested even.");if(!a)throw new Error("The viewer has not compute completed.");const c=o;await(0,r.ow)((()=>0!==c.root.getElementsByClassName("d4-grid").length),"Sequence Similarity Search viewer grid has not been created",100);(0,r.l_)(c.fingerprint,"Morgan"),(0,r.l_)(c.distanceMetric,"Tanimoto"),(0,r.l_)(c.scores.get(0),n.FLOAT_NULL),(0,r.l_)(c.idxs.get(0),0),(0,r.l_)(c.molCol.get(0),"D-Tyr_Et/Tyr_ab-dehydroMe/dV/E/N/D-Orn/D-aThr//Phe_4Me"),(0,r.l_)(c.scores.get(1),.4722222089767456),(0,r.l_)(c.idxs.get(1),11),(0,r.l_)(c.molCol.get(1),"meI/hHis//Aca/meM/Tyr_ab-dehydroMe/dV/E/N/D-Orn/D-aThr//Phe_4Me"),s.dataFrame.currentRowIdx=1,await(0,r.ow)((()=>1===c.targetMoleculeIdx),"Target molecule has not been changed",5e3),await(0,r.ow)((()=>"meI/hHis/Aca/Cys_SEt/T/dK/Thr_PO3H2/Aca/Tyr_PO3H2/D-Chg/dV/Phe_ab-dehydro/N/D-Orn/D-aThr//Phe_4Me"===c.molCol.get(0)),"Incorrect first similar molecule",5e3)}()})),(0,r.Bu)("diversitySearchViewer",(async()=>{await async function(){const t=await pt.files.readAsText("tests/sample_MSA_data.csv"),e=n.DataFrame.fromCsv(t),s=l.shell.addTableView(e);await l.data.detectSemanticTypes(e);const i=s.dataFrame.getCol("MSA");(0,r.l_)(i.semType,n.SEMTYPE.MACROMOLECULE);const o=await s.dataFrame.plot.fromType("Sequence Diversity Search");let a=!1;if(o.computeCompleted.subscribe((t=>{t&&(a=!0)})),s.dockManager.dock(o,n.DOCK_TYPE.DOWN,null,"Diversity"),await o.renderPromise,await(0,r.ow)((()=>void 0!==Y(s,"Sequence Diversity Search")),"Sequence Diversity Search viewer has not been created",100),!o.initialized)throw new Error("The viewer is not initialized.");if(!o.moleculeColumn)throw new Error("The viewer has not molecule column (onTableAttached).");if(!o.beforeRender())throw new Error("The viewer is not able to render.");if(!o.computeRequested)throw new Error("The viewer has not compute requested even.");if(!a)throw new Error("The viewer has not compute completed.");const c=o;await(0,r.ow)((()=>0!==c.root.getElementsByClassName("d4-grid").length),"Sequence Diversity Search viewer grid has not been created",100),(0,r.l_)(c.fingerprint,"Morgan"),(0,r.l_)(c.distanceMetric,"Tanimoto"),(0,r.l_)(c.initialized,!0),(0,r.l_)(c.renderMolIds.length>0,!0)}()}))}));var K=s(4413);(0,r.W3)("substructureFilters",(async()=>{let t,e;(0,r.bb)((async()=>{t=await(0,N.JN)(),e=await(0,L.nW)(),await(0,L.tb)(),await t.loadLibraries(!0)})),(0,r.X5)((async()=>{await(0,L.tW)(e),await t.loadLibraries(!0)})),(0,r.Bu)("fasta",(async()=>{const t=await b("tests/filter_FASTA.csv"),e=new K.ST;await l.data.detectSemanticTypes(t),e.attach(t),e.bioFilter.substructure="MD",await(0,r.gw)(100),(0,r.l_)(e.dataFrame.filter.trueCount,3),(0,r.l_)(e.dataFrame.filter.get(0),!0),(0,r.l_)(e.dataFrame.filter.get(3),!0),(0,r.l_)(e.dataFrame.filter.get(8),!0),(0,r.l_)(e.dataFrame.filter.get(1),!1)})),(0,r.Bu)("separator",(async()=>{const t=await b("tests/filter_MSA.csv"),e=new K.ST;await l.data.detectSemanticTypes(t),e.attach(t),e.bioFilter.substructure="meI",await(0,r.gw)(100),(0,r.l_)(e.dataFrame.filter.trueCount,7),(0,r.l_)(e.dataFrame.filter.get(2),!1),e.bioFilter.substructure="/meI",await(0,r.gw)(100),(0,r.l_)(e.dataFrame.filter.trueCount,0),e.bioFilter.substructure="meI-hHis",e.bioFilter.separatorInput.value="-",await(0,r.gw)(100),(0,r.l_)(e.dataFrame.filter.trueCount,7),(0,r.l_)(e.dataFrame.filter.get(2),!1)})),(0,r.Bu)("helm",(async()=>{const t=await b("tests/filter_HELM.csv"),e=l.shell.addTableView(t),s=new K.ST;await l.data.detectSemanticTypes(t),pt.logger.debug("Bio/substructureFilters/helm, filter attaching."),s.attach(t),pt.logger.debug("Bio/substructureFilters/helm, filter attached."),pt.logger.debug("Bio/substructureFilters/helm, filter 1 changing."),s.bioFilter.helmSubstructure="PEPTIDE1{C}$$$$V2.0",pt.logger.debug("Bio/substructureFilters/helm, filter 1 change awaiting."),await(0,r.zg)(t.onRowsFiltered,(()=>{}),(()=>{s.bioFilter.onChanged.next()}),2e4),pt.logger.debug("Bio/substructureFilters/helm, filter 1 changed."),(0,r.l_)(s.dataFrame.filter.trueCount,2),(0,r.l_)(s.dataFrame.filter.get(0),!0),(0,r.l_)(s.dataFrame.filter.get(3),!0),pt.logger.debug("Bio/substructureFilters/helm, filter 2 changing."),s.bioFilter.helmSubstructure="PEPTIDE1{A.C}$$$$V2.0",pt.logger.debug("Bio/substructureFilters/helm, filter 2 change awaiting."),await(0,r.zg)(t.onRowsFiltered,(()=>{}),(()=>{s.bioFilter.onChanged.next()}),2e4),await async function(t,e=5e3){await(0,r.gw)(0),await(0,r.zg)(t.onAfterDrawContent,(()=>{}),(()=>{t.invalidate()}),e)}(e.grid),pt.logger.debug("Bio/substructureFilters/helm, filter 2 changed."),(0,r.l_)(s.dataFrame.filter.trueCount,1),(0,r.l_)(s.dataFrame.filter.get(3),!0)}),{timeout:3e4})}));var Z=s(8341);(0,r.W3)("PepSeA",(()=>{(0,r.Bu)("Basic alignment",(async()=>{await T();const t=n.DataFrame.fromCsv('HELM,MSA\n "PEPTIDE1{F.L.R.G.W.[MeF].Y.S.N.N.C}$$$$","F.L.R.G.W.MeF.Y..S.N.N.C"\n "PEPTIDE1{F.L.R.G.Y.[MeF].Y.W.N.C}$$$$","F.L.R.G.Y.MeF.Y.W...N.C"\n "PEPTIDE1{F.G.Y.[MeF].Y.W.S.D.N.C}$$$$","F...G.Y.MeF.Y.W.S.D.N.C"\n "PEPTIDE1{F.L.R.G.Y.[MeF].Y.W.S.N.D.C}$$$$","F.L.R.G.Y.MeF.Y.W.S.N.D.C"\n "PEPTIDE1{F.V.R.G.Y.[MeF].Y.W.S.N.C}$$$$","F.V.R.G.Y.MeF.Y.W.S..N.C"'),e=await(0,Z.f3)(t.getCol("HELM"),"msa(HELM)");(0,r.l_)(null!==e,!0,"PepSeA container has not started");const s=t.getCol("MSA");for(let t=0;t<e.length;++t)(0,r.l_)(e.get(t)==s.get(t),!0)}),{skipReason:"GROK-13221"})})),(0,r.W3)("viewers",(()=>{const t=n.Func.find({package:"Bio",tags:["viewer"]}).map((t=>t.friendlyName));for(const e of t)(0,r.Bu)(e,(async()=>{const t=await b("data/sample_FASTA_DNA.csv");await(0,r.AB)(e,t,{detectSemanticTypes:!0})}),{skipReason:{"Sequence Similarity Search":"GROK-13162","Sequence Diversity Search":"GROK-13162",WebLogo:"GROK-13162",VdRegions:"GROK-13162"}[e]})}));const q="seq\nACGTCACGTC\nCAGTGTCAGTGT\nTTCAACTTCAAC",z="seq\nAC-GT-CTAC-GT-CT\nCAC-T-GTCAC-T-GT\nACCGTACTACCGTACT",X="seq\nabc-dfgg-abc1-cfr3-rty-wert-abc-dfgg-abc1-cfr3-rty-wert\nrut12-her2-rty-wert-abc-abc1-dfgg-rut12-her2-rty-wert-abc-abc1-dfgg\nrut12-rty-her2-abc-cfr3-wert-rut12-rut12-rty-her2-abc-cfr3-wert-rut12";var j;(0,r.W3)("UnitsHandler",(()=>{async function t(t){const e=n.DataFrame.fromCsv(t);await l.data.detectSemanticTypes(e);const s=u.Cn.getOrCreate(e.getCol("seq"));return[e,s]}(0,r.Bu)("Seq-Fasta",(async()=>{const[e,s]=await t(q);(0,r.l_)(s.notation,h.r2.FASTA),(0,r.l_)(s.isMsa(),!1)})),(0,r.Bu)("Seq-Fasta-MSA",(async()=>{const[e,s]=await t(z);(0,r.l_)(s.notation,h.r2.FASTA),(0,r.l_)(s.isMsa(),!0)})),(0,r.Bu)("Seq-Fasta-units",(async()=>{const[e,s]=await t(q);(0,r.l_)(s.notation,h.r2.FASTA),(0,r.l_)(s.isMsa(),!1)})),(0,r.Bu)("Seq-Fasta-MSA-units",(async()=>{const[e,s]=await t(z);(0,r.l_)(s.notation,h.r2.FASTA),(0,r.l_)(s.isMsa(),!0)})),(0,r.Bu)("Seq-Helm",(async()=>{const[e,s]=await t("seq\nPEPTIDE1{meI.hHis.Aca.N.T.dE.Thr_PO3H2.Aca.D-Tyr_Et.Tyr_ab-dehydroMe.dV.E.N.D-Orn.D-aThr.Phe_4Me}$$$$\nPEPTIDE1{meI.hHis.Aca.Cys_SEt.T.dK.Thr_PO3H2.Aca.Tyr_PO3H2.D-Chg.dV.Phe_ab-dehydro.N.D-Orn.D-aThr.Phe_4Me}$$$$\nPEPTIDE1{Lys_Boc.hHis.Aca.Cys_SEt.T.dK.Thr_PO3H2.Aca.Tyr_PO3H2.D-Chg.dV.Thr_PO3H2.N.D-Orn.D-aThr.Phe_4Me}$$$$\nPEPTIDE1{meI.hHis.Aca.Cys_SEt.T.dK.Thr_PO3H2.Aca.Tyr_PO3H2.D-Chg.dV.Thr_PO3H2.N.D-Orn.D-aThr.Phe_4Me}$$$$");(0,r.l_)(s.notation,h.r2.HELM),(0,r.l_)(s.isHelm(),!0)})),(0,r.Bu)("Seq-UN",(async()=>{const[e,s]=await t(X);(0,r.l_)(s.notation,h.r2.SEPARATOR),(0,r.l_)(s.separator,"-"),(0,r.l_)(s.alphabet,"UN")})),(0,r.Bu)("Seq-UN-auto",(async()=>{const[e,s]=await t(X);(0,r.l_)(s.notation,h.r2.SEPARATOR),(0,r.l_)(s.separator,"-"),(0,r.l_)(s.alphabet,"UN")}))})),function(t){t.fasta="fasta",t.fastaMsa="fastaMsa",t.separator="separator",t.separatorMsa="separatorMsa",t.helm="helm"}(j||(j={})),(0,r.W3)("UnitsHandler",(()=>{u._9[h.r2.FASTA],u._9[h.r2.HELM];const t=u._9[h.r2.SEPARATOR],e={[j.fasta]:{src:{csv:"seq\nACGTCACGTC\nCAGTGTCAGTGT\nTTCAACTTCAAC"},tgt:{notation:h.r2.FASTA,splitted:["ACGTCACGTC","CAGTGTCAGTGT","TTCAACTTCAAC"]}},[j.fastaMsa]:{src:{csv:"seq\nAC-GT-CTAC-GT-CT\nCAC-T-GTCAC-T-GT\nACCGTACTACCGTACT"},tgt:{notation:h.r2.FASTA,splitted:["AC-GT-CTAC-GT-CT","CAC-T-GTCAC-T-GT","ACCGTACTACCGTACT"]}},[j.separator]:{src:{csv:"seq\nabc-dfgg-abc1-cfr3-rty-wert-abc-dfgg-abc1-cfr3-rty-wert\nrut12-her2-rty-wert-abc-abc1-dfgg-rut12-her2-rty-wert-abc\nrut12-rty-her2-abc-cfr3-wert-rut12-rut12-rty-her2-abc-cfr3"},tgt:{notation:h.r2.SEPARATOR,separator:"-",splitted:[["abc","dfgg","abc1","cfr3","rty","wert","abc","dfgg","abc1","cfr3","rty","wert"],["rut12","her2","rty","wert","abc","abc1","dfgg","rut12","her2","rty","wert","abc"],["rut12","rty","her2","abc","cfr3","wert","rut12","rut12","rty","her2","abc","cfr3"]]}},[j.separatorMsa]:{src:{csv:'seq\nrut0-dfgg-abc1-cfr3-rty-wert-abc-dfgg-abc1-cfr3-rty-wert\nrut1-her2-rty--abc1-dfgg-rut12-her2-rty--abc1-dfgg\nrut2-rty-her2---wert-rut12-rty-her2---wert\n"rut3-rty-her2-""-""-""-""-wert-rut12-rty-her2-""-""-""-""-wert"\n"""-""-rut4-her2-wert-rut12-rty-her2-wert"\n"rut5-rty-her2-wert-rut12-rty-her2-wert-""-"""'},tgt:{notation:h.r2.SEPARATOR,separator:"-",splitted:[["rut0","dfgg","abc1","cfr3","rty","wert","abc","dfgg","abc1","cfr3","rty","wert"],["rut1","her2","rty",t,"abc1","dfgg","rut12","her2","rty",t,"abc1","dfgg"],["rut2","rty","her2",t,t,"wert","rut12","rty","her2",t,t,"wert"],["rut3","rty","her2",t,t,"wert","rut12","rty","her2",t,t,"wert"],[t,"rut4","her2","wert","rut12","rty","her2","wert"],["rut5","rty","her2","wert","rut12","rty","her2","wert",t]]}},[j.helm]:{src:{csv:"seq\nPEPTIDE1{meI.hHis.Aca.N.T.dE.Thr_PO3H2.Aca.D-Tyr_Et.Thr_PO3H2.Aca.D-Tyr_Et}$$$$\nPEPTIDE1{meI.hHis.Aca.Cys_SEt.T.dK.Thr_PO3H2.Aca.dK.Thr_PO3H2.Aca}$$$$\nPEPTIDE1{Lys_Boc.hHis.Aca.Cys_SEt.T.dK.Thr_PO3H2.Aca.dK.Thr_PO3H2.Aca}$$$$\nPEPTIDE1{meI.hHis.Aca.Cys_SEt.T.dK.Thr_PO3H2.T.dK.Thr_PO3H2}$$$$"},tgt:{notation:h.r2.HELM,splitted:[["meI","hHis","Aca","N","T","dE","Thr_PO3H2","Aca","D-Tyr_Et","Thr_PO3H2","Aca","D-Tyr_Et"],["meI","hHis","Aca","Cys_SEt","T","dK","Thr_PO3H2","Aca","dK","Thr_PO3H2","Aca"],["Lys_Boc","hHis","Aca","Cys_SEt","T","dK","Thr_PO3H2","Aca","dK","Thr_PO3H2","Aca"],["meI","hHis","Aca","Cys_SEt","T","dK","Thr_PO3H2","T","dK","Thr_PO3H2"]]}}};for(const[t,s]of Object.entries(e))(0,r.Bu)(`splitted-${t}`,(async()=>{const t=n.DataFrame.fromCsv(s.src.csv).getCol("seq"),e=await l.functions.call("Bio:detectMacromolecule",{col:t});e&&(t.semType=e),(0,r.l_)(t.semType,n.SEMTYPE.MACROMOLECULE);const i=u.Cn.getOrCreate(t);(0,r.l_)(i.notation,s.tgt.notation),(0,r.l_)(i.separator===s.tgt.separator,!0);const o=i.splitted;(0,r.f6)(o,s.tgt.splitted)}),t==j.separatorMsa?{skipReason:"#2468 CSV row starting with the quote character"}:void 0)})),(0,r.W3)("UnitsHandler: getRegion",(()=>{const t={fastaDna:{srcCsv:"seq\nATTCGT\nACTGCTC\nATTCCGTA",startIdx:2,endIdx:4,tgtCsv:"seq\nTCG\nTGC\nTCC",units:h.r2.FASTA,alphabet:"DNA",positionNames:{tag:"a, b, c, d, e, f, g, h",start:"c",end:"e"}},separatorPt:{srcCsv:"seq\nM-D-Y-K-E-T-L\nM-I-E-V-F-L-F-G-I\nM-M-",startIdx:5,endIdx:null,tgtCsv:"seq\nT-L--\nL-F-G-I\n---",units:h.r2.SEPARATOR,alphabet:"PT",positionNames:{tag:"1, 1A, 1B, 2, 3, 4, 4A, 4A, 4C",start:"4",end:null}},helm:{srcCsv:"seq\nPEPTIDE1{[meI].[hHis].[Aca].N.T.[dE].[Thr_PO3H2].[Aca].[D-Tyr_Et].[Tyr_ab-dehydroMe].[dV].E.N.[D-Orn]}$$$$\nPEPTIDE1{[meI].[hHis].[Aca].[Cys_SEt].T.[dK].[Thr_PO3H2].[Aca].[Tyr_PO3H2].[D-Chg].[dV].[Phe_ab-dehydro]}$$$$\nPEPTIDE1{[Lys_Boc].[hHis].[Aca].[Cys_SEt].T}$$$$",startIdx:3,endIdx:6,tgtCsv:"seq\nPEPTIDE1{N.T.[dE].[Thr_PO3H2]}$$$$\nPEPTIDE1{[Cys_SEt].T.[dK].[Thr_PO3H2]}$$$$\nPEPTIDE1{[Cys_SEt].T.*.*}$$$$",units:h.r2.HELM,alphabet:null,positionNames:{tag:null,start:"4",end:"7"}}};for(const[e,s]of Object.entries(t))(0,r.Bu)(`${e}-idx`,(async()=>{const t=n.DataFrame.fromCsv(s.srcCsv).getCol("seq"),e=await l.functions.call("Bio:detectMacromolecule",{col:t});e&&(t.semType=e);const i=u.Cn.getOrCreate(t).getRegion(s.startIdx,s.endIdx,"regSeq"),o=n.DataFrame.fromCsv(s.tgtCsv).getCol("seq");(0,r.l_)(t.getTag(n.TAGS.UNITS),s.units),(0,r.l_)(i.getTag(n.TAGS.UNITS),s.units),(0,r.l_)(t.getTag("alphabet"),s.alphabet),(0,r.l_)(i.getTag("alphabet"),s.alphabet),(0,r.f6)(i.toList(),o.toList())})),s.positionNames&&(0,r.Bu)(`${e}-positionNames`,(async()=>{const t=n.DataFrame.fromCsv(s.srcCsv).getCol("seq");s.positionNames.tag&&t.setTag(".positionNames",s.positionNames.tag);const e=await l.functions.call("Bio:detectMacromolecule",{col:t});e&&(t.semType=e);const i=await l.functions.call("Bio:getRegion",{sequence:t,start:s.positionNames.start,end:s.positionNames.end}),o=n.DataFrame.fromCsv(s.tgtCsv).getCol("seq");(0,r.l_)(t.getTag(n.TAGS.UNITS),s.units),(0,r.l_)(i.getTag(n.TAGS.UNITS),s.units),(0,r.l_)(t.getTag("alphabet"),s.alphabet),(0,r.l_)(i.getTag("alphabet"),s.alphabet),(0,r.f6)(i.toList(),o.toList())}))}));var Q=s(8601);const J=new n.FileSource("System:AppData/Bio"),tt={PT:"peptides-fasta",DNA:"dna-fasta",MSA:"msa-separator"},et={PT:"tests/to-atomic-level-peptides-fasta-input.csv",DNA:"tests/to-atomic-level-dna-fasta-input.csv",MSA:"tests/to-atomic-level-msa-separator-input.csv"},st={PT:"tests/to-atomic-level-peptides-fasta-output.csv",DNA:"tests/to-atomic-level-dna-fasta-output.csv",MSA:"tests/to-atomic-level-msa-separator-output.csv"},nt="molfile(sequence)";async function rt(t,e="seq",s){const n=t.getCol(e),r=s.getBioLib(),i=await(0,Q.i0)(t,n,r);return i.warnings.length>0&&pt.logger.warning(`_toAtomicLevel() warnings ${i.warnings.join("\n")}`),i.col}function it(t){return t.replaceAll("\r\n","\n").replace(/\n$/,"").split("\n").map((t=>t.trimEnd())).join("\n")}(0,r.W3)("toAtomicLevel",(async()=>{const t={},e={};let s,i,o;async function a(t,e){const s=t.getCol("sequence");await(0,c.toAtomicLevel)(t,s,!1);const n=t.getCol(nt),i=e.getCol(nt),o=F()(n.values()).map((t=>it(t))).toArray(),a=F()(i.values()).map((t=>it(t))).toArray();(0,r.f6)(o,a)}(0,r.bb)((async()=>{s=await(0,N.JN)(),i=await(0,L.nW)(),await(0,L.tb)(),await s.loadLibraries(!0);for(const s in tt)t[s]=n.DataFrame.fromCsv((await J.readAsText(et[s])).replace(/\n$/,"")),await l.data.detectSemanticTypes(t[s]),e[s]=n.DataFrame.fromCsv((await J.readAsText(st[s])).replace(/\n$/,""))})),(0,r.X5)((async()=>{await(0,L.tW)(i),await s.loadLibraries(!0)}));for(const s in tt)(0,r.Bu)(`${tt[s]}`,(async()=>{await a(t[s],e[s])}));!function(t){t.fastaDna="fastaDna",t.fastaRna="fastaRna",t.fastaPt="fastaPt",t.separatorDna="separatorDna",t.separatorRna="separatorRna",t.separatorPt="separatorPt",t.separatorUn="separatorUn",t.helm="helm"}(o||(o={}));const m={[o.fastaDna]:"seq\nACGTCACGTC\nCAGTGTCAGTGT\nTTCAACTTCAAC",[o.fastaRna]:"seq\nACGUCACGUC\nCAGUGUCAGUGU\nUUCAACUUCAAC",[o.fastaPt]:"seq\nFWPHEYFWPHEY\nYNRQWYVYNRQWYV\nMKPSEYVMKPSEYV",[o.separatorDna]:"seq\nA/C/G/T/C/A/C/G/T/C\nC/A/G/T/G/T/C/A/G/T/G/T\nT/T/C/A/A/C/T/T/C/A/A/C",[o.separatorRna]:"seq\nA*C*G*U*C*A*C*G*U*C\nC*A*G*U*G*U*C*A*G*U*G*U\nU*U*C*A*A*C*U*U*C*A*A*C",[o.separatorPt]:"seq\nF-W-P-H-E-Y-F-W-P-H-E-Y\nY-N-R-Q-W-Y-V-Y-N-R-Q-W-Y-V\nM-K-P-S-E-Y-V-M-K-P-S-E-Y-V",[o.separatorUn]:"seq\nmeI-hHis-Aca-N-T-dE-Thr_PO3H2-Aca-D-meI-hHis-Aca-N-T-dE-Thr_PO3H2-Aca-D\nmeI-hHis-Aca-Cys_SEt-T-dK-Thr_PO3H2-Aca-Tyr_PO3H2-meI-hHis-Aca-Cys_SEt-T-dK-Thr_PO3H2-Aca-Tyr_PO3H2\nLys_Boc-hHis-Aca-Cys_SEt-T-dK-Thr_PO3H2-Aca-Tyr_PO3H2-Lys_Boc-hHis-Aca-Cys_SEt-T-dK-Thr_PO3H2-Aca-Tyr_PO3H2",[o.helm]:"seq\nPEPTIDE1{meI.D-gGlu.Aca.N.T.dE.Thr_PO3H2.Aca.D.Thr_PO3H2.Aca.D}$$$\nPEPTIDE1{meI.hHis.Aca.Cys_SEt.T.dK.Thr_PO3H2.Aca.Tyr_PO3H2.Thr_PO3H2.Aca.Tyr_PO3H2}$$$\nPEPTIDE1{Lys_Boc.hHis.Aca.Cys_SEt.T.dK.Thr_PO3H2.Aca.Tyr_PO3H2.Thr_PO3H2.Aca.Tyr_PO3H2}$$$"};async function d(t){const e=m[t],s=n.DataFrame.fromCsv(e.replace(/\n$/,""));return await l.data.detectSemanticTypes(s),s}(0,r.Bu)("fastaDna",(async()=>{await rt(await d(o.fastaDna),"seq",s)})),(0,r.Bu)("fastaRna",(async()=>{await rt(await d(o.fastaRna),"seq",s)})),(0,r.Bu)("fastaPt",(async()=>{await rt(await d(o.fastaPt),"seq",s)})),(0,r.Bu)("separatorDna",(async()=>{await rt(await d(o.separatorDna),"seq",s)})),(0,r.Bu)("separatorDna",(async()=>{await rt(await d(o.separatorRna),"seq",s)})),(0,r.Bu)("separatorPt",(async()=>{await rt(await d(o.separatorPt),"seq",s)})),(0,r.Bu)("separatorUn",(async()=>{await rt(await d(o.separatorUn),"seq",s)})),(0,r.Bu)("helm",(async()=>{await rt(await d(o.helm),"seq",s)})),(0,r.Bu)("ptFasta2",(async()=>{const t=await pt.files.readAsText("tests/to-atomic-level-pt-fasta-2.mol"),e=n.DataFrame.fromCsv("seq\nAR"),i=e.getCol("seq");i.semType=n.SEMTYPE.MACROMOLECULE,i.setTag(n.TAGS.UNITS,h.r2.FASTA),i.setTag("alphabet","PT"),u.Cn.getOrCreate(i);const o=await rt(e,"seq",s);(0,r.l_)(it(o.get(0)),it(t))}))}));var ot=s(489);async function at(t){const e=n.DataFrame.fromCsv(t),s=e.col("seq"),r=await l.functions.call("Bio:detectMacromolecule",{col:s});return r&&(s.semType=r),await l.data.detectSemanticTypes(e),u.Cn.getOrCreate(s)}function lt(t,e,s,n){const i=s(t,e);(0,r.l_)(Number(i.toFixed(3)),Number(n.toFixed(3)))}async function ct(t,e,s,n,i,o,a){await l.data.detectSemanticTypes(t);const h=await(0,c.activityCliffs)(t,t.getCol(s),t.getCol(n),i,e,a,{[`${c.BYPASS_LARGE_DATA_WARNING}`]:!0});(0,r.l_)(null!=h,!0);const u=Array.from(h.root.children).find((t=>{const e=t.className.split(" ");return["ui-btn","ui-btn-ok"].every((t=>e.includes(t)))}));(0,r.l_)(u.innerText.toLowerCase(),`${o} cliffs`)}(0,r.W3)("Distance",(async()=>{const t=[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],e={F:0,W:1,R:2,Y:3},s="FWRWY",i="FWRWW",o="FWY",a="FWRWY",l="FWY",c="FWRRRRY";(0,r.Bu)("protein-distance-function",(async()=>{const t=(await at("seq\nFWRWYVKHPFWRWYVKHP\nYNRWYVKHPYNRWYVKHP\nMWRSWYCKHPMWRSWYCKHP")).getDistanceFunctionName();(0,r.l_)(t,ot.U.LEVENSHTEIN)})),(0,r.Bu)("DNA-distance-function",(async()=>{const t=(await at("seq\nATAACGATAACG\nATCGAATCGA\nATCGAATCGA")).getDistanceFunctionName();(0,r.l_)(t,ot.U.LEVENSHTEIN)})),(0,r.Bu)("MSA-distance-function",(async()=>{const t=(await at("seq\nATAACATAAC\nATCGAATCGA\nATCGAATCGA")).getDistanceFunctionName();(0,r.l_)(t,ot.U.HAMMING)})),(0,r.Bu)("levenstein-sub",(async()=>{const t=ot.o[ot.U.LEVENSHTEIN]();lt(s,i,t,.2)})),(0,r.Bu)("levenstein-del",(async()=>{const t=ot.o[ot.U.LEVENSHTEIN]();lt(o,a,t,.4)})),(0,r.Bu)("hamming",(async()=>{const t=ot.o[ot.U.HAMMING]();lt(o,a,t,.6)})),(0,r.Bu)("needleman-blosum62",(async()=>{const t=ot.o[ot.U.NEEDLEMANN_WUNSCH]({gapOpen:8,gapExtend:2});lt(s,i,t,-6)})),(0,r.Bu)("needleman-blosum62-del",(async()=>{const t=ot.o[ot.U.NEEDLEMANN_WUNSCH]({gapOpen:8,gapExtend:2});lt(o,a,t,-1.8)})),(0,r.Bu)("needleman-custom-sub",(async()=>{const n=ot.o[ot.U.NEEDLEMANN_WUNSCH]({scoringMatrix:t,alphabetIndexes:e,gapOpen:1,gapExtend:1});lt(s,i,n,.2)})),(0,r.Bu)("needleman-custom-del",(async()=>{const s=ot.o[ot.U.NEEDLEMANN_WUNSCH]({scoringMatrix:t,alphabetIndexes:e,gapOpen:1,gapExtend:1});lt(o,a,s,.8)})),(0,r.Bu)("needleman-custom-zero-extend",(async()=>{const s=ot.o[ot.U.NEEDLEMANN_WUNSCH]({scoringMatrix:t,alphabetIndexes:e,gapOpen:1,gapExtend:0});lt(l,c,s,.714)})),(0,r.Bu)("needleman-custom-half-extend",(async()=>{const s=ot.o[ot.U.NEEDLEMANN_WUNSCH]({scoringMatrix:t,alphabetIndexes:e,gapOpen:2,gapExtend:1});lt(l,c,s,1.286)})),(0,r.Bu)("needleman-custom-same-extend",(async()=>{const s=ot.o[ot.U.NEEDLEMANN_WUNSCH]({scoringMatrix:t,alphabetIndexes:e,gapOpen:1,gapExtend:1});n.Test.isInBenchmark?lt(Array(1e4).fill("FWRY").join(""),Array(1e4).fill("FYWRRY").join(""),s,.667):lt(l,c,s,1.143)}))}));var ht=s(116),ut=s(6361);(0,r.W3)("activityCliffs",(async()=>{let t,e,s=[],i=[];(0,r.bb)((async()=>{t=await(0,N.JN)(),e=await(0,L.nW)(),await(0,L.tb)(),await t.loadLibraries(!0),s=[],i=[]})),(0,r.X5)((async()=>{await(0,L.tW)(e),await t.loadLibraries(!0)})),(0,r.Bu)("activityCliffsOpens",(async()=>{const t=await b(n.Test.isInBenchmark?"test/peptides_motif-with-random_10000.csv":"tests/100_3_clustests.csv");i.push(t);const e=l.shell.addTableView(t);s.push(e);const r=n.Test.isInBenchmark?6:3;await ct(t,ht.AL.UMAP,"sequence","Activity",90,r,ot.U.LEVENSHTEIN)})),(0,r.Bu)("activityCliffsWithEmptyRows",(async()=>{const t=await b("tests/100_3_clustests_empty_vals.csv");i.push(t);const e=l.shell.addTableView(t);s.push(e),await ct(t,ht.AL.UMAP,"sequence","Activity",90,3,ot.U.LEVENSHTEIN)})),(0,r.Bu)("Helm",(async()=>{const t=await pt.files.readCsv("data/sample_HELM_50.csv");l.shell.addTableView(t),await ct(t,ht.AL.UMAP,"HELM","Activity",65,4,ut.gk.Tanimoto)}))}));var mt=s(3277);async function dt(t,e,s){const i=t.getCol(s),o=await l.functions.call("Bio:detectMacromolecule",{col:i});o&&(i.semType=o);const a=n.Func.find({package:"Bio",name:"macromoleculePreprocessingFunction"})[0];if(!a)throw new Error("Preprocessing function not found");const h=await(0,c.sequenceSpaceTopMenu)(t,t.col(s),e,ot.U.LEVENSHTEIN,!0,a,{[mt.sS]:!0});(0,r.l_)(null!=h,!0)}(0,r.W3)("sequenceSpace",(async()=>{let t,e,s,i;(0,r.Bu)("sequenceSpaceOpens",(async()=>{t=await b(n.Test.isInBenchmark?"test/peptides_motif-with-random_10000.csv":"tests/100_3_clustests.csv"),e=l.shell.addTableView(t),await dt(t,ht.AL.UMAP,"sequence")})),(0,r.Bu)("sequenceSpaceWithEmptyRows",(async()=>{s=await b("tests/100_3_clustests_empty_vals.csv"),i=l.shell.addTableView(s),await dt(s,ht.AL.UMAP,"sequence")}))})),(0,r.W3)("Scoring",(()=>{const t="sequence",e="expected_similarity",s="expected_identity",i=n.DataFrame.fromCsv(`${t},${e},${s}\nPEPTIDE1{Aca.Orn.gGlu.Pqa.D-His_1Bn.dH.hHis.4Abz.D-Tic.D-Dap.Y.Iva.meS.F.P.F.D-1Nal}$$$$,1.0,1.0\nPEPTIDE1{Iva.Gly_allyl.gGlu.Pqa.D-Dip.dH.hHis.4Abz.D-aHyp.D-Dap.Y.Iva.I.Tyr_26diMe.P.Asu.meC}$$$$,0.68,0.53\nPEPTIDE1{[1Nal].[1Nal].[1Nal].[1Nal].[1Nal].[1Nal].[1Nal].[1Nal].[1Nal].[1Nal].[1Nal].[1Nal].[1Nal].[1Nal].[1Nal].[1Nal].[1Nal]}$$$$V2.0,0.34,0.0`),o=i.getCol(t);o.setTag(n.TAGS.UNITS,h.r2.HELM),o.semType=n.SEMTYPE.MACROMOLECULE;const a=o.get(0);let l,u;(0,r.bb)((async()=>{l=await(0,N.JN)(),u=await(0,L.nW)(),await(0,L.tb)(),await l.loadLibraries(!0)})),(0,r.X5)((async()=>{await(0,L.tW)(u),await l.loadLibraries(!0)})),(0,r.Bu)("Identity",(async()=>{const t=await(0,c.sequenceIdentityScoring)(i,o,a);for(let e=0;e<t.length;e++)(0,r.jh)(t.get(e),i.get(s,e),.01,`Wrong identity score for sequence at position ${e}`)})),(0,r.Bu)("Similarity",(async()=>{const t=await(0,c.sequenceSimilarityScoring)(i,o,a);for(let s=0;s<t.length;s++)(0,r.jh)(t.get(s),i.get(e,s),.01,`Wrong similarity score for sequence at position ${s}`)}))}));const pt=new n.Package;async function gt(t,e,s){const i=await(0,r.ci)({category:t,test:e,testContext:s});return n.DataFrame.fromObjects(i)}},2712:(t,e,s)=>{"use strict";s.d(e,{BYPASS_LARGE_DATA_WARNING:()=>ie,_package:()=>re,activityCliffs:()=>le,getBioLib:()=>ae,getHelmMonomers:()=>me,getMonomerLibHelper:()=>oe,importFasta:()=>ue,sequenceIdentityScoring:()=>de,sequenceSimilarityScoring:()=>pe,sequenceSpaceTopMenu:()=>ce,toAtomicLevel:()=>he});var n=s(4469),r=s(3870),i=s(976),o=s(116);i.SEMTYPE.MOLECULE,i.SEMTYPE.MACROMOLECULE;var a=s(850);const l="dimensionality-reducer-terminate-event";async function c(t,e,r,i,o,c){const h=await async function(t,e,r,i,o){return new Promise((function(a,c){const h=new Worker(new URL(s.p+s.u(935),s.b));h.postMessage({columnData:t.data,method:e,measure:t.metric,options:r,parallelDistanceWorkers:i});const u=n.events.onCustomEvent(l).subscribe((()=>{try{h?.terminate()}finally{u.unsubscribe()}}));h.onmessage=({data:{error:t,distance:e,embedding:s,epochNum:n,epochsLength:r}})=>{n&&r?o&&o(n,r,s):(u.unsubscribe(),t?c(t):a({distance:e,embedding:s}),setTimeout((()=>h.terminate()),0))}}))}({data:t,metric:r},e,i,o,c);return h.embedding=h.embedding.map((t=>(0,a.Fv)(t))),h}var h=s(5697),u=(s(1040),s(489));i.SEMTYPE.MOLECULE,i.SEMTYPE.MACROMOLECULE;const m="show-scatterplot-progress";var d=s(3277),p=s(2198);var g=s(701),f=s(3379),y=s.n(f),w=s(7795),C=s.n(w),b=s(569),T=s.n(b),A=s(3565),S=s.n(A),E=s(9216),v=s.n(E),M=s(4589),x=s.n(M),N=s(9414),L={};L.styleTagTransform=x(),L.setAttributes=S(),L.insert=T().bind(null,"head"),L.domAPI=C(),L.insertStyleElement=v(),y()(N.Z,L),N.Z&&N.Z.locals&&N.Z.locals;var _=s(2590),P=s(9657);let R=0;const I="cliffsDf",O="cliffs_col_encode_fn",G=new g.Subject,F="act_diff",H="sali",D="sim",W="line_index",k=["1_seq","2_seq"],B="filterCliffs";async function V(t,e,s){const n=t.distance.map(((e,n)=>{const r=Math.abs(s.get(t.i[n])-s.get(t.j[n]));return 0!=e?r/e:1/0})),r=t.distance.map((t=>1-t)),i=t.i,o=t.j,a=new Set;return t.distance.forEach(((e,s)=>{a.add(t.i[s]),a.add(t.j[s])})),{simVals:r,saliVals:n,n1:i,n2:o,cliffsMolIds:a}}function U(t,e,s){const n=e.getBoundingClientRect(),r=t.clientX-n.left,i=t.clientY-n.top;let o=null,a=0;for(const t of s){const e=Math.abs(Math.hypot(t.a[0]-r,t.a[1]-i)+Math.hypot(t.b[0]-r,t.b[1]-i)-Math.hypot(t.a[0]-t.b[0],t.a[1]-t.b[1]));(!a&&e<2||e<a)&&(a=e,o=t)}return o}var $,Y=s(499),K=s(5226),Z=s(7228),q=s(8457),z=s(585);async function X(t,e,s,n){const r=(0,q.O)(e),o=(0,z.vU)(e.getTag(i.TAGS.UNITS),e.getTag("separator"))(s),a=n===$.IDENTITY?function(t,e){const s=e.columns.length,n=new Array(s),r=new Array(s),o=new Array(s);for(let i=0;i<s;++i){const s=e.columns.byIndex(i);n[i]=s.getRawData(),r[i]=s.categories.indexOf(""),o[i]=s.categories.indexOf(t[i]??"")}const a=i.Column.float("Identity",e.rowCount),l=a.getRawData();for(let s=0;s<e.rowCount;++s){l[s]=0;for(let e=0;e<t.length;++e)n[e][s]===o[e]&&++l[s];l[s]/=t.length}return a}(o,r):n===$.SIMILARITY?await async function(t,e){const s=e.columns.toList();return await(0,Z.Qx)(s,t)}(o,r):null;if(null===a)throw new Error(`In bio library: Unkown sequence scoring method: ${n}`);return a.name=t.columns.getUnusedName(a.name),t.columns.add(a),a}!function(t){t.IDENTITY="identity",t.SIMILARITY="similarity"}($||($={}));var j=s(7945),Q=(s(4293),s(6414)),J=s.n(Q);const tt="rgb(100,100,100)",et="#808080",st="rgb(0,0,0)",nt=z.GU;var rt,it;function ot(t,e,s,n,r,i,o=tt,a=0,l=!1,c=1,h="",u=!1,m=it.classic,d=[],p=0,g=null,f=[],y=null,w={}){r.textAlign="start";let C=i.substring(0),b=u?"":h;m===it.MSA&&(b="");let T=!0,A=!0,S="difference";null!=g&&null!=g.cell.column&&(T=g.cell.column.temp["color-code"]??!0,A=g.cell.column.temp["compare-with-current"]??!0,S=g.cell.column.temp["highlight-difference"]??"difference");const E=f[p];A&&f.length>0&&"difference"===S&&(c=C==E?.3:c),A&&f.length>0&&"equal"===S&&(c=C!=E?.3:c),null!=y&&(C=nt(C,y));const v=C+b;w[v]??(w[v]=r.measureText(v));let M=w[v];w[C]??(w[C]=r.measureText(C));let x=w[C].width;w[b]??(w[b]=r.measureText(b));const N=w[b].width,L=n/2-(M.fontBoundingBoxAscent+M.fontBoundingBoxDescent)/2+1;function _(s,n){const i=T?o:st;r.fillStyle=i,r.globalAlpha=c,m===it.classic&&(r.fillText(C,t+s,e+L),r.fillStyle=et,r.fillText(b,t+n,e+L)),m===it.MSA&&r.fillText(C,t+s,e+L)}M=M.width,m===it.MSA&&(x=d[p],M=d[p]);const P=(d[p]??0)-(d[0]??0);if(l||M>s)return _(P,P+x),t+P+x+N;{const e=(s-M)/2;return _(e,e+x),t+P+e+x}}!function(t){t.maxMonomerLength=".mm.cellRenderer.maxMonomerLength"}(rt||(rt={})),function(t){t.MSA="MSA",t.classic="classic"}(it||(it={})),s(9611);var at,lt,ct=s(8447),ht=s(7331);function ut(t){const e=!J().enumerate(t).some((([e,s])=>e.length>1&&0!=s&&s!=t.length-1)),s=[],n=e?"":" ";for(const[e,r]of J().enumerate(t)){let i=e;r<t.length&&(i+=`${e?"":"-"}${n}`),s.push(i)}return[s,e]}(lt=at||(at={})).long="long",lt.short="short",s(3553),ct.GU;class mt extends i.GridCellRenderer{constructor(){super(...arguments),this.padding=5}get name(){return"sequence"}get cellType(){return"sequence"}get defaultHeight(){return 30}get defaultWidth(){return 230}onClick(t,e){t.cell.column.temp["current-word"]=t.cell.value,t.grid.invalidate()}onMouseMove(t,e){const s=t.cell.column.temp["bio-seqCol"];if(!s)return;const i=t.bounds,o=e.offsetX-t.gridColumn.left+(t.gridColumn.left-i.x),a=s.getPosition(t.tableRowIndex,o),l=s.getSeqMonList(t.tableRowIndex);if(null!==a&&a<l.length){const t=l[a],i=[r.div(t)];if(s._monomerStructureMap[t])i.push(s._monomerStructureMap[t]);else{const e=s.getMonomer(t);if(e){const r={autoCrop:!0,autoCropMargin:0,suppressChiralText:!0},o=n.chem.svgMol(e.smiles,void 0,void 0,r);i.push(o),s._monomerStructureMap[t]=o}}r.tooltip.show(r.divV(i),e.x+16,e.y+16)}else r.tooltip.hide()}render(t,e,s,n,r,i,o){try{i.grid}catch(t){const[e,s]=(0,j.yf)(t);re.logger.error(e,void 0,s)}i.cell.column}}class dt extends i.GridCellRenderer{get name(){return"MacromoleculeDifferenceCR"}get cellType(){return constants.Of.MACROMOLECULE_DIFFERENCE}get defaultHeight(){return 30}get defaultWidth(){return 230}render(t,e,s,n,r,o,a){const l=window.devicePixelRatio,c=o.grid,h=o.cell,u=o.tableColumn,m=h.value??"",d=u.tags.separator,p=u.tags[i.TAGS.UNITS];getUpdatedWidth(c,t,e,n,l);const[g,f]=m.split("#"),y=(0,z.vU)(p,d);pt(t,e,s,n,r,y(g),y(f),p)}}function pt(t,e,s,n,r,i,o,a,l,c){if(i.length!==o.length){const t=function(t,e){let s=0,n=0;const r=t.length>e.length?t:e,i=t.length>e.length?e:t;for(let t=0;t<i.length;t++)r[t]===i[t]&&s++;const o=r.length-i.length;for(let t=r.length-1;t>o;t--)r[t]===i[t-o]&&n++;const a=new Array(Math.abs(t.length-e.length)).fill("");function l(t){return s>n?t.concat(a):a.concat(t)}return t.length>e.length?e=l(e):t=l(t),{subParts1:t,subParts2:e}}(J()(i).toArray(),J()(o).toArray());i=t.subParts1,o=t.subParts2}const h=t.measureText(ut(i).join("")),u=t.measureText(ut(o).join("")),m=Math.max(h.width,u.width);l&&(n=m+4*i.length,t.canvas.width=m+4*i.length);let d=Math.max(e,e+(n-(m+4*i.length))/2)+5;const p=Math.max(s,s+(r-28)/2);t.save(),t.beginPath(),t.rect(e,s,l?m+4*i.length:n,r),t.clip(),t.font="12px monospace",t.textBaseline="top";let g=ht.UE.Color;"HELM"!=a&&(g=(0,ct.py)(a.substring(a.length-2)));for(let e=0;e<i.length;e++){const s=i[e],a=o[e],l=g.get(s);if(s!=a){const i=g.get(a),o=ot(d,p-7,n,r,t,s,l,0,!0),h=ot(d,p+7,n,r,t,a,i,0,!0);d=Math.max(h,o),c&&(c[e]=gt(s,a,l,i,p,7,r))}else d=ot(d,p,n,r,t,s,l,0,!0,.5);d+=4}t.restore()}function gt(t,e,s,n,r,i,o){const a=document.createElement("canvas"),l=a.getContext("2d");l.font="12px monospace";const c=l.measureText(ut([t]).join("")).width,h=l.measureText(ut([e]).join("")).width,u=Math.max(c,h);return a.height=o,a.width=u+4,l.font="12px monospace",l.textBaseline="top",ot(0,r-i,u,o,l,t,s,0,!0),ot(0,r+i,u,o,l,e,n,0,!0),a}var ft,yt=s(8467),wt=s(9298);!function(t){t.Unknown="unknown",t.FR="framework",t.CDR="cdr"}(ft||(ft={}));const Ct=new class{constructor(){this.regionTypes=[ft.CDR],this.chains=["Heavy","Light"],this.skipEmptyPositions=!1,this.fitWidth=!1,this.positionWidth=16,this.positionHeight=wt.ES.Entropy,this.filterSource=wt.vS.filterSource}};var bt=s(172),Tt=s(8415);const At=ft;var St,Et;!function(t){t.STYLE="Style",t.BEHAVIOR="Behavior",t.LAYOUT="Layout",t.DATA="Data"}(St||(St={})),function(t){t.skipEmptyPositions="skipEmptyPositions",t.regionTypes="regionTypes",t.chains="chains",t.fitWidth="fitWidth",t.positionWidth="positionWidth",t.positionHeight="positionHeight",t.filterSource="filterSource"}(Et||(Et={}));const vt=Ct;class Mt extends i.JsViewer{constructor(){super(),this.viewed=!1,this.regionsFg=null,this.regionsRoot=null,this.isOpened=!1,this.panelNode=null,this.regions=[],this.viewerId=++Mt.viewerCounter,this.setDataInProgress=!1,this.host=null,this.mainLayout=null,this.logos=[],this.viewSubs=[],this.calcSizeRequested=!1,this._onRendered=new g.Subject,this.skipEmptyPositions=this.bool(Et.skipEmptyPositions,vt.skipEmptyPositions,{category:St.DATA}),this.regionTypes=this.stringList(Et.regionTypes,vt.regionTypes,{category:St.DATA,choices:Object.values(At).filter((t=>t!=At.Unknown))}),this.chains=this.stringList(Et.chains,vt.chains,{category:St.DATA,choices:["Heavy","Light"]}),this.fitWidth=this.bool(Et.fitWidth,vt.fitWidth,{category:St.LAYOUT}),this.positionWidth=this.float(Et.positionWidth,vt.positionWidth,{category:St.LAYOUT,editor:"slider",min:0,max:64,description:"Internal WebLogo viewers property width of position."}),this.positionHeight=this.string(Et.positionHeight,vt.positionHeight,{category:St.LAYOUT,choices:Object.keys(wt.ES)}),this.filterSource=this.string(Et.filterSource,vt.filterSource,{category:St.BEHAVIOR,choices:Object.values(wt.Ct)}),this.viewSyncer=new bt.c(re.logger)}viewerToLog(){return`VdRegionsViewer<${this.viewerId}>`}async init(){this.subs.push((0,g.fromEvent)(this.root,"mousemove").subscribe(this.rootOnMouseMove.bind(this)))}detach(){const t=`${this.viewerToLog()}.detach()`,e=super.detach.bind(this);this.viewSyncer.sync(`${t}`,(async()=>{this.setDataInProgress||(this.viewed&&(await this.destroyView("detach"),this.viewed=!1),e())}))}onTableAttached(){super.onTableAttached(),this.setData(this.regions)}onPropertyChanged(t){if(super.onPropertyChanged(t),t){switch(t.name){case Et.regionTypes:case Et.chains:this.setData(this.regions)}switch(t.name){case Et.skipEmptyPositions:for(let t=0;t<this.logos.length;++t)for(const e of this.chains)this.logos[t][e].setOptions({[Tt.bo.skipEmptyPositions]:this.skipEmptyPositions});this.calcSize();break;case Et.fitWidth:case Et.positionWidth:this.calcSize();break;case Et.positionHeight:for(let t=0;t<this.logos.length;++t)for(const e of this.chains)this.logos[t][e].setOptions({[Tt.bo.positionHeight]:this.positionHeight});this.calcSize();break;case Et.filterSource:this.filterSourceInput.value=this.filterSource;break;default:this.setData(this.regions)}}else console.warn("Bio: VdRegionsViewer.onPropertyChanged() property is null")}setData(t){const e=`${this.viewerToLog()}.setData()`;re.logger.debug(`${e}, in, regions.length = ${t.length}`),this.viewSyncer.sync(`${e}`,(async()=>{if(!this.setDataInProgress){this.setDataInProgress=!0;try{this.viewed&&(await this.destroyView("setData"),this.viewed=!1),this.regions=t,this.viewed||(await this.buildView("setData"),this.viewed=!0)}finally{this.setDataInProgress=!1}}}))}async destroyView(t){re.logger.debug(`Bio: VdRegionsViewer.destroyView( mainLayout = ${this.mainLayout?"value":"none"} ), purpose = '${t}', this.regions.length = ${this.regions.length}`),this.filterSourceInput&&r.empty(this.filterSourceInput.root),null!=this.mainLayout&&(this.mainLayout.remove(),this.host.remove(),this.host=null,this.mainLayout=null);for(const t of this.viewSubs)t.unsubscribe()}async buildView(t){re.logger.debug(`Bio: VdRegionsViewer.buildView() begin, purpose = '${t}', this.regions.length = ${this.regions.length}`);const e=this.regions.filter((t=>this.regionTypes.includes(t.type))),s=Array.from(new Set(e.map((t=>t.order)))).sort(),n=[];for(let t=0;t<s.length;t++)for(const r of this.chains){const i=e.find((e=>e.order==s[t]&&e.chain==r));n.push((async()=>{const e=await this.dataFrame.plot.fromType("WebLogo",{sequenceColumnName:i.sequenceColumnName,startPositionName:i.positionStartName,endPositionName:i.positionEndName,fixWidth:!0,skipEmptyPositions:this.skipEmptyPositions,positionWidth:this.positionWidth,positionHeight:this.positionHeight,filterSource:this.filterSource});return e.onSizeChanged.subscribe((()=>{this.calcSize()})),[t,r,e]})())}const i=await Promise.all(n);this.logos=new Array(s.length);for(let t=0;t<s.length;++t)this.logos[t]={};for(const[t,e,s]of i)this.logos[t][e]=s,this.viewSubs.push(s.onFreqsCalculated.subscribe((()=>{this.calcSize()})));this.mainLayout=r.table(this.chains,(t=>[...s.length>0?[r.div(t,{style:{transform:"rotate(-90deg)",font:"12px Roboto, Roboto Local, sans-serif",textAlign:"center",width:"16px",marginTop:"24px",marginLeft:"6px"}})]:[],...[...Array(s.length).keys()].map((e=>{const s=this.logos[e][t];return s.root.style.height="100%",r.div([s.root],{style:{marginTop:"4px",marginBottom:"4px"}})}))]),["",...[...Array(s.length).keys()].map((t=>e.find((e=>e.order==s[t]&&e.chain==this.chains[0])).name||"Name"))]),this.mainLayout.className="mlb-vd-regions-viewer-table2",this.filterSourceInput=r.choiceInput("Data source",this.filterSource,Object.values(wt.Ct),this.filterSourceInputOnValueChanged.bind(this)),this.filterSourceInput.root.style.position="absolute",this.filterSourceInput.root.style.right="9px",this.filterSourceInput.root.style.top="-4px",Math.ceil(255*Math.random()).toString(16),this.host=r.div([this.mainLayout,this.filterSourceInput.root],{}),this.root.appendChild(this.host),this.root.style.overflowX="auto",this.calcSize(),this.viewSubs.push(r.onSizeChanged(this.root).subscribe(this.rootOnSizeChanged.bind(this))),re.logger.debug("Bio: VdRegionsViewer.buildView() end")}calcSize(){re.logger.debug("Bio: VdRegionsViewer.calcSize(), start");const t=()=>{if(!this.host)return;const t=(this.root.clientHeight-54)/this.chains.length;let e=0;for(let s=0;s<this.logos.length;s++){for(const e of this.chains)this.logos[s][e].root.style.height=`${t}px`;e+=Math.max(...this.chains.map((t=>this.logos[s][t].Length)))}if(this.fitWidth){if(this.logos.length>0&&e>0){const t=22,s=13,n=9,r=(this.root.clientWidth-t-(this.logos.length-1)*n-s)/e;for(let t=0;t<this.logos.length;t++)for(const e of this.chains){const s=this.logos[t][e];s.setOptions({[Tt.bo.positionWidth]:r-s.positionMarginValue}),s.root.style.width=r*s.Length+"px"}}this.host.style.setProperty("overflow","hidden","important")}else{for(let t=0;t<this.logos.length;t++)for(const e of this.chains)this.logos[t][e].setOptions({[Tt.bo.positionWidth]:this.positionWidth});this.host.style.removeProperty("overflow")}0===this.positionWidth?this.host.style.setProperty("overflow-x","hidden","important"):this.host.style.removeProperty("overflow-x")};this.calcSizeRequested||(this.calcSizeRequested=!0,window.setTimeout((()=>{t(),this.calcSizeRequested=!1}),0))}rootOnSizeChanged(t){this.calcSize()}rootOnMouseMove(t){}filterSourceInputOnValueChanged(){const t=`${this.viewerToLog()}.filterSourceInputOnValueChanged()`,e=this.filterSourceInput.value;this.viewSyncer.sync(`${t}`,(async()=>{if(this.filterSource!==e){this.props.getProperty(Et.filterSource).set(this,e);for(let t=0;t<this.logos.length;t++)for(let e=0;e<this.chains.length;e++){const s=this.chains[e];this.logos[t][s].setOptions({[Tt.bo.filterSource]:this.filterSource})}}}))}get onRendered(){return this._onRendered}invalidate(){const t=`${this.viewerToLog()}.invalidate()`;this.viewSyncer.sync(`${t}`,(async()=>{this._onRendered.next()}))}async awaitRendered(t=5e3){await(0,yt.zg)(this.onRendered,(()=>{}),(()=>{this.invalidate()}),t)}}Mt.viewerCounter=-1;var xt=s(7983);async function Nt(t){return t.seqCol.version!==t.seqCol.temp["last-invalidated-version"]&&await(0,xt.HV)(t.seqCol,!1),await n.functions.call("Chem:getChemSpaceEmbeddings",{col:t.seqCol.temp["monomeric-mols"],methodName:t.methodName,similarityMetric:t.similarityMetric,xAxis:t.embedAxesNames[0],yAxis:t.embedAxesNames[1],options:t.options})}async function Lt(t,e){const s=Y.Cn.getOrCreate(t),n=t.toList(),r=s.getSplitter(),i=n.length;let o=36;const a=new Map;for(let e=0;e<i;e++){const s=n[e];if(null===n[e]||t.isNone(e)){n[e]=null;continue}n[e]="";const i=r(s);for(let t=0;t<i.length;t++){const s=i[t];a.has(s)||(a.set(s,String.fromCharCode(o)),o++),n[e]+=a.get(s)}}let l={};if(e===u.U.MONOMER_CHEMICAL_DISTANCE){const t=Array.from(a.keys()),e=await(0,Z.PF)(t);e.scoringMatrix.forEach(((t,s)=>{t.forEach(((t,n)=>{e.scoringMatrix[s][n]=1-t}))}));const s={};Object.entries(e.alphabetIndexes).forEach((([t,e])=>{s[a.get(t)]=e})),l={scoringMatrix:e.scoringMatrix,alphabetIndexes:s}}else if(e===u.U.NEEDLEMANN_WUNSCH){const t=Array.from(a.keys()),e=await(0,Z.PF)(t),s={};Object.entries(e.alphabetIndexes).forEach((([t,e])=>{s[a.get(t)]=e})),l={scoringMatrix:e.scoringMatrix,alphabetIndexes:s}}return{seqList:n,options:l}}async function _t(t,e){if(Y.Cn.getOrCreate(t.seqCol).isHelm())return await Nt(t);const{seqList:s,options:n}=await Lt(t.seqCol,t.similarityMetric);t.options=t.options??{},t.options.distanceFnArgs=n;const r=await c(s,t.methodName,t.similarityMetric,t.options,!0,e),o=t.embedAxesNames.map(((t,e)=>i.Column.fromFloat32Array(t,r.embedding[e])));return{distance:r.distance,coordinates:new i.ColumnList(o)}}function Pt(t){const e=r.divH([]),s=r.divV([r.divText(t.seqCol.name),r.divText(t.activityCol.name)]);return s.style.fontWeight="bold",s.style.display="flex",s.style.justifyContent="space-between",e.append(s),t.line.mols.forEach(((s,n)=>{const i=r.divText(t.activityCol.get(s).toFixed(2));i.style.display="flex",i.style.justifyContent="left",i.style.paddingLeft="30px",e.append(r.divV([r.divText(t.seqCol.get(s)),i]))})),e}function Rt(t){const e=r.div();e.append(r.divText(t.seqCol.name,{style:{fontWeight:"bold"}}));const s=new Array(2),n=new Array(2);t.line.mols.forEach(((e,r)=>{s[r]=t.seqCol.get(e),n[r]=t.activityCol.get(e)}));const i={},o=Y.Cn.getOrCreate(t.seqCol),a=o.getSplitter(),l=function(t,e,s,n){const r=document.createElement("canvas"),i=r.getContext("2d");return r.height=30,pt(i,0,0,0,30,t,e,s,!0,n),r}(a(s[0]),a(s[1]),o.units,i);return e.append(r.div(l,{style:{width:"300px",overflow:"scroll"}})),e.append(function(t){const e=r.div();if(Object.keys(t).length>0){const s=r.divV([]);s.append(r.divH([r.divText("Pos",{style:{fontWeight:"bold",width:"30px",borderBottom:"1px solid"}}),r.divText("Difference",{style:{fontWeight:"bold",borderBottom:"1px solid"}})]));for(const e of Object.keys(t))t[e].style.borderBottom="1px solid lightgray",s.append(r.divH([r.divText((parseInt(e)+1).toString(),{style:{width:"30px",borderBottom:"1px solid lightgray"}}),t[e]]));e.append(s)}return e}(i)),e.append(It("Activity delta",Math.abs(n[0]-n[1]))),e.append(It("Cliff",t.sali)),e}function It(t,e){return r.divH([r.divText(`${t}: `,{style:{fontWeight:"bold",paddingRight:"5px"}}),r.divText(e.toFixed(2))],{style:{paddingTop:"10px"}})}function Ot(t,e){const s=i.Column.string("seq_diff",t.rowCount).init((s=>`${t.get(e[0],s)}#${t.get(e[1],s)}`));s.semType="MacromoleculeDifference",s.setTag(i.TAGS.UNITS,t.col(e[0]).getTag(i.TAGS.UNITS)),s.setTag("separator",t.col(e[0]).getTag("separator")),t.columns.add(s);const n=t.plot.grid();return n.col(e[0]).visible=!1,n.col(e[1]).visible=!1,n}s(6361);class Gt extends i.JsViewer{constructor(t){super(),this.name="",this.metricsProperties=["distanceMetric","fingerprint"],this.fingerprintChoices=["Morgan","Pattern"],this.initialized=!1,this.tags=[i.TAGS.UNITS,"aligned","separator","alphabet"],this.preComputeDistanceMatrix=!1,this.renderPromise=Promise.resolve(),this.fingerprint=this.string("fingerprint",this.fingerprintChoices[0],{choices:this.fingerprintChoices}),this.limit=this.int("limit",10),this.distanceMetric=this.string("distanceMetric",h.kg[0],{choices:h.kg}),this.moleculeColumnName=this.string("moleculeColumnName"),this.name=t}init(){this.initialized=!0}detach(){this.subs.forEach((t=>t.unsubscribe()))}async onTableAttached(){if(this.init(),this.dataFrame){this.preComputeDistanceMatrix=this.dataFrame.rowCount<=22e3,this.subs.push(i.debounce(this.dataFrame.onRowsRemoved,50).subscribe((t=>this.render(!0))));const t="diversity"!==this.name;this.subs.push(i.debounce(this.dataFrame.onCurrentRowChanged,50).subscribe((e=>this.render(t)))),this.subs.push(i.debounce(this.dataFrame.selection.onChanged,50).subscribe((t=>this.render(!1)))),this.subs.push(i.debounce(r.onSizeChanged(this.root),50).subscribe((t=>this.render(!1)))),this.moleculeColumn=this.dataFrame.columns.bySemType(i.SEMTYPE.MACROMOLECULE),this.moleculeColumnName=this.moleculeColumn?.name,this.getProperty("limit").fromOptions({min:1,max:this.dataFrame.rowCount})}this.render()}onPropertyChanged(t){if(super.onPropertyChanged(t),this.initialized){if("moleculeColumnName"===t.name){const e=this.dataFrame.col(t.get(this));e.semType===i.SEMTYPE.MACROMOLECULE&&(this.moleculeColumn=e)}this.render()}}render(t=!0){this.renderPromise=this.renderPromise.then((async()=>{this.computeRequested=this.computeRequested||t,await this.renderInt(t)}))}async renderInt(t){}beforeRender(){return!(!this.initialized||this.dataFrame&&this.moleculeColumnName&&this.dataFrame.col(this.moleculeColumnName).semType!==i.SEMTYPE.MACROMOLECULE&&(n.shell.error(`${this.moleculeColumnName} is not Macromolecule type`),1))}}s(7241),s(4004),s(9943),s(4413);var Ft,Ht=s(2918),Dt=function(t,e,s,n){return new(s||(s=Promise))((function(r,i){function o(t){try{l(n.next(t))}catch(t){i(t)}}function a(t){try{l(n.throw(t))}catch(t){i(t)}}function l(t){var e;t.done?r(t.value):(e=t.value,e instanceof s?e:new s((function(t){t(e)}))).then(o,a)}l((n=n.apply(t,e||[])).next())}))};class Wt{constructor(t,e,s=!1,n){var i;this.name="",this.description="",this._isAutomatic=!1,this._autoStartFirstStep=!1,this._currentStep=0,this._isStopped=!1,this._isCancelled=!1,this._isStepProcessed=!1,this._root=r.div([],{id:"demo-script",classes:"tutorials-root tutorials-track demo-app-script"}),this._steps=[],this._mainHeader=r.panel([],"tutorials-main-header"),this._header=r.h2(""),this._headerDiv=r.divH([],"tutorials-root-header"),this._stopStartBtn=r.button(r.iconFA("pause"),(()=>this._changeStopState()),"Play / pause"),this._restartBtn=r.button(r.iconFA("redo"),(()=>this._restartScript()),"Restart"),this._nextStepBtn=r.button(r.iconFA("play"),(()=>{this._isStepProcessed||this._nextStep()}),"Next step"),this._activity=r.panel([],"tutorials-root-description"),this._progressDiv=r.divV([],"tutorials-root-progress"),this._progress=r.element("progress"),this._progressSteps=r.divText(""),this._closeBtn=r.button(r.iconFA("chevron-left"),(()=>this._closeDock()),"Back to demo"),this.name=t,this.description=e,this._isAutomatic=s,this._autoStartFirstStep=null!==(i=null==n?void 0:n.autoStartFirstStep)&&void 0!==i&&i,this._progress.max=0,this._progress.value=1,Wt.currentObject=this}get steps(){return this._steps}get stepNumber(){return this._steps.length}_addHeader(){this._createHeaderDiv(),this._createProgressDiv(),this._mainHeader.append(this._headerDiv,this._progressDiv)}_createHeaderDiv(){this._header.innerText=this.name,this._headerDiv.append(this._closeBtn),this._headerDiv.append(this._header),this._nextStepBtn.firstChild.className="grok-icon fas fa-play",this._headerDiv.append(this._isAutomatic?this._stopStartBtn:this._nextStepBtn)}_createProgressDiv(){this._progress.max=this.stepNumber,this._progressDiv.append(this._progress),this._progressSteps=r.divText(`Step: ${this._progress.value} of ${this.stepNumber}`),this._progressDiv.append(this._progressSteps)}_addDescription(){var t;this._activity.append(r.div(this.description,"tutorials-root-description"));for(let e=0;e<this.stepNumber;e++){let s=r.iconFA("clock");this._isAutomatic||0===e&&(s=r.iconFA("play",(()=>this._nextStep()),"Next step"),s.className="grok-icon fas fa-play");const n=r.div(this._steps[e].name,"grok-tutorial-entry-instruction"),i=r.div(null===(t=this._steps[e].options)||void 0===t?void 0:t.description,"grok-tutorial-step-description hidden"),o=r.divH([s,n],"grok-tutorial-entry");this._activity.append(o,i)}}_initRoot(){var t,e,s;n.shell.windows.showContextPanel=!0,n.shell.windows.showHelp=!1;const r=Array.from(n.shell.dockManager.rootNode.children)[0];this._node=n.shell.dockManager.dock(this._root,i.DOCK_TYPE.FILL,r,""),(null===(e=null===(t=r.parent.container.containerElement.firstElementChild)||void 0===t?void 0:t.lastElementChild)||void 0===e?void 0:e.classList.contains("tab-handle-list-container"))&&(null===(s=r.parent.container.containerElement.firstElementChild)||void 0===s||s.lastElementChild.remove()),this._node.container.containerElement.classList.add("tutorials-demo-script-container"),this._addHeader(),this._root.append(this._mainHeader),this._addDescription(),this._root.append(this._activity)}_nextStep(){var t,e;return Dt(this,void 0,void 0,(function*(){this._isStepProcessed=!0,this._isAutomatic||(this._nextStepBtn.classList.add("disabled"),this._nextStepBtn.firstChild.classList.add("fa-disabled"));const s=this._activity.getElementsByClassName("grok-tutorial-entry")[this._currentStep],n=this._activity.getElementsByClassName("grok-icon")[this._currentStep],i=this._activity.getElementsByClassName("grok-tutorial-step-description")[this._currentStep];n.className="grok-icon far fa-spinner-third fa-spin",i.classList.remove("hidden"),i.classList.add("visible");const o=s,a=(null===(t=this._steps[this._currentStep].options)||void 0===t?void 0:t.delay)?null===(e=this._steps[this._currentStep].options)||void 0===e?void 0:e.delay:2e3;yield this._steps[this._currentStep].func(),this._scrollTo(this._root,o.offsetTop-this._mainHeader.offsetHeight),this._isAutomatic&&(yield this._countdown(s,n,a),yield(0,yt.gw)(a));const l=r.iconFA("check");if(n.replaceWith(l),l.className="grok-icon far fa-check",this._progress.value++,this._progressSteps.innerText=`Step: ${this._progress.value} of ${this.stepNumber}`,this._currentStep++,this._isStepProcessed=!1,this._currentStep!==this.stepNumber){if(!this._isAutomatic){const t=this._activity.getElementsByClassName("grok-icon")[this._currentStep],e=r.iconFA("play",(()=>this._nextStep()),"Next step");e.className="grok-icon fas fa-play",t.replaceWith(e),this._nextStepBtn.classList.remove("disabled"),this._nextStepBtn.firstChild.classList.remove("fa-disabled")}}else this._isAutomatic?this._stopStartBtn.replaceWith(this._restartBtn):this._nextStepBtn.replaceWith(this._restartBtn)}))}_startScript(){return Dt(this,void 0,void 0,(function*(){for(let t=this._currentStep;t<this.stepNumber&&!this._isStopped&&!this._isCancelled;t++)yield this._nextStep()}))}_scrollTo(t,e){t.focus(),t.scrollTop=e}_countdown(t,e,s){return Dt(this,void 0,void 0,(function*(){const n=r.div([],"demo-script-countdown");e.classList.add("hidden");let i=s/1e3;const o=this._createSVGIndicator(i);n.append(o),t.prepend(n);const a=setInterval((()=>{i--,0===i&&(clearInterval(a),n.remove(),e.classList.remove("hidden"),e.classList.add("visible"))}),1e3)}))}_createSVGIndicator(t){const e=document.createElementNS("http://www.w3.org/2000/svg","svg"),s=document.createElementNS("http://www.w3.org/2000/svg","circle");return s.setAttributeNS(null,"cx","7"),s.setAttributeNS(null,"cy","7"),s.setAttributeNS(null,"r","6"),s.setAttributeNS(null,"style",`animation: countdown ${t}s linear infinite forwards`),e.append(s),e}_changeStopState(){const t=this._stopStartBtn.getElementsByClassName("grok-icon");t[0].className="grok-icon fas fa-play",this._isStopped=!this._isStopped,this._isStopped||(t[0].className="grok-icon fal fa-pause",this._isStepProcessed||this._startScript())}_restartScript(){n.shell.dockManager.close(this._node),n.shell.closeAll(),this._clearRoot(),this._setInitParams(),this.start()}_clearRoot(){this._root=r.div([],{id:"demo-script",classes:"tutorials-root tutorials-track demo-app-script"}),this._mainHeader=r.panel([],"tutorials-main-header"),this._header=r.h2(""),this._headerDiv=r.divH([],"tutorials-root-header"),this._activity=r.panel([],"tutorials-root-description"),this._progressDiv=r.divV([],"tutorials-root-progress"),this._progress=r.element("progress"),this._progressSteps=r.divText(""),this._progress.max=0,this._progress.value=1}_setInitParams(){this._currentStep=0,this._isStopped=!1,this._isCancelled=!1,this._stopStartBtn.getElementsByClassName("grok-icon")[0].className="grok-icon fal fa-pause",this._nextStepBtn.classList.remove("disabled")}_closeDock(){n.shell.dockManager.close(this._node),this.cancelScript()}cancelScript(){this._isCancelled=!0,Wt.currentObject=null}step(t,e,s){return this._steps[this.steps.length]={name:t,func:e,options:s},this}start(){return Dt(this,void 0,void 0,(function*(){this._initRoot(),n.shell.newView(this.name),this._isAutomatic?this._startScript():this._autoStartFirstStep&&(yield this._nextStep())}))}}Wt.currentObject=null,function(t){t.X="Embed_X",t.Y="Embed_Y"}(Ft||(Ft={})),s(1811),s(3336),s(8341);var kt=s(2568);s(525),s(9416),new class{constructor(){this.tooltipHandlerTemp="tooltip-handler.Monomer"}};class Bt extends i.GridCellRenderer{get name(){return constants.Of.MONOMER}get cellType(){return constants.Of.MONOMER}get defaultHeight(){return 15}get defaultWidth(){return 40}render(t,e,s,n,r,i,o){if(i.gridRow<0)return;MonomerTooltipHandler.getOrCreate(i.gridColumn),t.font="12px monospace",t.textBaseline="middle",t.textAlign="center";const a=(0,ct.py)(i.cell.column.getTag("alphabet")),l=i.cell.value;if(!l)return;const c=a.get(l);t.fillStyle=c,t.fillText((0,ct.GU)(l,6),e+n/2,s+r/2,n)}}class Vt extends i.Package{constructor(){super(...arguments),this._initialized=!1}get properties(){return this._properties}set properties(t){this._properties=t}get initialized(){return this._initialized}completeInit(){this._initialized=!0}handleErrorUI(t){const e=t instanceof Error?t.message:t.toString(),s=t instanceof Error?t.stack:void 0;n.shell.error(e),this.logger.error(e,void 0,s)}}class Ut extends i.Widget{constructor(t){super(r.div([],{}));const e=Object.assign({},...t.map((t=>({[t.name]:t}))));this.maxMonomerLengthProp=e.MaxMonomerLength,this.tooltipWebLogo=e.TooltipWebLogo,this.defaultSeparator=e.DefaultSeparator}async init(){const t=r.intInput("Max monomer length",re.properties.MaxMonomerLength,(t=>{re.properties.MaxMonomerLength=t})),e=r.boolInput("Tooltip WebLogo",re.properties.TooltipWebLogo,(t=>{re.properties.TooltipWebLogo=t})),s=r.choiceInput("Default Separator",re.properties.DefaultSeparator,[".","/","-"],(t=>{re.properties.DefaultSeparator=t}));this.root.appendChild(r.form([t,e,s]))}}s(8770);class $t extends i.Widget{constructor(t){super(r.divV([])),this.viewed=!1,this.seqCol=t}async init(){const t=Y.Cn.getOrCreate(this.seqCol),e=re.properties.TooltipWebLogo,s=this.seqCol.getTag(wt.DX.tooltipWebLogo);!1===e||["false","off","disable","disabled"].includes(s)||(this.wlViewer=await this.seqCol.dataFrame.plot.fromType("WebLogo",{sequenceColumnName:this.seqCol.name,backgroundColor:0,positionHeight:"Entropy",positionWidth:t.getAlphabetIsMultichar()?24:16,fixWidth:!0,fitArea:!1}),this.wlViewer.root.style.height="50px",this.root.appendChild(this.wlViewer.root),this.root.style.width="100%")}}var Yt=s(922);class Kt{constructor(t,e){this.helmColumn=t,this.df=e,this.helmColumn=t}async convertToSmiles(){const t=await this.getSmilesList(),e=this.df.columns.getUnusedName(`smiles(${this.helmColumn.name})`);return i.Column.fromStrings(e,t.map((t=>null===t?"":t)))}async getSmilesList(){return(await this.convertToMolfileV2KColumn()).toList().map((t=>i.chem.convert(t,i.chem.Notation.MolBlock,i.chem.Notation.Smiles)))}async convertToRdKitBeautifiedMolfileColumn(){const t=await this.getSmilesList(),e=await n.functions.call("Chem:getRdKitModule"),s=t.map((t=>{if(""===t)return null;const s=e.get_mol(t);return s?(s.normalize_depiction(1),s.straighten_depiction(!0),s):null})),r=this.df.columns.getUnusedName(`molfile(${this.helmColumn.name})`);return i.Column.fromStrings(r,s.map((t=>null===t?"":t.get_molblock())))}async convertToMolfileV2KColumn(){const t=(await this.getPolymerGraphColumn()).toList().map(((t,e)=>{const s=this.helmColumn.get(e);if(!s)return"";let n="";try{n=this.getPolymerMolfile(s,t)}catch(t){const[e,s]=(0,j.yf)(t);re.logger.error(e,void 0,s)}finally{return n}})),e=this.df.columns.getUnusedName(`molfileV2K(${this.helmColumn.name})`);return i.Column.fromList("string",e,t)}async getPolymerGraphColumn(){return await n.functions.call("HELM:getMolfiles",{col:this.helmColumn})}getPolymerMolfile(t,e){const s=new Zt(e),n=new se(t);return s.monomerSymbols.forEach(((t,e)=>{const r=s.getMonomerShifts(e);n.addMonomer(t,e,r)})),n.compileToMolfile()}}class Zt{constructor(t){this.molfileHandler=Yt._.getInstance(t)}get monomerSymbols(){return this.molfileHandler.atomTypes}getMonomerShifts(t){return{x:this.molfileHandler.x[t],y:this.molfileHandler.y[t]}}}class qt{constructor(t,e){this.capGroupElements=[];const s=Ht.NT.instance.getBioLib().getMonomer(e,t);if(!s)throw new Error(`Monomer ${t} is not found in the library`);this.molfileWrapper=new Qt(s.molfile,t),this.capGroupElements=s.rgroups.map((t=>(t.capGroupSmiles||t.capGroupSMILES).replace(/(\[|\]|\*|:|\d)/g,"")))}shiftCoordinates(t){this.molfileWrapper.shiftCoordinates(t)}getAtomLines(){return this.molfileWrapper.getAtomLines()}getBondLines(){return this.molfileWrapper.getBondLines()}removeBondedRGroups(t){this.molfileWrapper.removeRGroups(t)}capTrailingRGroups(){this.molfileWrapper.capRGroups(this.capGroupElements)}replaceRGroupWithAttachmentAtom(t,e){this.molfileWrapper.replaceRGroupWithAttachmentAtom(t,e)}getAttachmentAtomByRGroupId(t){return this.molfileWrapper.getAttachmentAtomByRGroupId(t)}deleteBondLineWithSpecifiedRGroup(t){this.molfileWrapper.deleteBondLineWithSpecifiedRGroup(t)}shiftBonds(t){this.molfileWrapper.shiftBonds(t)}}class zt{constructor(t,e,s){this.atoms=e,this.bonds=s,this.rGroupBondPositionMap=new Map,this.rGroupIdToAtomicIndexMap=this.getRGroupIdToAtomicIdxMap(t)}getAtomicIdx(t){const e=this.rGroupIdToAtomicIndexMap.get(t);return void 0===e?null:e}removeRGroupsFromAtomBlock(t){t.forEach((t=>{if(void 0===this.rGroupIdToAtomicIndexMap.get(t))throw new Error(`Cannot find atomic index for R group ${t}`)}));const e=Array.from(this.rGroupIdToAtomicIndexMap.entries()).filter((([e,s])=>t.includes(e))).map((([t,e])=>e));this.atoms.deleteAtoms(e)}removeRGroups(t){this.removeRGroupsFromAtomBlock(t),t.forEach((t=>{const e=this.replaceRGroupInBondsByDummy(t);this.rGroupBondPositionMap.set(t,e)}))}replaceRGroupInBondsByDummy(t){const e=this.rGroupIdToAtomicIndexMap.get(t);if(this.rGroupBondPositionMap.has(t))throw new Error(`R group ${t} is already handled`);const s=this.bonds.getPositionsInBonds(e+1);if(0===s.length)throw new Error(`Cannot find position for R group ${t}`);if(s.length>1)throw new Error(`More than one position for R group ${t}`);const n=s[0];return this.bonds.replacePositionsInBondsByDummy([n]),this.bonds.removeAtomIdFromBonds(e+1),this.removeRGroupFromAtomicIdxMap(t,e),n}removeRGroupFromAtomicIdxMap(t,e){this.rGroupIdToAtomicIndexMap.delete(t);for(const[t,s]of this.rGroupIdToAtomicIndexMap)s>e&&this.rGroupIdToAtomicIndexMap.set(t,s-1)}getRGroupIdToAtomicIdxMap(t){const e=new Map;t.filter((t=>t.startsWith("M RGP"))).forEach((t=>{const s=function(t){const e=t.split(/\s+/).filter((t=>t)).slice(3).map((t=>parseInt(t))),s=new Array(e.length/2);for(let t=0;t<e.length;t+=2)s[t/2]=[e[t+1],e[t]-1];return s}(t);for(const[t,n]of s){if(e.has(t))throw new Error(`R group ${t} is already in the map`);e.set(t,n)}}));const s=t.map(((t,e)=>{if(t.startsWith("A "))return e})).filter((t=>void 0!==t)),n=s.map((e=>t[e])),r=s.map((e=>t[e+1]));n.forEach(((t,s)=>{const n=parseInt(t.split(/\s+/)[1])-1,i=parseInt(r[s].substring(1));if(e.has(i))throw new Error(`R group ${i} is already in the map`);e.set(i,n)}));const i=this.atoms.getRGroupAtomicIndices().filter((t=>!Array.from(e.values()).includes(t)));if(0!==i.length)throw new Error(`Unaccounted R group indices: ${i}`);return e}deleteBondLineWithSpecifiedRGroup(t){const e=this.rGroupBondPositionMap.get(t);if(!e)throw new Error(`Cannot find position for R group ${t}`);const{bondLineIdx:s}=e;this.bonds.deleteBondLines([s]),this.rGroupBondPositionMap.delete(t),this.rGroupIdToAtomicIndexMap.delete(t),this.rGroupBondPositionMap.forEach((t=>{t.bondLineIdx>s&&(t.bondLineIdx-=1)}))}replaceRGroupWithAttachmentAtom(t,e){const s=this.rGroupBondPositionMap.get(t);if(!s)throw new Error(`Cannot find position for R group ${t}`);const{bondLineIdx:n,nodeIdx:r}=s;this.bonds.bondedAtoms[n][r]=e}getAttachmentAtomIdByRGroupId(t){const e=this.rGroupBondPositionMap.get(t);if(!e)throw new Error(`Cannot find position for R group ${t}`);const{bondLineIdx:s,nodeIdx:n}=e;return this.bonds.bondedAtoms[s][(n+1)%2]}capRGroups(t){this.rGroupIdToAtomicIndexMap.forEach(((e,s)=>{const n=t[s-1];"H"===n?(this.removeRGroups([s]),this.deleteBondLineWithSpecifiedRGroup(s)):this.atoms.replaceElementSymbol(e,n)}))}}class Xt{constructor(t){this.bondedPairs=[],this.rawBondLines=[],this.rawBondLines=t,this.bondedPairs=this.rawBondLines.map((t=>[parseInt(t.substring(0,3)),parseInt(t.substring(3,6))]))}getBondLines(){return this.bondedPairs.map(((t,e)=>{if(t.some((t=>-1===t)))throw new Error(`Bonded pair ${t} contains -1`);return`${t[0].toString().padStart(3," ")}${t[1].toString().padStart(3," ")}${this.rawBondLines[e].substring(6)}`}))}get bondedAtoms(){return this.bondedPairs}deleteBondLines(t){this.rawBondLines=this.rawBondLines.filter(((e,s)=>!t.includes(s))),this.bondedPairs=this.bondedPairs.filter(((e,s)=>!t.includes(s)))}getPositionsInBonds(t){const e=[];return this.bondedPairs.forEach(((s,n)=>{s.forEach(((s,r)=>{s===t&&e.push({bondLineIdx:n,nodeIdx:r})}))})),e}replacePositionsInBondsByDummy(t,e){void 0===e&&(e=-1),t.forEach((t=>{const{bondLineIdx:s,nodeIdx:n}=t;this.bondedPairs[s][n]=e}))}removeAtomIdFromBonds(t){this.bondedPairs=this.bondedPairs.map((e=>e.map((e=>e>t?e-1:e))))}shift(t){this.bondedPairs=this.bondedPairs.map((e=>e.map((e=>e+t))))}}class jt{constructor(t){this.coordinates=[],this.rawAtomLines=[],this.rawAtomLines=t,this.coordinates=this.rawAtomLines.map((t=>({x:parseFloat(t.substring(0,10)),y:parseFloat(t.substring(10,20))})))}get atomCoordinates(){return this.coordinates}get atomLines(){return this.rawAtomLines.map(((t,e)=>{const s=this.coordinates[e];return`${s.x.toFixed(4).padStart(10," ")}${s.y.toFixed(4).padStart(10," ")}${t.substring(20)}`}))}replaceElementSymbol(t,e){this.rawAtomLines[t]=this.rawAtomLines[t].replace("R#",e)}deleteAtoms(t){this.coordinates=this.coordinates.filter(((e,s)=>!t.includes(s))),this.rawAtomLines=this.rawAtomLines.filter(((e,s)=>!t.includes(s)))}shift(t){this.coordinates=this.coordinates.map((e=>{const s=e.x+t.x,n=e.y+t.y;if(isNaN(s)||isNaN(n))throw new Error(`Cannot shift coordinates by ${t.x}, ${t.y}`);return{x:s,y:n}}))}rotate(t){this.coordinates=this.coordinates.map((e=>{const s=e.x,n=e.y,r=s*Math.cos(t)-n*Math.sin(t),i=s*Math.sin(t)+n*Math.cos(t);if(isNaN(r)||isNaN(i))throw new Error(`Cannot rotate coordinates by ${t}`);return{x:r,y:i}}))}getRGroupAtomicIndices(){return this.rawAtomLines.map(((t,e)=>{if(t.includes("R#"))return e})).filter((t=>void 0!==t))}}class Qt{constructor(t,e){this.monomerSymbol=e;const s=t.split("\n"),n=parseInt(s[3].substring(0,3)),r=parseInt(s[3].substring(3,6)),i=s.slice(4,4+n);this.atoms=new jt(i);const o=s.slice(4+n,4+n+r);this.bonds=new Xt(o),this.rGroups=new zt(s,this.atoms,this.bonds),this.shiftMonomerToDefaultPosition()}deleteBondLineWithSpecifiedRGroup(t){this.rGroups.deleteBondLineWithSpecifiedRGroup(t)}shiftCoordinates(t){this.atoms.shift(t)}rotateCoordinates(t){this.atoms.rotate(t)}getBondLines(){return this.bonds.getBondLines()}getAtomLines(){return this.atoms.atomLines}removeRGroups(t){this.rGroups.removeRGroups(t)}replaceRGroupWithAttachmentAtom(t,e){this.rGroups.replaceRGroupWithAttachmentAtom(t,e)}getAttachmentAtomByRGroupId(t){return this.rGroups.getAttachmentAtomIdByRGroupId(t)}shiftR1GroupToOrigin(){const t=this.rGroups.getAtomicIdx(1);if(null===t)throw new Error(`Cannot find R1 group for monomer ${this.monomerSymbol}`);const{x:e,y:s}=this.atoms.atomCoordinates[t];this.atoms.shift({x:-e,y:-s})}alignR2AlongX(){const t=this.rGroups.getAtomicIdx(2);if(null===t)throw new Error(`Cannot find R2 group for monomer ${this.monomerSymbol}`);const e=this.atoms.atomCoordinates[t],s=e.y/e.x,n=Math.atan(s);if(isNaN(n))throw new Error(`Cannot calculate angle for R2 group for monomer ${this.monomerSymbol}`);this.rotateCoordinates(-n)}shiftMonomerToDefaultPosition(){this.shiftR1GroupToOrigin(),null!==this.rGroups.getAtomicIdx(2)&&this.alignR2AlongX()}shiftBonds(t){this.bonds.shift(t)}capRGroups(t){this.rGroups.capRGroups(t)}}class Jt{constructor(t){this.simplePolymer=t,this.polymerType=this.getPolymerType(),this.idx=this.getIdx();const{monomers:e,monomerTypes:s}=this.getMonomerSymbolsAndTypes();this.monomers=e,this.monomerTypes=s}get id(){return this.polymerType+this.idx.toString()}getPolymerType(){const t=new RegExp("(PEPTIDE|RNA)[0-9]+{"),e=this.simplePolymer.match(t);if(!e)throw new Error(`Unsupported polymer type in ${this.simplePolymer}`);return e[1]}getIdx(){const t=new RegExp(`${this.polymerType}([0-9]+){`),e=this.simplePolymer.match(t);if(!e)throw new Error(`Cannot parse simple polymer id from ${this.simplePolymer}`);return parseInt(e[1])}getMonomerSymbolsAndTypes(){const t=new RegExp(`${this.polymerType}${this.idx}{|}`,"g"),e=this.simplePolymer.replace(t,"").split("."),s=[],n=[];return e.forEach((t=>{const e=t.split(/\(|\)/).map((t=>t.replace(/[\[\]]/g,"")));s.push(...e);const r=e.map(((t,e)=>e%2==0?0:1));n.push(...r)})),{monomers:s,monomerTypes:n}}getBondData(){const t=[],e=this.monomerTypes.map(((t,e)=>{if(0===t)return e})).filter((t=>void 0!==t)),s=this.monomerTypes.map(((t,e)=>{if(1===t)return e})).filter((t=>void 0!==t));for(let s=0;s<e.length-1;s++){const n=e[s],r=e[s+1];t.push([{monomerIdx:n,rGroupId:2},{monomerIdx:r,rGroupId:1}])}for(let e=0;e<s.length;e++){const n=s[e],r=n-1;t.push([{monomerIdx:r,rGroupId:3},{monomerIdx:n,rGroupId:1}])}return t}}class te{constructor(t){const e=t.split("|");e.forEach((t=>this.validateConnectionItem(t))),this.connectionItems=e}validateConnectionItem(t){const e="(PEPTIDE|RNA)",s=new RegExp(`${e}[0-9]+,${e}[0-9]+,[0-9]+:R[0-9]+-[0-9]+:R[0-9]+`,"g");if(!t.match(s))throw new Error(`Cannot parse connection item from ${t}`)}getConnectionData(){const t=[];return this.connectionItems.forEach((e=>{const s=[],n=e.split(",");n[2].split("-").forEach(((t,e)=>{const r=n[e],i=t.split(":"),o={monomerIdx:parseInt(i[0])-1,rGroupId:parseInt(i[1].slice(1))};s.push({polymerId:r,bond:o})})),t.push(s)})),t}}class ee{constructor(t){this.helm=t;const e=this.helm.split("$"),s=e[0].split("|");this.simplePolymers=s.map((t=>new Jt(t))),""!==e[1]&&(this.connectionList=new te(e[1])),this.bondData=this.getBondData()}toString(){return this.helm}getPolymerTypeByMonomerIdx(t){return this.getSimplePolymerByMonomerIdx(t).polymerType}getSimplePolymerByMonomerIdx(t){const e=this.getMonomerIdxShifts(),s=Object.values(e).sort(((t,e)=>t-e)).find((e=>t>=e));if(void 0===s)throw new Error(`Cannot find simple polymer for monomer ${t}`);const n=Object.keys(e).find((t=>e[t]===s));return this.simplePolymers.find((t=>t.id===n))}shiftBondMonomerIds(t,e){e.forEach((e=>{e.forEach((e=>{e.monomerIdx+=t}))}))}getMonomerIdxShifts(){const t={};let e=0;return this.simplePolymers.forEach((s=>{t[s.id]=e,e+=s.monomers.length})),t}getBondData(){const t=this.getMonomerIdxShifts(),e=[];return this.simplePolymers.forEach((s=>{const n=s.getBondData(),r=t[s.id];this.shiftBondMonomerIds(r,n),e.push(...n)})),this.connectionList&&this.connectionList.getConnectionData().forEach((s=>{const n=[];s.forEach((e=>{const s=t[e.polymerId],r=e.bond;r.monomerIdx+=s,n.push(r)})),e.push(n)})),e}}class se{constructor(t){this.monomerWrappers=[],this.helm=new ee(t),this.bondedRGroupsMap=new Map,this.helm.bondData.forEach((t=>{t.forEach((t=>{const e=t.monomerIdx,s=t.rGroupId;this.bondedRGroupsMap.get(e)||this.bondedRGroupsMap.set(e,[]),this.bondedRGroupsMap.get(e).push(s)}))}))}addMonomer(t,e,s){const n=this.helm.getPolymerTypeByMonomerIdx(e),r=new qt(t,n);r.shiftCoordinates(s),this.monomerWrappers.push(r)}removeRGroups(){this.monomerWrappers.forEach(((t,e)=>{this.bondedRGroupsMap.has(e)&&t.removeBondedRGroups(this.bondedRGroupsMap.get(e)),t.capTrailingRGroups()}))}getAtomNumberShifts(){const t=[];let e=0;return this.monomerWrappers.forEach((s=>{t.push(e),e+=s.getAtomLines().length})),t}restoreBondsBetweenMonomers(){this.helm.bondData.forEach((t=>{const e=t.map((t=>t.monomerIdx)),s=t.map((t=>t.rGroupId)),n=e.map((t=>this.monomerWrappers[t])),r=n[1].getAttachmentAtomByRGroupId(s[1]);n[0].replaceRGroupWithAttachmentAtom(s[0],r),n[1].deleteBondLineWithSpecifiedRGroup(s[1])}))}compileToMolfile(){const t=[],e=[];this.removeRGroups();const s=this.getAtomNumberShifts();this.monomerWrappers.forEach(((t,e)=>{t.shiftBonds(s[e])})),this.restoreBondsBetweenMonomers(),this.monomerWrappers.forEach((s=>{t.push(...s.getAtomLines()),e.push(...s.getBondLines())}));const n=t.length;if(n>999)throw new Error(`Atom count in polymer ${this.helm.toString()} is ${n} and exceeds 999`);const r=e.length;return["\nDatagrok\n",`${n.toString().padStart(3," ")}${r.toString().padStart(3," ")} 0 0 1 0 0 V2000`,t.join("\n"),e.join("\n"),"M END\n"].join("\n")}}i.DataFrame.fromCsv("seq,value\nATCCGTCGT,0.5\nTGTTCGTCA,0.4\nATGGTCGTA,0.7\nATCCGTGCA,0.1"),["1","1A","1C","2","4","4A","4B","5","6"].join(ct.CI);var ne=s(8601);const re=new Vt,ie="bypassLargeDataWarning";function oe(){return Ht.NT.instance}function ae(){return Ht.NT.instance.getBioLib()}async function le(t,e,a,l,c,u,m){if(!(0,kt.n)(e,"Activity Cliffs"))return;const d=function(t){const e=["Embed_X","Embed_Y"],s=t.columns.names().filter((t=>t.includes(e[0]))).length+1;return e.map((t=>`${t}_${s}`))}(t),p={units:e.getTag(i.TAGS.UNITS),aligned:e.getTag("aligned"),separator:e.getTag("separator"),alphabet:e.getTag("alphabet")};let g=Lt;const f=Y.Cn.getOrCreate(e),y=u,w=e;let C=_t;f.isHelm()&&(C=Nt,g=async(t,e)=>{await(0,xt.HV)(t,!1);const s=t.temp["monomeric-mols"];return{seqList:(await n.functions.call("Chem:getMorganFingerprints",{molColumn:s})).toList().map((t=>P.Z.fromUint32Array(t.length,new Uint32Array(t.getBuffer().buffer)))),options:{}}});const b=async()=>await async function(t,e,o,a,l,c,u,m,d,p,g,f,y,w,C,b,T,A){R++;const S=u/100,E=o??e;let v=!1,M=!1;const x={};let N,L;const $={seqCol:E,methodName:d,similarityMetric:m,embedAxesNames:a,options:{...T??{},[O]:void 0}},{distance:Y,coordinates:K}=await f($);for(const e of K)t.columns.add(e);let Z;if(e.semType===i.SEMTYPE.MOLECULE){const t=(await n.functions.call("Chem:getMorganFingerprints",{molColumn:E})).toList().map((t=>new P.Z(new Uint32Array(t.getBuffer().buffer),t.length))),e=1-(0,h.eo)(S),s=await(new _._).calc(t,m,e);Z=await V(s,0,c)}else{let t=e.toList(),s={};if(T?.[O]){const{seqList:n,options:r}=await T[O](e,m);t=n,s=r}const n=await(new _._).calc(t,m,S,s);Z=await V(n,0,c)}const q=function(t,e,s,n,r,o){const a=new Array(t).fill(0);for(let t=0;t!=s.length;++t)e[t]!=1/0&&(o.get(s[t])>o.get(n[t])?a[s[t]]+=e[t]:a[n[t]]+=e[t]);return i.Column.fromList("double",`sali_${r[0].substring(r[0].lastIndexOf("_"))}`,a)}(E.length,Z.saliVals,Z.n1,Z.n2,a,c);t.columns.add(q);const z=function(t,e){const s="containsCliff",n=t.columns.names().filter((t=>t.includes(s))).length+1,r=`${s}_${n}`;return i.Column.bool(r,t.rowCount).init((t=>e.has(t)))}(t,Z.cliffsMolIds);t.columns.add(z);const X=function(t){const e=t.filter((t=>t!==1/0)),s=e.reduce(((t,e)=>Math.min(t,e)),Number.MAX_VALUE),n=e.reduce(((t,e)=>Math.max(t,e)),s);return{max:n,min:s}}(Z.saliVals),j=.8/(X.max-X.min),Q=n.shell.getTableView(t.name);Q.grid.columns.byName(z.name).visible=!1;const J=Q.addViewer(i.VIEWER.SCATTER_PLOT,{xColumnName:a[0],yColumnName:a[1],size:q.name,color:c.name,showXSelector:!1,showYSelector:!1,showSizeSelector:!1,showColorSelector:!1,markerMinSize:5,markerMaxSize:25,title:l}),tt=J.getInfo().canvas,et=function(t,e,s,n,r){const o=new Array(t.n1.length).fill(null);for(let e=0;e<t.n1.length;e++){const s=t.n1[e],n=t.n2[e];o[e]={id:e,mols:[s,n],selected:!1,a:[],b:[]}}const a=i.DataFrame.create(o.length);return k.forEach(((t,s)=>{a.columns.addNewString(t).init((t=>e.get(o[t].mols[s]))),function(t,e){Object.keys(e).forEach((s=>{t.tags[s]=e[s]}))}(a.col(t),r),a.col(t).semType=n})),a.columns.addNewFloat(F).init((t=>Math.abs(s.get(o[t].mols[0])-s.get(o[t].mols[1])))),a.columns.addNewInt(W).init((t=>t)),a.columns.addNewFloat(H).init((e=>t.saliVals[e])),a.columns.addNewFloat(D).init((e=>t.simVals[e])),a.name=`${I}${R}`,{lines:o,linesDf:a}}(Z,e,c,p,g),st=b?b(et.linesDf,k).sort([H],[!1]):et.linesDf.plot.grid().sort([H],[!1]);t.temp[".cliffsDfGrid"]=st;const nt=r.button(`${et.linesDf.rowCount} cliffs`,(()=>{Q.dockManager.dock(st,"down",null,"Activity cliffs",A??.2)}));nt.classList.add("scatter_plot_link","cliffs_grid"),J.root.append(nt);const rt=r.switchInput("Show only cliffs",!1,(()=>{rt.value?(J.dataFrame.setTag(B,z.name),t.rows.match({[z.name]:!0}).filter(),G.next(z.name)):(J.dataFrame.setTag(B,""),t.filter.setAll(!0,!0),G.next(""))}));rt.root.classList.add("scatter_plot_link","show_only_cliffs"),J.root.append(rt.root),G.subscribe((t=>{rt.enabled=""===t||t===z.name}));const it=n.events.onViewerClosed.subscribe((t=>{t.args.viewer===J&&(Q.dockManager.close(st.root),it.unsubscribe(),Q.subs=Q.subs.filter((t=>t!==it)))}));return Q.subs.push(it),et.linesDf.onCurrentCellChanged.subscribe((()=>{v=!0;const s=et.linesDf.currentCol&&et.linesDf.currentCol.name===k[1]?1:0,i=-1!==et.linesDf.currentRowIdx?et.lines[et.linesDf.currentRowIdx]:null;J.dataFrame.currentRowIdx=i?i.mols[s]:-1,J.dataFrame.filter.set(0,!et.lines[0].selected),J.dataFrame.filter.set(0,et.lines[0].selected),i&&setTimeout((()=>{!function(t,e,s,i,o,a,l,c){const h=e.getPane("Cliff Details");r.empty(h.root);const u=c({cashedData:s,line:i,df:t,seqCol:o,activityCol:a,sali:l});h.root.append(u),setTimeout((()=>{n.shell.o=e.root}),500)}(t,N,x,i,e,c,et.linesDf.get(H,i.id),C);const s=J.dataFrame.getSortedOrder(Q.grid.sortByColumns,Q.grid.sortTypes);Q.grid.scrollToCell(e.name,s.indexOf(J.dataFrame.currentRowIdx))}),1e3)})),et.linesDf.onSelectionChanged.subscribe((e=>{if(!1===et.linesDf.selection.anyTrue)et.lines.forEach((t=>{t.selected=!1}));else if(-1!==et.linesDf.mouseOverRowIdx){const t=et.lines[et.linesDf.mouseOverRowIdx];t.selected=!t.selected}setTimeout((()=>{const e=i.BitSet.create(t.rowCount);et.lines.forEach((t=>{t.selected&&t.mols.forEach((s=>{e.set(s,t.selected,!0)}))})),t.selection.copyFrom(e),Q.grid.invalidate()}),300)})),t.onSelectionChanged.subscribe((e=>{M?M=!1:!1===t.selection.anyTrue&&"number"==typeof e&&(et.lines.forEach((t=>{t.selected=!1})),st.dataFrame.selection.setAll(!1,!1),st.invalidate())})),tt.addEventListener("mousemove",(function(n){clearTimeout(L),L=s.g.setTimeout((function(){const s=U(n,tt,et.lines);s&&-1===t.mouseOverRowIdx&&r.tooltip.show(w({cashedData:x,line:s,df:t,seqCol:e,activityCol:c}),n.clientX,n.clientY)}),500)})),tt.addEventListener("mousedown",(function(e){M=!0;const s=U(e,tt,et.lines);if(s&&-1===t.mouseOverRowIdx){e.ctrlKey?(s.selected=!s.selected,et.linesDf.selection.set(s.id,s.selected)):et.linesDf.currentRowIdx!==s.id&&(et.linesDf.currentRowIdx=s.id,t.currentRowIdx=s.mols[0],t.filter.set(0,!et.lines[0].selected),t.filter.set(0,et.lines[0].selected));const n=et.linesDf.getSortedOrder(st.sortByColumns,st.sortTypes);st.scrollToCell(k[0],n.indexOf(s.id))}})),J.onEvent("d4-before-draw-scene").subscribe((e=>{const s=function(t,e,s,n,r,i,o){const a=n.lines,l=t.getInfo().canvas.getContext("2d"),c=t.dataFrame.columns.byName(e),h=t.dataFrame.columns.byName(s);for(let e=0;e<a.length;e++){const s=t.worldToScreen(c.get(a[e].mols[0]),h.get(a[e].mols[0])),u=t.worldToScreen(c.get(a[e].mols[1]),h.get(a[e].mols[1]));a[e].a=[s.x,s.y],a[e].b=[u.x,u.y];const m=new Path2D;m.moveTo(a[e].a[0],a[e].a[1]);const d=a[e].selected?"255,255,0":"0,128,0",p=r[e]===1/0?1:.2+(r[e]-o)*i;l.strokeStyle=`rgba(${d},${p})`,l.lineWidth=a[e].id===n.linesDf.currentRowIdx?3:1,m.lineTo(a[e].b[0],a[e].b[1]),l.stroke(m)}return a}(J,a[0],a[1],et,Z.saliVals,j,X.min);if(v){const t=s[et.linesDf.currentRowIdx];setTimeout((()=>{const{zoomLeft:e,zoomRight:s,zoomTop:n,zoomBottom:r}=function(t,e,s,n,r,i){const o=Math.abs(s-r),a=Math.abs(n-i),l=t/o,c=e/a,h=Math.min(l,c),u=t/h*5,m=e/h*5,d=(s<r?s:r)+o/2-u/2,p=(n>i?n:i)-a/2+m/2;return{zoomLeft:d,zoomRight:d+u,zoomTop:p,zoomBottom:p-m}}(J.viewport.width,J.viewport.height,J.dataFrame.get(a[0],t.mols[0]),J.dataFrame.get(a[1],t.mols[0]),J.dataFrame.get(a[0],t.mols[1]),J.dataFrame.get(a[1],t.mols[1]));J.zoom(e,n,s,r)}),300),v=!1}rt.value?t.rows.match({[z.name]:!0}).filter():!0===rt.enabled&&t.filter.setAll(!0,!1)})),J.addProperty("similarityLimit","double",S),N=function(){const t=r.accordion(),e=r.element("i");return e.className="grok-icon svg-icon svg-view-layout",t.addTitle(r.span([e,r.label("Activity cliffs")])),t.addPane("Cliff Details",(()=>r.divText("Cliff has not been selected")),!0),n.shell.o=t.root,t}(),J}(t,w,null,d,"Activity cliffs",a,l,y,c,i.SEMTYPE.MACROMOLECULE,p,C,0,Pt,Rt,Ot,{...m??{},[O]:g}),T=c===o.AL.UMAP?2e5:2e4,A=c===o.AL.UMAP?5e3:2e3;if(t.rowCount>T)return void n.shell.warning(`Too many rows, maximum for sequence activity cliffs is ${T}`);const S=i.TaskBarProgressIndicator.create("Running sequence activity cliffs ...");return new Promise(((e,s)=>{t.rowCount>A&&!m?.[ie]?r.dialog().add(r.divText("Activity cliffs analysis might take several minutes.\n Do you want to continue?")).onOK((async()=>{b().then((t=>e(t))).catch((t=>s(t)))})).onCancel((()=>{e(void 0)})).show():b().then((t=>e(t))).catch((t=>s(t)))})).catch((t=>{const[e,s]=(0,j.yf)(t);throw re.logger.error(e,void 0,s),t})).finally((()=>{S.close()}))}async function ce(t,e,o,a,h,u,g,f){if((0,kt.n)(e,"Sequence Space"))return u||(u=i.Func.find({name:"macromoleculePreprocessingFunction",package:"Bio"})[0]),await async function(t,e,o,a,h,u=!0,g=!1,f={},y={}){const w={showXAxis:!1,showYAxis:!1,showXSelector:!1,showYSelector:!1},C=async()=>{const C=i.TaskBarProgressIndicator.create(`Initializing ${y.scatterPlotName??"dimensionality reduction"} ...`);let b;try{const T=function(t){const e=["Embed_X","Embed_Y"],s=t.columns.names().filter((t=>t.includes(e[0]))).length+1;return e.map((t=>`${t}_${s}`))}(t);function A(e,s,o){let a=null,l=null;t.columns.names().includes(T[0])?(a=t.columns.byName(T[0]),l=t.columns.byName(T[1])):(a=t.columns.add(i.Column.float(T[0],t.rowCount)),l=t.columns.add(i.Column.float(T[1],t.rowCount)),u&&!b&&(b=n.shell.tableView(t.name).scatterPlot({...w,x:T[0],y:T[1],title:y.scatterPlotName??"Embedding space"}))),y[m]&&(b?.root&&r.setUpdateIndicator(b.root,!1),a.init((t=>o[0]?o[0][t]:void 0)),l.init((t=>o[1]?o[1][t]:void 0)));const c=e/s*100;C.update(c,`Running ${y.scatterPlotName??"dimensionality reduction"}... ${c.toFixed(0)}%`)}async function S(){t.columns.add(i.Column.float(T[0],t.rowCount)),t.columns.add(i.Column.float(T[1],t.rowCount));let s=null;u&&(b=n.shell.tableView(t.name).scatterPlot({...w,x:T[0],y:T[1],title:y.scatterPlotName??"Embedding space"}),r.setUpdateIndicator(b.root,!0));const m=n.events.onViewerClosed.subscribe((t=>{const e=t.args.viewer;e?.getOptions()?.look?.title&&b?.getOptions()?.look?.title&&e?.getOptions()?.look?.title===b?.getOptions()?.look?.title&&(n.events.fireCustomEvent(l,{}),m.unsubscribe(),s?.(),C.close())})),p=new Promise((async(t,n)=>{try{s=t;const n=h.inputs[0].name,r=h.inputs[1].name,{entries:i,options:l}=await h.apply({[n]:e,[r]:a});(f=f??{}).distanceFnArgs=l,t(await c(i,o,a,f,!0,y[d.sS]?void 0:A))}catch(t){n(t)}})),g=await p;return C.close(),m.unsubscribe(),g}const E=await S();if(g&&E&&E.embedding){const v=i.TaskBarProgressIndicator.create("Clustering embeddings ...");try{const M=await async function(t,e,n,r){const i=new URL(s(1906),s.b).href,o=i.substring(0,i.lastIndexOf("/")+1)+"wasmDbscan.wasm";let a;try{a=await(0,p.g)({locateFile:()=>o})}catch(t){try{a=await(0,p.g)({locateFile:()=>i})}catch(t){throw console.error(t),new Error("Unable to load wasm file for dbscan")}}const l=a.cwrap("dbscan","null",["number","number","number","number","number","number"]),c=Float32Array.BYTES_PER_ELEMENT*t.length,h=a._malloc(c),u=a._malloc(c),m=new Uint8Array(a.HEAPU8.buffer,h,c);m.set(new Uint8Array(t.buffer));const d=new Uint8Array(a.HEAPU8.buffer,u,c);d.set(new Uint8Array(e.buffer));const g=a._malloc(c),f=new Uint8Array(a.HEAPU8.buffer,g,c);l(h,u,t.length,n,r,g);const y=new Int32Array(f.buffer,f.byteOffset,t.length);return a._free(m.byteOffset),a._free(d.byteOffset),a._free(f.byteOffset),y}(E.embedding[0],E.embedding[1],f.dbScanEpsilon??.01,f.dbScanMinPts??4),x=t.columns.getUnusedName("Cluster");t.columns.addNewString(x).init((t=>M[t].toString())),b&&(b.props.colorColumnName=x)}catch(N){n.shell.error("Clustering embeddings failed"),console.error(N)}finally{v.close()}}if(E&&u&&b){r.setUpdateIndicator(b.root,!1);const L=t.columns.byName(T[0]),_=t.columns.byName(T[1]);return L.init((t=>E.embedding[0][t])),_.init((t=>E.embedding[1][t])),b}}catch(P){n.shell.error("Dimensionality reduction failed"),console.error(P),C.close(),b&&r.setUpdateIndicator(b.root,!1)}};return new Promise((async(e,s)=>{try{if(y.fastRowCount&&t.rowCount>y.fastRowCount&&!y[d.sS])r.dialog().add(r.divText("Analysis might take several minutes. Do you want to continue?")).onOK((async()=>{try{const t=await C();e(t)}catch(t){s(t)}})).onCancel((()=>e(void 0))).show();else{const t=await C();e(t)}}catch(t){s(t)}}))}(t,e,o,a,u,h,f??!1,g,{fastRowCount:1e4,scatterPlotName:"Sequence space",bypassLargeDataWarning:g?.[ie]})}async function he(t,e,s){const o=i.TaskBarProgressIndicator.create("Converting to atomic level ...");try{await async function(t,e,s){if(0===i.Func.find({package:"Chem",name:"getRdKitModule"}).length)return void n.shell.warning('Transformation to atomic level requires package "Chem" installed.');if(s){const s=Y.Cn.getOrCreate(e);return s.isHelm()||(e=s.convert(ct.r2.HELM)),void async function(t,e){const s=await async function(t,e){const s=new Kt(e,t),n=await s.convertToRdKitBeautifiedMolfileColumn();return n.semType=i.SEMTYPE.MOLECULE,n}(t,e);t.columns.add(s,!0),await n.data.detectSemanticTypes(t)}(t,e)}if(!(0,kt.n)(e,"To Atomic Level"))return;const o=oe().getBioLib(),a=await(0,ne.i0)(t,e,o);null!==a.col&&(t.columns.add(a.col,!0),await n.data.detectSemanticTypes(t)),a.warnings&&a.warnings.length>0&&n.shell.warning(r.list(a.warnings))}(t,e,s)}finally{o.close()}}function ue(t){return new K.i(t).importFasta()}function me(t){const e=Y.Cn.getOrCreate(t).stats;return Object.keys(e.freq)}async function de(t,e,s){return X(t,e,s,$.IDENTITY)}async function pe(t,e,s){return X(t,e,s,$.SIMILARITY)}},7983:(t,e,s)=>{"use strict";s.d(e,{HV:()=>h,QF:()=>c,pf:()=>l});var n=s(4469),r=(s(3870),s(976)),i=s(7241),o=(s(4293),s(8467)),a=s(8447);function l(t,e,s){const n=s?function(t,e){const s=`${e}`.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&"),n=t.charAt(0)===e,r=t.charAt(t.length-1)===e,i=t.replace(new RegExp(`^${s}|${s}$`,"g"),"");return n?r?`${s}${i}${s}`:`${s}${i}${s}|${s}${i}$`:r?`^${i}${s}|${s}${i}${s}`:`^${i}${s}|${s}${i}${s}|${s}${i}$`}(t,s):t,i=r.BitSet.create(e.length);for(let s=0;s<e.length;s++){const r=e.get(s);(r.match(n)||r===t)&&i.set(s,!0,!1)}return i}async function c(t,e){e.version!==e.temp["last-invalidated-version"]&&await h(e,!0);const s=r.Column.string("helm",1).init((e=>t));s.semType=r.SEMTYPE.MACROMOLECULE,s.setTag(r.TAGS.UNITS,a.r2.HELM);const o=await(0,i.D)(s,!0,e.temp["monomers-dict"]);return(await n.functions.call("Chem:searchSubstructure",{molStringsColumn:e.temp["monomeric-mols"],molString:o.get(0),molBlockFailover:""})).get(0)}async function h(t,e){const s=r.TaskBarProgressIndicator.create(`Invalidating molfiles for ${t.name}`);try{await(0,o.gw)(10);const s=new Map,n=await(0,i.D)(t,e,s);t.temp["monomeric-mols"]=n,t.temp["monomers-dict"]=s,t.temp["last-invalidated-version"]=t.version}finally{s.close()}}},2568:(t,e,s)=>{"use strict";s.d(e,{l:()=>a,n:()=>o});var n=s(4469),r=s(976),i=s(499);function o(t,e,s=[],r=[],i=!0){const[o,l]=a(t,e,s,r);return i&&!o&&n.shell.warning(l),o}function a(t,e,s=[],o=[]){let a=!0,l="";const c=i.Cn.getOrCreate(t);if(t.semType!==r.SEMTYPE.MACROMOLECULE)n.shell.warning(e+" analysis is allowed for Macromolecules semantic type"),a=!1;else{const t=c.notation;if(s.length>0&&!s.some((e=>t.toUpperCase()==e.toUpperCase())))l=`${e} + ' analysis is allowed for Macromolecules with notation ${0==s.length?"any notation":`notation${s.length>1?"s":""} ${s.map((t=>`"${t}"`)).join(", ")} `}.`,a=!1;else if(!c.isHelm()){const t=c.alphabet;o.length>0&&!o.some((e=>t.toUpperCase()==e.toUpperCase()))&&(l=`${e} + ' analysis is allowed for Macromolecules with alphabet ${0==o.length?"any alphabet":`alphabet${o.length>1?"s":""} ${o.map((t=>`"${t}"`)).join(", ")}.`}.`,a=!1)}}return[a,l]}},3553:(t,e,s)=>{"use strict";s.d(e,{Of:()=>i,WY:()=>h,jB:()=>u,mU:()=>a,rs:()=>c});var n,r,i,o=s(8341);!function(t){t.SPLIT_COL="~split",t.ACTIVITY="~activity",t.ACTIVITY_SCALED="activity_scaled",t.ALIGNED_SEQUENCE="~aligned_sequence",t.AMINO_ACID_RESIDUE="AAR",t.POSITION="Pos",t.P_VALUE="pValue",t.MEAN_DIFFERENCE="Mean difference"}(n||(n={})),function(t){t.AAR="AAR",t.POSITION="Pos",t.SELECTION="selection"}(r||(r={})),function(t){t.MONOMER="Monomer",t.MACROMOLECULE_DIFFERENCE="MacromoleculeDifference",t.ACTIVITY="activity",t.ACTIVITY_SCALED="activityScaled"}(i||(i={}));const a="MSA";var l,c;!function(t){t.CELL_CHANGING="isCellChanging"}(l||(l={})),function(t){t.SEPARATOR="."}(c||(c={}));const h="3.3.1",u={pepsea:{gapOpen:1.53,gapExtend:0,method:o.Jy[0]},kalign:{gapOpen:-1,gapExtend:-1,terminalGap:-1}}},4004:(t,e,s)=>{"use strict";s.d(e,{o:()=>i}),s(976),s(3870);var n=s(4469),r=(s(3336),s(8447),s(499));async function i(t,e,s){const i=r.Cn.getOrCreate(t).convert(e,s);t.dataFrame.columns.add(i);const o=await n.functions.call("Bio:detectMacromolecule",{col:i});return o&&(i.semType=o),await n.data.detectSemanticTypes(t.dataFrame),i}},2918:(t,e,s)=>{"use strict";s.d(e,{NT:()=>y,P4:()=>g});var n=s(4469),r=(s(3870),s(976)),i=s(701),o=s(6584),a=s(922),l=s(1047);class c{constructor(t){this.rawLib=t}isValid(){return this.rawLib.every((t=>"object"==typeof t&&Object.values(l.Wc).every((e=>e in t&&"string"==typeof t[e]))))}getJsonMonomerLib(){const t=[];return this.rawLib.forEach((e=>{const s=this.prepareMonomer(e);t.push(s)})),t}prepareMonomer(t){const e={...l.Z2};Object.entries(l.Wc).forEach((([s,n])=>{const r=t[n];e[s]=r}));let s="smiles";const n=t[l.Wc[s]],r=new h(n),i=r.getCappedSmiles();return e[s]=i,s="rgroups",e[s]=u.getRGroups(r.getNumberOfRGroups()),s="molfile",e[s]=new m(r.getSmilesWithRGroups()).getMolfile(),e}}class h{constructor(t){let e=0;this.smilesWithRGroups=t.replace(/\[R(\d+)\]/g,((t,s)=>(++e,`[${s}*]`))),this.numberOfRGroups=e}getSmilesWithRGroups(){return this.smilesWithRGroups}getCappedSmiles(){return this.capRGroups()}getNumberOfRGroups(){return this.numberOfRGroups}capRGroups(){let t=this.smilesWithRGroups.replace("[1*]","[H:1]");return t=t.replace("[2*]","[OH:2]"),t.replace("[3*]","[H:3]")}}class u{constructor(){}static getRGroups(t){return l.nJ.slice(0,t)}}class m{constructor(t){this.smilesWithRGroups=t}getMolfile(){let t=r.chem.convert(this.smilesWithRGroups,r.chem.Notation.Smiles,r.chem.Notation.MolBlock);return t=this.restoreRGPLine(t),t=this.fixRGroupSymbols(t),t}restoreRGPLine(t){return t.replace("M ISO","M RGP")}fixRGroupSymbols(t){return t.replace(/\bR\b/g,"R#")}}var d=s(7228),p=s(2712);async function g(){return await Promise.all((await n.dapi.files.list(o.BX,!0,"")).map((async t=>t.fullPath.substring(o.BX.length))))}class f{constructor(t,e){this._monomers={},this._onChanged=new i.Subject,this._monomers=t,this.error=e}getMonomer(t,e){return t in this._monomers&&e in this._monomers[t]?this._monomers[t][e]:null}getPolymerTypes(){return Object.keys(this._monomers)}getMonomerMolsByPolymerType(t){const e={};return Object.keys(this._monomers[t]??{}).forEach((s=>{e[s]=this._monomers[t][s].molfile})),e}getMonomerSymbolsByType(t){return Object.keys(this._monomers[t])}getMonomerSymbolsByRGroup(t,e,s){let n=this.getMonomerSymbolsByType(e).map((t=>this.getMonomer(e,t)));return n=n.filter((t=>null!==t)),0===n.length?[]:(n=n.filter((e=>{if(!e?.rgroups)return!1;let s=e?.rgroups.length>=t;return a._.getInstance(e.molfile).atomTypes.map(((t,e)=>"R#"===t?e:-1)).filter((t=>-1!==t)),s&&(s=!0),s})),n.map((t=>t?.symbol)))}get onChanged(){return this._onChanged}_updateInt(t){const e=t.getPolymerTypes(),s=this.getPolymerTypes();e.forEach((e=>{s.includes(e)||(this._monomers[e]={}),t.getMonomerSymbolsByType(e).forEach((s=>{this._monomers[e][s]=t.getMonomer(e,s)}))}))}update(t){this._updateInt(t),this._onChanged.next()}updateLibs(t,e=!1){e&&(this._monomers={});for(const e of t)e.error||this._updateInt(e);this._onChanged.next()}clear(){this._monomers={},this._onChanged.next()}}class y{constructor(){this._monomerLib=new f({}),this.loadLibrariesPromise=Promise.resolve()}getBioLib(){return this._monomerLib}async loadLibraries(t=!1){return this.loadLibrariesPromise=this.loadLibrariesPromise.then((async()=>{try{const[e,s]=await Promise.all([g(),(0,o.nW)()]),n=e.filter((t=>!s.exclude.includes(t))).filter((t=>!(s.explicit.length>0)||s.explicit.includes(t))),r=await Promise.all(n.map((t=>this.readLibrary(o.BX,t).catch((e=>{const s=`Loading monomers from '${t}' error: ${e instanceof Error?e.message:e.toString()}`;return new f({},s)})))));this._monomerLib.updateLibs(r,t)}catch(t){const e=`Loading monomer libraries error: ${t instanceof Error?t.message:t.toString()}`;n.shell.warning(e);const s=t instanceof Error?t.stack:void 0;p._package.logger.error(e,void 0,s)}}))}async readLibrary(t,e){let s,i,o=[];const a=new r.FileSource(t);if(e.endsWith(".sdf"))1===r.Func.find({package:"Chem",name:"importSdf"}).length?(s=await a.readAsBytes(e),i=await n.functions.call("Chem:importSdf",{bytes:s}),o=(0,d.Xk)(i[0])):n.shell.warning("Chem package is not installed");else if(e.endsWith(".json")){const t=await a.readAsText(e);o=JSON.parse(t)}else{if(!e.endsWith(".csv"))throw new Error("Monomer library of unknown file format, supported formats: SDF, JSON, CSV");{const t=(l=await a.readCsv(e),Array.from({length:l.rowCount},((t,e)=>l.columns.names().reduce(((t,s)=>(t[s]=l.get(s,e),t)),{})))),s=new c(t);if(!s.isValid())throw new Error("Invalid format of CSV monomer lib");o=s.getJsonMonomerLib()}}var l;const h={},u=[];return o.forEach((t=>{u.includes(t.polymerType)||(h[t.polymerType]={},u.push(t.polymerType)),h[t.polymerType][t.symbol]=t})),new f(h)}async selectSpecifiedLibraries(t){const e=await this.getInvalidFileNames(t);if(e.length>0)throw new Error(`Cannot select libraries ${e}: no such library in the list`);const s=await(0,o.nW)();s.exclude=(await g()).filter((e=>!t.includes(e))),await(0,o.tW)(s)}async getInvalidFileNames(t){const e=await g();return t.filter((t=>!e.includes(t)))}static get instance(){return window.$monomerLibHelper||(window.$monomerLibHelper=new y),window.$monomerLibHelper}}},525:(t,e,s)=>{"use strict";s.d(e,{K:()=>N});var n=s(4469),r=s(976),i=s(3870),o=s(8447),a=s(499),l=s(6098),c=s(8341),h=s(2568),u=s(3553),m=s(2712),d=s(3379),p=s.n(d),g=s(7795),f=s.n(g),y=s(569),w=s.n(y),C=s(3565),b=s.n(C),T=s(9216),A=s.n(T),S=s(4589),E=s.n(S),v=s(9564),M={};M.styleTagTransform=E(),M.setAttributes=b(),M.insert=w().bind(null,"head"),M.domAPI=f(),M.insertStyleElement=A(),p()(v.Z,M),v.Z&&v.Z.locals&&v.Z.locals;class x extends Error{constructor(t,e){super(t,e)}}async function N(t={}){return new Promise((async(e,s)=>{var o,a,l;t.clustersCol??(t.clustersCol=null),t.pepsea??(t.pepsea={}),(o=t.pepsea).method??(o.method=u.jB.pepsea.method),(a=t.pepsea).gapOpen??(a.gapOpen=u.jB.pepsea.gapOpen),(l=t.pepsea).gapExtend??(l.gapExtend=u.jB.pepsea.gapExtend);const h=t.col?.dataFrame??n.shell.t,m=t.col??h.columns.bySemType(r.SEMTYPE.MACROMOLECULE);if(null==m){const t="MSAError: dataset doesn't conain any Macromolecule column";n.shell.warning(t),s(new x(t))}const d=i.choiceInput("Method",t.pepsea.method,c.Jy);d.setTooltip("Alignment method");const p=i.floatInput("Terminal gap",t?.kalign?.terminalGap??null);p.setTooltip("Penalty for opening a gap at the beginning or end of the sequence");const g=i.p(`Kalign version: ${u.WY}`,"kalign-version"),f=i.floatInput("Gap open",t.pepsea.gapOpen);f.setTooltip("Gap opening penalty at group-to-group alignment");const y=i.floatInput("Gap extend",t.pepsea.gapExtend);y.setTooltip("Gap extension penalty to skip the alignment");const w=i.inputs([f,y,p]),C=i.button("Alignment parameters",(()=>{w.hidden=!w.hidden}),"Adjust alignment parameters such as penalties for opening and extending gaps");C.classList.add("msa-params-button"),w.hidden=!0,C.prepend(i.icons.settings((()=>null)));const b=[d.root.style],T=[p.root.style,g.style];let A;const S=i.columnInput("Sequence",h,m,(async()=>{A=await _(S.value,h,b,T,d,E,f,y,p)}),{filter:t=>t.semType===r.SEMTYPE.MACROMOLECULE});S.setTooltip("Sequences column to use for alignment");const E=i.columnInput("Clusters",h,t.clustersCol);if(E.nullable=!0,S.fireChanged(),t.col)return A=await _(t.col,h,b,T,d,E,f,y,p),void await L(S,h,A,e,s);i.dialog("MSA").add(S).add(E).add(d).add(w).add(C).add(g).onOK((async()=>{await L(S,h,A,e,s)})).show()}))}async function L(t,e,s,i,o){let a=null;const l=r.TaskBarProgressIndicator.create("Analyze for MSA ...");try{if(t.fireChanged(),t.value.semType!==r.SEMTYPE.MACROMOLECULE)throw new Error("Chosen column has to be of Macromolecule semantic type");if(void 0===s)throw new Error("Invalid column format");if(a=await s(),null==a)return o("PepSeA container has not started");e.columns.add(a),await n.data.detectSemanticTypes(e),i(a)}catch(t){const e=t instanceof Error?t.message:t.toString();n.shell.error(e),o(t)}finally{l.close()}}async function _(t,e,s,i,d,p,g,f,y){try{if(t.semType!==r.SEMTYPE.MACROMOLECULE)return;const n=e.columns.getUnusedName(`msa(${t.name})`);if((0,h.n)(t,t.name,[o.r2.FASTA,o.r2.SEPARATOR],["DNA","RNA","PT"],!1)){P(s,i,"kalign"),g.value=null,f.value=null,y.value=null;const e=a.Cn.getOrCreate(t),r=e.isFasta()?t:e.convert(o.r2.FASTA);return async()=>await(0,l.U)(r,!1,n,p.value)}if((0,h.n)(t,t.name,[o.r2.HELM],[],!1))return P(s,i,"pepsea"),g.value??(g.value=u.jB.pepsea.gapOpen),f.value??(f.value=u.jB.pepsea.gapExtend),async()=>await(0,c.f3)(t,n,d.value,g.value,f.value,p.value);if((0,h.n)(t,t.name,[o.r2.SEPARATOR],["UN"],!1)){const e=a.Cn.getOrCreate(t).convert(o.r2.HELM);return P(s,i,"pepsea"),g.value??(g.value=u.jB.pepsea.gapOpen),f.value??(f.value=u.jB.pepsea.gapExtend),async()=>await(0,c.f3)(e,n,d.value,g.value,f.value,p.value)}return g.value=null,f.value=null,y.value=null,void P(s,i,"kalign")}catch(t){const e=t instanceof Error?t.message:t.toString();n.shell.error(e),m._package.logger.error(e)}}function P(t,e,s){if("kalign"===s){for(const e of t)e.display="none";for(const t of e)t.removeProperty("display")}else{for(const t of e)t.display="none";for(const e of t)e.removeProperty("display")}}},6098:(t,e,s)=>{"use strict";s.d(e,{U:()=>O});var n=s(976),r=s(5226);const i=Symbol("Comlink.proxy"),o=Symbol("Comlink.endpoint"),a=Symbol("Comlink.releaseProxy"),l=Symbol("Comlink.thrown"),c=t=>"object"==typeof t&&null!==t||"function"==typeof t,h=new Map([["proxy",{canHandle:t=>c(t)&&t[i],serialize(t){const{port1:e,port2:s}=new MessageChannel;return u(t,e),[s,[s]]},deserialize:t=>(t.start(),d(t))}],["throw",{canHandle:t=>c(t)&&l in t,serialize({value:t}){let e;return e=t instanceof Error?{isError:!0,value:{message:t.message,name:t.name,stack:t.stack}}:{isError:!1,value:t},[e,[]]},deserialize(t){throw t.isError?Object.assign(new Error(t.value.message),t.value):t.value}}]]);function u(t,e=self){e.addEventListener("message",(function s(n){if(!n||!n.data)return;const{id:r,type:o,path:a}=Object.assign({path:[]},n.data),c=(n.data.argumentList||[]).map(b);let h;try{const e=a.slice(0,-1).reduce(((t,e)=>t[e]),t),s=a.reduce(((t,e)=>t[e]),t);switch(o){case"GET":h=s;break;case"SET":e[a.slice(-1)[0]]=b(n.data.value),h=!0;break;case"APPLY":h=s.apply(e,c);break;case"CONSTRUCT":h=function(t){return Object.assign(t,{[i]:!0})}(new s(...c));break;case"ENDPOINT":{const{port1:e,port2:s}=new MessageChannel;u(t,s),h=function(t,e){return w.set(t,e),t}(e,[e])}break;case"RELEASE":h=void 0;break;default:return}}catch(t){h={value:t,[l]:0}}Promise.resolve(h).catch((t=>({value:t,[l]:0}))).then((t=>{const[n,i]=C(t);e.postMessage(Object.assign(Object.assign({},n),{id:r}),i),"RELEASE"===o&&(e.removeEventListener("message",s),m(e))}))})),e.start&&e.start()}function m(t){(function(t){return"MessagePort"===t.constructor.name})(t)&&t.close()}function d(t,e){return g(t,[],e)}function p(t){if(t)throw new Error("Proxy has been released and is not useable")}function g(t,e=[],s=function(){}){let n=!1;const r=new Proxy(s,{get(s,i){if(p(n),i===a)return()=>T(t,{type:"RELEASE",path:e.map((t=>t.toString()))}).then((()=>{m(t),n=!0}));if("then"===i){if(0===e.length)return{then:()=>r};const s=T(t,{type:"GET",path:e.map((t=>t.toString()))}).then(b);return s.then.bind(s)}return g(t,[...e,i])},set(s,r,i){p(n);const[o,a]=C(i);return T(t,{type:"SET",path:[...e,r].map((t=>t.toString())),value:o},a).then(b)},apply(s,r,i){p(n);const a=e[e.length-1];if(a===o)return T(t,{type:"ENDPOINT"}).then(b);if("bind"===a)return g(t,e.slice(0,-1));const[l,c]=y(i);return T(t,{type:"APPLY",path:e.map((t=>t.toString())),argumentList:l},c).then(b)},construct(s,r){p(n);const[i,o]=y(r);return T(t,{type:"CONSTRUCT",path:e.map((t=>t.toString())),argumentList:i},o).then(b)}});return r}function f(t){return Array.prototype.concat.apply([],t)}function y(t){const e=t.map(C);return[e.map((t=>t[0])),f(e.map((t=>t[1])))]}const w=new WeakMap;function C(t){for(const[e,s]of h)if(s.canHandle(t)){const[n,r]=s.serialize(t);return[{type:"HANDLER",name:e,value:n},r]}return[{type:"RAW",value:t},w.get(t)||[]]}function b(t){switch(t.type){case"HANDLER":return h.get(t.name).deserialize(t.value);case"RAW":return t.value}}function T(t,e,s){return new Promise((n=>{const r=new Array(4).fill(0).map((()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16))).join("-");t.addEventListener("message",(function e(s){!s.data||!s.data.id||s.data.id!==r||(t.removeEventListener("message",e),n(s.data))})),t.start&&t.start(),t.postMessage(Object.assign({id:r},e),s)}))}const A="KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2NvbnN0ICQ9U3ltYm9sKCJDb21saW5rLnByb3h5IiksQT1TeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKSxSPVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSx5PVN5bWJvbCgiQ29tbGluay50aHJvd24iKSxfPWU9PnR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9PW51bGx8fHR5cGVvZiBlPT0iZnVuY3Rpb24iLEw9e2NhbkhhbmRsZTplPT5fKGUpJiZlWyRdLHNlcmlhbGl6ZShlKXtjb25zdHtwb3J0MTpyLHBvcnQyOml9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gdyhlLHIpLFtpLFtpXV19LGRlc2VyaWFsaXplKGUpe3JldHVybiBlLnN0YXJ0KCksQyhlKX19LE89e2NhbkhhbmRsZTplPT5fKGUpJiZ5IGluIGUsc2VyaWFsaXplKHt2YWx1ZTplfSl7bGV0IHI7cmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvcj9yPXtpc0Vycm9yOiEwLHZhbHVlOnttZXNzYWdlOmUubWVzc2FnZSxuYW1lOmUubmFtZSxzdGFjazplLnN0YWNrfX06cj17aXNFcnJvcjohMSx2YWx1ZTplfSxbcixbXV19LGRlc2VyaWFsaXplKGUpe3Rocm93IGUuaXNFcnJvcj9PYmplY3QuYXNzaWduKG5ldyBFcnJvcihlLnZhbHVlLm1lc3NhZ2UpLGUudmFsdWUpOmUudmFsdWV9fSxFPW5ldyBNYXAoW1sicHJveHkiLExdLFsidGhyb3ciLE9dXSk7ZnVuY3Rpb24gdyhlLHI9c2VsZil7ci5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBpKHMpe2lmKCFzfHwhcy5kYXRhKXJldHVybjtjb25zdHtpZDpvLHR5cGU6YSxwYXRoOm59PU9iamVjdC5hc3NpZ24oe3BhdGg6W119LHMuZGF0YSksdT0ocy5kYXRhLmFyZ3VtZW50TGlzdHx8W10pLm1hcChtKTtsZXQgbDt0cnl7Y29uc3QgYz1uLnNsaWNlKDAsLTEpLnJlZHVjZSgoZCxoKT0+ZFtoXSxlKSxmPW4ucmVkdWNlKChkLGgpPT5kW2hdLGUpO3N3aXRjaChhKXtjYXNlIkdFVCI6bD1mO2JyZWFrO2Nhc2UiU0VUIjpjW24uc2xpY2UoLTEpWzBdXT1tKHMuZGF0YS52YWx1ZSksbD0hMDticmVhaztjYXNlIkFQUExZIjpsPWYuYXBwbHkoYyx1KTticmVhaztjYXNlIkNPTlNUUlVDVCI6e2NvbnN0IGQ9bmV3IGYoLi4udSk7bD16KGQpfWJyZWFrO2Nhc2UiRU5EUE9JTlQiOntjb25zdHtwb3J0MTpkLHBvcnQyOmh9PW5ldyBNZXNzYWdlQ2hhbm5lbDt3KGUsaCksbD1OKGQsW2RdKX1icmVhaztjYXNlIlJFTEVBU0UiOmw9dm9pZCAwO2JyZWFrO2RlZmF1bHQ6cmV0dXJufX1jYXRjaChjKXtsPXt2YWx1ZTpjLFt5XTowfX1Qcm9taXNlLnJlc29sdmUobCkuY2F0Y2goYz0+KHt2YWx1ZTpjLFt5XTowfSkpLnRoZW4oYz0+e2NvbnN0W2YsZF09UyhjKTtyLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxmKSx7aWQ6b30pLGQpLGE9PT0iUkVMRUFTRSImJihyLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGkpLEYocikpfSl9KSxyLnN0YXJ0JiZyLnN0YXJ0KCl9ZnVuY3Rpb24gVChlKXtyZXR1cm4gZS5jb25zdHJ1Y3Rvci5uYW1lPT09Ik1lc3NhZ2VQb3J0In1mdW5jdGlvbiBGKGUpe1QoZSkmJmUuY2xvc2UoKX1mdW5jdGlvbiBDKGUscil7cmV0dXJuIGIoZSxbXSxyKX1mdW5jdGlvbiBwKGUpe2lmKGUpdGhyb3cgbmV3IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKX1mdW5jdGlvbiBiKGUscj1bXSxpPWZ1bmN0aW9uKCl7fSl7bGV0IHM9ITE7Y29uc3Qgbz1uZXcgUHJveHkoaSx7Z2V0KGEsbil7aWYocChzKSxuPT09UilyZXR1cm4oKT0+ZyhlLHt0eXBlOiJSRUxFQVNFIixwYXRoOnIubWFwKHU9PnUudG9TdHJpbmcoKSl9KS50aGVuKCgpPT57RihlKSxzPSEwfSk7aWYobj09PSJ0aGVuIil7aWYoci5sZW5ndGg9PT0wKXJldHVybnt0aGVuOigpPT5vfTtjb25zdCB1PWcoZSx7dHlwZToiR0VUIixwYXRoOnIubWFwKGw9PmwudG9TdHJpbmcoKSl9KS50aGVuKG0pO3JldHVybiB1LnRoZW4uYmluZCh1KX1yZXR1cm4gYihlLFsuLi5yLG5dKX0sc2V0KGEsbix1KXtwKHMpO2NvbnN0W2wsY109Uyh1KTtyZXR1cm4gZyhlLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLnIsbl0ubWFwKGY9PmYudG9TdHJpbmcoKSksdmFsdWU6bH0sYykudGhlbihtKX0sYXBwbHkoYSxuLHUpe3Aocyk7Y29uc3QgbD1yW3IubGVuZ3RoLTFdO2lmKGw9PT1BKXJldHVybiBnKGUse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4obSk7aWYobD09PSJiaW5kIilyZXR1cm4gYihlLHIuc2xpY2UoMCwtMSkpO2NvbnN0W2MsZl09TSh1KTtyZXR1cm4gZyhlLHt0eXBlOiJBUFBMWSIscGF0aDpyLm1hcChkPT5kLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpjfSxmKS50aGVuKG0pfSxjb25zdHJ1Y3QoYSxuKXtwKHMpO2NvbnN0W3UsbF09TShuKTtyZXR1cm4gZyhlLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6ci5tYXAoYz0+Yy50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6dX0sbCkudGhlbihtKX19KTtyZXR1cm4gb31mdW5jdGlvbiBEKGUpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLGUpfWZ1bmN0aW9uIE0oZSl7Y29uc3Qgcj1lLm1hcChTKTtyZXR1cm5bci5tYXAoaT0+aVswXSksRChyLm1hcChpPT5pWzFdKSldfWNvbnN0IFA9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gTihlLHIpe3JldHVybiBQLnNldChlLHIpLGV9ZnVuY3Rpb24geihlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihlLHtbJF06ITB9KX1mdW5jdGlvbiBTKGUpe2Zvcihjb25zdFtyLGldb2YgRSlpZihpLmNhbkhhbmRsZShlKSl7Y29uc3RbcyxvXT1pLnNlcmlhbGl6ZShlKTtyZXR1cm5be3R5cGU6IkhBTkRMRVIiLG5hbWU6cix2YWx1ZTpzfSxvXX1yZXR1cm5be3R5cGU6IlJBVyIsdmFsdWU6ZX0sUC5nZXQoZSl8fFtdXX1mdW5jdGlvbiBtKGUpe3N3aXRjaChlLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIEUuZ2V0KGUubmFtZSkuZGVzZXJpYWxpemUoZS52YWx1ZSk7Y2FzZSJSQVciOnJldHVybiBlLnZhbHVlfX1mdW5jdGlvbiBnKGUscixpKXtyZXR1cm4gbmV3IFByb21pc2Uocz0+e2NvbnN0IG89VSgpO2UuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gYShuKXshbi5kYXRhfHwhbi5kYXRhLmlkfHxuLmRhdGEuaWQhPT1vfHwoZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixhKSxzKG4uZGF0YSkpfSksZS5zdGFydCYmZS5zdGFydCgpLGUucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6b30sciksaSl9KX1mdW5jdGlvbiBVKCl7cmV0dXJuIG5ldyBBcnJheSg0KS5maWxsKDApLm1hcCgoKT0+TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKS50b1N0cmluZygxNikpLmpvaW4oIi0iKX1jb25zdCBXPWFzeW5jKCk9PldlYkFzc2VtYmx5LnZhbGlkYXRlKG5ldyBVaW50OEFycmF5KFswLDk3LDExNSwxMDksMSwwLDAsMCwxLDUsMSw5NiwwLDEsMTIzLDMsMiwxLDAsMTAsMTAsMSw4LDAsNjUsMCwyNTMsMTUsMjUzLDk4LDExXSkpLHg9ImVhZ2VyIixrPSJsYXp5IixqPXtzc3c6WyJzaW1kIl0sbWluaW1hcDI6WyJzaW1kIl19LHQ9e3Rvb2xzOltdLGNvbmZpZzp7fSxmaWxlczpbXSxiYXNlOnt9LGZzOnt9LGFzeW5jIGluaXQoKXtpZih0LnRvb2xzLmxlbmd0aD09PTApdGhyb3ciRXhwZWN0aW5nIGF0IGxlYXN0IDEgdG9vbC4iO2lmKG5ldyBTZXQodC50b29scy5tYXAocj0+YCR7ci50b29sfS8ke3IucHJvZ3JhbXx8ci50b29sfWApKS5zaXplIT09dC50b29scy5sZW5ndGgpdGhyb3ciRm91bmQgZHVwbGljYXRlIHRvb2xzOyBjYW4gb25seSBoYXZlIGVhY2ggdG9vbC9wcm9ncmFtIGNvbWJpbmF0aW9uIGF0IG1vc3Qgb25jZS4iO2lmKHQuYmFzZT10LnRvb2xzLmZpbmQocj0+ci5yZWluaXQhPT0hMCksIXQuYmFzZSl0aHJvdyJDb3VsZCBub3QgZmluZCBhIHRvb2wgd2l0aCBgcmVpbml0OiBmYWxzZWAgdG8gdXNlIGFzIHRoZSBiYXNlIG1vZHVsZS4gVG8gZml4IHRoaXMgaXNzdWUsIGluY2x1ZGUgdGhlIHRvb2wgYGJhc2UvMS4wLjBgIHdoZW4gaW5pdGlhbGl6aW5nIEFpb2xpLiI7cmV0dXJuIHQuYmFzZS5pc0Jhc2VNb2R1bGU9ITAsYXdhaXQgdGhpcy5fc2V0dXAodC5iYXNlKSxhd2FpdCB0aGlzLl9pbml0TW9kdWxlcygpLHQuX2xvZygiUmVhZHkiKSwhMH0sYXN5bmMgX2luaXRNb2R1bGVzKCl7YXdhaXQgUHJvbWlzZS5hbGwodC50b29scy5tYXAodGhpcy5fc2V0dXApKSxhd2FpdCB0aGlzLl9zZXR1cEZTKCl9LG1vdW50KGU9W10pe2NvbnN0IHI9YCR7dC5jb25maWcuZGlyU2hhcmVkfSR7dC5jb25maWcuZGlyRGF0YX1gLGk9YCR7dC5jb25maWcuZGlyU2hhcmVkfSR7dC5jb25maWcuZGlyTW91bnRlZH1gO2xldCBzPVtdLG89W10sYT1bXTshQXJyYXkuaXNBcnJheShlKSYmIShlIGluc3RhbmNlb2YgRmlsZUxpc3QpJiYoZT1bZV0pLHQuX2xvZyhgTW91bnRpbmcgJHtlLmxlbmd0aH0gZmlsZXNgKTtmb3IobGV0IG4gb2YgZSl7aWYobiBpbnN0YW5jZW9mIEZpbGV8fChuPT1udWxsP3ZvaWQgMDpuLmRhdGEpaW5zdGFuY2VvZiBCbG9iJiZuLm5hbWV8fHR5cGVvZihuPT1udWxsP3ZvaWQgMDpuLmRhdGEpPT0ic3RyaW5nIiYmbi5uYW1lKXR5cGVvZihuPT1udWxsP3ZvaWQgMDpuLmRhdGEpPT0ic3RyaW5nIiYmKG4uZGF0YT1uZXcgQmxvYihbbi5kYXRhXSx7dHlwZToidGV4dC9wbGFpbiJ9KSkscy5wdXNoKG4pO2Vsc2UgaWYobi5uYW1lJiZuLnVybClvLnB1c2gobik7ZWxzZSBpZih0eXBlb2Ygbj09InN0cmluZyImJm4uc3RhcnRzV2l0aCgiaHR0cCIpKW49e3VybDpuLG5hbWU6bi5zcGxpdCgiLy8iKS5wb3AoKS5yZXBsYWNlKC9cLy9nLCItIil9LG8ucHVzaChuKTtlbHNlIHRocm93J0Nhbm5vdCBtb3VudCBmaWxlKHMpIHNwZWNpZmllZC4gTXVzdCBiZSBhIEZpbGUsIEJsb2IsIGEgVVJMIHN0cmluZywgb3IgeyBuYW1lOiAiZmlsZS50eHQiLCBkYXRhOiAic3RyaW5nIiB9Lic7YS5wdXNoKG4ubmFtZSl9dHJ5e3QuZnMudW5tb3VudChpKX1jYXRjaHt9Zm9yKGxldCBuIG9mIG8pdC5mcy5jcmVhdGVMYXp5RmlsZShyLG4ubmFtZSxuLnVybCwhMCwhMCk7cmV0dXJuIHQuZmlsZXM9dC5maWxlcy5jb25jYXQocyksdC5iYXNlLm1vZHVsZS5GUy5tb3VudCh0LmJhc2UubW9kdWxlLldPUktFUkZTLHtmaWxlczp0LmZpbGVzLmZpbHRlcihuPT5uIGluc3RhbmNlb2YgRmlsZSksYmxvYnM6dC5maWxlcy5maWx0ZXIobj0+KG49PW51bGw/dm9pZCAwOm4uZGF0YSlpbnN0YW5jZW9mIEJsb2IpfSxpKSxzLm1hcChuPT57Y29uc3QgdT1gJHtpfS8ke24ubmFtZX1gLGw9YCR7cn0vJHtuLm5hbWV9YDt0cnl7dC5mcy51bmxpbmsobCl9Y2F0Y2h7fXQuX2xvZyhgQ3JlYXRpbmcgc3ltbGluazogJHtsfSAtLT4gJHt1fWApLHQuZnMuc3ltbGluayh1LGwpfSksYS5tYXAobj0+YCR7cn0vJHtufWApfSxhc3luYyBleGVjKGUscj1udWxsKXtpZih0Ll9sb2coYEV4ZWN1dGluZyAlYyR7ZX0lYyBhcmdzPSR7cn1gLCJjb2xvcjpkYXJrYmx1ZTsgZm9udC13ZWlnaHQ6Ym9sZCIsIiIpLCFlKXRocm93IkV4cGVjdGluZyBhIGNvbW1hbmQiO2xldCBpPWU7cj09bnVsbCYmKHI9ZS5zcGxpdCgiICIpLGk9ci5zaGlmdCgpKTtjb25zdCBzPXQudG9vbHMuZmluZChhPT57dmFyIHU7bGV0IG49aTtyZXR1cm4oKHU9YT09bnVsbD92b2lkIDA6YS5mZWF0dXJlcyk9PW51bGw/dm9pZCAwOnUuc2ltZCk9PT0hMCYmKG49YCR7bn0tc2ltZGApLGEucHJvZ3JhbT09bn0pO2lmKHM9PW51bGwpdGhyb3dgUHJvZ3JhbSAke2l9IG5vdCBmb3VuZC5gO3Muc3Rkb3V0PSIiLHMuc3RkZXJyPSIiLHMubG9hZGluZz09ayYmKHMubG9hZGluZz14LGF3YWl0IHRoaXMuX2luaXRNb2R1bGVzKCkpO3RyeXtzLm1vZHVsZS5jYWxsTWFpbihyKX1jYXRjaChhKXtjb25zb2xlLmVycm9yKGEpfXRyeXtzLm1vZHVsZS5GUy5jbG9zZShzLm1vZHVsZS5GUy5zdHJlYW1zWzFdKSxzLm1vZHVsZS5GUy5jbG9zZShzLm1vZHVsZS5GUy5zdHJlYW1zWzJdKX1jYXRjaHt9cy5tb2R1bGUuRlMuc3RyZWFtc1sxXT1zLm1vZHVsZS5GUy5vcGVuKCIvZGV2L3N0ZG91dCIsInciKSxzLm1vZHVsZS5GUy5zdHJlYW1zWzJdPXMubW9kdWxlLkZTLm9wZW4oIi9kZXYvc3RkZXJyIiwidyIpO2xldCBvPXtzdGRvdXQ6cy5zdGRvdXQsc3RkZXJyOnMuc3RkZXJyfTtpZih0LmNvbmZpZy5wcmludEludGVybGVhdmVkJiYobz1zLnN0ZG91dCkscy5yZWluaXQ9PT0hMCl7Y29uc3QgYT10LmJhc2UubW9kdWxlLkZTLmN3ZCgpO09iamVjdC5hc3NpZ24ocyxzLmNvbmZpZykscy5yZWFkeT0hMSxhd2FpdCB0aGlzLmluaXQoKSxzLmlzQmFzZU1vZHVsZSYmdGhpcy5tb3VudCgpLHRoaXMuY2QoYSl9cmV0dXJuIG99LGNhdChlKXtyZXR1cm4gdC5fZmlsZW9wKCJjYXQiLGUpfSxscyhlKXtyZXR1cm4gdC5fZmlsZW9wKCJscyIsZSl9LGRvd25sb2FkKGUpe3JldHVybiB0Ll9maWxlb3AoImRvd25sb2FkIixlKX0scHdkKCl7cmV0dXJuIHQuZnMuY3dkKCl9LGNkKGUpe2ZvcihsZXQgciBvZiB0LnRvb2xzKSFyLm1vZHVsZXx8ci5tb2R1bGUuRlMuY2hkaXIoZSl9LG1rZGlyKGUpe3JldHVybiB0LmZzLm1rZGlyKGUpLCEwfSxyZWFkKHtwYXRoOmUsbGVuZ3RoOnIsZmxhZzppPSJyIixvZmZzZXQ6cz0wLHBvc2l0aW9uOm89MH0pe2NvbnN0IGE9dC5mcy5vcGVuKGUsaSksbj1uZXcgVWludDhBcnJheShyKTtyZXR1cm4gdC5mcy5yZWFkKGEsbixzLHIsbyksdC5mcy5jbG9zZShhKSxufSx3cml0ZSh7cGF0aDplLGJ1ZmZlcjpyLGZsYWc6aT0idysiLG9mZnNldDpzPTAscG9zaXRpb246bz0wfSl7Y29uc3QgYT10LmZzLm9wZW4oZSxpKTt0LmZzLndyaXRlKGEscixzLHIubGVuZ3RoLG8pLHQuZnMuY2xvc2UoYSl9LF9zdGRpblR4dDoiIixfc3RkaW5QdHI6MCxnZXQgc3RkaW4oKXtyZXR1cm4gdC5fc3RkaW5UeHR9LHNldCBzdGRpbihlPSIiKXt0Ll9sb2coYFNldHRpbmcgc3RkaW4gdG8gJWMke2V9JWNgLCJjb2xvcjpkYXJrYmx1ZSIsIiIpLHQuX3N0ZGluVHh0PWUsdC5fc3RkaW5QdHI9MH0sYXN5bmMgX3NldHVwKGUpe2lmKGUucmVhZHkpcmV0dXJuO2lmKHQuX2xvZyhgU2V0dGluZyB1cCAke2UudG9vbH0gKGJhc2UgPSAke2UuaXNCYXNlTW9kdWxlPT09ITB9KS4uLmApLGUuY29uZmlnPU9iamVjdC5hc3NpZ24oe30sZSksZS51cmxQcmVmaXh8fChlLnVybFByZWZpeD1gJHt0LmNvbmZpZy51cmxDRE59LyR7ZS50b29sfS8ke2UudmVyc2lvbn1gKSxlLnByb2dyYW18fChlLnByb2dyYW09ZS50b29sKSxlLmZlYXR1cmVzfHwoZS5mZWF0dXJlcz17fSwoaltlLnByb2dyYW1dfHxbXSkuaW5jbHVkZXMoInNpbWQiKSYmKGF3YWl0IFcoKT8oZS5wcm9ncmFtKz0iLXNpbWQiLGUuZmVhdHVyZXMuc2ltZD0hMCk6dC5fbG9nKGBXZWJBc3NlbWJseSBTSU1EIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyOyB3aWxsIGxvYWQgbm9uLVNJTUQgdmVyc2lvbiBvZiAke2UucHJvZ3JhbX0uYCkpKSxlLmlzQmFzZU1vZHVsZSYmKGUubG9hZGluZz14KSxlLmxvYWRpbmc9PT1rKXt0Ll9sb2coYFdpbGwgbGF6eS1sb2FkICR7ZS50b29sfTsgc2tpcHBpbmcgaW5pdGlhbGl6YXRpb24uYCk7cmV0dXJufXNlbGYuaW1wb3J0U2NyaXB0cyhgJHtlLnVybFByZWZpeH0vJHtlLnByb2dyYW19LmpzYCksZS5tb2R1bGU9YXdhaXQgTW9kdWxlKHt0aGlzUHJvZ3JhbTplLnByb2dyYW0sbG9jYXRlRmlsZTooaSxzKT0+YCR7ZS51cmxQcmVmaXh9LyR7aX1gLHN0ZGluOigpPT50Ll9zdGRpblB0cjx0LnN0ZGluLmxlbmd0aD90LnN0ZGluLmNoYXJDb2RlQXQodC5fc3RkaW5QdHIrKyk6KHQuc3RkaW49IiIsbnVsbCkscHJpbnQ6aT0+ZS5zdGRvdXQrPWAke2l9CmAscHJpbnRFcnI6dC5jb25maWcucHJpbnRJbnRlcmxlYXZlZD9pPT5lLnN0ZG91dCs9YCR7aX0KYDppPT5lLnN0ZGVycis9YCR7aX0KYH0pO2NvbnN0IHI9ZS5tb2R1bGUuRlM7ZS5pc0Jhc2VNb2R1bGU/KHQuX2xvZyhgU2V0dGluZyB1cCAke2UudG9vbH0gd2l0aCBiYXNlIG1vZHVsZSBmaWxlc3lzdGVtLi4uYCksci5ta2Rpcih0LmNvbmZpZy5kaXJTaGFyZWQsNTExKSxyLm1rZGlyKGAke3QuY29uZmlnLmRpclNoYXJlZH0vJHt0LmNvbmZpZy5kaXJEYXRhfWAsNTExKSxyLm1rZGlyKGAke3QuY29uZmlnLmRpclNoYXJlZH0vJHt0LmNvbmZpZy5kaXJNb3VudGVkfWAsNTExKSxyLmNoZGlyKGAke3QuY29uZmlnLmRpclNoYXJlZH0vJHt0LmNvbmZpZy5kaXJEYXRhfWApLHQuZnM9cik6KHQuX2xvZyhgU2V0dGluZyB1cCAke2UudG9vbH0gd2l0aCBmaWxlc3lzdGVtLi4uYCksci5ta2Rpcih0LmNvbmZpZy5kaXJTaGFyZWQpLHIubW91bnQoZS5tb2R1bGUuUFJPWFlGUyx7cm9vdDp0LmNvbmZpZy5kaXJTaGFyZWQsZnM6dC5mc30sdC5jb25maWcuZGlyU2hhcmVkKSxyLmNoZGlyKHQuZnMuY3dkKCkpKSxlLnN0ZG91dD0iIixlLnN0ZGVycj0iIixlLnJlYWR5PSEwfSxhc3luYyBfc2V0dXBGUygpe2NvbnN0IGU9dC5mcztmb3IobGV0IHIgb2YgdC50b29scyl7aWYoIXIucmVhZHkpY29udGludWU7Y29uc3QgaT1yLm1vZHVsZS5GUyxzPWAvJHtyLnRvb2x9YCxvPWAke3QuY29uZmlnLmRpclNoYXJlZH0ke3N9YDshaS5hbmFseXplUGF0aChzKS5leGlzdHN8fGUuYW5hbHl6ZVBhdGgobykuZXhpc3RzfHwodC5fbG9nKGBNb3VudGluZyAke3N9IG9udG8gJHt0LmJhc2UudG9vbH0gZmlsZXN5c3RlbSBhdCAke299YCksZS5ta2RpcihvKSxlLm1vdW50KHQuYmFzZS5tb2R1bGUuUFJPWFlGUyx7cm9vdDpzLGZzOml9LG8pKX19LF9maWxlb3AoZSxyKXt0Ll9sb2coYFJ1bm5pbmcgJHtlfSAke3J9YCk7Y29uc3QgaT10LmZzLmFuYWx5emVQYXRoKHIpO2lmKCFpLmV4aXN0cylyZXR1cm4gdC5fbG9nKGBGaWxlICR7cn0gbm90IGZvdW5kLmApLCExO3N3aXRjaChlKXtjYXNlImNhdCI6cmV0dXJuIHQuZnMucmVhZEZpbGUocix7ZW5jb2Rpbmc6InV0ZjgifSk7Y2FzZSJscyI6cmV0dXJuIHQuZnMuaXNGaWxlKGkub2JqZWN0Lm1vZGUpP3QuZnMuc3RhdChyKTp0LmZzLnJlYWRkaXIocik7Y2FzZSJkb3dubG9hZCI6Y29uc3Qgcz1uZXcgQmxvYihbdGhpcy5jYXQocildKTtyZXR1cm4gVVJMLmNyZWF0ZU9iamVjdFVSTChzKX1yZXR1cm4hMX0sX2xvZyhlKXtpZighdC5jb25maWcuZGVidWcpcmV0dXJuO2xldCByPVsuLi5hcmd1bWVudHNdO3Iuc2hpZnQoKSxjb25zb2xlLmxvZyhgJWNbV2ViV29ya2VyXSVjICR7ZX1gLCJmb250LXdlaWdodDpib2xkIiwiIiwuLi5yKX19O3codCl9KSgpOwo=",S=typeof window<"u"&&window.Blob&&new Blob([atob(A)],{type:"text/javascript;charset=utf-8"});function E(){const t=S&&(window.URL||window.webkitURL).createObjectURL(S);try{return t?new Worker(t):new Worker("data:application/javascript;base64,"+A)}finally{t&&(window.URL||window.webkitURL).revokeObjectURL(t)}}const v={urlCDN:"https://biowasm.com/cdn/v3",urlCDNStg:"https://stg.biowasm.com/cdn/v3",dirShared:"/shared",dirMounted:"/mnt",dirData:"/data",printInterleaved:!0,callback:null,debug:!1,env:"prd"};class M{constructor(t,e={}){if(null==t)throw"Expecting array of tools as input to Aioli constructor.";return Array.isArray(t)||(t=[t]),e=Object.assign({},v,e),t=t.map(this._parseTool),"stg"===e.env&&(e.urlCDN=e.urlCDNStg),this.tools=t,this.config=e,null!=this.config.callback&&(this.callback=this.config.callback),delete this.config.callback,this.init()}async init(){const t=new E;this.callback&&(t.onmessage=t=>{"biowasm"===t.data.type&&this.callback(t.data.value)});const e=d(t);return e.tools=this.tools,e.config=this.config,await e.init(),e}_parseTool(t){if("string"!=typeof t)return t;const e=t.split("/");if(2!=e.length&&3!=e.length)throw"Expecting '<tool>/<version>' or '<tool>/<program>/<version>'";return{tool:e[0],program:3==e.length?e[1]:e[0],version:e[e.length-1]}}}var x=s(850);class N{static getAvailableScales(){return Object.entries(this.scales).map((([t,e])=>t))}static getScale(t){return(0,x.hu)(!(void 0===this.scales[t]),`Scale '${t}' was not found.`),this.scales[t]}}N.scales={WimleyWhite:{"-":0,A:.17,C:-.24,D:-.07,E:-.01,F:-1.13,G:.01,H:.17,I:-.31,K:.99,L:-.56,M:-.23,N:.42,P:.45,Q:.58,R:.81,S:.13,T:.14,V:.07,W:-1.85,Y:-.94},categorial:{"-":0,A:1,C:2,D:3,E:4,F:5,G:6,H:7,I:8,K:9,L:10,M:11,N:12,P:13,Q:14,R:15,S:16,T:17,V:18,W:19,Y:20}};class L{constructor(t="categorial"){this.aa2num=N.getScale(t),this.num2aa={},Object.entries(this.aa2num).forEach((([t,e])=>this.num2aa[e]=t))}static _truncateSequence(t){let e=0,s=t.length;const n=["NH2","COOH"];if(t.startsWith(n[0])){const s=n[0].length;(0,x.hu)("-"==t[s],`Wrong sequence format: ${n[0]} without following '-' in '${t}'.`),e=s}if(t.endsWith(n[1])){const e=n[1].length+1;(0,x.hu)("-"==t[s-e],`Wrong sequence format: ${n[1]} without '-' precending in '${t}'.`),s-=e}return t.substring(e,s)}static _dropDefises(t){return t.replace(/(-)([^-]+)/g,"$2")}static clean(t){return L._dropDefises(L._truncateSequence(t))}encode(t){const e=t.length,s=new Array(e).fill(0);for(let n=0;n<e;++n){const e=t[n];(0,x.hu)(e in this.aa2num,`Unknown char '${e}' found in sequence '${t}'`),s[n]=this.encodeLettter(e)}return s}encodeLettter(t){return this.aa2num[t]}decode(t){let e="";for(let s=0;s<t.length;++s){const n=t[s];(0,x.hu)(n in this.num2aa,`Unknown code '${n}' found in vector '${t}'`),e+=this.num2aa[n]}return e}}var _=s(3553);const P="input.fa",R="result.fasta";function I(t){return t.reduce(((t,e,s)=>t+`>sample${s+1}\n${e}\n`),"")}async function O(t,e=!1,s="",i=null,o,a,l){let c=t.toList();e&&(c=c.map((t=>L.clean(t).replace(/\-/g,""))));const h=t.length;i??(i=n.Column.string("Clusters",h).init("0")),i.type!=n.COLUMN_TYPE.STRING&&(i=i.convertTo(n.TYPE.STRING)),i.compact();const u=i.categories,m=i.getRawData(),d=new Array(u.length),p=new Array(u.length);for(let t=0;t<h;++t){const e=m[t];(d[e]??(d[e]=[])).push(c[t]),(p[e]??(p[e]=[])).push(t)}const g=await new M(["base/1.0.0",{tool:"kalign",version:_.WY,reinit:!0}]),f=n.Column.string(s,h);for(let t=0;t<u.length;++t){const e=I(d[t]);await g.fs.writeFile(P,e);const s=`${void 0!==o?` --gpo ${o}`:""}${void 0!==a?` --gpe ${a}`:""}${void 0!==l?` --tgpe ${l}`:""}`,n=await g.exec(`kalign ${P} -f fasta -o ${R}${s}`);console.warn(n);const i=await g.cat(R);if(!i)throw new Error("kalign output no result");const c=new r.i(i).sequencesArray,h=p[t];for(let t=0;t<c.length;++t)f.set(h[t],c[t])}const y=t.getTag(n.TAGS.UNITS),w=t.getTag("alphabet");return f.setTag(n.TAGS.UNITS,y),f.setTag("aligned","SEQ.MSA"),f.setTag("alphabet",w),f.semType=n.SEMTYPE.MACROMOLECULE,f}},8341:(t,e,s)=>{"use strict";s.d(e,{Jy:()=>l,f3:()=>h});var n=s(4469),r=s(976),i=s(8447),o=s(3553);const a=new class{constructor(){this.dcName="bio"}async getDockerContainer(){return await n.dapi.docker.dockerContainers.filter(this.dcName).first()}},l=["mafft --auto","mafft","linsi","ginsi","einsi","fftns","fftnsi","nwns","nwnsi"],c=["AlignedSeq","AlignedSubpeptide","HELM","ID","PolymerID"];async function h(t,e,s="ginsi",l=1.53,h=0,m=null){const d=await a.getDockerContainer();if("started"!==d.status&&"checking"!==d.status)return n.log.warning("PepSeA container has not started yet"),null;const p=t.length;m??(m=r.Column.int("Clusters",p).init(0)),m.type!=r.COLUMN_TYPE.STRING&&(m=m.convertTo(r.TYPE.STRING));const g=m.categories,f=new Array(g.length);for(let e=0;e<p;++e){const s=m.get(e);if(""===s)continue;const n=g.indexOf(s),r=t.get(e);r&&(f[n]??(f[n]=[])).push({ID:e.toString(),HELM:r})}const y=new Array(p);for(const t of f){const e=(await u(d.id,t,s,l,h)).Alignment;for(const t of e)y[parseInt(t.ID)]=Object.entries(t).filter((t=>!c.includes(t[0]))).map((t=>"-"!==t[1]?t[1]:"")).join(o.rs.SEPARATOR)}const w=r.Column.fromStrings(e,y);return w.setTag(r.TAGS.UNITS,i.r2.SEPARATOR),w.setTag("separator",o.rs.SEPARATOR),w.setTag("aligned","SEQ.MSA"),w.setTag("alphabet","UN"),w.setTag(".alphabetIsMultichar","true"),w.semType=r.SEMTYPE.MACROMOLECULE,w}async function u(t,e,s,r,i){const o={method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(e)},a=`/align?method=${s}&gap_open=${r}&gap_extend=${i}`,l=await n.dapi.docker.dockerContainers.request(t,a,o);return JSON.parse(l??"{}")}},9943:(t,e,s)=>{"use strict";s.d(e,{i$:()=>a,sK:()=>l}),s(976),s(3870),s(4469);var n=s(6414),r=s.n(n),i=s(8447);s(499);const o=60;function a(t,e,s=o,n="\n"){const r=i.kB,a=[];for(let i=0;i<e.length;i++){const o=t.map((t=>t.get(i).toString())).join("|"),c=l(e.get(i),r,s);a.push(`>${o}${n}`);for(const t of c)a.push(`${t}${n}`)}return"".concat(...a)}function l(t,e,s=o){const n=e(t);let i=0;const a=n.length,l=[];for(;i<a;){const t=r()(n).slice(i,i+s).toArray(),e=t.map((t=>t.length>1?`[${t}]`:t)).join("");l.push(e),i+=t.length}return l}},9416:(t,e,s)=>{"use strict";s.d(e,{n:()=>c});var n=s(4469),r=s(976),i=s(8467),o=s(2568),a=s(8457),l=s(3553);async function c(t,e){if(await(0,i.gw)(10),!(0,o.n)(e,"Sequence space"))return t;const s=(0,a.O)(e);s.name="splitToMonomers";const c=e.dataFrame;for(const t of s.columns)t.semType=l.Of.MONOMER,t.setTag("alphabet",e.getTag("alphabet"));const h=/(\d+)(?: \((\d+)\))?/,u=t=>{h.lastIndex=0;const e=t.match(h);return e?`${e[1]} (${parseInt(e[2]??0)+1})`:t};for(let t=0;t<s.columns.length;t++){const n=s.columns.byIndex(t);n.semType=l.Of.MONOMER,n.setTag("alphabet",e.getTag("alphabet"));const r=100;let i=0;for(;c.columns.byName(n.name)&&i<r;)n.name=u(n.name),i++;c.columns.add(n)}await n.data.detectSemanticTypes(c);for(let t=0;t<s.columns.length;t++){const e=s.columns.byIndex(t);e.setTag(r.TAGS.CELL_RENDERER,"Monomer"),e.setTag(".use-as-filter","false")}return c}},4293:(t,e,s)=>{"use strict";function n(t,e){t.innerHTML="",t.append(e)}s.d(e,{Y:()=>n}),s(4469),s(976)},8415:(t,e,s)=>{"use strict";s.d(e,{bo:()=>y,CK:()=>T,yW:()=>b,eZ:()=>v});var n=s(4469),r=s(3870),i=s(976),o=s(6414),a=s.n(o),l=s(701),c=s(499),h=s(8447),u=s(9298);function m(t){var e;return"string"==typeof t||t instanceof String?t:("object"==typeof t||t instanceof Object)&&"$thrownJsError"in t?m(t.$thrownJsError):t instanceof Error?null!==(e=t.stack)&&void 0!==e?e:t.message:t.toString()}var d=s(7945),p=s(8467),g=s(172);var f,y,w=s(8770),C=s(2712);HTMLCanvasElement.prototype.getCursorPosition=function(t,e){const s=this.getBoundingClientRect();return new i.Point((t.clientX-s.left)*e,(t.clientY-s.top)*e)},i.Rect.prototype.contains=function(t,e){return this.left<=t&&t<=this.right&&this.top<=e&&e<=this.bottom};class b{constructor(t=0,e){this.valueList=null,this.valueIdx=0,this.value=this.rowCount=t,this.bounds=e}push(t){this.valueList||(this.valueList=new Array(this.rowCount),this.valueIdx=0),this.valueList[this.valueIdx]=t,++this.valueIdx}aggregate(t){this.value=t(this.valueList)??0,this.valueList=null}}class T{get label(){return this._label?this._label:this.name}constructor(t,e,s,n){this.sumRowCount=0,this.pos=t,this.name=e,this._freqs=s??{},n?.sumRowCount&&(this.sumRowCount=n.sumRowCount),n?.sumValueForHeight&&(this.sumPlotValue=n.sumValueForHeight),n?.label&&(this._label=n.label)}getMonomers(){return Object.keys(this._freqs)}hasMonomer(t){return t in this._freqs}getFreq(t){let e=this._freqs[t];return e||(e=this._freqs[t]=new b),e}aggregate(t){const e=function(t){return e=>{const s=function(t){let e;const s="agg";return e=t instanceof Float32Array?i.Column.fromFloat32Array(s,t):t instanceof Int32Array?i.Column.fromInt32Array(s,t):i.Column.fromList(i.COLUMN_TYPE.FLOAT,s,t),e}(e);return s.aggregate(t)}}(t);for(const[t,s]of Object.entries(this._freqs))s.aggregate(e)}getMinValue(){return Math.min(...Object.values(this._freqs).map((t=>t.value)))}calcPlotValue(t){for(const e of Object.values(this._freqs))e.plotValue=e.value-t}calcHeights(t){this.sumPlotValue=0;for(const t of Object.values(this._freqs))this.sumPlotValue+=t.plotValue;if(this.sumPlotValueForHeight=0,t===u.ES.Entropy){const t=Object.keys(this._freqs).length,e=.01*this.sumPlotValue,s=e/t;for(const t of Object.values(this._freqs)){const n=(t.plotValue+s)/(this.sumPlotValue+e);this.sumPlotValueForHeight+=-n*Math.log2(n)}}else if(t===u.ES.full)for(const[t,e]of Object.entries(this._freqs)){const t=e.plotValue/this.sumPlotValue;this.sumPlotValueForHeight+=t}}calcScreen(t,e,s,n,r,o,a,l,c,h){const m=r===u.ES.Entropy?n*(o-this.sumPlotValueForHeight)/o:n;let d=h*c+(n-m-1);const p=Object.entries(this._freqs).sort(((e,s)=>t(e[0])||t(s[0])?t(e[0])&&t(s[0])?0:t(e[0])?-1:1:s[1].value-e[1].value));for(const[t,n]of p){const t=m*n.plotValue/this.sumPlotValue;n.bounds=new i.Rect((e-s)*c*a,d,l*c,t),d+=t}}render(t,e,s,n,r,i){for(const[o,a]of Object.entries(this._freqs))if(!e(o)){const e=(0,h.GU)(o,5),l=a.bounds,c=l.left;t.resetTransform(),t.strokeStyle="lightgray",t.lineWidth=1,t.rect(c,l.top,l.width,l.height),t.fillStyle=i.get(o)??i.get("other"),t.textAlign="left",t.font=s;const u=t.measureText(e);t.setTransform(l.width/u.width,0,0,l.height/r,c,l.top),t.fillText(e,0,-n)}}getMonomerAt(t,e){const s=Object.entries(this._freqs).find((([s,n])=>n.bounds.contains(t,e)));return s?s[0]:void 0}buildCompositionTable(t){return(0,w._)(t,Object.assign({},...Object.entries(this._freqs).map((([t,e])=>({[t]:e.rowCount})))))}}!function(t){t.STYLE="Style",t.BEHAVIOR="Behavior",t.LAYOUT="Layout",t.DATA="Data"}(f||(f={})),function(t){t.sequenceColumnName="sequenceColumnName",t.valueAggrType="valueAggrType",t.valueColumnName="valueColumnName",t.startPositionName="startPositionName",t.endPositionName="endPositionName",t.skipEmptySequences="skipEmptySequences",t.skipEmptyPositions="skipEmptyPositions",t.shrinkEmptyTail="shrinkEmptyTail",t.backgroundColor="backgroundColor",t.positionHeight="positionHeight",t.positionWidth="positionWidth",t.verticalAlignment="verticalAlignment",t.horizontalAlignment="horizontalAlignment",t.fixWidth="fixWidth",t.fitArea="fitArea",t.minHeight="minHeight",t.maxHeight="maxHeight",t.showPositionLabels="showPositionLabels",t.positionMarginState="positionMarginState",t.positionMargin="positionMargin",t.filterSource="filterSource"}(y||(y={}));const A=u.vS;var S;!function(t){t[t.None=0]="None",t[t.Render=1]="Render",t[t.Layout=1]="Layout",t[t.Freqs=2]="Freqs"}(S||(S={}));class E extends i.JsViewer{get positionWidthWithMargin(){return this._positionWidthWithMargin}get Length(){return this.skipEmptyPositions?this.positions.length:this.startPosition<=this.endPosition?this.endPosition-this.startPosition+1:0}get positionMarginValue(){return this.positionMarginState===u.dE.AUTO&&!0===this.unitsHandler.getAlphabetIsMultichar()||this.positionMarginState===u.dE.ON?this.positionMargin:0}constructor(){super(),this.viewed=!1,this.initialized=!1,this.palette=null,this.seqCol=null,this.positions=[],this.visibleSlider=!1,this.allowResize=!0,this.turnOfResizeForOneSetValue=!1,this.backgroundColor=4294967295,this.positionMargin=0,this.positionNames=[],this.positionLabels=void 0,this.startPosition=-1,this.endPosition=-1,this.error=null,this.viewerId=++E.viewerCounter,this.setDataInProgress=!1,this.viewSubs=[],this._onSizeChanged=new l.Subject,this._onFreqsCalculated=new l.Subject,this._onLayoutCalculated=new l.Subject,this.requestedRenderLevel=S.Freqs,this.renderRequest=new l.Subject,this._onRendered=new l.Subject,this.textBaseline="top",this.unitsHandler=null,this.sequenceColumnName=this.string(y.sequenceColumnName,A.sequenceColumnName,{category:f.DATA});const t=[i.AGG.KEY,i.AGG.PIVOT,i.AGG.MISSING_VALUE_COUNT,i.AGG.SKEW,i.AGG.KURT,i.AGG.SELECTED_ROWS_COUNT],e=Object.values(i.AGG).filter((e=>!t.includes(e)));this.valueAggrType=this.string(y.valueAggrType,A.valueAggrType,{category:f.DATA,choices:e}),this.valueColumnName=this.string(y.valueColumnName,A.valueColumnName,{category:f.DATA}),this.startPositionName=this.string(y.startPositionName,A.startPositionName,{category:f.DATA}),this.endPositionName=this.string(y.endPositionName,A.endPositionName,{category:f.DATA}),this.skipEmptySequences=this.bool(y.skipEmptySequences,A.skipEmptySequences,{category:f.DATA}),this.skipEmptyPositions=this.bool(y.skipEmptyPositions,A.skipEmptyPositions,{category:f.DATA}),this.shrinkEmptyTail=this.bool(y.shrinkEmptyTail,A.shrinkEmptyTail,{category:f.DATA}),this.backgroundColor=this.int(y.backgroundColor,A.backgroundColor,{category:f.STYLE}),this.positionHeight=this.string(y.positionHeight,A.positionHeight,{category:f.STYLE,choices:Object.values(u.ES)}),this._positionWidth=this.positionWidth=this.float(y.positionWidth,A.positionWidth,{category:f.STYLE}),this.verticalAlignment=this.string(y.verticalAlignment,A.verticalAlignment,{category:f.LAYOUT,choices:Object.values(u.vw)}),this.horizontalAlignment=this.string(y.horizontalAlignment,A.horizontalAlignment,{category:f.LAYOUT,choices:Object.values(u.iD)}),this.fixWidth=this.bool(y.fixWidth,A.fixWidth,{category:f.LAYOUT,userEditable:!1}),this.fitArea=this.bool(y.fitArea,A.fitArea,{category:f.LAYOUT}),this.minHeight=this.float(y.minHeight,A.minHeight,{category:f.LAYOUT}),this.maxHeight=this.float(y.maxHeight,A.maxHeight,{category:f.LAYOUT}),this.showPositionLabels=this.bool(y.showPositionLabels,A.showPositionLabels,{category:f.LAYOUT}),this.positionMarginState=this.string(y.positionMarginState,A.positionMarginState,{category:f.LAYOUT,choices:Object.values(u.dE)});let s=0;"auto"===this.positionMarginState&&(s=4),this.positionMargin=this.int(y.positionMargin,s,{category:f.LAYOUT,min:0,max:16}),this.filterSource=this.string(y.filterSource,A.filterSource,{category:f.BEHAVIOR,choices:Object.values(u.Ct)}),this.slider=r.rangeSlider(0,100,0,20,!1,{style:"barbell"}),this.canvas=r.canvas(),this.canvas.classList.value="bio-wl-canvas",this.canvas.style.width="100%",this.viewSyncer=new g.c(C._package.logger)}viewerToLog(){return`MolstarViewer<${this.viewerId}>`}setData(){const t=`${this.viewerToLog()}.setData()`;C._package.logger.debug(`${t}, in`),this.viewSyncer.sync(`${t}`,(async()=>{if(!this.setDataInProgress){this.setDataInProgress=!0;try{this.viewed&&(this.renderRequestSub.unsubscribe(),await this.destroyView(),this.viewed=!1),this.updateSeqCol(),this.updateEditors(),this.viewed||(await this.buildView(),this.viewed=!0)}finally{this.setDataInProgress=!1}}})),C._package.logger.debug(`${t}, out`)}async destroyView(){for(const t of this.viewSubs)t.unsubscribe();this.viewSubs=[];const t=this.dataFrame?"data":"null";C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.destroyView( dataFrame = ${t} ) start`),this.host.remove(),this.msgHost=void 0,this.host=void 0,C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.destroyView() end`)}async buildView(){const t=this.dataFrame?"data":"null";C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.buildView( dataFrame = ${t} ) start`),window.devicePixelRatio,this.viewSubs.push(i.debounce(this.renderRequest).subscribe(this.renderRequestOnDebounce.bind(this))),this.helpUrl="/help/visualize/viewers/web-logo.md",this.msgHost=r.div("No message",{classes:"bio-wl-msg"}),this.msgHost.style.display="none",this.canvas=r.canvas(),this.canvas.style.width="100%",this.slider.root.style.position="absolute",this.slider.root.style.zIndex="999",this.slider.root.style.display="none",this.slider.root.style.height="0.7em",this.visibleSlider=!1,this.host=r.div([this.msgHost,this.canvas],{classes:"bio-wl-host",style:{display:"flex",flexDirection:"row",flexWrap:"wrap"}}),this.root.append(this.host),this.root.append(this.slider.root),this.error&&(this.msgHost.innerText=this.error.message,r.tooltip.bind(this.msgHost,this.error.stack),this.msgHost.style.setProperty("display",null)),this.dataFrame&&(this.viewSubs.push(this.dataFrame.filter.onChanged.subscribe(this.dataFrameFilterOnChanged.bind(this))),this.viewSubs.push(this.dataFrame.selection.onChanged.subscribe(this.dataFrameSelectionOnChanged.bind(this)))),this.viewSubs.push(r.onSizeChanged(this.root).subscribe(this.rootOnSizeChanged.bind(this))),this.viewSubs.push(this.slider.onValuesChanged.subscribe(this.sliderOnValuesChanged.bind(this))),this.viewSubs.push((0,l.fromEvent)(this.canvas,"mousemove").subscribe(this.canvasOnMouseMove.bind(this))),this.viewSubs.push((0,l.fromEvent)(this.canvas,"mousedown").subscribe(this.canvasOnMouseDown.bind(this))),this.viewSubs.push((0,l.fromEvent)(this.canvas,"wheel").subscribe(this.canvasOnWheel.bind(this))),await this.render(S.Freqs,"buildView"),C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.buildView() end`)}rootOnSizeChanged(){C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.rootOnSizeChanged(), start `),this.render(S.Layout,"rootOnSizeChanged")}updateEditors(){this.props.getProperty(y.valueColumnName).choices=a()(this.dataFrame.columns.numerical).map((t=>t.name)).toArray()}updateSeqCol(){if(this.dataFrame&&(this.seqCol=this.sequenceColumnName?this.dataFrame.col(this.sequenceColumnName):null,null==this.seqCol&&(this.seqCol=(0,h.up)(this.dataFrame),this.sequenceColumnName=this.seqCol?this.seqCol.name:null),this.seqCol)){try{this.unitsHandler=c.Cn.getOrCreate(this.seqCol),this.palette=(0,h.dQ)(this.seqCol),this.updatePositions(),this.error=null}catch(t){throw this.seqCol=null,this.error=t instanceof Error?t:new Error(t.toString()),t}this.seqCol||(this.unitsHandler=null,this.positionNames=[],this.positionLabels=[],this.startPosition=-1,this.endPosition=-1,this.palette=null)}}updatePositions(){if(!this.seqCol)return;const t=this.getFilter(),e=0===t.trueCount?this.unitsHandler.maxLength:a().enumerate(this.unitsHandler.splitted).map((([e,s])=>t.get(s)&&e?e.length:0)).reduce(((t,e)=>Math.max(t,e)),0),s=this.seqCol.getTag(".positionNames"),n=this.seqCol.getTag(".positionLabels");this.positionNames=s?s.split(h.CI).map((t=>t.trim())):[...Array(e).keys()].map((t=>`${t+1}`)),this.positionLabels=n?n.split(h.CI).map((t=>t.trim())):void 0,this.startPosition=this.startPositionName&&this.positionNames&&this.positionNames.includes(this.startPositionName)?this.positionNames.indexOf(this.startPositionName):0,this.endPosition=this.endPositionName&&this.positionNames&&this.positionNames.includes(this.endPositionName)?this.positionNames.indexOf(this.endPositionName):e-1,this.render(S.Freqs,"updatePositions")}getFilter(){let t;switch(this.filterSource){case u.Ct.Filtered:t=this.dataFrame.filter;break;case u.Ct.Selected:t=0===this.dataFrame.selection.trueCount?this.dataFrame.filter:this.dataFrame.selection}return t}setSliderVisibility(t){t?(this.slider.root.style.display="inherit",this.visibleSlider=!0):(this.slider.root.style.display="none",this.visibleSlider=!1)}calcLayout(t){this.host&&this.canvas&&this.slider&&(this.host.classList.remove("bio-wl-fixWidth","bio-wl-fitArea"),this.canvas.classList.remove("bio-wl-fixWidth","bio-wl-fitArea"),this._positionWidth=this.positionWidth,this._positionMargin=this.positionMargin,this._positionWidthWithMargin=this._positionWidth+this.positionMarginValue,this.fixWidth?this.calcLayoutFixWidth(t):this.fitArea?this.calcLayoutFitArea(t):this.calcLayoutNoFitArea(t),this.slider.root.style.width=`${this.host.clientWidth}px`)}calcLayoutFixWidth(t){if(!this.host||!this.canvas||!this.slider)return;this.host.classList.add("bio-wl-fixWidth"),this.canvas.classList.add("bio-wl-fitArea");const e=this._positionWidthWithMargin*this.Length,s=Math.min(Math.max(this.minHeight,this.root.clientHeight),this.maxHeight);this.host.style.justifyContent=u.iD.LEFT,this.host.style.removeProperty("margin-left"),this.host.style.removeProperty("margin-top"),this.host.style.width=this.canvas.style.width=`${e}px`,this.host.style.height=this.canvas.style.height=`${s}px`,this.host.style.left=this.canvas.style.left="0",this.host.style.top=this.canvas.style.top="0",this.host.style.setProperty("overflow","hidden","important"),this.slider.root.style.display="none",this.slider.setValues(0,Math.max(0,this.Length-1),0,Math.max(0,this.Length-1)),this.canvas.width=e*t,this.canvas.height=s*t}calcLayoutNoFitArea(t){if(!this.host||!this.canvas||!this.slider)return;const e=this._positionWidthWithMargin*this.Length,s=Math.min(Math.max(this.minHeight,this.root.clientHeight),this.maxHeight),n=Math.min(this.root.clientWidth,e);this.canvas.style.width=`${n}px`,this.canvas.style.height=`${s}px`,this.host.style.width=`${n}px`,this.host.style.height=`${this.root.clientHeight}px`,this.host.style.justifyContent=this.horizontalAlignment,this.host.style.alignContent=this.verticalAlignment===u.vw.TOP?"start":this.verticalAlignment===u.vw.MIDDLE?"center":this.verticalAlignment===u.vw.BOTTOM?"end":"inherit",this.root.clientHeight<this.minHeight&&(this.host.style.alignContent="start",this.host.style.width=`${n+6}px`),this.host.style.width=`${this.host}px`;const r=e>n;if(this.setSliderVisibility(r),r){this.slider.root.style.removeProperty("display"),this.host.style.justifyContent="left",this.host.style.height=this.root.clientHeight-this.slider.root.offsetHeight+"px",this.slider.root.style.top=`${this.host.offsetHeight}px`;let t=Math.min(Math.max(0,this.slider.min),this.Length-.001),e=Math.min(Math.max(0,this.slider.max),this.Length-.001);const s=this.root.clientWidth/this._positionWidthWithMargin;e=Math.min(Math.max(t,0)+s,this.Length-.001),t=Math.max(0,Math.min(e,this.Length-.001)-s),this.slider.setValues(0,Math.max(this.Length-.001),t,e)}else this.slider.setValues(0,Math.max(0,this.Length-.001),0,Math.max(0,this.Length-.001));this.canvas.width=n*t,this.canvas.height=s*t}calcLayoutFitArea(t){if(!this.host||!this.canvas||!this.slider)return;const e=this._positionWidth*this.Length,s=Math.min(Math.max(this.minHeight,this.root.clientHeight),this.maxHeight),n=e>0?(this.root.clientWidth-this.positionMarginValue*this.Length)/e:0,r=this.root.clientHeight/s,i=Math.max(1,Math.min(n,r));this._positionWidth=this.positionWidth*i,this._positionWidthWithMargin=this._positionWidth+this.positionMarginValue;const o=(this._positionWidth+this.positionMarginValue)*this.Length,a=i*s,l=Math.min(this.root.clientWidth,o);this.canvas.style.width=`${l}px`,this.canvas.style.height=`${a}px`,this.host.style.width=`${l}px`,this.host.style.height=`${this.root.clientHeight}px`,this.host.style.justifyContent=this.horizontalAlignment,this.host.style.alignContent=this.verticalAlignment===u.vw.TOP?"start":this.verticalAlignment===u.vw.MIDDLE?"center":this.verticalAlignment===u.vw.BOTTOM?"end":"inherit",this.root.clientHeight<this.minHeight&&(this.host.style.alignContent="start",this.host.style.width=`${l+6}px`),this.host.style.width=`${this.host}px`;const c=o>l;if(this.setSliderVisibility(c),c){this.slider.root.style.removeProperty("display"),this.host.style.justifyContent="left",this.host.style.height=this.root.clientHeight-this.slider.root.offsetHeight+"px",this.slider.root.style.top=`${this.host.offsetHeight}px`;let t=Math.min(Math.max(0,this.slider.min),this.Length-.001),e=Math.min(Math.max(0,this.slider.max),this.Length-.001);const s=this.root.clientWidth/this._positionWidthWithMargin;e=Math.min(Math.max(t,0)+s,this.Length-.001),t=Math.max(0,Math.min(e,this.Length-.001)-s),this.slider.setValues(0,Math.max(0,this.Length-.001),t,e)}else this.slider.setValues(0,Math.max(0,this.Length-.001),0,Math.max(0,this.Length-.001));this.canvas.width=l*t,this.canvas.height=a*t}onPropertyChanged(t){switch(super.onPropertyChanged(t),t.name){case y.sequenceColumnName:this.updateSeqCol();break;case y.sequenceColumnName:case y.startPositionName:case y.endPositionName:case y.filterSource:case y.shrinkEmptyTail:case y.skipEmptyPositions:case y.positionHeight:this.updatePositions();break;case y.valueColumnName:case y.valueAggrType:this.render(S.Freqs,`onPropertyChanged(${t.name})`);break;case y.minHeight:case y.maxHeight:case y.positionWidth:case y.showPositionLabels:case y.fixWidth:case y.fitArea:case y.horizontalAlignment:case y.verticalAlignment:case y.positionMargin:case y.positionMarginState:this.render(S.Layout,`onPropertyChanged(${t.name})`);break;case y.backgroundColor:this.render(S.Render,`onPropertyChanged(${t.name})`)}}onTableAttached(){C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.onTableAttached(), `),super.onTableAttached(),this.setData()}async detach(){const t=`${this.viewerToLog()}.detach()`;C._package.logger.debug(`${t}, in`);const e=super.detach.bind(this);this.viewSyncer.sync(`${t}`,(async()=>{this.setDataInProgress||(this.viewed&&(await this.destroyView(),this.viewed=!1),e())})),C._package.logger.debug(`${t}, out`)}get onSizeChanged(){return this._onSizeChanged}get onFreqsCalculated(){return this._onFreqsCalculated}get onLayoutCalculated(){return this._onLayoutCalculated}getMonomer(t,e){const s=t.x,n=Math.floor(t.x/(this._positionWidthWithMargin*e)+Math.floor(this.slider.min)),r=this.positions[n];if(!r)return[null,null,null];const i=r.getMonomerAt(s,t.y);return void 0===i?[r,null,null]:[r,i,r.getFreq(i)]}_nullSequence(t="X"){return this.skipEmptySequences?"":new Array(this.Length).fill(t).join("")}_removeEmptyPositions(){this.skipEmptyPositions&&(this.positions=a()(this.positions).filter((t=>{const e=this.unitsHandler.defaultGapSymbol;return!t.hasMonomer(e)||t.getFreq(e).rowCount!==t.sumRowCount})).toArray())}render(t,e){C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.render( recalcLevelVal=${t}, reason='${e}' )`),this.requestedRenderLevel=Math.max(this.requestedRenderLevel,t),this.renderRequest.next(this.requestedRenderLevel)}async renderInt(t){if(C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.render.renderInt( renderLevel=${t} ), start `),this.msgHost&&(this.seqCol&&!this.palette?(this.msgHost.innerText=`Unknown palette (column semType: '${this.seqCol.semType}').`,this.msgHost.style.display=""):this.msgHost.style.display="none"),!this.seqCol||!this.dataFrame||!this.palette||null==this.host||null==this.slider)return;const e=window.devicePixelRatio,s=this.showPositionLabels?12:0;if(t>=S.Freqs&&(()=>{if(C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.render.calculateFreqsInt(), start `),!this.host||!this.seqCol||!this.dataFrame)return;const t=this.startPosition<=this.endPosition?this.endPosition-this.startPosition+1:0;this.unitsHandler=c.Cn.getOrCreate(this.seqCol);const e=this.startPosition<=this.endPosition?this.endPosition-this.startPosition+1:0;this.positions=new Array(e);for(let e=0;e<t;e++){const t=this.positionNames[this.startPosition+e],s=this.positionLabels?this.positionLabels[this.startPosition+e]:void 0;this.positions[e]=new T(this.startPosition+e,t,{},{label:s})}const s=this.getFilter(),n=this.dataFrame.rowCount,r=this.unitsHandler.splitted;for(let e=0;e<t;++e){for(let t=0;t<n;++t)if(s.get(t)){const s=r[t][this.startPosition+e]||this.unitsHandler.defaultGapSymbol,n=this.positions[e],i=n.getFreq(s);++n.sumRowCount,i.value=++i.rowCount}if(this.valueAggrType===i.AGG.TOTAL_COUNT)continue;let t=null;try{t=this.dataFrame.getCol(this.valueColumnName),t.matches("numerical")||(t=null)}catch{t=null}if(t){for(let i=0;i<n;++i)if(s.get(i)){const s=r[i][this.startPosition+e]||this.unitsHandler.defaultGapSymbol,n=t.get(i);this.positions[e].getFreq(s).push(n)}this.positions[e].aggregate(this.valueAggrType)}}const o=this.valueAggrType===i.AGG.TOTAL_COUNT?0:Math.min(0,Math.min(...this.positions.map((t=>t.getMinValue()))));for(let e=0;e<t;++e)this.positions[e].calcPlotValue(o),this.positions[e].calcHeights(this.positionHeight);this._removeEmptyPositions(),this._onFreqsCalculated.next()})(),this.calcLayout(e),-1===this.startPosition)return;const r=Math.max(Math.floor(this.slider.min),0),o=Math.min(this.positions.length-1,Math.floor(this.slider.max));t>=S.Layout&&((t,e,s,r)=>{C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.render.calculateLayoutInt(), start `);const o=this.canvas.height-r*s;let l;if(this.valueAggrType===i.AGG.TOTAL_COUNT){const t=this.getAlphabetSize();this.positionHeight==u.ES.Entropy&&null==t&&n.shell.error("WebLogo: alphabet is undefined."),l=Math.log2(t)}else l=Math.max(...a().count(t).takeWhile((t=>t<=e)).map((t=>this.positions[t].sumPlotValueForHeight)));for(let n=t;n<=e;++n)n in this.positions?this.positions[n].calcScreen((t=>this.unitsHandler.isGap(t)),n,this.slider.min,o,this.positionHeight,l,this._positionWidthWithMargin,this._positionWidth,s,r):C._package.logger.warning(`Bio: WebLogoViewer<${this.viewerId}>.render.calculateLayoutInt() this.positions.length = ${this.positions.length}, jPos = ${n}`);C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.render.calculateLayoutInt(), end `),this._onLayoutCalculated.next()})(r,o,window.devicePixelRatio,s);const l=this.canvas.getContext("2d");if(l){l.save();try{this.Length,l.resetTransform(),l.fillStyle=function(t){const e=i.Color.a(t);return`#${(16777215&t).toString(16).padStart(6,"0")}`+e.toString(16).padStart(2,"0")}(this.backgroundColor),l.fillRect(0,0,this.canvas.width,this.canvas.height),l.textBaseline=this.textBaseline;const t=10*e;l.resetTransform(),l.fillStyle="black",l.textAlign="center",l.font=`${t.toFixed(1)}px Roboto, Roboto Local, sans-serif`,s>0&&this.positions.length>0&&function(t,e,s,n,r,i,o,a){t.save();try{t.textAlign="center";let l=null,c=null;for(let e=Math.floor(o);e<=Math.floor(a);e++){const s=i[e],n=t.measureText(s.name),r=n.actualBoundingBoxDescent-n.actualBoundingBoxAscent;l=null===l?n.width:Math.max(l,n.width),c=null===c?r:Math.max(c,r)}const h=l<n*e-2?1:(n*e-2)/l;for(let l=Math.floor(o);l<=Math.floor(a);l++){const a=i[l],u=(l-o)*s*e+n*e/2,m=(r*e-c)/2;t.setTransform(h,0,0,1,u,m),t.measureText(a.label),t.fillText(a.label,0,0)}}finally{t.restore()}}(l,e,this._positionWidthWithMargin,this._positionWidth,s,this.positions,this.slider.min,this.slider.max);const n="16px Roboto, Roboto Local, sans-serif",a=.25,c=12.2;for(let t=r;t<=o;t++)this.positions[t].render(l,(t=>this.unitsHandler.isGap(t)),n,a,c,this.palette)}finally{l.restore()}C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.render.renderInt( recalcLevel=${t} ), end`)}}renderRequestOnDebounce(t){this.requestedRenderLevel=S.None,this.renderInt(t).catch((t=>{const[e,s]=(0,d.yf)(t);C._package.logger.error(e,void 0,s)}))}getAlphabetSize(){return this.unitsHandler?.getAlphabetSize()??0}sliderOnValuesChanged(t){try{const t={minRange:this.slider.minRange,min:this.slider.min,max:this.slider.max,maxRange:this.slider.maxRange};C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.sliderOnValuesChanged( ${JSON.stringify(t)} ), start`),this.render(S.Layout,"sliderOnValuesChanged")}catch(t){const e=m(t);C._package.logger.error(`Bio: WebLogoViewer<${this.viewerId}>.sliderOnValuesChanged() error:\n`+e)}}dataFrameFilterOnChanged(t){C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.dataFrameFilterChanged()`);try{this.updatePositions(),this.filterSource===u.Ct.Filtered&&this.render(S.Freqs,"dataFrameFilterOnChanged")}catch(t){const e=m(t);C._package.logger.error(`Bio: WebLogoViewer<${this.viewerId}>.dataFrameFilterOnChanged() error:\n`+e)}}dataFrameSelectionOnChanged(t){C._package.logger.debug(`Bio: WebLogoViewer<${this.viewerId}>.dataFrameSelectionOnChanged()`);try{this.filterSource===u.Ct.Selected&&this.render(S.Freqs,"dataFrameSelectionOnChanged")}catch(t){const e=m(t);C._package.logger.error(`Bio: WebLogoViewer<${this.viewerId}>.dataFrameSelectionOnChanged() error:\n`+e)}}canvasOnMouseMove(t){const e=window.devicePixelRatio;try{const s=t,n=this.canvas.getCursorPosition(s,e),[o,a]=this.getMonomer(n,e),l=this.showPositionLabels?12*e:0;if(null!==o&&null===a&&0<=n.y&&n.y<=l){const t=[r.divText(`Position ${o.label}`)];this.valueAggrType===i.AGG.TOTAL_COUNT&&t.push(o.buildCompositionTable(this.palette));const e=r.divV(t);r.tooltip.show(e,s.x+16,s.y+16)}else if(null!==o&&a&&this.dataFrame&&this.seqCol&&this.unitsHandler){const t=o.getFreq(a),e=[r.div(`${a}`),r.div(`${t.rowCount} rows`)];this.valueAggrType!==i.AGG.TOTAL_COUNT&&e.push(r.div(`${this.valueAggrType}: ${t.value.toFixed(3)}`));const n=r.divV(e);r.tooltip.show(n,s.x+16,s.y+16)}else r.tooltip.hide()}catch(t){const e=m(t);C._package.logger.error(`Bio: WebLogoViewer<${this.viewerId}>.canvasOnMouseMove() error:\n`+e)}}canvasOnMouseDown(t){try{const e=t,s=window.devicePixelRatio,[n,r]=this.getMonomer(this.canvas.getCursorPosition(e,s),s);if(null!==n&&null!==r&&this.dataFrame&&this.seqCol&&this.unitsHandler){const t=i.BitSet.create(this.dataFrame.selection.length,(t=>function(t,e,s,n,r,i){const o=e.splitted[n],a=i.pos<o.length?o[i.pos]:null;return a===r||""===a&&r===e.defaultGapSymbol}(this.dataFrame,this.unitsHandler,this.getFilter(),t,r,n)));this.dataFrame.selection.init((e=>t.get(e)))}}catch(t){const e=m(t);C._package.logger.error(`Bio: WebLogoViewer<${this.viewerId}>.canvasOnMouseDown() error:\n`+e)}}canvasOnWheel(t){const e=window.devicePixelRatio;try{if(!this.visibleSlider)return;const s=this.canvas.width/(this._positionWidthWithMargin*e),n=t.deltaY/100*Math.max(Math.floor(s/5),1);this.slider.scrollBy(this.slider.min+n)}catch(t){const e=m(t);C._package.logger.error(`Bio: WebLogoViewer<${this.viewerId}>.canvasOnWheel() error:\n`+e)}}get onRendered(){return this._onRendered}invalidate(){const t=`${this.viewerToLog()}.invalidate()`;this.viewSyncer.sync(`${t}`,(async()=>{this.invalidate(),this._onRendered.next()}))}async awaitRendered(t=5e3){await(0,p.zg)(this.onRendered,(()=>{}),(()=>{this.invalidate()}),t)}}function v(t,e,s,n,r){let i=0,o=-1;for(;-1!=(o=s.findNext(o,!0));){const t=e.splitted[o],s=r.pos;(s<t.length?t[s]:null)===n&&i++}return i}E.residuesSet="nucleotides",E.viewerCounter=-1},4413:(t,e,s)=>{"use strict";s.d(e,{ST:()=>g});var n=s(3870),r=s(976),i=s(4469),o=s(6414),a=s.n(o),l=s(7983),c=s(701),h=s(4293),u=s(8447),m=s(8467);const d=rxjs.operators;var p=s(3377);class g extends r.Filter{get calculating(){return"initial"==this.loader.style.display}set calculating(t){this.loader.style.display=t?"initial":"none"}get filterSummary(){return this.bioFilter.substructure}get isFiltering(){return super.isFiltering&&""!==this.bioFilter.substructure}get isReadyToApplyFilter(){return!this.calculating&&null!=this.bitset}get _debounceTime(){if(null==this.column)return 1e3;const t=this.column.length;return t<500?0:t>1e4?1e3:Math.floor((t-500)/9500*1e3)}constructor(){super(),this.bioFilter=null,this.bitset=null,this.loader=n.loader(),this.notation=void 0,this.root=n.divV([]),this.calculating=!1}attach(t){super.attach(t),this.column=t.columns.bySemType(r.SEMTYPE.MACROMOLECULE),this.columnName??(this.columnName=this.column?.name),this.notation??(this.notation=this.column?.getTag(r.TAGS.UNITS)),this.bioFilter=this.notation===u.r2.FASTA?new y:this.notation===u.r2.SEPARATOR?new w(this.column.getTag("separator")):new C,this.root.appendChild(this.bioFilter.filterPanel),this.root.appendChild(this.loader),this.onBioFilterChangedSubs?.unsubscribe();let e=this.bioFilter.onChanged;e=e.pipe((0,d.debounceTime)(this._debounceTime)),this.onBioFilterChangedSubs=e.subscribe((async t=>await this._onInputChanged())),this.subs.push(i.events.onResetFilterRequest.subscribe((t=>{this.bioFilter?.resetFilter()})))}detach(){super.detach()}applyFilter(){this.bitset&&!this.isDetached&&this.dataFrame?.filter.and(this.bitset)}saveState(){const t=super.saveState();return t.bioSubstructure=this.bioFilter?.substructure,t}applyState(t){super.applyState(t),t.bioSubstructure&&(this.bioFilter.substructure=t.bioSubstructure);const e=this;t.bioSubstructure&&setTimeout((function(){e._onInputChanged()}),1e3)}async _onInputChanged(){if(p._package.logger.debug("Bio: BioSubstructureFilter._onInputChanged(), start"),this.isFiltering){if(a()(this.dataFrame.rows.filters).has(`${this.columnName}: ${this.filterSummary}`))return;this.calculating=!0;try{this.bitset=await(this.bioFilter?.substructureSearch(this.column)),this.calculating=!1,this.dataFrame?.rows.requestFilter()}finally{this.calculating=!1}}else this.bitset=null,this.dataFrame?.rows.requestFilter()}}class f{constructor(){this.onChanged=new c.Subject}get filterPanel(){return new HTMLElement}get substructure(){return""}set substructure(t){}async substructureSearch(t){return null}}class y extends f{constructor(){super(),this.substructureInput=n.stringInput("","",(()=>{this.onChanged.next()}),{placeholder:"Substructure"})}get filterPanel(){return this.substructureInput.root}get substructure(){return this.substructureInput.value}set substructure(t){this.substructureInput.value=t}async substructureSearch(t){return(0,l.pf)(this.substructure,t)}resetFilter(){this.substructureInput.value=""}}class w extends y{constructor(t){super(),this.colSeparator="",this.separatorInput=n.stringInput("","",(()=>{this.onChanged.next()}),{placeholder:"Separator"}),this.colSeparator=t,this.separatorInput.value=t}get filterPanel(){return n.divV([this.substructureInput.root,this.separatorInput.root])}get substructure(){return this.separatorInput.value&&this.separatorInput.value!==this.colSeparator?this.substructureInput.value.replaceAll(this.separatorInput.value,this.colSeparator):this.substructureInput.value}set substructure(t){this.substructureInput.value=t}async substructureSearch(t){return(0,l.pf)(this.substructure,t,this.colSeparator)}}class C extends f{constructor(){super(),this._filterPanel=n.div("",{style:{cursor:"pointer"}}),this.helmSubstructure="",this.init()}async init(){this.helmEditor=await i.functions.call("HELM:helmWebEditor"),await n.tools.waitForElementInDom(this._filterPanel),this.updateFilterPanel(),this._filterPanel.addEventListener("click",(t=>{const{editorDiv:e,webEditor:s}=this.helmEditor.createWebEditor(this.helmSubstructure);n.dialog({showHeader:!1,showFooter:!0}).add(e).onOK((()=>{const t=s.canvas.getHelm(!0).replace(/<\/span>/g,"").replace(/<span style='background:#bbf;'>/g,"");this.helmSubstructure=t,this.updateFilterPanel(this.substructure),setTimeout((()=>{this.onChanged.next()}),10)})).show({modal:!0,fullScreen:!0})})),n.onSizeChanged(this._filterPanel).subscribe((t=>{const e=this.helmEditor.webEditor.canvas.getHelm(!0).replace(/<\/span>/g,"").replace(/<span style='background:#bbf;'>/g,"");this.updateFilterPanel(e)}))}get filterPanel(){return this._filterPanel}get substructure(){return this.helmSubstructure}set substructure(t){this.helmEditor.editor.setHelm(t)}updateFilterPanel(t){const e=this._filterPanel.parentElement.clientWidth<100?100:this._filterPanel.parentElement.clientWidth,s=e/2;if(t)(0,h.Y)(this._filterPanel,this.helmEditor.host),this.helmEditor.editor.setHelm(t),this.helmEditor.resizeEditor(e,s);else{const t=n.divText("Click to edit","helm-substructure-filter");(0,h.Y)(this._filterPanel,t)}}async substructureSearch(t){n.setUpdateIndicator(this._filterPanel,!0),await(0,m.gw)(10);const e=await(0,l.QF)(this.substructure,t);return n.setUpdateIndicator(this._filterPanel,!1),e}resetFilter(){console.debug("Bio: HelmFilter.resetFilter()"),this.helmSubstructure="",this.updateFilterPanel(this.substructure)}}},8770:(t,e,s)=>{"use strict";s.d(e,{_:()=>w});var n=s(3870),r=(s(976),s(6414),s(8447),s(7331),s(3379)),i=s.n(r),o=s(7795),a=s.n(o),l=s(569),c=s.n(l),h=s(3565),u=s.n(h),m=s(9216),d=s.n(m),p=s(4589),g=s.n(p),f=s(5362),y={};function w(t,e){let s=0,r=null;for(const t of Object.values(e))s+=t,r=null===r?t:Math.max(r,t);const i=r/s,o=Object.assign({},...Array.from(Object.entries(e)).sort(((t,e)=>e[1]-t[1])).map((([e,r])=>{const o=r/s,a=t.get(e),l=n.div("",{classes:"macromolecule-cell-comp-analysis-bar"});l.style.width=50*o/i+"px",l.style.backgroundColor=a;const c=n.div(`${(100*o).toFixed(2)}%`);return{[e]:n.div([l,c],{classes:"macromolecule-cell-comp-analysis-value"})}}))),a=n.tableFromMap(o);return Array.from(a.rows).forEach((t=>{const e=t.getElementsByClassName("macromolecule-cell-comp-analysis-bar")[0].style.backgroundColor;t.cells[0].style.color=e})),a}y.styleTagTransform=g(),y.setAttributes=u(),y.insert=c().bind(null,"head"),y.domAPI=a(),y.insertStyleElement=d(),i()(f.Z,y),f.Z&&f.Z.locals&&f.Z.locals,s(499)},1906:(t,e,s)=>{"use strict";t.exports=s.p+"9a8fbf37666e32487835.wasm"},3336:t=>{"use strict";t.exports=$},976:t=>{"use strict";t.exports=DG},4469:t=>{"use strict";t.exports=grok},701:t=>{"use strict";t.exports=rxjs},3870:t=>{"use strict";t.exports=ui},6414:t=>{"use strict";t.exports=wu}},e={};function s(n){var r=e[n];if(void 0!==r)return r.exports;var i=e[n]={id:n,loaded:!1,exports:{}};return t[n].call(i.exports,i,i.exports,s),i.loaded=!0,i.exports}s.m=t,s.amdO={},s.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return s.d(e,{a:e}),e},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.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),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&&(t=e.currentScript.src),!t)){var n=e.getElementsByTagName("script");if(n.length)for(var r=n.length-1;r>-1&&!t;)t=n[r--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),s.p=t})(),s.b=document.baseURI||self.location.href,s.nc=void 0;var n=s(3377);bio_test=n})();
|
|
3
3
|
//# sourceMappingURL=package-test.js.map
|