@datagrok/bio 2.4.31 → 2.4.40
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/.eslintrc.json +6 -8
- package/README.md +22 -7
- package/css/msa.css +3 -0
- package/detectors.js +21 -12
- package/dist/1.js +2 -0
- package/dist/1.js.map +1 -0
- package/dist/18.js +2 -0
- package/dist/18.js.map +1 -0
- package/dist/190.js +2 -0
- package/dist/190.js.map +1 -0
- package/dist/452.js +2 -0
- package/dist/452.js.map +1 -0
- package/dist/729.js +2 -0
- package/dist/729.js.map +1 -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/files/libraries/broken-lib.sdf +136 -0
- package/files/libraries/group1/mock-lib-3.json +74 -0
- package/files/libraries/mock-lib-2.json +48 -0
- package/files/tests/100_3_clustests.csv +100 -0
- package/files/tests/100_3_clustests_empty_vals.csv +100 -0
- package/files/tests/peptides_motif-with-random_10000.csv +9998 -0
- package/package.json +4 -4
- package/scripts/sequence_generator.py +164 -48
- package/src/analysis/sequence-activity-cliffs.ts +7 -9
- package/src/analysis/sequence-diversity-viewer.ts +8 -3
- package/src/analysis/sequence-search-base-viewer.ts +4 -3
- package/src/analysis/sequence-similarity-viewer.ts +13 -7
- package/src/analysis/sequence-space.ts +15 -12
- package/src/analysis/workers/mm-distance-array-service.ts +48 -0
- package/src/analysis/workers/mm-distance-array-worker.ts +29 -0
- package/src/analysis/workers/mm-distance-worker-creator.ts +6 -9
- package/src/apps/web-logo-app.ts +34 -0
- package/src/calculations/monomerLevelMols.ts +10 -12
- package/src/demo/bio01-similarity-diversity.ts +4 -5
- package/src/demo/bio01a-hierarchical-clustering-and-sequence-space.ts +6 -7
- package/src/demo/bio01b-hierarchical-clustering-and-activity-cliffs.ts +7 -8
- package/src/demo/bio03-atomic-level.ts +1 -4
- package/src/demo/bio05-helm-msa-sequence-space.ts +6 -4
- package/src/demo/utils.ts +3 -4
- package/src/package-test.ts +1 -2
- package/src/package.ts +135 -82
- package/src/seq_align.ts +482 -483
- package/src/substructure-search/substructure-search.ts +3 -3
- package/src/tests/Palettes-test.ts +1 -1
- package/src/tests/WebLogo-positions-test.ts +12 -35
- package/src/tests/_first-tests.ts +1 -1
- package/src/tests/activity-cliffs-tests.ts +10 -7
- package/src/tests/activity-cliffs-utils.ts +6 -5
- package/src/tests/bio-tests.ts +20 -25
- package/src/tests/checkInputColumn-tests.ts +5 -11
- package/src/tests/converters-test.ts +19 -37
- package/src/tests/detectors-benchmark-tests.ts +35 -37
- package/src/tests/detectors-tests.ts +29 -34
- package/src/tests/detectors-weak-and-likely-tests.ts +11 -21
- package/src/tests/fasta-export-tests.ts +3 -3
- package/src/tests/fasta-handler-test.ts +2 -3
- package/src/tests/lib-tests.ts +2 -4
- package/src/tests/mm-distance-tests.ts +25 -17
- package/src/tests/monomer-libraries-tests.ts +1 -1
- package/src/tests/msa-tests.ts +12 -9
- package/src/tests/pepsea-tests.ts +6 -3
- package/src/tests/renderers-test.ts +13 -11
- package/src/tests/sequence-space-test.ts +10 -8
- package/src/tests/sequence-space-utils.ts +6 -4
- package/src/tests/similarity-diversity-tests.ts +47 -61
- package/src/tests/splitters-test.ts +14 -20
- package/src/tests/to-atomic-level-tests.ts +9 -17
- package/src/tests/units-handler-splitted-tests.ts +106 -0
- package/src/tests/units-handler-tests.ts +22 -26
- package/src/tests/utils/sequences-generators.ts +6 -2
- package/src/tests/utils.ts +10 -4
- package/src/tests/viewers.ts +1 -1
- package/src/utils/atomic-works.ts +49 -57
- package/src/utils/cell-renderer.ts +25 -8
- package/src/utils/check-input-column.ts +19 -4
- package/src/utils/constants.ts +3 -3
- package/src/utils/convert.ts +56 -23
- package/src/utils/monomer-lib.ts +83 -64
- package/src/utils/multiple-sequence-alignment-ui.ts +35 -21
- package/src/utils/multiple-sequence-alignment.ts +2 -2
- package/src/utils/pepsea.ts +17 -7
- package/src/utils/save-as-fasta.ts +11 -4
- package/src/utils/ui-utils.ts +1 -1
- package/src/viewers/vd-regions-viewer.ts +21 -22
- package/src/viewers/web-logo-viewer.ts +189 -154
- package/src/widgets/bio-substructure-filter.ts +9 -6
- package/src/widgets/representations.ts +11 -12
- package/tsconfig.json +1 -1
- package/dist/258.js +0 -2
- package/dist/258.js.map +0 -1
- package/dist/457.js +0 -2
- package/dist/457.js.map +0 -1
- package/dist/562.js +0 -2
- package/dist/562.js.map +0 -1
- package/dist/925.js +0 -2
- package/dist/925.js.map +0 -1
- package/src/analysis/workers/mm-distance-worker.ts +0 -16
package/dist/562.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunkbio=self.webpackChunkbio||[]).push([[562],{779:(t,e,n)=>{function l(){return(t,e)=>{let n=0;t.length!==e.length&&(n=Math.abs(t.length-e.length));let l=0;for(let n=0;n<Math.min(t.length,e.length);n++)t[n]!==e[n]&&l++;return l+n}}n.d(e,{j:()=>l})},458:(t,e,n)=>{n.d(e,{r:()=>r});var l=n(1811);function r(){return(t,e)=>(0,l.T)(t,e)}},6683:(t,e,n)=>{n.d(e,{n:()=>r});const l={gapOpen:8,gapExtend:2,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){return(e,n)=>{const{gapOpen:r,gapExtend:h,scoringMatrix:o,alphabetIndexes:a}=Object.assign(Object.assign({},l),t),c=[new Array(e.length+1).fill(0),new Array(e.length+1).fill(0)],g=new Array(e.length+1).fill(!1),s=new Array(e.length+1).fill(!1);let f=0,i=1;for(let t=1;t<e.length+1;t++)c[0][t]=-r-(t-1)*h;for(let t=1;t<n.length+1;t++){c[i][0]=-r-(t-1)*h;for(let l=1;l<e.length+1;l++){const d=c[f][l-1]+o[a[e[l-1]]][a[n[t-1]]],u=c[f][l]-(g[l]?h:r),A=c[i][l-1]-(s[l-1]?h:r);c[i][l]=Math.max(d,A,u),c[i][l]===d?(g[l]=!1,s[l]=!1):c[i][l]===A?(g[l]=!1,s[l]=!0):(g[l]=!0,s[l]=!1)}f=i,i=(i+1)%2}return-c[f][e.length]}}},1811:(t,e,n)=>{n.d(e,{T:()=>r});const l=new Uint32Array(65536),r=(t,e)=>{if(t.length<e.length){const n=e;e=t,t=n}return 0===e.length?t.length:t.length<=32?((t,e)=>{const n=t.length,r=e.length,h=1<<n-1;let o=-1,a=0,c=n,g=n;for(;g--;)l[t.charCodeAt(g)]|=1<<g;for(g=0;g<r;g++){let t=l[e.charCodeAt(g)];const n=t|a;t|=(t&o)+o^o,a|=~(t|o),o&=t,a&h&&c++,o&h&&c--,a=a<<1|1,o=o<<1|~(n|a),a&=n}for(g=n;g--;)l[t.charCodeAt(g)]=0;return c})(t,e):((t,e)=>{const n=e.length,r=t.length,h=[],o=[],a=Math.ceil(n/32),c=Math.ceil(r/32);for(let t=0;t<a;t++)o[t]=-1,h[t]=0;let g=0;for(;g<c-1;g++){let a=0,c=-1;const s=32*g,f=Math.min(32,r)+s;for(let e=s;e<f;e++)l[t.charCodeAt(e)]|=1<<e;for(let t=0;t<n;t++){const n=l[e.charCodeAt(t)],r=o[t/32|0]>>>t&1,g=h[t/32|0]>>>t&1,s=n|a,f=((n|g)&c)+c^c|n|g;let i=a|~(f|c),d=c&f;i>>>31^r&&(o[t/32|0]^=1<<t),d>>>31^g&&(h[t/32|0]^=1<<t),i=i<<1|r,d=d<<1|g,c=d|~(s|i),a=i&s}for(let e=s;e<f;e++)l[t.charCodeAt(e)]=0}let s=0,f=-1;const i=32*g,d=Math.min(32,r-i)+i;for(let e=i;e<d;e++)l[t.charCodeAt(e)]|=1<<e;let u=r;for(let t=0;t<n;t++){const n=l[e.charCodeAt(t)],a=o[t/32|0]>>>t&1,c=h[t/32|0]>>>t&1,g=n|s,i=((n|c)&f)+f^f|n|c;let d=s|~(i|f),A=f&i;u+=d>>>r-1&1,u-=A>>>r-1&1,d>>>31^a&&(o[t/32|0]^=1<<t),A>>>31^c&&(h[t/32|0]^=1<<t),d=d<<1|a,A=A<<1|c,f=A|~(g|d),s=d&g}for(let e=i;e<d;e++)l[t.charCodeAt(e)]=0;return u})(t,e)}}}]);
|
|
2
|
-
//# sourceMappingURL=562.js.map
|
package/dist/562.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"562.js","mappings":"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","sources":["webpack://bio/./node_modules/@datagrok-libraries/ml/src/macromolecule-distance-functions/hamming.js","webpack://bio/./node_modules/@datagrok-libraries/ml/src/macromolecule-distance-functions/levenstein.js","webpack://bio/./node_modules/@datagrok-libraries/ml/src/macromolecule-distance-functions/needleman-wunsch.js","webpack://bio/./node_modules/fastest-levenshtein/esm/mod.js"],"sourcesContent":["export function hamming() {\n return (seq1, seq2) => {\n // hamming distance should only be used with same size strings,\n // but still, lets add a check and if they are not same length add the difference to the result\n let diff = 0;\n if (seq1.length !== seq2.length)\n diff = Math.abs(seq1.length - seq2.length);\n let result = 0;\n for (let i = 0; i < Math.min(seq1.length, seq2.length); i++) {\n if (seq1[i] !== seq2[i])\n result++;\n }\n return result + diff;\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFtbWluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhhbW1pbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxVQUFVLE9BQU87SUFDckIsT0FBTyxDQUFDLElBQVksRUFBRSxJQUFZLEVBQUUsRUFBRTtRQUNwQywrREFBK0Q7UUFDL0QsK0ZBQStGO1FBQy9GLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNiLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsTUFBTTtZQUM3QixJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU3QyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDZixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMzRCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNyQixNQUFNLEVBQUUsQ0FBQztTQUNaO1FBQ0QsT0FBTyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ3ZCLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge21tRGlzdGFuY2VGdW5jdGlvblR5cGV9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gaGFtbWluZygpOiBtbURpc3RhbmNlRnVuY3Rpb25UeXBlIHtcbiAgcmV0dXJuIChzZXExOiBzdHJpbmcsIHNlcTI6IHN0cmluZykgPT4ge1xuICAgIC8vIGhhbW1pbmcgZGlzdGFuY2Ugc2hvdWxkIG9ubHkgYmUgdXNlZCB3aXRoIHNhbWUgc2l6ZSBzdHJpbmdzLFxuICAgIC8vIGJ1dCBzdGlsbCwgbGV0cyBhZGQgYSBjaGVjayBhbmQgaWYgdGhleSBhcmUgbm90IHNhbWUgbGVuZ3RoIGFkZCB0aGUgZGlmZmVyZW5jZSB0byB0aGUgcmVzdWx0XG4gICAgbGV0IGRpZmYgPSAwO1xuICAgIGlmIChzZXExLmxlbmd0aCAhPT0gc2VxMi5sZW5ndGgpXG4gICAgICBkaWZmID0gTWF0aC5hYnMoc2VxMS5sZW5ndGggLSBzZXEyLmxlbmd0aCk7XG5cbiAgICBsZXQgcmVzdWx0ID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1hdGgubWluKHNlcTEubGVuZ3RoLCBzZXEyLmxlbmd0aCk7IGkrKykge1xuICAgICAgaWYgKHNlcTFbaV0gIT09IHNlcTJbaV0pXG4gICAgICAgIHJlc3VsdCsrO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0ICsgZGlmZjtcbiAgfTtcbn1cbiJdfQ==","import { distance } from 'fastest-levenshtein';\nexport function levenstein() {\n return (seq1, seq2) => {\n return distance(seq1, seq2);\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGV2ZW5zdGVpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImxldmVuc3RlaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRzdDLE1BQU0sVUFBVSxVQUFVO0lBQ3hCLE9BQU8sQ0FBQyxJQUFZLEVBQUUsSUFBWSxFQUFFLEVBQUU7UUFDcEMsT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2Rpc3RhbmNlfSBmcm9tICdmYXN0ZXN0LWxldmVuc2h0ZWluJztcbmltcG9ydCB7bW1EaXN0YW5jZUZ1bmN0aW9uVHlwZX0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBsZXZlbnN0ZWluKCk6IG1tRGlzdGFuY2VGdW5jdGlvblR5cGUge1xuICByZXR1cm4gKHNlcTE6IHN0cmluZywgc2VxMjogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIGRpc3RhbmNlKHNlcTEsIHNlcTIpO1xuICB9O1xufVxuIl19","// Blosum 62 matrix for protein sequences\nconst BLOSUM62 = [[4, -1, -2, -2, 0, -1, -1, 0, -2, -1, -1, -1, -1, -2, -1, 1, 0, -3, -2, 0, -2, -1, 0, -4],\n [-1, 5, 0, -2, -3, 1, 0, -2, 0, -3, -2, 2, -1, -3, -2, -1, -1, -3, -2, -3, -1, 0, -1, -4],\n [-2, 0, 6, 1, -3, 0, 0, 0, 1, -3, -3, 0, -2, -3, -2, 1, 0, -4, -2, -3, 3, 0, -1, -4],\n [-2, -2, 1, 6, -3, 0, 2, -1, -1, -3, -4, -1, -3, -3, -1, 0, -1, -4, -3, -3, 4, 1, -1, -4],\n [0, -3, -3, -3, 9, -3, -4, -3, -3, -1, -1, -3, -1, -2, -3, -1, -1, -2, -2, -1, -3, -3, -2, -4],\n [-1, 1, 0, 0, -3, 5, 2, -2, 0, -3, -2, 1, 0, -3, -1, 0, -1, -2, -1, -2, 0, 3, -1, -4],\n [-1, 0, 0, 2, -4, 2, 5, -2, 0, -3, -3, 1, -2, -3, -1, 0, -1, -3, -2, -2, 1, 4, -1, -4],\n [0, -2, 0, -1, -3, -2, -2, 6, -2, -4, -4, -2, -3, -3, -2, 0, -2, -2, -3, -3, -1, -2, -1, -4],\n [-2, 0, 1, -1, -3, 0, 0, -2, 8, -3, -3, -1, -2, -1, -2, -1, -2, -2, 2, -3, 0, 0, -1, -4],\n [-1, -3, -3, -3, -1, -3, -3, -4, -3, 4, 2, -3, 1, 0, -3, -2, -1, -3, -1, 3, -3, -3, -1, -4],\n [-1, -2, -3, -4, -1, -2, -3, -4, -3, 2, 4, -2, 2, 0, -3, -2, -1, -2, -1, 1, -4, -3, -1, -4],\n [-1, 2, 0, -1, -3, 1, 1, -2, -1, -3, -2, 5, -1, -3, -1, 0, -1, -3, -2, -2, 0, 1, -1, -4],\n [-1, -1, -2, -3, -1, 0, -2, -3, -2, 1, 2, -1, 5, 0, -2, -1, -1, -1, -1, 1, -3, -1, -1, -4],\n [-2, -3, -3, -3, -2, -3, -3, -3, -1, 0, 0, -3, 0, 6, -4, -2, -2, 1, 3, -1, -3, -3, -1, -4],\n [-1, -2, -2, -1, -3, -1, -1, -2, -2, -3, -3, -1, -2, -4, 7, -1, -1, -4, -3, -2, -2, -1, -2, -4],\n [1, -1, 1, 0, -1, 0, 0, 0, -1, -2, -2, 0, -1, -2, -1, 4, 1, -3, -2, -2, 0, 0, 0, -4],\n [0, -1, 0, -1, -1, -1, -1, -2, -2, -1, -1, -1, -1, -2, -1, 1, 5, -2, -2, 0, -1, -1, 0, -4],\n [-3, -3, -4, -4, -2, -2, -3, -2, -2, -3, -2, -3, -1, 1, -4, -3, -2, 11, 2, -3, -4, -3, -2, -4],\n [-2, -2, -2, -3, -2, -1, -2, -3, 2, -1, -1, -2, -1, 3, -3, -2, -2, 2, 7, -1, -3, -2, -1, -4],\n [0, -3, -3, -3, -1, -2, -2, -3, -3, 3, 1, -2, 1, -1, -2, -2, 0, -3, -1, 4, -3, -2, -1, -4],\n [-2, -1, 3, 4, -3, 0, 1, -1, 0, -3, -4, 0, -3, -3, -2, 0, -1, -4, -3, -3, 4, 1, -1, -4],\n [-1, 0, 0, 1, -3, 3, 4, -2, 0, -3, -3, 1, -1, -3, -1, 0, -1, -3, -2, -2, 1, 4, -1, -4],\n [0, -1, -1, -1, -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -2, 0, 0, -2, -1, -1, -1, -1, -1, -4],\n [-4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, 1]];\n// Protein indexes for BLOSUM matrix\nconst ProtIndexes = {\n 'A': 0, 'R': 1, 'N': 2, 'D': 3, 'C': 4, 'Q': 5, 'E': 6, 'G': 7, 'H': 8,\n 'I': 9, 'L': 10, 'K': 11, 'M': 12, 'F': 13, 'P': 14, 'S': 15, 'T': 16,\n 'W': 17, 'Y': 18, 'V': 19, 'B': 20, 'Z': 21, 'X': 22, '*': 23\n};\nconst defaultArgs = {\n gapOpen: 8,\n gapExtend: 2,\n scoringMatrix: BLOSUM62,\n alphabetIndexes: ProtIndexes\n};\n/** Returns a function that calculates the distance between two sequences based on gap penalty and matrix */\nexport function needlemanWunch(args) {\n return (seq1, seq2) => {\n const { gapOpen, gapExtend, scoringMatrix, alphabetIndexes } = Object.assign(Object.assign({}, defaultArgs), args);\n // As we don't need traceback, no need to store the whole matrix\n // Intead, we will store only the last two rows\n const matrix = [\n new Array(seq1.length + 1).fill(0),\n new Array(seq1.length + 1).fill(0)\n ];\n // similarly, we need to keep track of what operation led to the current cell\n // i.e. whether we came from the left, top or diagonal to assign gap open/gap extend penalty\n const verticalGaps = new Array(seq1.length + 1).fill(false);\n const horizontalGaps = new Array(seq1.length + 1).fill(false);\n //variables to keep track which row we are in\n // they will swap places on each iteration\n let prevRow = 0;\n let currRow = 1;\n // Initialize first row\n for (let i = 1; i < seq1.length + 1; i++)\n matrix[0][i] = -gapOpen - (i - 1) * gapExtend;\n // Calculate the rest of the matrix\n for (let i = 1; i < seq2.length + 1; i++) {\n matrix[currRow][0] = -gapOpen - (i - 1) * gapExtend;\n for (let j = 1; j < seq1.length + 1; j++) {\n const diagonal = matrix[prevRow][j - 1] + scoringMatrix[alphabetIndexes[seq1[j - 1]]][alphabetIndexes[seq2[i - 1]]];\n const top = matrix[prevRow][j] - (verticalGaps[j] ? gapExtend : gapOpen);\n const left = matrix[currRow][j - 1] - (horizontalGaps[j - 1] ? gapExtend : gapOpen);\n matrix[currRow][j] = Math.max(diagonal, left, top);\n // update gap arrays\n if (matrix[currRow][j] === diagonal) {\n verticalGaps[j] = false;\n horizontalGaps[j] = false;\n }\n else if (matrix[currRow][j] === left) {\n verticalGaps[j] = false;\n horizontalGaps[j] = true;\n }\n else {\n verticalGaps[j] = true;\n horizontalGaps[j] = false;\n }\n }\n // Swap rows\n prevRow = currRow;\n currRow = (currRow + 1) % 2;\n }\n // as the matrix is the similarity matrix, but we are interested in distance,\n // we need to invert the result\n return -matrix[prevRow][seq1.length];\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVlZGxlbWFuLXd1bnNjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm5lZWRsZW1hbi13dW5zY2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEseUNBQXlDO0FBQ3pDLE1BQU0sUUFBUSxHQUNkLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEYsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekYsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwRixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6RixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDOUYsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3JGLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RGLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzVGLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4RixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0YsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzNGLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4RixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzFGLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDMUYsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0YsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwRixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzFGLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDOUYsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDNUYsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxRixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3ZGLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RGLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0YsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFD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QUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztvQkFDeEIsY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztpQkFDM0I7cUJBQU0sSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO29CQUN0QyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO29CQUN4QixjQUFjLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO2lCQUMxQjtxQkFBTTtvQkFDTCxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO29CQUN2QixjQUFjLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO2lCQUMzQjthQUNGO1lBQ0QsWUFBWTtZQUNaLE9BQU8sR0FBRyxPQUFPLENBQUM7WUFDbEIsT0FBTyxHQUFHLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUM3QjtRQUNELDZFQUE2RTtRQUM3RSwrQkFBK0I7UUFDL0IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7bW1EaXN0YW5jZUZ1bmN0aW9uVHlwZX0gZnJvbSAnLi90eXBlcyc7XG5cbi8vIEJsb3N1bSA2MiBtYXRyaXggZm9yIHByb3RlaW4gc2VxdWVuY2VzXG5jb25zdCBCTE9TVU02MjpBcnJheTxBcnJheTxudW1iZXI+PiA9XG5bWzQsIC0xLCAtMiwgLTIsIDAsIC0xLCAtMSwgMCwgLTIsIC0xLCAtMSwgLTEsIC0xLCAtMiwgLTEsIDEsIDAsIC0zLCAtMiwgMCwgLTIsIC0xLCAwLCAtNF0sXG4gIFstMSwgNSwgMCwgLTIsIC0zLCAxLCAwLCAtMiwgMCwgLTMsIC0yLCAyLCAtMSwgLTMsIC0yLCAtMSwgLTEsIC0zLCAtMiwgLTMsIC0xLCAwLCAtMSwgLTRdLFxuICBbLTIsIDAsIDYsIDEsIC0zLCAwLCAwLCAwLCAxLCAtMywgLTMsIDAsIC0yLCAtMywgLTIsIDEsIDAsIC00LCAtMiwgLTMsIDMsIDAsIC0xLCAtNF0sXG4gIFstMiwgLTIsIDEsIDYsIC0zLCAwLCAyLCAtMSwgLTEsIC0zLCAtNCwgLTEsIC0zLCAtMywgLTEsIDAsIC0xLCAtNCwgLTMsIC0zLCA0LCAxLCAtMSwgLTRdLFxuICBbMCwgLTMsIC0zLCAtMywgOSwgLTMsIC00LCAtMywgLTMsIC0xLCAtMSwgLTMsIC0xLCAtMiwgLTMsIC0xLCAtMSwgLTIsIC0yLCAtMSwgLTMsIC0zLCAtMiwgLTRdLFxuICBbLTEsIDEsIDAsIDAsIC0zLCA1LCAyLCAtMiwgMCwgLTMsIC0yLCAxLCAwLCAtMywgLTEsIDAsIC0xLCAtMiwgLTEsIC0yLCAwLCAzLCAtMSwgLTRdLFxuICBbLTEsIDAsIDAsIDIsIC00LCAyLCA1LCAtMiwgMCwgLTMsIC0zLCAxLCAtMiwgLTMsIC0xLCAwLCAtMSwgLTMsIC0yLCAtMiwgMSwgNCwgLTEsIC00XSxcbiAgWzAsIC0yLCAwLCAtMSwgLTMsIC0yLCAtMiwgNiwgLTIsIC00LCAtNCwgLTIsIC0zLCAtMywgLTIsIDAsIC0yLCAtMiwgLTMsIC0zLCAtMSwgLTIsIC0xLCAtNF0sXG4gIFstMiwgMCwgMSwgLTEsIC0zLCAwLCAwLCAtMiwgOCwgLTMsIC0zLCAtMSwgLTIsIC0xLCAtMiwgLTEsIC0yLCAtMiwgMiwgLTMsIDAsIDAsIC0xLCAtNF0sXG4gIFstMSwgLTMsIC0zLCAtMywgLTEsIC0zLCAtMywgLTQsIC0zLCA0LCAyLCAtMywgMSwgMCwgLTMsIC0yLCAtMSwgLTMsIC0xLCAzLCAtMywgLTMsIC0xLCAtNF0sXG4gIFstMSwgLTIsIC0zLCAtNCwgLTEsIC0yLCAtMywgLTQsIC0zLCAyLCA0LCAtMiwgMiwgMCwgLTMsIC0yLCAtMSwgLTIsIC0xLCAxLCAtNCwgLTMsIC0xLCAtNF0sXG4gIFstMSwgMiwgMCwgLTEsIC0zLCAxLCAxLCAtMiwgLTEsIC0zLCAtMiwgNSwgLTEsIC0zLCAtMSwgMCwgLTEsIC0zLCAtMiwgLTIsIDAsIDEsIC0xLCAtNF0sXG4gIFstMSwgLTEsIC0yLCAtMywgLTEsIDAsIC0yLCAtMywgLTIsIDEsIDIsIC0xLCA1LCAwLCAtMiwgLTEsIC0xLCAtMSwgLTEsIDEsIC0zLCAtMSwgLTEsIC00XSxcbiAgWy0yLCAtMywgLTMsIC0zLCAtMiwgLTMsIC0zLCAtMywgLTEsIDAsIDAsIC0zLCAwLCA2LCAtNCwgLTIsIC0yLCAxLCAzLCAtMSwgLTMsIC0zLCAtMSwgLTRdLFxuICBbLTEsIC0yLCAtMiwgLTEsIC0zLCAtMSwgLTEsIC0yLCAtMiwgLTMsIC0zLCAtMSwgLTIsIC00LCA3LCAtMSwgLTEsIC00LCAtMywgLTIsIC0yLCAtMSwgLTIsIC00XSxcbiAgWzEsIC0xLCAxLCAwLCAtMSwgMCwgMCwgMCwgLTEsIC0yLCAtMiwgMCwgLTEsIC0yLCAtMSwgNCwgMSwgLTMsIC0yLCAtMiwgMCwgMCwgMCwgLTRdLFxuICBbMCwgLTEsIDAsIC0xLCAtMSwgLTEsIC0xLCAtMiwgLTIsIC0xLCAtMSwgLTEsIC0xLCAtMiwgLTEsIDEsIDUsIC0yLCAtMiwgMCwgLTEsIC0xLCAwLCAtNF0sXG4gIFstMywgLTMsIC00LCAtNCwgLTIsIC0yLCAtMywgLTIsIC0yLCAtMywgLTIsIC0zLCAtMSwgMSwgLTQsIC0zLCAtMiwgMTEsIDIsIC0zLCAtNCwgLTMsIC0yLCAtNF0sXG4gIFstMiwgLTIsIC0yLCAtMywgLTIsIC0xLCAtMiwgLTMsIDIsIC0xLCAtMSwgLTIsIC0xLCAzLCAtMywgLTIsIC0yLCAyLCA3LCAtMSwgLTMsIC0yLCAtMSwgLTRdLFxuICBbMCwgLTMsIC0zLCAtMywgLTEsIC0yLCAtMiwgLTMsIC0zLCAzLCAxLCAtMiwgMSwgLTEsIC0yLCAtMiwgMCwgLTMsIC0xLCA0LCAtMywgLTIsIC0xLCAtNF0sXG4gIFstMiwgLTEsIDMsIDQsIC0zLCAwLCAxLCAtMSwgMCwgLTMsIC00LCAwLCAtMywgLTMsIC0yLCAwLCAtMSwgLTQsIC0zLCAtMywgNCwgMSwgLTEsIC00XSxcbiAgWy0xLCAwLCAwLCAxLCAtMywgMywgNCwgLTIsIDAsIC0zLCAtMywgMSwgLTEsIC0zLCAtMSwgMCwgLTEsIC0zLCAtMiwgLTIsIDEsIDQsIC0xLCAtNF0sXG4gIFswLCAtMSwgLTEsIC0xLCAtMiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTIsIDAsIDAsIC0yLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC00XSxcbiAgWy00LCAtNCwgLTQsIC00LCAtNCwgLTQsIC00LCAtNCwgLTQsIC00LCAtNCwgLTQsIC00LCAtNCwgLTQsIC00LCAtNCwgLTQsIC00LCAtNCwgLTQsIC00LCAtNCwgMV1dO1xuXG4vLyBQcm90ZWluIGluZGV4ZXMgZm9yIEJMT1NVTSBtYXRyaXhcbmNvbnN0IFByb3RJbmRleGVzOiB7W2lkOnN0cmluZ106bnVtYmVyfSA9IHtcbiAgJ0EnOiAwLCAnUic6IDEsICdOJzogMiwgJ0QnOiAzLCAnQyc6IDQsICdRJzogNSwgJ0UnOiA2LCAnRyc6IDcsICdIJzogOCxcbiAgJ0knOiA5LCAnTCc6IDEwLCAnSyc6IDExLCAnTSc6IDEyLCAnRic6IDEzLCAnUCc6IDE0LCAnUyc6IDE1LCAnVCc6IDE2LFxuICAnVyc6IDE3LCAnWSc6IDE4LCAnVic6IDE5LCAnQic6IDIwLCAnWic6IDIxLCAnWCc6IDIyLCAnKic6IDIzXG59O1xuXG5pbnRlcmZhY2UgTmVlZGxlbWFuV3VuY2hBcmdzIHtcbiAgZ2FwT3BlbjogbnVtYmVyO1xuICBnYXBFeHRlbmQ6IG51bWJlcjtcbiAgc2NvcmluZ01hdHJpeDogbnVtYmVyW11bXTtcbiAgYWxwaGFiZXRJbmRleGVzOiB7W2lkOnN0cmluZ106bnVtYmVyfTtcbn1cblxuY29uc3QgZGVmYXVsdEFyZ3M6IE5lZWRsZW1hbld1bmNoQXJncyA9IHtcbiAgZ2FwT3BlbjogOCxcbiAgZ2FwRXh0ZW5kOiAyLFxuICBzY29yaW5nTWF0cml4OiBCTE9TVU02MixcbiAgYWxwaGFiZXRJbmRleGVzOiBQcm90SW5kZXhlc1xufTtcblxuLyoqIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGNhbGN1bGF0ZXMgdGhlIGRpc3RhbmNlIGJldHdlZW4gdHdvIHNlcXVlbmNlcyBiYXNlZCBvbiBnYXAgcGVuYWx0eSBhbmQgbWF0cml4ICovXG5leHBvcnQgZnVuY3Rpb24gbmVlZGxlbWFuV3VuY2goYXJnczogUGFydGlhbDxOZWVkbGVtYW5XdW5jaEFyZ3M+KTogbW1EaXN0YW5jZUZ1bmN0aW9uVHlwZSB7XG4gIHJldHVybiAoc2VxMTogc3RyaW5nLCBzZXEyOiBzdHJpbmcpIDogbnVtYmVyID0+IHtcbiAgICBjb25zdCB7Z2FwT3BlbiwgZ2FwRXh0ZW5kLCBzY29yaW5nTWF0cml4LCBhbHBoYWJldEluZGV4ZXN9ID0gey4uLmRlZmF1bHRBcmdzLCAuLi5hcmdzfTtcbiAgICAvLyBBcyB3ZSBkb24ndCBuZWVkIHRyYWNlYmFjaywgbm8gbmVlZCB0byBzdG9yZSB0aGUgd2hvbGUgbWF0cml4XG4gICAgLy8gSW50ZWFkLCB3ZSB3aWxsIHN0b3JlIG9ubHkgdGhlIGxhc3QgdHdvIHJvd3NcbiAgICBjb25zdCBtYXRyaXg6IG51bWJlcltdW10gPSBbXG4gICAgICBuZXcgQXJyYXk8bnVtYmVyPihzZXExLmxlbmd0aCArIDEpLmZpbGwoMCksXG4gICAgICBuZXcgQXJyYXk8bnVtYmVyPihzZXExLmxlbmd0aCArIDEpLmZpbGwoMClcbiAgICBdO1xuICAgIC8vIHNpbWlsYXJseSwgd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIHdoYXQgb3BlcmF0aW9uIGxlZCB0byB0aGUgY3VycmVudCBjZWxsXG4gICAgLy8gaS5lLiB3aGV0aGVyIHdlIGNhbWUgZnJvbSB0aGUgbGVmdCwgdG9wIG9yIGRpYWdvbmFsIHRvIGFzc2lnbiBnYXAgb3Blbi9nYXAgZXh0ZW5kIHBlbmFsdHlcbiAgICBjb25zdCB2ZXJ0aWNhbEdhcHM6IGJvb2xlYW5bXSA9IG5ldyBBcnJheTxib29sZWFuPihzZXExLmxlbmd0aCArIDEpLmZpbGwoZmFsc2UpO1xuICAgIGNvbnN0IGhvcml6b250YWxHYXBzOiBib29sZWFuW10gPSBuZXcgQXJyYXk8Ym9vbGVhbj4oc2VxMS5sZW5ndGggKyAxKS5maWxsKGZhbHNlKTtcblxuICAgIC8vdmFyaWFibGVzIHRvIGtlZXAgdHJhY2sgd2hpY2ggcm93IHdlIGFyZSBpblxuICAgIC8vIHRoZXkgd2lsbCBzd2FwIHBsYWNlcyBvbiBlYWNoIGl0ZXJhdGlvblxuICAgIGxldCBwcmV2Um93ID0gMDtcbiAgICBsZXQgY3VyclJvdyA9IDE7XG4gICAgLy8gSW5pdGlhbGl6ZSBmaXJzdCByb3dcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHNlcTEubGVuZ3RoICsgMTsgaSsrKVxuICAgICAgbWF0cml4WzBdW2ldID0gLWdhcE9wZW4gLSAoaSAtIDEpICogZ2FwRXh0ZW5kO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSByZXN0IG9mIHRoZSBtYXRyaXhcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IHNlcTIubGVuZ3RoICsgMTsgaSsrKSB7XG4gICAgICBtYXRyaXhbY3VyclJvd11bMF0gPSAtZ2FwT3BlbiAtIChpIC0gMSkgKiBnYXBFeHRlbmQ7XG4gICAgICBmb3IgKGxldCBqID0gMTsgaiA8IHNlcTEubGVuZ3RoICsgMTsgaisrKSB7XG4gICAgICAgIGNvbnN0IGRpYWdvbmFsID1cbiAgICAgICAgICBtYXRyaXhbcHJldlJvd11baiAtIDFdICsgc2NvcmluZ01hdHJpeFthbHBoYWJldEluZGV4ZXNbc2VxMVtqIC0gMV1dXVthbHBoYWJldEluZGV4ZXNbc2VxMltpIC0gMV1dXTtcbiAgICAgICAgY29uc3QgdG9wID0gbWF0cml4W3ByZXZSb3ddW2pdIC0gKHZlcnRpY2FsR2Fwc1tqXSA/IGdhcEV4dGVuZCA6IGdhcE9wZW4gKTtcbiAgICAgICAgY29uc3QgbGVmdCA9IG1hdHJpeFtjdXJyUm93XVtqIC0gMV0gLSAoaG9yaXpvbnRhbEdhcHNbaiAtIDFdID8gZ2FwRXh0ZW5kIDogZ2FwT3Blbik7XG4gICAgICAgIG1hdHJpeFtjdXJyUm93XVtqXSA9IE1hdGgubWF4KFxuICAgICAgICAgIGRpYWdvbmFsLCBsZWZ0LCB0b3BcbiAgICAgICAgKTtcbiAgICAgICAgLy8gdXBkYXRlIGdhcCBhcnJheXNcbiAgICAgICAgaWYgKG1hdHJpeFtjdXJyUm93XVtqXSA9PT0gZGlhZ29uYWwpIHtcbiAgICAgICAgICB2ZXJ0aWNhbEdhcHNbal0gPSBmYWxzZTtcbiAgICAgICAgICBob3Jpem9udGFsR2Fwc1tqXSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKG1hdHJpeFtjdXJyUm93XVtqXSA9PT0gbGVmdCkge1xuICAgICAgICAgIHZlcnRpY2FsR2Fwc1tqXSA9IGZhbHNlO1xuICAgICAgICAgIGhvcml6b250YWxHYXBzW2pdID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2ZXJ0aWNhbEdhcHNbal0gPSB0cnVlO1xuICAgICAgICAgIGhvcml6b250YWxHYXBzW2pdID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFN3YXAgcm93c1xuICAgICAgcHJldlJvdyA9IGN1cnJSb3c7XG4gICAgICBjdXJyUm93ID0gKGN1cnJSb3cgKyAxKSAlIDI7XG4gICAgfVxuICAgIC8vIGFzIHRoZSBtYXRyaXggaXMgdGhlIHNpbWlsYXJpdHkgbWF0cml4LCBidXQgd2UgYXJlIGludGVyZXN0ZWQgaW4gZGlzdGFuY2UsXG4gICAgLy8gd2UgbmVlZCB0byBpbnZlcnQgdGhlIHJlc3VsdFxuICAgIHJldHVybiAtbWF0cml4W3ByZXZSb3ddW3NlcTEubGVuZ3RoXTtcbiAgfTtcbn1cbiJdfQ==","const peq = new Uint32Array(0x10000);\nconst myers_32 = (a, b) => {\n const n = a.length;\n const m = b.length;\n const lst = 1 << (n - 1);\n let pv = -1;\n let mv = 0;\n let sc = n;\n let i = n;\n while (i--) {\n peq[a.charCodeAt(i)] |= 1 << i;\n }\n for (i = 0; i < m; i++) {\n let eq = peq[b.charCodeAt(i)];\n const xv = eq | mv;\n eq |= ((eq & pv) + pv) ^ pv;\n mv |= ~(eq | pv);\n pv &= eq;\n if (mv & lst) {\n sc++;\n }\n if (pv & lst) {\n sc--;\n }\n mv = (mv << 1) | 1;\n pv = (pv << 1) | ~(xv | mv);\n mv &= xv;\n }\n i = n;\n while (i--) {\n peq[a.charCodeAt(i)] = 0;\n }\n return sc;\n};\nconst myers_x = (b, a) => {\n const n = a.length;\n const m = b.length;\n const mhc = [];\n const phc = [];\n const hsize = Math.ceil(n / 32);\n const vsize = Math.ceil(m / 32);\n for (let i = 0; i < hsize; i++) {\n phc[i] = -1;\n mhc[i] = 0;\n }\n let j = 0;\n for (; j < vsize - 1; j++) {\n let mv = 0;\n let pv = -1;\n const start = j * 32;\n const vlen = Math.min(32, m) + start;\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] |= 1 << k;\n }\n for (let i = 0; i < n; i++) {\n const eq = peq[a.charCodeAt(i)];\n const pb = (phc[(i / 32) | 0] >>> i) & 1;\n const mb = (mhc[(i / 32) | 0] >>> i) & 1;\n const xv = eq | mv;\n const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;\n let ph = mv | ~(xh | pv);\n let mh = pv & xh;\n if ((ph >>> 31) ^ pb) {\n phc[(i / 32) | 0] ^= 1 << i;\n }\n if ((mh >>> 31) ^ mb) {\n mhc[(i / 32) | 0] ^= 1 << i;\n }\n ph = (ph << 1) | pb;\n mh = (mh << 1) | mb;\n pv = mh | ~(xv | ph);\n mv = ph & xv;\n }\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] = 0;\n }\n }\n let mv = 0;\n let pv = -1;\n const start = j * 32;\n const vlen = Math.min(32, m - start) + start;\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] |= 1 << k;\n }\n let score = m;\n for (let i = 0; i < n; i++) {\n const eq = peq[a.charCodeAt(i)];\n const pb = (phc[(i / 32) | 0] >>> i) & 1;\n const mb = (mhc[(i / 32) | 0] >>> i) & 1;\n const xv = eq | mv;\n const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;\n let ph = mv | ~(xh | pv);\n let mh = pv & xh;\n score += (ph >>> (m - 1)) & 1;\n score -= (mh >>> (m - 1)) & 1;\n if ((ph >>> 31) ^ pb) {\n phc[(i / 32) | 0] ^= 1 << i;\n }\n if ((mh >>> 31) ^ mb) {\n mhc[(i / 32) | 0] ^= 1 << i;\n }\n ph = (ph << 1) | pb;\n mh = (mh << 1) | mb;\n pv = mh | ~(xv | ph);\n mv = ph & xv;\n }\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] = 0;\n }\n return score;\n};\nconst distance = (a, b) => {\n if (a.length < b.length) {\n const tmp = b;\n b = a;\n a = tmp;\n }\n if (b.length === 0) {\n return a.length;\n }\n if (a.length <= 32) {\n return myers_32(a, b);\n }\n return myers_x(a, b);\n};\nconst closest = (str, arr) => {\n let min_distance = Infinity;\n let min_index = 0;\n for (let i = 0; i < arr.length; i++) {\n const dist = distance(str, arr[i]);\n if (dist < min_distance) {\n min_distance = dist;\n min_index = i;\n }\n }\n return arr[min_index];\n};\nexport { closest, distance };\n"],"names":["hamming","seq1","seq2","diff","length","Math","abs","result","i","min","levenstein","defaultArgs","gapOpen","gapExtend","scoringMatrix","alphabetIndexes","needlemanWunch","args","Object","assign","matrix","Array","fill","verticalGaps","horizontalGaps","prevRow","currRow","j","diagonal","top","left","max","peq","Uint32Array","distance","a","b","tmp","n","m","lst","pv","mv","sc","charCodeAt","eq","xv","myers_32","mhc","phc","hsize","ceil","vsize","start","vlen","k","pb","mb","xh","ph","mh","score","myers_x"],"sourceRoot":""}
|
package/dist/925.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
var bio;(()=>{"use strict";var t,e,r={6925:(t,e,r)=>{class a{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 r=e*(e-1)/2;if(t){if(t.length!=r)throw new Error(`Invalid data length. Observations size ${e} requires data length ${r}.`);this._data=t}else this._data=new Float32Array(r)}}_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,r){this._data[this._linearizeIJ(t,e)]=r}static calc(t,e){const r=t.length,i=new a(void 0,r);for(let a=0;a<r;a++)for(let s=a+1;s<r;s++)i.set(a,s,e(t[a],t[s]));return i}square(){for(let t=0;t<this._data.length;t++)this._data[t]=Math.pow(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=this._data[0],e=this._data[0];for(let r=0;r<this._data.length;r++)this._data[r]<t&&(t=this._data[r]),this._data[r]>e&&(e=this._data[r]);const r=e-t;for(let a=0;a<this._data.length;a++)this._data[a]=0===r?this._data[a]-t:(this._data[a]-t)/(e-t)}}var i,s=r(779),n=r(458),o=r(6683);!function(t){t.HAMMING="Hamming",t.LEVENSHTEIN="Levenshtein",t.NEEDLEMANN_WUNSCH="Needlemann-Wunsch"}(i||(i={}));const h={[i.HAMMING]:s.j,[i.LEVENSHTEIN]:n.r,[i.NEEDLEMANN_WUNSCH]:o.n};onmessage=t=>{const{values:e,fnName:r}=t.data,i={};try{const t=a.calc(e,h[r]());t.normalize(),i.distanceMatrixData=t.data}catch(t){i.error=t}postMessage(i)}}},a={};function i(t){var e=a[t];if(void 0!==e)return e.exports;var s=a[t]={exports:{}};return r[t](s,s.exports,i),s.exports}i.m=r,i.x=()=>{var t=i.O(void 0,[562],(()=>i(6925)));return i.O(t)},t=[],i.O=(e,r,a,s)=>{if(!r){var n=1/0;for(d=0;d<t.length;d++){for(var[r,a,s]=t[d],o=!0,h=0;h<r.length;h++)(!1&s||n>=s)&&Object.keys(i.O).every((t=>i.O[t](r[h])))?r.splice(h--,1):(o=!1,s<n&&(n=s));if(o){t.splice(d--,1);var l=a();void 0!==l&&(e=l)}}return e}s=s||0;for(var d=t.length;d>0&&t[d-1][2]>s;d--)t[d]=t[d-1];t[d]=[r,a,s]},i.d=(t,e)=>{for(var r in e)i.o(e,r)&&!i.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},i.f={},i.e=t=>Promise.all(Object.keys(i.f).reduce(((e,r)=>(i.f[r](t,e),e)),[])),i.u=t=>t+".js",i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),(()=>{var t;i.g.importScripts&&(t=i.g.location+"");var e=i.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var r=e.getElementsByTagName("script");r.length&&(t=r[r.length-1].src)}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),i.p=t})(),(()=>{var t={925:1};i.f.i=(e,r)=>{t[e]||importScripts(i.p+i.u(e))};var e=self.webpackChunkbio=self.webpackChunkbio||[],r=e.push.bind(e);e.push=e=>{var[a,s,n]=e;for(var o in s)i.o(s,o)&&(i.m[o]=s[o]);for(n&&n(i);a.length;)t[a.pop()]=1;r(e)}})(),e=i.x,i.x=()=>i.e(562).then(e);var s=i.x();bio=s})();
|
|
2
|
-
//# sourceMappingURL=925.js.map
|
package/dist/925.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"925.js","mappings":"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","sources":["webpack://bio/webpack/runtime/chunk loaded","webpack://bio/webpack/runtime/startup chunk dependencies","webpack://bio/./node_modules/@datagrok-libraries/bio/src/trees/distance-matrix.js","webpack://bio/./node_modules/@datagrok-libraries/ml/src/macromolecule-distance-functions/macromolecule-distance-functions.js","webpack://bio/./src/analysis/workers/mm-distance-worker.ts","webpack://bio/webpack/bootstrap","webpack://bio/webpack/runtime/define property getters","webpack://bio/webpack/runtime/ensure chunk","webpack://bio/webpack/runtime/get javascript chunk filename","webpack://bio/webpack/runtime/global","webpack://bio/webpack/runtime/hasOwnProperty shorthand","webpack://bio/webpack/runtime/publicPath","webpack://bio/webpack/runtime/importScripts chunk loading","webpack://bio/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var next = __webpack_require__.x;\n__webpack_require__.x = () => {\n\treturn __webpack_require__.e(562).then(next);\n};","/** Distance matrix class compatible with data structure of scipy.spatial.distance.pdist */\nexport class DistanceMatrix {\n get data() { return this._data; }\n get size() { return this._size; }\n /**\n * @param {Float32Array} data Distance data\n * @param {number} size Number of original observations\n */\n constructor(data, size) {\n if (size == undefined) {\n if (data == undefined)\n throw new Error('Arguments error: data or size is required.');\n this._data = data;\n this._size = (1 + Math.sqrt(1 + 4 * 2 * this._data.length)) / 2;\n if (this._size != Math.floor(this._size))\n throw new Error(`Invalid data length ${this._data.length} leads to non integer size ${this._size}`);\n }\n else {\n this._size = size;\n const dataLength = size * (size - 1) / 2;\n if (data) {\n if (data.length != dataLength)\n throw new Error(`Invalid data length. Observations size ${size} requires data length ${dataLength}.`);\n this._data = data;\n }\n else {\n this._data = new Float32Array(dataLength);\n }\n }\n }\n _linearizeIJ(i, j) {\n if (!(i < j))\n throw new Error('i must be less than j');\n return this._size * i + j - Math.floor(((i + 2) * (i + 1)) / 2);\n }\n get(i, j) {\n if (i == j)\n return 0;\n else if (i < j)\n return this._data[this._linearizeIJ(i, j)];\n else\n return this._data[this._linearizeIJ(j, i)];\n }\n set(i, j, value) {\n this._data[this._linearizeIJ(i, j)] = value;\n }\n static calc(list, method) {\n const size = list.length;\n const res = new DistanceMatrix(undefined, size);\n for (let i = 0; i < size; i++) {\n for (let j = i + 1; j < size; j++)\n res.set(i, j, method(list[i], list[j]));\n }\n return res;\n }\n // squares each value in matrix in place\n square() {\n for (let i = 0; i < this._data.length; i++)\n this._data[i] = Math.pow(this._data[i], 2);\n }\n // adds another matrix to this one in place\n add(other) {\n if (this._size !== other._size)\n throw new Error(`Matrices must have the same size. This size: ${this._size}, other size: ${other._size}`);\n for (let i = 0; i < this._data.length; i++)\n this._data[i] += other._data[i];\n }\n // square root each value in matrix in place\n sqrt() {\n for (let i = 0; i < this._data.length; i++)\n this._data[i] = Math.sqrt(this._data[i]);\n }\n //normilze distance matrix in place\n normalize() {\n let min = this._data[0];\n let max = this._data[0];\n for (let i = 0; i < this._data.length; i++) {\n if (this._data[i] < min)\n min = this._data[i];\n if (this._data[i] > max)\n max = this._data[i];\n }\n const range = max - min;\n for (let i = 0; i < this._data.length; i++)\n this._data[i] = range === 0 ? this._data[i] - min : (this._data[i] - min) / (max - min);\n }\n}\n//# sourceMappingURL=distance-matrix.js.map","import { hamming } from './hamming';\nimport { levenstein } from './levenstein';\nimport { needlemanWunch } from './needleman-wunsch';\n/** Enum containing currently supported macromolecule distance functions\n * Hamming distance will be used if the sequences are already aligned\n * Needleman distance will be used for protein sequences with known BLOSUM62 matrix\n * Levenshtein distance will be used for nucleotide sequences as for them substitution matrix is same as identity matrix\n */\nexport var MmDistanceFunctionsNames;\n(function (MmDistanceFunctionsNames) {\n MmDistanceFunctionsNames[\"HAMMING\"] = \"Hamming\";\n MmDistanceFunctionsNames[\"LEVENSHTEIN\"] = \"Levenshtein\";\n MmDistanceFunctionsNames[\"NEEDLEMANN_WUNSCH\"] = \"Needlemann-Wunsch\";\n})(MmDistanceFunctionsNames || (MmDistanceFunctionsNames = {}));\n;\nexport const mmDistanceFunctions = {\n [MmDistanceFunctionsNames.HAMMING]: hamming,\n [MmDistanceFunctionsNames.LEVENSHTEIN]: levenstein,\n [MmDistanceFunctionsNames.NEEDLEMANN_WUNSCH]: needlemanWunch\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFjcm9tb2xlY3VsZS1kaXN0YW5jZS1mdW5jdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJtYWNyb21vbGVjdWxlLWRpc3RhbmNlLWZ1bmN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBR2xEOzs7O0dBSUc7QUFDSCxNQUFNLENBQU4sSUFBWSx3QkFJWDtBQUpELFdBQVksd0JBQXdCO0lBQ2hDLCtDQUFtQixDQUFBO0lBQ25CLHVEQUEyQixDQUFBO0lBQzNCLG1FQUF1QyxDQUFBO0FBQzNDLENBQUMsRUFKVyx3QkFBd0IsS0FBeEIsd0JBQXdCLFFBSW5DO0FBQUEsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUE4RTtJQUM1RyxDQUFDLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU87SUFDM0MsQ0FBQyx3QkFBd0IsQ0FBQyxXQUFXLENBQUMsRUFBRSxVQUFVO0lBQ2xELENBQUMsd0JBQXdCLENBQUMsaUJBQWlCLENBQUMsRUFBRSxjQUFjO0NBQzdELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2hhbW1pbmd9IGZyb20gJy4vaGFtbWluZyc7XG5pbXBvcnQge2xldmVuc3RlaW59IGZyb20gJy4vbGV2ZW5zdGVpbic7XG5pbXBvcnQge25lZWRsZW1hbld1bmNofSBmcm9tICcuL25lZWRsZW1hbi13dW5zY2gnO1xuaW1wb3J0IHttbURpc3RhbmNlRnVuY3Rpb25UeXBlfSBmcm9tICcuL3R5cGVzJztcblxuLyoqIEVudW0gY29udGFpbmluZyBjdXJyZW50bHkgc3VwcG9ydGVkIG1hY3JvbW9sZWN1bGUgZGlzdGFuY2UgZnVuY3Rpb25zXG4gKiBIYW1taW5nIGRpc3RhbmNlIHdpbGwgYmUgdXNlZCBpZiB0aGUgc2VxdWVuY2VzIGFyZSBhbHJlYWR5IGFsaWduZWRcbiAqIE5lZWRsZW1hbiBkaXN0YW5jZSB3aWxsIGJlIHVzZWQgZm9yIHByb3RlaW4gc2VxdWVuY2VzIHdpdGgga25vd24gQkxPU1VNNjIgbWF0cml4XG4gKiBMZXZlbnNodGVpbiBkaXN0YW5jZSB3aWxsIGJlIHVzZWQgZm9yIG51Y2xlb3RpZGUgc2VxdWVuY2VzIGFzIGZvciB0aGVtIHN1YnN0aXR1dGlvbiBtYXRyaXggaXMgc2FtZSBhcyBpZGVudGl0eSBtYXRyaXhcbiAqL1xuZXhwb3J0IGVudW0gTW1EaXN0YW5jZUZ1bmN0aW9uc05hbWVzIHtcbiAgICBIQU1NSU5HID0gJ0hhbW1pbmcnLFxuICAgIExFVkVOU0hURUlOID0gJ0xldmVuc2h0ZWluJyxcbiAgICBORUVETEVNQU5OX1dVTlNDSCA9ICdOZWVkbGVtYW5uLVd1bnNjaCdcbn07XG5cbmV4cG9ydCBjb25zdCBtbURpc3RhbmNlRnVuY3Rpb25zOiBSZWNvcmQ8TW1EaXN0YW5jZUZ1bmN0aW9uc05hbWVzLCAodmFsdWU/OiBhbnkpID0+IG1tRGlzdGFuY2VGdW5jdGlvblR5cGU+ID0ge1xuICBbTW1EaXN0YW5jZUZ1bmN0aW9uc05hbWVzLkhBTU1JTkddOiBoYW1taW5nLFxuICBbTW1EaXN0YW5jZUZ1bmN0aW9uc05hbWVzLkxFVkVOU0hURUlOXTogbGV2ZW5zdGVpbixcbiAgW01tRGlzdGFuY2VGdW5jdGlvbnNOYW1lcy5ORUVETEVNQU5OX1dVTlNDSF06IG5lZWRsZW1hbld1bmNoXG59O1xuIl19","import {DistanceMatrix} from '@datagrok-libraries/bio/src/trees/distance-matrix';\nimport {mmDistanceFunctions, MmDistanceFunctionsNames}\n from '@datagrok-libraries/ml/src/macromolecule-distance-functions';\n\nonmessage = (event) => {\n const {values, fnName} = event.data;\n const data: { error?: any; distanceMatrixData?: Float32Array } = {};\n try {\n const distanceMatrix = DistanceMatrix.calc(values, mmDistanceFunctions[fnName as MmDistanceFunctionsNames]());\n distanceMatrix.normalize();\n data.distanceMatrixData = distanceMatrix.data;\n } catch (e) {\n data.error = e;\n }\n postMessage(data);\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n// the startup function\n__webpack_require__.x = () => {\n\t// Load entry module and return exports\n\t// This entry module depends on other loaded chunks and execution need to be delayed\n\tvar __webpack_exports__ = __webpack_require__.O(undefined, [562], () => (__webpack_require__(6925)))\n\t__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n\treturn __webpack_exports__;\n};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks and sibling chunks for the entrypoint\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \".js\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","// no baseURI\n\n// object to store loaded chunks\n// \"1\" means \"already loaded\"\nvar installedChunks = {\n\t925: 1\n};\n\n// importScripts chunk loading\nvar installChunk = (data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\tfor(var moduleId in moreModules) {\n\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t}\n\t}\n\tif(runtime) runtime(__webpack_require__);\n\twhile(chunkIds.length)\n\t\tinstalledChunks[chunkIds.pop()] = 1;\n\tparentChunkLoadingFunction(data);\n};\n__webpack_require__.f.i = (chunkId, promises) => {\n\t// \"1\" is the signal for \"already loaded\"\n\tif(!installedChunks[chunkId]) {\n\t\tif(true) { // all chunks have JS\n\t\t\timportScripts(__webpack_require__.p + __webpack_require__.u(chunkId));\n\t\t}\n\t}\n};\n\nvar chunkLoadingGlobal = self[\"webpackChunkbio\"] = self[\"webpackChunkbio\"] || [];\nvar parentChunkLoadingFunction = chunkLoadingGlobal.push.bind(chunkLoadingGlobal);\nchunkLoadingGlobal.push = installChunk;\n\n// no HMR\n\n// no HMR manifest","// run startup\nvar __webpack_exports__ = __webpack_require__.x();\n"],"names":["deferred","next","DistanceMatrix","data","this","_data","size","_size","constructor","undefined","Error","Math","sqrt","length","floor","dataLength","Float32Array","_linearizeIJ","i","j","get","set","value","static","list","method","res","square","pow","add","other","normalize","min","max","range","MmDistanceFunctionsNames","mmDistanceFunctions","HAMMING","hamming","LEVENSHTEIN","levenstein","NEEDLEMANN_WUNSCH","n","onmessage","event","values","fnName","distanceMatrix","calc","distanceMatrixData","e","error","postMessage","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","m","x","__webpack_exports__","O","result","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","Object","keys","every","key","splice","r","d","definition","o","defineProperty","enumerable","f","chunkId","Promise","all","reduce","promises","u","g","globalThis","Function","window","obj","prop","prototype","hasOwnProperty","call","scriptUrl","importScripts","location","document","currentScript","src","scripts","getElementsByTagName","replace","p","installedChunks","chunkLoadingGlobal","self","parentChunkLoadingFunction","push","bind","moreModules","runtime","pop","then"],"sourceRoot":""}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import {DistanceMatrix} from '@datagrok-libraries/bio/src/trees/distance-matrix';
|
|
2
|
-
import {mmDistanceFunctions, MmDistanceFunctionsNames}
|
|
3
|
-
from '@datagrok-libraries/ml/src/macromolecule-distance-functions';
|
|
4
|
-
|
|
5
|
-
onmessage = (event) => {
|
|
6
|
-
const {values, fnName} = event.data;
|
|
7
|
-
const data: { error?: any; distanceMatrixData?: Float32Array } = {};
|
|
8
|
-
try {
|
|
9
|
-
const distanceMatrix = DistanceMatrix.calc(values, mmDistanceFunctions[fnName as MmDistanceFunctionsNames]());
|
|
10
|
-
distanceMatrix.normalize();
|
|
11
|
-
data.distanceMatrixData = distanceMatrix.data;
|
|
12
|
-
} catch (e) {
|
|
13
|
-
data.error = e;
|
|
14
|
-
}
|
|
15
|
-
postMessage(data);
|
|
16
|
-
};
|